diff --git a/GUI/Model/Job/FitSuiteItem.cpp b/GUI/Model/Job/FitSuiteItem.cpp index f1df138e0ff43174167ab6a1700e1d0cf1bb0d53..d785664538bc5d28880015f4f4bec1c0fb5efeb8 100644 --- a/GUI/Model/Job/FitSuiteItem.cpp +++ b/GUI/Model/Job/FitSuiteItem.cpp @@ -41,8 +41,7 @@ const QString value("value"); } // namespace FitSuiteItem::FitSuiteItem() - : SessionItem(M_TYPE) - , m_updateInterval(10) + : m_updateInterval(10) , m_iterCount(0) , m_chi2(0.0) { @@ -111,7 +110,7 @@ void FitSuiteItem::setChi2(const double chi2) m_chi2 = chi2; } -void FitSuiteItem::writeNonSessionItems(QXmlStreamWriter* writer) const +void FitSuiteItem::writeTo(QXmlStreamWriter* writer) const { // update interval writer->writeStartElement(Tag::UpdateInterval); @@ -143,7 +142,7 @@ void FitSuiteItem::writeNonSessionItems(QXmlStreamWriter* writer) const } } -void FitSuiteItem::readNonSessionItems(QXmlStreamReader* reader) +void FitSuiteItem::readFrom(QXmlStreamReader* reader) { while (reader->readNextStartElement()) { diff --git a/GUI/Model/Job/FitSuiteItem.h b/GUI/Model/Job/FitSuiteItem.h index a0be3e4e3d67d1165874f706d90625aa2844f854..de56d512bdedf8b1fc114da9d1d07bed1f05dee7 100644 --- a/GUI/Model/Job/FitSuiteItem.h +++ b/GUI/Model/Job/FitSuiteItem.h @@ -15,17 +15,14 @@ #ifndef BORNAGAIN_GUI_MODEL_JOB_FITSUITEITEM_H #define BORNAGAIN_GUI_MODEL_JOB_FITSUITEITEM_H -#include "GUI/Model/BaseItem/SessionItem.h" -#include "GUI/Model/Job/FitParameterContainerItem.h" +#include <QXmlStreamReader> class FitParameterContainerItem; class MinimizerContainerItem; -class BA_CORE_API_ FitSuiteItem : public QObject, public SessionItem { +class FitSuiteItem : public QObject { Q_OBJECT public: - static constexpr auto M_TYPE{"FitSuite"}; - explicit FitSuiteItem(); FitParameterContainerItem* createFitParametersContainer(); @@ -43,8 +40,8 @@ public: double chi2() const; void setChi2(double chi2); - void writeNonSessionItems(QXmlStreamWriter* writer) const override; - void readNonSessionItems(QXmlStreamReader* reader) override; + void writeTo(QXmlStreamWriter* writer) const; + void readFrom(QXmlStreamReader* reader); signals: void iterationCountChanged(int count); diff --git a/GUI/Model/Job/JobItem.cpp b/GUI/Model/Job/JobItem.cpp index 31e4365aa5d906946cd3dd6cff83dac0e381dcdb..02bba403e3ecd4f615cbab0e7a0f57f7c245fbd1 100644 --- a/GUI/Model/Job/JobItem.cpp +++ b/GUI/Model/Job/JobItem.cpp @@ -310,7 +310,6 @@ FitSuiteItem* JobItem::createFitSuiteItem() "a second FitSuiteItem."); m_fitSuiteItem = std::make_unique<FitSuiteItem>(); - m_fitSuiteItem->setParentAndModel(this, model()); return m_fitSuiteItem.get(); } @@ -538,7 +537,7 @@ void JobItem::writeTo(QXmlStreamWriter* writer) const // fit suite if (m_fitSuiteItem) { writer->writeStartElement(Tag::FitSuite); - GUI::Session::XML::writeItemAndChildItems(writer, m_fitSuiteItem.get()); + m_fitSuiteItem->writeTo(writer); writer->writeEndElement(); } } @@ -643,7 +642,10 @@ void JobItem::readFrom(QXmlStreamReader* reader) // fit suite } else if (reader->name() == Tag::FitSuite) { - m_fitSuiteItem.reset(readItemToEnd<FitSuiteItem>(reader, this, Tag::FitSuite)); + if(!m_fitSuiteItem) + createFitSuiteItem(); + m_fitSuiteItem->readFrom(reader); + GUI::Session::XML::gotoEndElementOfTag(reader, Tag::FitSuite); } else { reader->skipCurrentElement(); diff --git a/GUI/Model/Job/MinimizerItem.cpp b/GUI/Model/Job/MinimizerItem.cpp index bd07440dd45508786c62ba957da19d37905ab86d..8614f565e93b18c6b0f067f9f75391e0d81d2401 100644 --- a/GUI/Model/Job/MinimizerItem.cpp +++ b/GUI/Model/Job/MinimizerItem.cpp @@ -12,13 +12,14 @@ // // ************************************************************************************************ -#include "GUI/Model/Job/MinimizerItem.h" +#include "Base/Util/Assert.h" #include "Fit/Adapter/GSLLevenbergMarquardtMinimizer.h" #include "Fit/Adapter/GSLMultiMinimizer.h" #include "Fit/Adapter/GeneticMinimizer.h" #include "Fit/Adapter/Minuit2Minimizer.h" #include "Fit/Adapter/SimAnMinimizer.h" #include "GUI/Model/CatJob/MinimizerItemCatalog.h" +#include "GUI/Model/Job/MinimizerItem.h" #include "GUI/Support/XML/UtilXML.h" #include "Sim/Fitting/ObjectiveMetric.h" #include "Sim/Fitting/ObjectiveMetricUtils.h" @@ -141,8 +142,7 @@ void create_algorithm_list_and_map(QString& default_common_algorithm, QStringLis } // namespace MinimizerContainerItem::MinimizerContainerItem() - : SessionItem(M_TYPE) - , m_MinuitMinimizer(std::make_unique<MinuitMinimizerItem>()) + : m_MinuitMinimizer(std::make_unique<MinuitMinimizerItem>()) , m_GSLMultiMinimizer(std::make_unique<GSLMultiMinimizerItem>()) , m_GeneticMinimizer(std::make_unique<GeneticMinimizerItem>()) , m_SimAnMinimizer(std::make_unique<SimAnMinimizerItem>()) @@ -407,16 +407,6 @@ void MinimizerContainerItem::readFrom(QXmlStreamReader* reader) } } -void MinimizerContainerItem::writeNonSessionItems(QXmlStreamWriter* writer) const -{ - writeTo(writer); -} - -void MinimizerContainerItem::readNonSessionItems(QXmlStreamReader* reader) -{ - readFrom(reader); -} - // ---------------------------------------------------------------------------- MinuitMinimizerItem::MinuitMinimizerItem() diff --git a/GUI/Model/Job/MinimizerItem.h b/GUI/Model/Job/MinimizerItem.h index 1047c2b69884a85c145acc8629cfec40116e9126..d06d3b718276477aa28771c9e380156b205c3954 100644 --- a/GUI/Model/Job/MinimizerItem.h +++ b/GUI/Model/Job/MinimizerItem.h @@ -15,7 +15,6 @@ #ifndef BORNAGAIN_GUI_MODEL_JOB_MINIMIZERITEM_H #define BORNAGAIN_GUI_MODEL_JOB_MINIMIZERITEM_H -#include "GUI/Model/BaseItem/SessionItem.h" #include "GUI/Util/ComboProperty.h" class IMinimizer; @@ -28,7 +27,7 @@ QString minimizerTypeToName(MinimizerType type); //! Base class to store minimizer settings. -class BA_CORE_API_ MinimizerItem { +class MinimizerItem { public: virtual ~MinimizerItem() = default; @@ -46,10 +45,8 @@ class GeneticMinimizerItem; class MinuitMinimizerItem; class SimAnMinimizerItem; -class MinimizerContainerItem : public MinimizerItem, public SessionItem { +class MinimizerContainerItem : public MinimizerItem { public: - static constexpr auto M_TYPE{"MinimizerContainer"}; - MinimizerContainerItem(); ~MinimizerContainerItem() override; @@ -85,9 +82,6 @@ public: void writeTo(QXmlStreamWriter* writer) const override; void readFrom(QXmlStreamReader* reader) override; - void writeNonSessionItems(QXmlStreamWriter* writer) const override; - void readNonSessionItems(QXmlStreamReader* reader) override; - private: // hold them all for storing their internal settings. std::unique_ptr<MinuitMinimizerItem> m_MinuitMinimizer; diff --git a/GUI/Model/MakeItem/ItemCatalog.cpp b/GUI/Model/MakeItem/ItemCatalog.cpp index c50f7163d3303c28f0ef04559db16654e63b5e80..4cd328789c94804e11a4111fd96a978e3df19d76 100644 --- a/GUI/Model/MakeItem/ItemCatalog.cpp +++ b/GUI/Model/MakeItem/ItemCatalog.cpp @@ -48,12 +48,8 @@ ItemCatalog::ItemCatalog() addItem<RegionOfInterestItem>(); - addItem<FitSuiteItem>(); - addItem<RealItem>(); - addItem<MinimizerContainerItem>(); - addItem<ProjectionContainerItem>(); } diff --git a/Tests/Unit/GUI/TestFitParameterModel.cpp b/Tests/Unit/GUI/TestFitParameterModel.cpp index bdeec6dc656d9e7ec3aedf88349a4fa83085d7ce..8899e93926a665346e1f22fa0cd85598fae8cad9 100644 --- a/Tests/Unit/GUI/TestFitParameterModel.cpp +++ b/Tests/Unit/GUI/TestFitParameterModel.cpp @@ -4,18 +4,17 @@ #include "GUI/Model/Job/FitSuiteItem.h" #include "GUI/Model/Job/MinimizerItem.h" #include "GUI/Model/Model/FitParameterModel.h" -#include "GUI/Model/Model/JobModel.h" +#include "GUI/Model/Job/FitSuiteItem.h" #include "Tests/GTestWrapper/google_test.h" class TestFitParameterModel : public ::testing::Test {}; TEST_F(TestFitParameterModel, InitialState) { - JobModel source; JobItem* jobItem = nullptr; + FitSuiteItem fitSuiteItem; - auto* fitSuiteItem = source.insertItem<FitSuiteItem>(); - auto* container = fitSuiteItem->createFitParametersContainer(); + auto* container = fitSuiteItem.createFitParametersContainer(); FitParameterModel proxy(dynamic_cast<FitParameterContainerItem*>(container), jobItem); EXPECT_EQ(0, proxy.rowCount(QModelIndex())); @@ -25,10 +24,9 @@ TEST_F(TestFitParameterModel, InitialState) TEST_F(TestFitParameterModel, addFitParameter) { - JobModel source; JobItem* jobItem = nullptr; - auto* fitSuiteItem = source.insertItem<FitSuiteItem>(); - auto* container = fitSuiteItem->createFitParametersContainer(); + FitSuiteItem fitSuiteItem; + auto* container = fitSuiteItem.createFitParametersContainer(); FitParameterModel proxy(dynamic_cast<FitParameterContainerItem*>(container), jobItem); // adding fit parameter @@ -122,10 +120,9 @@ TEST_F(TestFitParameterModel, addFitParameter) TEST_F(TestFitParameterModel, addFitParameterAndLink) { - JobModel source; JobItem* jobItem = nullptr; - auto* fitSuiteItem = source.insertItem<FitSuiteItem>(); - auto* container = fitSuiteItem->createFitParametersContainer(); + FitSuiteItem fitSuiteItem; + auto* container = fitSuiteItem.createFitParametersContainer(); FitParameterModel proxy(dynamic_cast<FitParameterContainerItem*>(container), jobItem); // adding fit parameter @@ -183,10 +180,9 @@ TEST_F(TestFitParameterModel, addFitParameterAndLink) TEST_F(TestFitParameterModel, addTwoFitParameterAndLinks) { - JobModel source; JobItem* jobItem = nullptr; - auto* fitSuiteItem = source.insertItem<FitSuiteItem>(); - auto* container = fitSuiteItem->createFitParametersContainer(); + FitSuiteItem fitSuiteItem; + auto* container = fitSuiteItem.createFitParametersContainer(); FitParameterModel proxy(dynamic_cast<FitParameterContainerItem*>(container), jobItem); // adding fit parameters