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