diff --git a/GUI/coregui/Models/DomainObjectBuilder.cpp b/GUI/coregui/Models/DomainObjectBuilder.cpp index 801d9b3e4513ca880226dd78e90420791d1815ae..9a121d763a83162008a155634a909fe44d662576 100644 --- a/GUI/coregui/Models/DomainObjectBuilder.cpp +++ b/GUI/coregui/Models/DomainObjectBuilder.cpp @@ -129,13 +129,5 @@ DomainObjectBuilder::buildInterferenceFunction(const SessionItem& item) const std::unique_ptr<Instrument> DomainObjectBuilder::buildInstrument(const GISASInstrumentItem& instrumentItem) const { - auto instrument = std::make_unique<Instrument>(); - - auto beam = instrumentItem.beamItem()->createBeam(); - instrument->setBeam(*beam); - - auto detector = instrumentItem.detectorItem()->createDetector(); - instrument->setDetector(*detector); - - return instrument; + return instrumentItem.createInstrument(); } diff --git a/GUI/coregui/Models/InstrumentItems.cpp b/GUI/coregui/Models/InstrumentItems.cpp index 579431f230043c6fff11cae11a379049e5178ab7..0266c6674b181570632028559db6267b08b4482a 100644 --- a/GUI/coregui/Models/InstrumentItems.cpp +++ b/GUI/coregui/Models/InstrumentItems.cpp @@ -22,6 +22,8 @@ #include "GroupItem.h" #include "MaskItems.h" #include "ParameterTranslators.h" +#include "Instrument.h" +#include "IDetector2D.h" namespace { const QString background_group_label = "Type"; @@ -54,6 +56,8 @@ Instrument2DItem::Instrument2DItem(const QString& modelType) item->setToolTip("Background type"); } +Instrument2DItem::~Instrument2DItem() = default; + BeamItem *Instrument2DItem::beamItem() const { return &item<BeamItem>(P_BEAM); @@ -112,6 +116,19 @@ QStringList Instrument2DItem::translateList(const QStringList& list) const return result; } +std::unique_ptr<Instrument> Instrument2DItem::createInstrument() const +{ + std::unique_ptr<Instrument> result(new Instrument); + + auto beam = beamItem()->createBeam(); + result->setBeam(*beam); + + auto detector = detectorItem()->createDetector(); + result->setDetector(*detector); + + return result; +} + GISASInstrumentItem::GISASInstrumentItem() : Instrument2DItem(Constants::GISASInstrumentType) { diff --git a/GUI/coregui/Models/InstrumentItems.h b/GUI/coregui/Models/InstrumentItems.h index 1fe7ffc0db33f6343a6130931aec08256e83c116..2544976ccb81626288b5abd37ce558ecf9ff040d 100644 --- a/GUI/coregui/Models/InstrumentItems.h +++ b/GUI/coregui/Models/InstrumentItems.h @@ -22,12 +22,14 @@ class BeamItem; class DetectorItem; class MaskContainerItem; class GroupItem; +class Instrument; class BA_CORE_API_ InstrumentItem : public SessionItem { public: static const QString P_IDENTIFIER; + virtual std::unique_ptr<Instrument> createInstrument() const = 0; protected: explicit InstrumentItem(const QString& modelType); }; @@ -35,6 +37,8 @@ protected: class BA_CORE_API_ Instrument2DItem : public InstrumentItem { public: + virtual ~Instrument2DItem(); + static const QString P_BEAM; static const QString P_DETECTOR; static const QString P_BACKGROUND; @@ -53,6 +57,8 @@ public: QStringList translateList(const QStringList& list) const override; + std::unique_ptr<Instrument> createInstrument() const override; + protected: explicit Instrument2DItem(const QString& modelType); };