diff --git a/GUI/Models/BeamDistributionItem.cpp b/GUI/Models/BeamDistributionItem.cpp index d0d43e0ae4d5afbef7217e40d9b9b0e1053b094a..3d26dde3d725ec55e9b4de72a043db0cdb7d6a5e 100644 --- a/GUI/Models/BeamDistributionItem.cpp +++ b/GUI/Models/BeamDistributionItem.cpp @@ -22,7 +22,7 @@ const QString BeamDistributionItem::P_DISTRIBUTION = "Distribution"; BeamDistributionItem::BeamDistributionItem(const QString& name, bool show_mean) : SessionItem(name) { mapper()->setOnChildPropertyChange([this, show_mean](SessionItem* item, const QString&) { - if (item->modelType() == "GroupProperty" && item->parent() == this) + if (item->hasModelType<GroupItem>() && item->parent() == this) initDistributionItem(show_mean); }); } diff --git a/GUI/Models/ComponentProxyModel.cpp b/GUI/Models/ComponentProxyModel.cpp index e3a36e64a44bfefb7fb5b1b081ff058d960e9dac..a923af487941a2f358ce0bdcc67f586e86db0c35 100644 --- a/GUI/Models/ComponentProxyModel.cpp +++ b/GUI/Models/ComponentProxyModel.cpp @@ -14,6 +14,7 @@ #include "GUI/Models/ComponentProxyModel.h" #include "GUI/Models/ComponentProxyStrategy.h" +#include "GUI/Models/GroupItem.h" #include "GUI/Models/SessionModel.h" #include <QSet> #include <functional> @@ -150,7 +151,7 @@ void ComponentProxyModel::sourceDataChanged(const QModelIndex& topLeft, ASSERT(bottomRight.isValid() ? bottomRight.model() == sourceModel() : true); if (SessionItem* item = m_model->itemForIndex(topLeft)) { - if (item->modelType() == "GroupProperty") + if (item->hasModelType<GroupItem>()) updateModelMap(); } dataChanged(mapFromSource(topLeft), mapFromSource(bottomRight), roles); diff --git a/GUI/Models/ComponentProxyStrategy.cpp b/GUI/Models/ComponentProxyStrategy.cpp index 2a1557c212b1908984bb600513ebc16378875b38..f8aab18953a9d1985eb21894b2c8ac8312288fe6 100644 --- a/GUI/Models/ComponentProxyStrategy.cpp +++ b/GUI/Models/ComponentProxyStrategy.cpp @@ -62,7 +62,7 @@ bool ComponentProxyStrategy::isPropertyRelated(SessionItem* item) static const QStringList& propertyRelated = GUI::Model::ComponentUtils::propertyRelatedTypes(); if (m_sourceRootIndex.isValid() && item->parent()->index() == m_sourceRootIndex - && item->parent()->modelType() != "GroupProperty") + && ! item->parent()->hasModelType<GroupItem>()) return propertyRelated.contains(item->modelType()); return true; @@ -91,9 +91,8 @@ void ComponentProxyStrategy::processRootItem(SessionItem* item, bool ComponentProxyStrategy::isSubGroup(SessionItem* item) { - const SessionItem* ancestor = GUI::Model::Path::ancestor(item->parent(), "GroupProperty"); - if (item->modelType() == "GroupProperty" && ancestor - && ancestor->modelType() == "GroupProperty") { + const SessionItem* ancestor = GUI::Model::Path::ancestor(item->parent(), GroupItem::M_TYPE); + if (item->hasModelType<GroupItem>() && ancestor && ancestor->hasModelType<GroupItem>()) { return true; } @@ -104,10 +103,10 @@ bool ComponentProxyStrategy::isSubGroup(SessionItem* item) bool ComponentProxyStrategy::isGroupChildren(SessionItem* item) { - if (item->parent() && item->parent()->modelType() == "GroupProperty") + if (item->parent() && item->parent()->hasModelType<GroupItem>()) return true; - if (const SessionItem* ancestor = GUI::Model::Path::ancestor(item, "GroupProperty")) { + if (const SessionItem* ancestor = GUI::Model::Path::ancestor(item, GroupItem::M_TYPE)) { if (ancestor != item) return true; } @@ -120,7 +119,7 @@ bool ComponentProxyStrategy::isGroupChildren(SessionItem* item) void ComponentProxyStrategy::processGroupItem(SessionItem* item, const QPersistentModelIndex& sourceIndex) { - if (const SessionItem* ancestor = GUI::Model::Path::ancestor(item, "GroupProperty")) { + if (const SessionItem* ancestor = GUI::Model::Path::ancestor(item, GroupItem::M_TYPE)) { if (ancestor == item) return; @@ -140,7 +139,8 @@ void ComponentProxyStrategy::processGroupItem(SessionItem* item, void ComponentProxyStrategy::processSubGroupItem(SessionItem* item, const QPersistentModelIndex& sourceIndex) { - if (const SessionItem* ancestor = GUI::Model::Path::ancestor(item->parent(), "GroupProperty")) { + if (const SessionItem* ancestor = + GUI::Model::Path::ancestor(item->parent(), GroupItem::M_TYPE)) { auto groupItem = dynamic_cast<const GroupItem*>(ancestor); if (item->parent() == groupItem->currentItem()) { diff --git a/GUI/Models/ComponentUtils.cpp b/GUI/Models/ComponentUtils.cpp index 81293ac793af580bee94694ce7bac12a16663fe9..ac571124d7fa0cafa353caa55d8eec9e556e251b 100644 --- a/GUI/Models/ComponentUtils.cpp +++ b/GUI/Models/ComponentUtils.cpp @@ -14,17 +14,18 @@ #include "GUI/Models/ComponentUtils.h" #include "GUI/Models/AxesItems.h" +#include "GUI/Models/GroupItem.h" #include "GUI/Models/MaterialDataItems.h" #include "GUI/Models/VectorItem.h" namespace { -QList<const SessionItem*> groupItems(const SessionItem& item); +QList<const SessionItem*> groupItems(const GroupItem& item); } const QStringList& GUI::Model::ComponentUtils::propertyRelatedTypes() { static const QStringList result = {"Property", - "GroupProperty", + GroupItem::M_TYPE, VectorItem::M_TYPE, BasicAxisItem::M_TYPE, AmplitudeAxisItem::M_TYPE, @@ -41,9 +42,9 @@ QList<const SessionItem*> GUI::Model::ComponentUtils::componentItems(const Sessi if (item.modelType() == "Property") { result.push_back(&item); - } else if (item.modelType() == "GroupProperty") { + } else if (item.hasModelType<GroupItem>()) { result.push_back(&item); - result += groupItems(item); + result += groupItems(dynamic_cast<const GroupItem&>(item)); } else { @@ -54,8 +55,8 @@ QList<const SessionItem*> GUI::Model::ComponentUtils::componentItems(const Sessi if (propertyRelated.contains(child->modelType())) result.append(child); - if (child->modelType() == "GroupProperty") - result += groupItems(*child); + if (child->hasModelType<GroupItem>()) + result += groupItems(*dynamic_cast<GroupItem*>(child)); } } @@ -63,10 +64,8 @@ QList<const SessionItem*> GUI::Model::ComponentUtils::componentItems(const Sessi } namespace { -QList<const SessionItem*> groupItems(const SessionItem& item) +QList<const SessionItem*> groupItems(const GroupItem& item) { - ASSERT(item.modelType() == "GroupProperty"); - QList<const SessionItem*> result; for (auto grandchild : item.children()) { if (grandchild->isVisible()) diff --git a/GUI/Models/FilterPropertyProxy.cpp b/GUI/Models/FilterPropertyProxy.cpp index 4abc490842bcd47b1579613b9371987854f31c1a..9d21d06904ad271de13aa902f8cb382378a8e61b 100644 --- a/GUI/Models/FilterPropertyProxy.cpp +++ b/GUI/Models/FilterPropertyProxy.cpp @@ -13,6 +13,7 @@ // ************************************************************************************************ #include "GUI/Models/FilterPropertyProxy.h" +#include "GUI/Models/GroupItem.h" #include "GUI/Models/SessionModel.h" #include "GUI/Models/VectorItem.h" @@ -37,7 +38,8 @@ bool FilterPropertyProxy::filterAcceptsRow(int sourceRow, const QModelIndex& sou if (!sourceParent.isValid()) return true; const QString modelType = index.data(SessionFlags::ModelTypeRole).toString(); - if (modelType == "Property" || modelType == "GroupProperty" || modelType == VectorItem::M_TYPE) + if (modelType == "Property" || modelType == GroupItem::M_TYPE + || modelType == VectorItem::M_TYPE) return false; return true; //! sourceModel()->data(index, Qt::DisplayRole).isValid(); diff --git a/GUI/Models/GroupItem.cpp b/GUI/Models/GroupItem.cpp index e70959f193a666676e2447a35dc7b5456693b3f7..0a839ca8cd7bb0cc80e49c9dfd647e91de7192e1 100644 --- a/GUI/Models/GroupItem.cpp +++ b/GUI/Models/GroupItem.cpp @@ -18,7 +18,9 @@ const QString GroupItem::T_ITEMS = "Item tag"; -GroupItem::GroupItem() : SessionItem("GroupProperty") +const QString GroupItem::M_TYPE = "GroupProperty"; + +GroupItem::GroupItem() : SessionItem(M_TYPE) { registerTag(T_ITEMS); setDefaultTag(T_ITEMS); diff --git a/GUI/Models/GroupItem.h b/GUI/Models/GroupItem.h index b6cb094a034335cf0e681540545d7b32962c617c..e94fa4788b750fd429410dc2f82463af27e4ff52 100644 --- a/GUI/Models/GroupItem.h +++ b/GUI/Models/GroupItem.h @@ -25,6 +25,8 @@ class GroupItemController; class BA_CORE_API_ GroupItem : public SessionItem { public: + static const QString M_TYPE; + static const QString T_ITEMS; GroupItem(); ~GroupItem(); diff --git a/GUI/Models/InterferenceFunctionItems.cpp b/GUI/Models/InterferenceFunctionItems.cpp index 225550e91ada95ddcd95da0932237bbf7523b1a0..a8e006a683f956002b0dc055fa729a4fe0f1effb 100644 --- a/GUI/Models/InterferenceFunctionItems.cpp +++ b/GUI/Models/InterferenceFunctionItems.cpp @@ -128,7 +128,7 @@ InterferenceFunction2DAbstractLatticeItem::InterferenceFunction2DAbstractLattice }); mapper()->setOnChildPropertyChange([this](SessionItem* item, const QString&) { - if (item->modelType() == "GroupProperty" && item->displayName() == P_LATTICE_TYPE) { + if (item->hasModelType<GroupItem>() && item->displayName() == P_LATTICE_TYPE) { update_rotation_availability(); } }); @@ -206,8 +206,8 @@ InterferenceFunction2DParaCrystalItem::InterferenceFunction2DParaCrystalItem() ->setToolTip("Probability distribution in second lattice direction"); mapper()->setOnChildPropertyChange([this](SessionItem* item, const QString& property) { - if (item->modelType() == "GroupProperty" && property == GroupItem::T_ITEMS && isTag(P_PDF1) - && isTag(P_PDF2)) + if (item->hasModelType<GroupItem>() && property == GroupItem::T_ITEMS + && isTag(P_PDF1) && isTag(P_PDF2)) update_distribution_displaynames(); }); diff --git a/GUI/Models/ItemCatalog.cpp b/GUI/Models/ItemCatalog.cpp index e7bf52210a0ffe6bb06c36f6beb9f365ade0cb60..1c6692f2d70418989603c7da311cdfec1cd5d6e5 100644 --- a/GUI/Models/ItemCatalog.cpp +++ b/GUI/Models/ItemCatalog.cpp @@ -205,7 +205,7 @@ ItemCatalog::ItemCatalog() addItem<RegionOfInterestItem>(); - add("GroupProperty", create_new<GroupItem>); + addItem<GroupItem>(); addItem<ParameterContainerItem>(); addItem<ParameterLabelItem>(); diff --git a/GUI/Models/ParameterTreeUtils.cpp b/GUI/Models/ParameterTreeUtils.cpp index 6ed717fbe3bf0602c9454d21796a9be9bf4d10a5..4a4ee45004642f2e12477ea52bb53a3e70a1ec10 100644 --- a/GUI/Models/ParameterTreeUtils.cpp +++ b/GUI/Models/ParameterTreeUtils.cpp @@ -61,7 +61,7 @@ void handleItem(SessionItem* tree, const SessionItem* source) handleItem(branch, child); } - } else if (child->modelType() == "GroupProperty") { + } else if (child->hasModelType<GroupItem>()) { SessionItem* currentItem = dynamic_cast<GroupItem*>(child)->currentItem(); if (currentItem && currentItem->numberOfChildren() > 0) { auto branch = tree->model()->insertItem<ParameterLabelItem>(tree); diff --git a/GUI/Models/SessionItem.cpp b/GUI/Models/SessionItem.cpp index 576343296d3a9bfcf87b910c80546fe294419ed7..bc835a6fc5bbc1bf395af0481fdc7c8b6373cded 100644 --- a/GUI/Models/SessionItem.cpp +++ b/GUI/Models/SessionItem.cpp @@ -310,10 +310,10 @@ SessionItem* SessionItem::addGroupProperty(const QString& groupTag, const QStrin // create group item GroupInfo groupInfo = GUI::Session::ItemUtils::GetGroupInfo(groupType); GroupItem* groupItem = - dynamic_cast<GroupItem*>(GUI::Model::ItemFactory::CreateItem("GroupProperty")); + dynamic_cast<GroupItem*>(GUI::Model::ItemFactory::CreateItem(GroupItem::M_TYPE)); ASSERT(groupItem); groupItem->setGroupInfo(groupInfo); - registerTag(groupTag, 1, 1, QStringList() << "GroupProperty"); + registerTag(groupTag, 1, 1, {GroupItem::M_TYPE}); result = groupItem; } else { // # migration Remove this branch at any convenient occasion. It is not used anymore. @@ -422,7 +422,7 @@ QString SessionItem::displayName() const { QString result = roleProperty(SessionFlags::DisplayNameRole).toString(); - if (modelType() == "Property" || modelType() == "GroupProperty" || hasModelType<ParameterItem>() + if (modelType() == "Property" || hasModelType<GroupItem>() || hasModelType<ParameterItem>() || hasModelType<ParameterLabelItem>()) return result; diff --git a/GUI/Models/SessionXML.cpp b/GUI/Models/SessionXML.cpp index 94cae8dbb3d189c4b28741e69b4d747a7b07efad..6e5b59cdfeeb570f263a63c66ad55825fa62ff84 100644 --- a/GUI/Models/SessionXML.cpp +++ b/GUI/Models/SessionXML.cpp @@ -279,7 +279,7 @@ SessionItem* createItem(SessionItem* item, const QString& modelType, const QStri { SessionItem* result(nullptr); - if (item->modelType() == "GroupProperty") { + if (item->hasModelType<GroupItem>()) { if (auto groupItem = dynamic_cast<GroupItem*>(item)) result = groupItem->getItemOfType(modelType); } else { diff --git a/GUI/Views/MaskWidgets/MaskGraphicsScene.cpp b/GUI/Views/MaskWidgets/MaskGraphicsScene.cpp index a9d781c08033ac35cb312f45655ab9cca13510aa..ec1765d3c604f90c66d37c5348a4b68687b191c4 100644 --- a/GUI/Views/MaskWidgets/MaskGraphicsScene.cpp +++ b/GUI/Views/MaskWidgets/MaskGraphicsScene.cpp @@ -14,6 +14,7 @@ #include "GUI/Views/MaskWidgets/MaskGraphicsScene.h" #include "GUI/Models/Error.h" +#include "GUI/Models/GroupItem.h" #include "GUI/Models/MaskItems.h" #include "GUI/Models/ProjectionItems.h" #include "GUI/Models/SessionModel.h" @@ -386,7 +387,7 @@ void MaskGraphicsScene::updateViews(const QModelIndex& parentIndex, IShape2DView for (int i_row = 0; i_row < m_maskModel->rowCount(parentIndex); ++i_row) { QModelIndex itemIndex = m_maskModel->index(i_row, 0, parentIndex); if (SessionItem* item = m_maskModel->itemForIndex(itemIndex)) { - if (item->modelType() == "GroupProperty" || item->modelType() == "Property") + if (item->hasModelType<GroupItem>() || item->modelType() == "Property") continue; childView = addViewForItem(item); diff --git a/GUI/Views/PropertyEditor/ComponentFlatView.cpp b/GUI/Views/PropertyEditor/ComponentFlatView.cpp index 1f915094c2bf2970dfa73fa8b6aa3ccaa3d5f917..c5b7afe30e39a2d7de9c275e7d73e22b2c171900 100644 --- a/GUI/Views/PropertyEditor/ComponentFlatView.cpp +++ b/GUI/Views/PropertyEditor/ComponentFlatView.cpp @@ -14,6 +14,7 @@ #include "GUI/Views/PropertyEditor/ComponentFlatView.h" #include "GUI/Models/ComponentUtils.h" +#include "GUI/Models/GroupItem.h" #include "GUI/Models/SessionModel.h" #include "GUI/Views/PropertyEditor/PropertyEditorFactory.h" #include "GUI/Views/PropertyEditor/PropertyWidgetItem.h" @@ -95,7 +96,7 @@ void ComponentFlatView::onDataChanged(const QModelIndex& topLeft, const QModelIn Q_UNUSED(bottomRight); SessionItem* item = m_model->itemForIndex(topLeft); ASSERT(item); - if (item->modelType() == "GroupProperty") + if (item->hasModelType<GroupItem>()) updateItemProperties(); if (roles.contains(SessionFlags::FlagRole))