From c8aa12dc2f86370016faa4983fd898c9c944c4d0 Mon Sep 17 00:00:00 2001
From: Tobias Knopff <t.knopff@fz-juelich.de>
Date: Thu, 27 May 2021 17:08:06 +0200
Subject: [PATCH] Use string constant for instrument items type names

---
 GUI/Models/InstrumentItems.cpp                | 20 +++++++++++--------
 GUI/Models/InstrumentItems.h                  |  8 ++++++++
 GUI/Models/ItemCatalog.cpp                    |  8 ++++----
 GUI/Models/JobItem.cpp                        |  9 ++++-----
 .../DetectorMaskDelegate.cpp                  |  2 +-
 5 files changed, 29 insertions(+), 18 deletions(-)

diff --git a/GUI/Models/InstrumentItems.cpp b/GUI/Models/InstrumentItems.cpp
index 8a5f9cde1f5..1e0d318db7f 100644
--- a/GUI/Models/InstrumentItems.cpp
+++ b/GUI/Models/InstrumentItems.cpp
@@ -40,8 +40,6 @@
 namespace {
 
 const QString background_group_label = "Type";
-const QStringList instrument_names{"GISASInstrument", "OffSpecularInstrument",
-                                   "SpecularInstrument"};
 
 BasicAxisItem* addAxisGroupProperty(SessionItem* parent, const QString& tag)
 {
@@ -145,7 +143,9 @@ template <typename T> T* InstrumentItem::beam() const
 //  class SpecularInstrumentItem
 //  ************************************************************************************************
 
-SpecularInstrumentItem::SpecularInstrumentItem() : InstrumentItem("SpecularInstrument")
+const QString SpecularInstrumentItem::M_TYPE = "SpecularInstrument";
+
+SpecularInstrumentItem::SpecularInstrumentItem() : InstrumentItem(M_TYPE)
 {
     addBeam<SpecularBeamItem>();
 
@@ -284,7 +284,9 @@ bool Instrument2DItem::isDetectorPropertyName(const QString& name)
 //  class GISASInstrumentItem
 //  ************************************************************************************************
 
-GISASInstrumentItem::GISASInstrumentItem() : Instrument2DItem("GISASInstrument") {}
+const QString GISASInstrumentItem::M_TYPE = "GISASInstrument";
+
+GISASInstrumentItem::GISASInstrumentItem() : Instrument2DItem(M_TYPE) {}
 
 std::vector<int> GISASInstrumentItem::shape() const
 {
@@ -323,7 +325,9 @@ ICoordSystem* GISASInstrumentItem::createCoordSystem() const
 
 const QString OffSpecularInstrumentItem::P_ALPHA_AXIS = "Alpha axis";
 
-OffSpecularInstrumentItem::OffSpecularInstrumentItem() : Instrument2DItem("OffSpecularInstrument")
+const QString OffSpecularInstrumentItem::M_TYPE = "OffSpecularInstrument";
+
+OffSpecularInstrumentItem::OffSpecularInstrumentItem() : Instrument2DItem(M_TYPE)
 {
     BasicAxisItem* axis_item = addAxisGroupProperty(this, P_ALPHA_AXIS);
     auto inclination_item = axis_item->lowerBoundItem();
@@ -396,10 +400,10 @@ BasicAxisItem* OffSpecularInstrumentItem::alphaAxis() const
 
 const QString DepthProbeInstrumentItem::P_Z_AXIS = "Z axis";
 
-DepthProbeInstrumentItem::DepthProbeInstrumentItem() : InstrumentItem("DepthProbeInstrument")
-{
-    setItemName("DepthProbeInstrument");
+const QString DepthProbeInstrumentItem::M_TYPE = "DepthProbeInstrument";
 
+DepthProbeInstrumentItem::DepthProbeInstrumentItem() : InstrumentItem(M_TYPE)
+{
     addBeam<SpecularBeamItem>();
 
     auto axisItem = beamItem()->currentInclinationAxisItem();
diff --git a/GUI/Models/InstrumentItems.h b/GUI/Models/InstrumentItems.h
index 42f9e864720..5df38ee20d0 100644
--- a/GUI/Models/InstrumentItems.h
+++ b/GUI/Models/InstrumentItems.h
@@ -73,6 +73,8 @@ protected:
 
 class BA_CORE_API_ SpecularInstrumentItem : public InstrumentItem {
 public:
+    static const QString M_TYPE;
+
     SpecularInstrumentItem();
     ~SpecularInstrumentItem() override;
 
@@ -115,6 +117,8 @@ protected:
 
 class BA_CORE_API_ GISASInstrumentItem : public Instrument2DItem {
 public:
+    static const QString M_TYPE;
+
     GISASInstrumentItem();
     std::vector<int> shape() const override;
     void updateToRealData(const RealDataItem* item) override;
@@ -129,6 +133,8 @@ private:
     static const QString P_ALPHA_AXIS;
 
 public:
+    static const QString M_TYPE;
+
     OffSpecularInstrumentItem();
     std::vector<int> shape() const override;
     void updateToRealData(const RealDataItem* item) override;
@@ -145,6 +151,8 @@ private:
     static const QString P_Z_AXIS;
 
 public:
+    static const QString M_TYPE;
+
     DepthProbeInstrumentItem();
 
     SpecularBeamItem* beamItem() const override;
diff --git a/GUI/Models/ItemCatalog.cpp b/GUI/Models/ItemCatalog.cpp
index bf5fe6243c5..3f2fca01ce3 100644
--- a/GUI/Models/ItemCatalog.cpp
+++ b/GUI/Models/ItemCatalog.cpp
@@ -77,12 +77,12 @@ ItemCatalog::ItemCatalog()
     add("InterferenceFinite2DLattice", create_new<InterferenceFunctionFinite2DLatticeItem>);
     add("InterferenceHardDisk", create_new<InterferenceFunctionHardDiskItem>);
     add("InterferenceRadialParaCrystal", create_new<InterferenceFunctionRadialParaCrystalItem>);
-    add("GISASInstrument", create_new<GISASInstrumentItem>);
-    add("OffSpecularInstrument", create_new<OffSpecularInstrumentItem>);
+    addItem<GISASInstrumentItem>();
+    addItem<OffSpecularInstrumentItem>();
     // the following line is necessary for loading BornAgain projects which have been created before
     // global renaming to "OffSpecularInstrument"
     add("OffSpecInstrument", create_new<OffSpecularInstrumentItem>);
-    add("SpecularInstrument", create_new<SpecularInstrumentItem>);
+    addItem<SpecularInstrumentItem>();
     addItem<GISASBeamItem>();
     addItem<SpecularBeamItem>();
     addItem<BackgroundNoneItem>();
@@ -238,7 +238,7 @@ ItemCatalog::ItemCatalog()
 
     add("ProjectionContainer", create_new<ProjectionContainerItem>);
 
-    add("DepthProbeInstrument", create_new<DepthProbeInstrumentItem>);
+    addItem<DepthProbeInstrumentItem>();
 }
 
 std::unique_ptr<SessionItem> ItemCatalog::createItemPtr(const QString& modelType) const
diff --git a/GUI/Models/JobItem.cpp b/GUI/Models/JobItem.cpp
index 0539800f2ac..593f7d207f6 100644
--- a/GUI/Models/JobItem.cpp
+++ b/GUI/Models/JobItem.cpp
@@ -72,11 +72,10 @@ JobItem::JobItem() : SessionItem("JobItem")
 
     registerTag(T_SAMPLE, 1, 1, QStringList() << "MultiLayer");
     registerTag(T_MATERIAL_CONTAINER, 1, 1, QStringList{"MaterialContainer"});
-    registerTag(T_INSTRUMENT, 1, 1,
-                QStringList() << "GISASInstrument"
-                              << "OffSpecularInstrument"
-                              << "SpecularInstrument"
-                              << "DepthProbeInstrument");
+    registerTag(T_INSTRUMENT, 1, 1, { GISASInstrumentItem::M_TYPE,
+                                      OffSpecularInstrumentItem::M_TYPE,
+                                      SpecularInstrumentItem::M_TYPE,
+                                      DepthProbeInstrumentItem::M_TYPE });
     registerTag(T_OUTPUT, 1, 1, { IntensityDataItem::M_TYPE,
                                   SpecularDataItem::M_TYPE });
     registerTag(T_REALDATA, 1, 1, QStringList() << "RealData");
diff --git a/GUI/Views/InstrumentWidgets/DetectorMaskDelegate.cpp b/GUI/Views/InstrumentWidgets/DetectorMaskDelegate.cpp
index c0e54338709..51110a9901a 100644
--- a/GUI/Views/InstrumentWidgets/DetectorMaskDelegate.cpp
+++ b/GUI/Views/InstrumentWidgets/DetectorMaskDelegate.cpp
@@ -69,7 +69,7 @@ void DetectorMaskDelegate::createIntensityDataItem()
 
     // creating output data corresponding to the detector
     auto instrument = dynamic_cast<const GISASInstrumentItem*>(
-        ModelPath::ancestor(m_detectorItem, "GISASInstrument"));
+        ModelPath::ancestor(m_detectorItem, GISASInstrumentItem::M_TYPE));
     JobItemUtils::createDefaultDetectorMap(m_intensityItem, instrument);
 
     m_intensityItem->getOutputData()->setAllTo(1.0);
-- 
GitLab