diff --git a/GUI/coregui/Models/ApplicationModels.cpp b/GUI/coregui/Models/ApplicationModels.cpp index 77d27de98b17189704e0cd3ab156fbe62f12c9b7..2fca9e0ce903c12b660ac76b14cda8c7a748b611 100644 --- a/GUI/coregui/Models/ApplicationModels.cpp +++ b/GUI/coregui/Models/ApplicationModels.cpp @@ -214,6 +214,8 @@ void ApplicationModels::readFrom(QXmlStreamReader* reader, WarningMessageService break; } } + + m_materialPropertyController->onMaterialModelLoad(); } //! Returns the list of all GUI models diff --git a/GUI/coregui/Models/MaterialPropertyController.cpp b/GUI/coregui/Models/MaterialPropertyController.cpp index 62158ae0039cacf05cd3df187af9090ba6d6759a..6efbe76b1da1d5c13c712520a6a70aa6a86c01e7 100644 --- a/GUI/coregui/Models/MaterialPropertyController.cpp +++ b/GUI/coregui/Models/MaterialPropertyController.cpp @@ -44,6 +44,27 @@ void MaterialPropertyController::setModels(MaterialModel* materialModel, SampleM &MaterialPropertyController::onMaterialModelLoad); } +//! Special case when original MaterialModel was fully rebuild from MaterialEditor. +//! Full update of MaterialProperties. + +void MaterialPropertyController::onMaterialModelLoad() +{ + for (auto sampleItem : relatedSampleItems()) { + QString tag = MaterialItemUtils::materialTag(*sampleItem); + Q_ASSERT(!tag.isEmpty()); + + ExternalProperty property = sampleItem->getItemValue(tag).value<ExternalProperty>(); + if (MaterialItem* material + = m_materialModel->materialFromIdentifier(property.getIdentifier())) { + ExternalProperty new_property = MaterialItemUtils::materialProperty(*material); + sampleItem->setItemValue(tag, new_property.getVariant()); + } else { + ExternalProperty undefined; + sampleItem->setItemValue(tag, undefined.getVariant()); + } + } +} + //! On MaterialItem change: updates corresponding MaterialProperty in sample items. void MaterialPropertyController::onMaterialDataChanged(const QModelIndex& topLeft, @@ -96,27 +117,6 @@ void MaterialPropertyController::onMaterialRowsAboutToBeRemoved(const QModelInde } } -//! Special case when original MaterialModel was fully rebuild from MaterialEditor. -//! Full update of MaterialProperties. - -void MaterialPropertyController::onMaterialModelLoad() -{ - for (auto sampleItem : relatedSampleItems()) { - QString tag = MaterialItemUtils::materialTag(*sampleItem); - Q_ASSERT(!tag.isEmpty()); - - ExternalProperty property = sampleItem->getItemValue(tag).value<ExternalProperty>(); - if (MaterialItem* material - = m_materialModel->materialFromIdentifier(property.getIdentifier())) { - ExternalProperty new_property = MaterialItemUtils::materialProperty(*material); - sampleItem->setItemValue(tag, new_property.getVariant()); - } else { - ExternalProperty undefined; - sampleItem->setItemValue(tag, undefined.getVariant()); - } - } -} - //! Returns vector of SessionItems having MaterialProperty on board. QVector<SessionItem*> MaterialPropertyController::relatedSampleItems() diff --git a/GUI/coregui/Models/MaterialPropertyController.h b/GUI/coregui/Models/MaterialPropertyController.h index d9957fe35cff0b74b32076bc00212886fbff2e76..5e7b30325ebff25ae65d96aaedf4af380f3b57a1 100644 --- a/GUI/coregui/Models/MaterialPropertyController.h +++ b/GUI/coregui/Models/MaterialPropertyController.h @@ -35,10 +35,12 @@ public: void setModels(MaterialModel* materialModel, SampleModel* sampleModel); +public slots: + void onMaterialModelLoad(); + private slots: void onMaterialDataChanged(const QModelIndex &topLeft, const QModelIndex &, const QVector<int> &); void onMaterialRowsAboutToBeRemoved(const QModelIndex &parent, int first, int last); - void onMaterialModelLoad(); private: QVector<SessionItem*> relatedSampleItems();