diff --git a/GUI/coregui/Models/JobModelFunctions.cpp b/GUI/coregui/Models/JobModelFunctions.cpp index 3f2104e6242d7b4b03f91ef0b6cece99cc1ec22f..309c2462e402b5356e09f933303ff05c5dd3bb4b 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 63a809328de274e797b6f5e49d38502cb5879bca..62387f02bb6c54dade0d153e65fe484b6d8db3fa 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 04355c07e5029dd6eb120527edda925fc7cbc69f..b27588bfb252d62ab3b801edf6cddd3c55027142 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 809903a01f35bcef17f64e4d6eba183e870cc1bc..3ba0c1ba13c33f326f125fb66b7a7f6374546ffe 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;