diff --git a/GUI/Model/Fit/ParameterTreeItems.cpp b/GUI/Model/Fit/ParameterTreeItems.cpp index 3136a9d89623e010595e2bb9df5da1c55c6905a6..8a02db6358654602716d16283468e14362e36907 100644 --- a/GUI/Model/Fit/ParameterTreeItems.cpp +++ b/GUI/Model/Fit/ParameterTreeItems.cpp @@ -128,6 +128,12 @@ void ParameterContainerItem::readNonSessionItems(QXmlStreamReader* reader) } } +bool ParameterContainerItem::allowWritingChildToXml(SessionItem* /*child*/) const +{ + // no children are written. The contained tree is always generated + return false; +} + void ParameterContainerItem::setBackupValue(const QString& link, double d) { m_backupValues[link] = d; diff --git a/GUI/Model/Fit/ParameterTreeItems.h b/GUI/Model/Fit/ParameterTreeItems.h index 2490ba5b34ba04739a0f4e5d08420df6d240eb21..eac324e955a240ddfea50dc951718fb53421d72f 100644 --- a/GUI/Model/Fit/ParameterTreeItems.h +++ b/GUI/Model/Fit/ParameterTreeItems.h @@ -58,6 +58,7 @@ public: void writeNonSessionItems(QXmlStreamWriter* writer) const override; void readNonSessionItems(QXmlStreamReader* reader) override; + bool allowWritingChildToXml(SessionItem* child) const override; void setBackupValue(const QString& link, double d); void restoreBackupValues(); diff --git a/GUI/Model/Job/JobModel.cpp b/GUI/Model/Job/JobModel.cpp index 5be457112658b547410151289b6bc0594d5a692f..9f882e1d76d093c9e86bd948209b5db9583c0a08 100644 --- a/GUI/Model/Job/JobModel.cpp +++ b/GUI/Model/Job/JobModel.cpp @@ -90,7 +90,7 @@ JobItem* JobModel::addJob(const MultiLayerItem* multiLayerItem, jobItem->setSampleName(multiLayerItem->itemName()); - GUI::Model::ParameterTreeUtils::createParameterTree(jobItem); + GUI::Model::ParameterTreeUtils::createParameterTree(jobItem, true); GUI::Model::JobFunctions::setupJobItemOutput(jobItem); @@ -172,6 +172,9 @@ void JobModel::readFrom(QXmlStreamReader* reader, MessageService* messageService itemWithMaterial->setMaterialFinder([=](const QString& id) { return jobItem->materialContainerItem()->findMaterialById(id); }); + + // Create the not stored parameter tuning tree + GUI::Model::ParameterTreeUtils::createParameterTree(jobItem, false); } } diff --git a/GUI/Model/Job/ParameterTreeUtils.cpp b/GUI/Model/Job/ParameterTreeUtils.cpp index 85c4aef7f4712e848e49df2b3b0b547b6c928341..7a7a2ca73c92b64f342682cf6fbbd028aee19fe5 100644 --- a/GUI/Model/Job/ParameterTreeUtils.cpp +++ b/GUI/Model/Job/ParameterTreeUtils.cpp @@ -29,7 +29,8 @@ using boost::polymorphic_downcast; namespace { -void handleItem(ParameterContainerItem* container, SessionItem* tree, const SessionItem* source) +void handleItem(ParameterContainerItem* container, SessionItem* tree, const SessionItem* source, + bool recreateBackupValues) { if (tree->hasModelType<ParameterLabelItem>()) tree->setDisplayName(source->itemName()); @@ -44,7 +45,8 @@ void handleItem(ParameterContainerItem* container, SessionItem* tree, const Sess path = path.mid(firstSlash + 1); auto* parItem = polymorphic_downcast<ParameterItem*>(tree); parItem->setLink(path); - container->setBackupValue(parItem->link(), sourceValue); + if (recreateBackupValues) + container->setBackupValue(parItem->link(), sourceValue); return; } @@ -56,18 +58,18 @@ void handleItem(ParameterContainerItem* container, SessionItem* tree, const Sess if (child->hasModelType<PropertyItem>()) { if (child->value().type() == QVariant::Double) { auto* branch = tree->model()->insertItem<ParameterItem>(tree); - handleItem(container, branch, child); + handleItem(container, branch, child, recreateBackupValues); } } else if (child->hasModelType<GroupItem>()) { SessionItem* currentItem = dynamic_cast<GroupItem*>(child)->currentItem(); if (currentItem && currentItem->numberOfChildren() > 0) { auto* branch = tree->model()->insertItem<ParameterLabelItem>(tree); - handleItem(container, branch, currentItem); + handleItem(container, branch, currentItem, recreateBackupValues); } } else { auto* branch = tree->model()->insertItem<ParameterLabelItem>(tree); - handleItem(container, branch, child); + handleItem(container, branch, child, recreateBackupValues); } } } @@ -76,23 +78,25 @@ void handleItem(ParameterContainerItem* container, SessionItem* tree, const Sess //! Populates ParameterContainer with ParameterItem's corresponding to all properties found //! in a source item. -void populateParameterContainer(ParameterContainerItem* container, const SessionItem* source) +void populateParameterContainer(ParameterContainerItem* container, const SessionItem* source, + bool recreateBackupValues) { auto* sourceLabel = container->model()->insertItem<ParameterLabelItem>(container); - handleItem(container, sourceLabel, source); + handleItem(container, sourceLabel, source, recreateBackupValues); } } // namespace -void GUI::Model::ParameterTreeUtils::createParameterTree(JobItem* jobItem) +void GUI::Model::ParameterTreeUtils::createParameterTree(JobItem* jobItem, + bool recreateBackupValues) { auto* container = jobItem->parameterContainerItem(); if (!container) container = jobItem->createParameterContainerItem(); - populateParameterContainer(container, jobItem->materialContainerItem()); + populateParameterContainer(container, jobItem->materialContainerItem(), recreateBackupValues); - populateParameterContainer(container, jobItem->sampleItem()); + populateParameterContainer(container, jobItem->sampleItem(), recreateBackupValues); - populateParameterContainer(container, jobItem->instrumentItem()); + populateParameterContainer(container, jobItem->instrumentItem(), recreateBackupValues); } diff --git a/GUI/Model/Job/ParameterTreeUtils.h b/GUI/Model/Job/ParameterTreeUtils.h index 6317d8d6555d7bda29cd142874c617e000066b12..4473e999491d67531a84b6d0a8fbd5f16df78b95 100644 --- a/GUI/Model/Job/ParameterTreeUtils.h +++ b/GUI/Model/Job/ParameterTreeUtils.h @@ -29,7 +29,7 @@ class ParameterItem; namespace GUI::Model::ParameterTreeUtils { -void createParameterTree(JobItem* jobItem); +void createParameterTree(JobItem* jobItem, bool recreateBackupValues); } // namespace GUI::Model::ParameterTreeUtils