From b612a27004e1d40bfaaf4692b87f363d4000062d Mon Sep 17 00:00:00 2001
From: Mikhail Svechnikov <m.svechnikov@fz-juelich.de>
Date: Mon, 11 Nov 2024 13:24:41 +0100
Subject: [PATCH] instrument is PolyPtr

---
 GUI/Model/Job/JobItem.cpp | 8 +++++---
 GUI/Model/Job/JobItem.h   | 7 ++++---
 2 files changed, 9 insertions(+), 6 deletions(-)

diff --git a/GUI/Model/Job/JobItem.cpp b/GUI/Model/Job/JobItem.cpp
index 6075634983b..95b2d9bf6b4 100644
--- a/GUI/Model/Job/JobItem.cpp
+++ b/GUI/Model/Job/JobItem.cpp
@@ -29,6 +29,7 @@
 #include "GUI/Model/Mask/MasksSet.h"
 #include "GUI/Model/Par/ParameterTreeItems.h"
 #include "GUI/Model/Sample/SampleItem.h"
+#include "GUI/Model/Sim/InstrumentCatalog.h"
 #include "GUI/Model/Sim/InstrumentItems.h"
 #include "GUI/Model/Sim/SimulationOptionsItem.h"
 #include "GUI/Model/ToCore/SimulationToCore.h"
@@ -78,13 +79,14 @@ JobItem::JobItem(const SampleItem* sampleItem, const InstrumentItem* instrumentI
     : m_simulation_options_item(std::make_unique<SimulationOptionsItem>(*optionItem))
     , m_parameter_container(std::make_unique<ParameterContainerItem>())
     , m_sample_item(sampleItem->clone())
-    , m_instrument(instrumentItem->clone())
     , m_batch_info(std::make_unique<BatchInfo>())
     , m_fit_suite_item(std::make_unique<FitSuiteItem>())
 {
     ASSERT(sampleItem);
     ASSERT(instrumentItem);
 
+    m_instrument.setCertainItem(instrumentItem->clone());
+
     batchInfo()->setIdentifier(QUuid::createUuid().toString());
 
     createParameterTree();
@@ -206,7 +208,7 @@ void JobItem::cropRealData()
 void JobItem::writeTo(QXmlStreamWriter* w) const
 {
     XML::writeTaggedElement(w, Tag::SimulationOptions, *m_simulation_options_item);
-    XML::writeTaggedElement(w, Tag::Instrument, *m_instrument);
+    XML::writeTaggedElement(w, Tag::Instrument, m_instrument);
     XML::writeTaggedElement(w, Tag::Sample, *m_sample_item);
     XML::writeTaggedElement(w, Tag::ParameterContainer, *m_parameter_container);
     XML::writeTaggedElement(w, Tag::BatchInfo, *m_batch_info);
@@ -235,7 +237,7 @@ void JobItem::readFrom(QXmlStreamReader* r)
         if (tag == Tag::SimulationOptions)
             XML::readTaggedElement(r, tag, *m_simulation_options_item);
         else if (tag == Tag::Instrument)
-            XML::readTaggedElement(r, tag, *m_instrument);
+            XML::readTaggedElement(r, tag, m_instrument);
         else if (tag == Tag::ParameterContainer) {
             createParameterTree();
             XML::readTaggedElement(r, tag, *m_parameter_container);
diff --git a/GUI/Model/Job/JobItem.h b/GUI/Model/Job/JobItem.h
index d2efe753f3d..8cffd2be7a6 100644
--- a/GUI/Model/Job/JobItem.h
+++ b/GUI/Model/Job/JobItem.h
@@ -15,6 +15,7 @@
 #ifndef BORNAGAIN_GUI_MODEL_JOB_JOBITEM_H
 #define BORNAGAIN_GUI_MODEL_JOB_JOBITEM_H
 
+#include "GUI/Model/Descriptor/PolyPtr.h"
 #include "GUI/Model/Sim/InstrumentCatalog.h"
 #include <QThread>
 #include <QXmlStreamReader>
@@ -26,7 +27,6 @@ class DataItem;
 class Datafield;
 class DatafileItem;
 class FitSuiteItem;
-class InstrumentItem;
 class JobWorker;
 class ParameterContainerItem;
 class ParameterTreeItems;
@@ -64,7 +64,7 @@ public:
 
     //... instrument
 
-    InstrumentItem* instrumentItem() const { return m_instrument.get(); }
+    InstrumentItem* instrumentItem() const { return m_instrument.certainItem(); }
 
     //... simulation options
 
@@ -129,7 +129,8 @@ private:
     std::unique_ptr<SimulationOptionsItem> m_simulation_options_item;
     std::unique_ptr<ParameterContainerItem> m_parameter_container;
     std::unique_ptr<SampleItem> m_sample_item;
-    std::unique_ptr<InstrumentItem> m_instrument;
+    PolyPtr<InstrumentItem, InstrumentCatalog> m_instrument;
+
     std::unique_ptr<BatchInfo> m_batch_info;
     QString m_activity;
     std::unique_ptr<DataItem> m_simulated_data_item;
-- 
GitLab