From 8fdf1b2fd65bf5c1aa1f325ae7bee5c203e0787e Mon Sep 17 00:00:00 2001 From: Tobias Knopff <t.knopff@fz-juelich.de> Date: Wed, 28 Apr 2021 12:44:01 +0200 Subject: [PATCH] Make MaterialItemContainer::T_MATERIALS private --- GUI/coregui/Models/JobModelFunctions.cpp | 4 ++-- GUI/coregui/Models/MaterialItemContainer.cpp | 5 +++++ GUI/coregui/Models/MaterialItemContainer.h | 5 ++++- GUI/coregui/Models/SessionItem.h | 12 ++++++++++++ 4 files changed, 23 insertions(+), 3 deletions(-) diff --git a/GUI/coregui/Models/JobModelFunctions.cpp b/GUI/coregui/Models/JobModelFunctions.cpp index 3f2104e6242..309c2462e40 100644 --- a/GUI/coregui/Models/JobModelFunctions.cpp +++ b/GUI/coregui/Models/JobModelFunctions.cpp @@ -180,8 +180,8 @@ void JobModelFunctions::muteMagnetizationData(JobItem* jobItem) { MaterialItemContainer* container = static_cast<MaterialItemContainer*>(jobItem->getItem(JobItem::T_MATERIAL_CONTAINER)); - for (SessionItem* item : container->getItems(MaterialItemContainer::T_MATERIALS)) - static_cast<MaterialItem*>(item)->hideMagnetization(); + for (MaterialItem* material : container->getMaterials()) + material->hideMagnetization(); MultiLayerItem* sample = static_cast<MultiLayerItem*>(jobItem->getItem(JobItem::T_SAMPLE)); sample->getItem(MultiLayerItem::P_EXTERNAL_FIELD)->setVisible(false); diff --git a/GUI/coregui/Models/MaterialItemContainer.cpp b/GUI/coregui/Models/MaterialItemContainer.cpp index 63a809328de..62387f02bb6 100644 --- a/GUI/coregui/Models/MaterialItemContainer.cpp +++ b/GUI/coregui/Models/MaterialItemContainer.cpp @@ -49,3 +49,8 @@ const MaterialItem* MaterialItemContainer::findMaterialById(QString id) const } return nullptr; } + +QVector<MaterialItem*> MaterialItemContainer::getMaterials() +{ + return items<MaterialItem>(T_MATERIALS); +} diff --git a/GUI/coregui/Models/MaterialItemContainer.h b/GUI/coregui/Models/MaterialItemContainer.h index 04355c07e50..b27588bfb25 100644 --- a/GUI/coregui/Models/MaterialItemContainer.h +++ b/GUI/coregui/Models/MaterialItemContainer.h @@ -20,9 +20,10 @@ class MaterialItem; class MaterialItemContainer : public SessionItem { -public: +private: static const QString T_MATERIALS; +public: MaterialItemContainer(); //! Copies MaterialItem, inserts it into the container @@ -31,6 +32,8 @@ public: const MaterialItem* findMaterialById(QString id) const; MaterialItem* findMaterialById(QString id); + + QVector<MaterialItem*> getMaterials(); }; #endif // BORNAGAIN_GUI_COREGUI_MODELS_MATERIALITEMCONTAINER_H diff --git a/GUI/coregui/Models/SessionItem.h b/GUI/coregui/Models/SessionItem.h index 809903a01f3..3ba0c1ba13c 100644 --- a/GUI/coregui/Models/SessionItem.h +++ b/GUI/coregui/Models/SessionItem.h @@ -65,6 +65,7 @@ public: SessionItem* getItem(const QString& tag = "", int row = 0) const; template <typename T> T* item(const QString& tag) const; QVector<SessionItem*> getItems(const QString& tag = "") const; + template <typename T> QVector<T*> items(const QString& tag = "") const; bool insertItem(int row, SessionItem* item, const QString& tag = ""); SessionItem* takeItem(int row, const QString& tag); @@ -155,6 +156,17 @@ template <typename T> T* SessionItem::item(const QString& tag) const return t; } +template <typename T> +QVector<T*> SessionItem::items(const QString& tag) const +{ + QVector<T*> result; + + for ( SessionItem* item : getItems(tag) ) + if (T* titem = dynamic_cast<T*>(item)) + result.push_back(titem); + return result; +} + template <typename T> T* SessionItem::addProperty(const QString& tagname) { auto property = new T; -- GitLab