76 groupStruct->
setId(pinGroup->get_id());
78 groupStruct->
setType(pinGroup->get_type());
79 for (
auto pin : pinGroup->get_pins())
83 pinStruct->
setId(pin->get_id());
85 pinStruct->
setType(pin->get_type());
88 tempGroupList.
append(groupStruct);
93 for(
auto group : tempGroupList){
97 PinType groupType = group->getPinType();
100 groupItem->setName(group->getName());
101 groupItem->setDirection(groupDirection);
102 groupItem->setType(groupType);
103 for (
auto item : group->getChildren())
112 pinItem->setName(pin->
getName());
113 pinItem->setDirection(pinDirection);
114 pinItem->setType(pinType);
116 groupItem->appendChild(pinItem);
119 mAssignedPinNames.
insert(pinItem->getName());
127 groupItem->appendChild(dummyPin);
134 mAssignedGroupNames.
insert(groupItem->getName());
158 if (renamePinGroup(pinItem,
input))
159 pinItem->setName(
input);
165 if(renamePin(pinItem,
input))
166 pinItem->setName(
input);
175 if(!renamePinGroup(pinItem,
input))
180 mInvalidGroups.append(pinItem);
186 pinItem->appendChild(initialPin);
193 pinItem->appendChild(dummyPin);
198 pinItem->getParent()->appendChild(dummyGroup);
203 newPinGroup->
setId(pinItem->getId());
204 newPinGroup->
setName(pinItem->getName());
206 newPinGroup->
setType(pinItem->getPinType());
218 if(!renamePin(pinItem,
input))
220 PinItem* parentGroup =
static_cast<PinItem*
>(pinItem->getParent());
226 mInvalidPins.append(pinItem);
232 pinItem->getParent()->appendChild(dummyPin);
243 if(renamePin(pinItem,
input))
244 pinItem->setName(
input);
265 pinItem->setDirection(directionString);
266 for(
auto child : pinItem->getChildren())
271 handleInvalidPinUpdate(pin);
274 handleInvalidGroupUpdate(pinItem);
282 PinItem* parentGroup =
static_cast<PinItem*
>(pinItem->getParent());
284 warning.
setText(
QString(
"You are about to create an %1 pin in an %2 pin group")
285 .
arg(directionString)
291 pinItem->setDirection(pinDirection);
292 handleInvalidPinUpdate(pinItem);
297 pinItem->setDirection(pinDirection);
298 handleInvalidPinUpdate(pinItem);
319 pinItem->setType(pinType);
320 handleInvalidPinUpdate(pinItem);
324 pinItem->setType(pinType);
328 pinItem->setType(pinType);
329 for(
auto child : pinItem->getChildren())
334 handleInvalidPinUpdate(pin);
337 handleInvalidGroupUpdate(pinItem);
341 pinItem->setType(pinType);
353 if(group->getName() == pinItem->getName()){
354 for(
auto item : group->getChildren()){
367 void PinModel::addPinToPinGroup(
PinItem* pinItem,
PinItem* groupItem)
377 bool PinModel::renamePin(PinItem* pinItem,
const QString& newName)
382 QRegExp rx(
"[A-Za-z]([A-Za-z]|\\d|_|\\(|\\))*");
388 if(isNameAvailable(newName, pinItem)){
390 mAssignedPinNames.
remove(pinItem->getName());
391 mAssignedPinNames.
insert(newName);
394 pinItem->setName(newName);
397 auto pinGroup =
static_cast<PinItem*
>(pinItem->getParent());
399 if(group->getName() == pinGroup->getName()){
400 for(
auto item : group->getChildren()){
401 PinItem* pin =
static_cast<PinItem*
>(item);
402 if(pin->getId() == pinItem->getId()){
403 pin->setName(newName);
416 bool PinModel::renamePinGroup(PinItem* groupItem,
const QString& newName)
421 QRegExp rx(
"[A-Za-z]([A-Za-z]|\\d|_|\\(|\\))*");
426 if(isNameAvailable(newName, groupItem)){
428 mAssignedGroupNames.
remove(groupItem->getName());
429 mAssignedGroupNames.
insert(newName);
433 groupItem->setName(newName);
449 bool PinModel::isNameAvailable(
const QString& newName, PinItem* treeItem){
451 if(newName == treeItem->getName())
458 return !(mAssignedGroupNames.
contains(newName) || mAssignedPinNames.
contains(newName));
461 QString groupName =
static_cast<PinItem*
>(treeItem->getParent())->getName();
463 if(groupName == newName && !mAssignedPinNames.
contains(newName))
469 return !(mAssignedGroupNames.
contains(newName) || mAssignedPinNames.
contains(newName));
474 void PinModel::handleInvalidPinUpdate(PinItem* pinItem)
476 if(!isNameAvailable(pinItem->getName(), pinItem)
482 mInvalidPins.removeAll(pinItem);
485 auto pinGroup =
static_cast<PinItem*
>(pinItem->getParent());
486 handleInvalidGroupUpdate(pinGroup);
489 void PinModel::handleInvalidGroupUpdate(PinItem* groupItem){
497 for(
auto baseTreeItem : groupItem->getChildren()){
498 auto childPin =
static_cast<PinItem*
>(baseTreeItem);
584 void PinModel::printGateMember()
586 qInfo() <<
"Printing PinGroups and Pins";
588 qInfo() <<
"PinGroup: " << pinGroup->getName() <<
" " << pinGroup->getId();
589 for(
auto item : pinGroup->getChildren()){
590 PinItem* pin =
static_cast<PinItem*
>(item);
591 qInfo() <<
" Pin: " << pin->getName() <<
" " << pin->getId();
603 PinItem* pinGroup =
static_cast<PinItem*
>(item);
604 takenGroupIds.
insert(pinGroup->getId());
605 for(
auto item : pinGroup->getChildren()){
606 PinItem* pin =
static_cast<PinItem*
>(item);
607 takenPinIds.
insert(pin->getId());
616 while(takenGroupIds.
contains(counter)){
621 while(takenPinIds.
contains(counter)){
662 for(
auto i : item->getChildren()){
663 item->removeChild(i);
682 handleItemRemoved(item);
709 handleItemRemoved(item);
713 void PinModel::handleItemRemoved(
PinItem* item)
(Future) Base class for all tree models related to the details widget.
virtual QList< BaseTreeItem * > getChildren() const
virtual bool removeChild(BaseTreeItem *child)
virtual int getChildCount() const
virtual void appendChild(BaseTreeItem *child)
The BaseTreeModel implements generic standard functions of a tree model.
QModelIndex getIndexFromItem(BaseTreeItem *item) const
virtual QModelIndex index(int row, int column, const QModelIndex &parent=QModelIndex()) const override
virtual Qt::ItemFlags flags(const QModelIndex &index) const override
BaseTreeItem * getRootItem() const
void setHeaderLabels(const QStringList &label)
BaseTreeItem * getItemFromIndex(QModelIndex index) const
std::vector< PinGroup< GatePin > * > get_pin_groups(const std::function< bool(PinGroup< GatePin > *)> &filter=nullptr) const
PinDirection getDirection() const
TreeItemType getItemType() const
PinType getPinType() const
void setName(const QString &name)
void setType(const QString &type)
QString getDirectionAsText() const
void setDirection(const QString &direction)
QList< PinItem * > getInputPins()
PinModel(QObject *parent=nullptr)
QList< PinItem * > getOutputPins()
Qt::ItemFlags flags(const QModelIndex &index) const override
void handleEditDirection(QModelIndex index, const QString &directionString)
QList< PinItem * > getPinGroups() const
void setGate(GateType *gate)
void handleEditName(QModelIndex index, const QString &input)
void editNewDone(QModelIndex index)
void handleDeleteItem(QModelIndex index)
void handleEditType(QModelIndex index, const QString &typeString)
std::string enum_to_string(T e)
void beginInsertRows(const QModelIndex &parent, int first, int last)
void beginRemoveRows(const QModelIndex &parent, int first, int last)
void dataChanged(const QModelIndex &topLeft, const QModelIndex &bottomRight, const QVector< int > &roles)
void append(const T &value)
virtual int exec() override
void setWindowTitle(const QString &title)
void setText(const QString &text)
void * internalPointer() const const
bool isValid() const const
QModelIndex parent() const const
QString tr(const char *sourceText, const char *disambiguation, int n)
bool contains(const T &value) const const
QSet::iterator insert(const T &value)
bool remove(const T &value)
QString arg(qlonglong a, int fieldWidth, int base, QChar fillChar) const const
QString fromStdString(const std::string &str)
std::string toStdString() const const
virtual QValidator::State validate(QString &input, int &pos) const const=0