diff --git a/GUI/coregui/Models/ParameterizedItem.cpp b/GUI/coregui/Models/ParameterizedItem.cpp index b5b98d5456fec0cd70f3ec0c375cbf0888c6bea0..856dfc169d7083b12713516810fa0a68e4339f04 100644 --- a/GUI/coregui/Models/ParameterizedItem.cpp +++ b/GUI/coregui/Models/ParameterizedItem.cpp @@ -120,7 +120,16 @@ QString ParameterizedItem::displayName() const int index = mp_parent->getCopyNumberOfChild(this); if (index >= 0 && modelType() != Constants::PropertyType && modelType() != Constants::GroupItemType) { - return m_display_name + QString::number(index); + QString new_name = m_display_name + QString::number(index); + for (auto other : parent()->childItems()) { + if (other != this) { + if (isRegisteredProperty(P_NAME) && other->itemName() == new_name) { + ++ index; + new_name = m_display_name + QString::number(index); + } + } + } + return new_name; } } return m_display_name; @@ -278,9 +287,9 @@ PropertyAttribute &ParameterizedItem::registerProperty(const QString &name, cons "ParameterizedItem::registerProperty() -> Error. Already existing property " + name); ParameterizedItem *property = ItemFactory::createItem(Constants::PropertyType); - property->setValue(variant); property->setDisplayName(name); insertChildItem(-1, property); + property->setValue(variant); m_property_attribute[name] = attribute; return m_property_attribute[name]; } diff --git a/GUI/coregui/Models/ParameterizedItem.h b/GUI/coregui/Models/ParameterizedItem.h index 1bc4f4efd225e3130c27f607882afa50e5eda4ab..d2845d05b9799e2d284bcd5330398848261d722e 100644 --- a/GUI/coregui/Models/ParameterizedItem.h +++ b/GUI/coregui/Models/ParameterizedItem.h @@ -47,7 +47,7 @@ public: //! set data in the given column, return true when successful, notify model if present //! we only support one role - bool setData(int column, const QVariant &data); + virtual bool setData(int column, const QVariant &data); //! return variant stored in data column QVariant value() const; diff --git a/GUI/coregui/Models/PropertyItem.cpp b/GUI/coregui/Models/PropertyItem.cpp index 8a7340231105424f271b7e537c68f067e4f75631..8f2cf3fc0d02b4831bce25f3b9e8c7537bd4acfb 100644 --- a/GUI/coregui/Models/PropertyItem.cpp +++ b/GUI/coregui/Models/PropertyItem.cpp @@ -20,3 +20,20 @@ PropertyItem::PropertyItem() { } + +bool PropertyItem::setData(int column, const QVariant &data) +{ + if (displayName() == ParameterizedItem::P_NAME) { + if (data.toString().isEmpty()) + return false; + if (ParameterizedItem *item = parent()) { + if (ParameterizedItem *item_parent = item->parent()) { + // forbid setting duplicate name + if (item_parent->getChildByName(data.toString())) { + return false; + } + } + } + } + return ParameterizedItem::setData(column, data); +} diff --git a/GUI/coregui/Models/PropertyItem.h b/GUI/coregui/Models/PropertyItem.h index c8074b4f4b9a9478fe891b665daef07d261587f4..28286657b2e144190d5e22cb40a70b3c502123fb 100644 --- a/GUI/coregui/Models/PropertyItem.h +++ b/GUI/coregui/Models/PropertyItem.h @@ -23,6 +23,8 @@ class BA_CORE_API_ PropertyItem : public ParameterizedItem Q_OBJECT public: PropertyItem(); + + bool setData(int column, const QVariant &data); }; #endif