From dde251cde32dce02dcecfcdd510fcd22ebe7e93c Mon Sep 17 00:00:00 2001
From: "Joachim Wuttke (h)" <j.wuttke@fz-juelich.de>
Date: Fri, 23 Apr 2021 15:38:26 +0200
Subject: [PATCH] use inheritance to unify calls to createUnitConverter()

---
 GUI/coregui/Models/DataViewUtils.cpp       | 3 ++-
 GUI/coregui/Models/DomainObjectBuilder.cpp | 6 ------
 GUI/coregui/Models/DomainObjectBuilder.h   | 3 +--
 GUI/coregui/Models/JobItemUtils.cpp        | 6 +++---
 GUI/coregui/Models/JobModelFunctions.cpp   | 2 +-
 5 files changed, 7 insertions(+), 13 deletions(-)

diff --git a/GUI/coregui/Models/DataViewUtils.cpp b/GUI/coregui/Models/DataViewUtils.cpp
index 6ba163040da..6094ffa5776 100644
--- a/GUI/coregui/Models/DataViewUtils.cpp
+++ b/GUI/coregui/Models/DataViewUtils.cpp
@@ -18,6 +18,7 @@
 #include "GUI/coregui/Models/DataItem.h"
 #include "GUI/coregui/Models/DataPropertyContainer.h"
 #include "GUI/coregui/Models/DomainObjectBuilder.h"
+#include "GUI/coregui/Models/InstrumentItems.h"
 #include "GUI/coregui/Models/JobItem.h"
 #include "GUI/coregui/Models/JobItemUtils.h"
 
@@ -28,7 +29,7 @@ std::unique_ptr<IUnitConverter> getConverter(Data1DViewItem* view_item)
     auto job_item = view_item->jobItem();
     ASSERT(job_item->instrumentItem());
 
-    return DomainObjectBuilder::createUnitConverter(job_item->instrumentItem());
+    return job_item->instrumentItem()->createUnitConverter();
 }
 
 Axes::Units selectedUnits(Data1DViewItem* view_item)
diff --git a/GUI/coregui/Models/DomainObjectBuilder.cpp b/GUI/coregui/Models/DomainObjectBuilder.cpp
index cd6f7f19100..de7c3e3671b 100644
--- a/GUI/coregui/Models/DomainObjectBuilder.cpp
+++ b/GUI/coregui/Models/DomainObjectBuilder.cpp
@@ -125,9 +125,3 @@ DomainObjectBuilder::buildInstrument(const InstrumentItem& instrumentItem)
 {
     return instrumentItem.createInstrument();
 }
-
-std::unique_ptr<IUnitConverter>
-DomainObjectBuilder::createUnitConverter(const InstrumentItem* instrumentItem)
-{
-    return instrumentItem->createUnitConverter();
-}
diff --git a/GUI/coregui/Models/DomainObjectBuilder.h b/GUI/coregui/Models/DomainObjectBuilder.h
index bd9f2fb152e..48264b04eae 100644
--- a/GUI/coregui/Models/DomainObjectBuilder.h
+++ b/GUI/coregui/Models/DomainObjectBuilder.h
@@ -27,14 +27,13 @@ class InstrumentItem;
 class IUnitConverter;
 
 namespace DomainObjectBuilder {
+
 std::unique_ptr<MultiLayer> buildMultiLayer(const SessionItem& multilayer_item);
 std::unique_ptr<Layer> buildLayer(const SessionItem& item);
 std::unique_ptr<ParticleLayout> buildParticleLayout(const SessionItem& item);
 std::unique_ptr<IInterferenceFunction> buildInterferenceFunction(const SessionItem& item);
 std::unique_ptr<Instrument> buildInstrument(const InstrumentItem& instrumentItem);
 
-//! Creates a unit converter corresponding to the given instrument item
-std::unique_ptr<IUnitConverter> createUnitConverter(const InstrumentItem* instrumentItem);
 }; // namespace DomainObjectBuilder
 
 #endif // BORNAGAIN_GUI_COREGUI_MODELS_DOMAINOBJECTBUILDER_H
diff --git a/GUI/coregui/Models/JobItemUtils.cpp b/GUI/coregui/Models/JobItemUtils.cpp
index 4f99a8075ee..03f0989b8d6 100644
--- a/GUI/coregui/Models/JobItemUtils.cpp
+++ b/GUI/coregui/Models/JobItemUtils.cpp
@@ -67,7 +67,7 @@ void JobItemUtils::updateDataAxes(DataItem* intensityItem, const InstrumentItem*
 
     Axes::Units requested_units = axesUnitsFromName(intensityItem->selectedAxesUnits());
 
-    const auto converter = DomainObjectBuilder::createUnitConverter(instrumentItem);
+    const auto converter = instrumentItem->createUnitConverter();
     auto newData = converter->createOutputData(requested_units);
     newData->setRawDataVector(intensityItem->getOutputData()->getRawDataVector());
 
@@ -98,7 +98,7 @@ Axes::Units JobItemUtils::axesUnitsFromName(const QString& name)
 void JobItemUtils::setIntensityItemAxesUnits(DataItem* intensityItem,
                                              const InstrumentItem* instrumentItem)
 {
-    const auto converter = DomainObjectBuilder::createUnitConverter(instrumentItem);
+    const auto converter = instrumentItem->createUnitConverter();
     if (!converter)
         return;
     setIntensityItemAxesUnits(intensityItem, *converter);
@@ -114,7 +114,7 @@ void JobItemUtils::setIntensityItemAxesUnits(DataItem* intensityItem,
 void JobItemUtils::createDefaultDetectorMap(DataItem* intensityItem,
                                             const InstrumentItem* instrumentItem)
 {
-    const auto converter = DomainObjectBuilder::createUnitConverter(instrumentItem);
+    const auto converter = instrumentItem->createUnitConverter();
     auto output_data = converter->createOutputData(converter->defaultUnits());
     intensityItem->setOutputData(output_data.release());
     setIntensityItemAxesUnits(intensityItem, *converter);
diff --git a/GUI/coregui/Models/JobModelFunctions.cpp b/GUI/coregui/Models/JobModelFunctions.cpp
index e0e1544ef63..3e0c1908596 100644
--- a/GUI/coregui/Models/JobModelFunctions.cpp
+++ b/GUI/coregui/Models/JobModelFunctions.cpp
@@ -78,7 +78,7 @@ void JobModelFunctions::initDataView(JobItem* job_item)
 
     // also triggers Data1DViewItem::setAxesRangeToData and DataViewUtils::updateAxesTitle by
     // setting new value of P_AXES_UNITS.
-    auto converter = DomainObjectBuilder::createUnitConverter(job_item->instrumentItem());
+    auto converter = job_item->instrumentItem()->createUnitConverter();
     view_item->setItemValue(Data1DViewItem::P_AXES_UNITS,
                             JobItemUtils::availableUnits(*converter).variant());
 }
-- 
GitLab