From ac2201550829caa5bc3b257c1cfcea28a29ad324 Mon Sep 17 00:00:00 2001
From: Walter Van Herck <w.van.herck@fz-juelich.de>
Date: Mon, 6 Nov 2017 18:11:07 +0100
Subject: [PATCH] Extract method to namespace function:
 SessionItem::setVectorItem

---
 GUI/coregui/Models/GUIObjectBuilder.cpp    | 14 ++++++++------
 GUI/coregui/Models/ParticleItem.cpp        |  5 +++--
 GUI/coregui/Models/SessionItem.cpp         |  8 --------
 GUI/coregui/Models/SessionItem.h           |  1 -
 GUI/coregui/Models/SessionItemUtils.cpp    |  8 ++++++++
 GUI/coregui/Models/SessionItemUtils.h      |  3 +++
 GUI/coregui/Models/TransformFromDomain.cpp | 15 +++++++++------
 7 files changed, 31 insertions(+), 23 deletions(-)

diff --git a/GUI/coregui/Models/GUIObjectBuilder.cpp b/GUI/coregui/Models/GUIObjectBuilder.cpp
index 0db01fed199..ce46b8ac3b6 100644
--- a/GUI/coregui/Models/GUIObjectBuilder.cpp
+++ b/GUI/coregui/Models/GUIObjectBuilder.cpp
@@ -47,6 +47,7 @@
 #include "RectangularDetector.h"
 #include "RotationItems.h"
 #include "SampleModel.h"
+#include "SessionItemUtils.h"
 #include "SimulationOptionsItem.h"
 #include "SphericalDetector.h"
 #include "TransformFromDomain.h"
@@ -199,7 +200,7 @@ void GUIObjectBuilder::visit(const MultiLayer* p_sample)
     p_multilayer_item->setItemName(p_sample->getName().c_str());
     p_multilayer_item->setItemValue(MultiLayerItem::P_CROSS_CORR_LENGTH,
                                     p_sample->crossCorrLength());
-    p_multilayer_item->setVectorItem(MultiLayerItem::P_EXTERNAL_FIELD,
+    SessionItemUtils::SetVectorItem(*p_multilayer_item, MultiLayerItem::P_EXTERNAL_FIELD,
                                      p_sample->externalField());
     m_levelToParentItem[depth()] = p_multilayer_item;
     m_itemToSample[p_multilayer_item] = p_sample;
@@ -255,9 +256,9 @@ void GUIObjectBuilder::visit(const Crystal* p_sample)
     auto vector_b = lattice.getBasisVectorB();
     auto vector_c = lattice.getBasisVectorC();
 
-    p_mesocrystal_item->setVectorItem(MesoCrystalItem::P_VECTOR_A, vector_a);
-    p_mesocrystal_item->setVectorItem(MesoCrystalItem::P_VECTOR_B, vector_b);
-    p_mesocrystal_item->setVectorItem(MesoCrystalItem::P_VECTOR_C, vector_c);
+    SessionItemUtils::SetVectorItem(*p_mesocrystal_item, MesoCrystalItem::P_VECTOR_A, vector_a);
+    SessionItemUtils::SetVectorItem(*p_mesocrystal_item, MesoCrystalItem::P_VECTOR_B, vector_b);
+    SessionItemUtils::SetVectorItem(*p_mesocrystal_item, MesoCrystalItem::P_VECTOR_C, vector_c);
 
     // Since there is no CrystalItem, set the parent map to the MesoCrystalItem
     m_levelToParentItem[depth()] = p_mesocrystal_item;
@@ -584,7 +585,7 @@ void GUIObjectBuilder::visit(const RotationEuler* p_sample)
 void GUIObjectBuilder::buildPositionInfo(SessionItem* p_particle_item, const IParticle* p_sample)
 {
     kvector_t position = p_sample->position();
-    p_particle_item->setVectorItem(ParticleItem::P_POSITION, position);
+    SessionItemUtils::SetVectorItem(*p_particle_item, ParticleItem::P_POSITION, position);
 }
 
 MaterialProperty GUIObjectBuilder::createMaterialFromDomain(
@@ -600,7 +601,8 @@ MaterialProperty GUIObjectBuilder::createMaterialFromDomain(
     complex_t material_data = material->materialData();
     MaterialItem* materialItem  =
             model->addMaterial(materialName, material_data.real(),material_data.imag());
-    materialItem->setVectorItem(MaterialItem::P_MAGNETIZATION, material->magnetization());
+    SessionItemUtils::SetVectorItem(*materialItem, MaterialItem::P_MAGNETIZATION,
+                                    material->magnetization());
     return MaterialProperty(materialItem->getIdentifier());
 }
 
diff --git a/GUI/coregui/Models/ParticleItem.cpp b/GUI/coregui/Models/ParticleItem.cpp
index c4c1f18a317..dd92453e9fb 100644
--- a/GUI/coregui/Models/ParticleItem.cpp
+++ b/GUI/coregui/Models/ParticleItem.cpp
@@ -19,10 +19,11 @@
 #include "FormFactorItems.h"
 #include "MaterialItemUtils.h"
 #include "ModelPath.h"
+#include "Particle.h"
 #include "ParticleCoreShellItem.h"
+#include "SessionItemUtils.h"
 #include "TransformToDomain.h"
 #include "VectorItem.h"
-#include "Particle.h"
 
 namespace {
 const QString abundance_tooltip =
@@ -87,7 +88,7 @@ void ParticleItem::updatePropertiesAppearance(SessionItem* newParent)
         getItem(ParticleItem::P_ABUNDANCE)->setEnabled(false);
         if (isShellParticle()) {
             kvector_t zero_vector;
-            setVectorItem(ParticleItem::P_POSITION, zero_vector);
+            SessionItemUtils::SetVectorItem(*this, ParticleItem::P_POSITION, zero_vector);
             SessionItem *positionItem = getItem(ParticleItem::P_POSITION);
             positionItem->setEnabled(false);
         }
diff --git a/GUI/coregui/Models/SessionItem.cpp b/GUI/coregui/Models/SessionItem.cpp
index d789bac1f72..d33e680a9b8 100644
--- a/GUI/coregui/Models/SessionItem.cpp
+++ b/GUI/coregui/Models/SessionItem.cpp
@@ -445,14 +445,6 @@ void SessionItem::setItemValue(const QString& tag, const QVariant& variant)
     getItem(tag)->setValue(variant);
 }
 
-void SessionItem::setVectorItem(const QString& name, kvector_t value)
-{
-    auto p_vector_item = getItem(name);
-    p_vector_item->setItemValue(VectorItem::P_X, value.x());
-    p_vector_item->setItemValue(VectorItem::P_Y, value.y());
-    p_vector_item->setItemValue(VectorItem::P_Z, value.z());
-}
-
 //! Creates new group item and register new tag, returns GroupItem.
 
 SessionItem* SessionItem::addGroupProperty(const QString& groupName, const QString& groupType)
diff --git a/GUI/coregui/Models/SessionItem.h b/GUI/coregui/Models/SessionItem.h
index 20b145b5d54..9b5014f4c36 100644
--- a/GUI/coregui/Models/SessionItem.h
+++ b/GUI/coregui/Models/SessionItem.h
@@ -94,7 +94,6 @@ public:
     SessionItem* addProperty(const QString& name, const QVariant& variant);
     QVariant getItemValue(const QString& tag) const;
     void setItemValue(const QString& tag, const QVariant& variant);
-    void setVectorItem(const QString& name, kvector_t value);
     SessionItem* addGroupProperty(const QString& groupName, const QString& groupType);
 
     SessionItem* setGroupProperty(const QString& name, const QString& value) const;
diff --git a/GUI/coregui/Models/SessionItemUtils.cpp b/GUI/coregui/Models/SessionItemUtils.cpp
index 7371f726ab1..8de11147624 100644
--- a/GUI/coregui/Models/SessionItemUtils.cpp
+++ b/GUI/coregui/Models/SessionItemUtils.cpp
@@ -27,3 +27,11 @@ kvector_t SessionItemUtils::GetVectorItem(const SessionItem& item, const QString
     double z = vectorItem->getItemValue(VectorItem::P_Z).toDouble();
     return { x, y, z };
 }
+
+void SessionItemUtils::SetVectorItem(const SessionItem& item, const QString& name, kvector_t value)
+{
+    auto p_vector_item = item.getItem(name);
+    p_vector_item->setItemValue(VectorItem::P_X, value.x());
+    p_vector_item->setItemValue(VectorItem::P_Y, value.y());
+    p_vector_item->setItemValue(VectorItem::P_Z, value.z());
+}
diff --git a/GUI/coregui/Models/SessionItemUtils.h b/GUI/coregui/Models/SessionItemUtils.h
index 2078590c90d..df1e509062c 100644
--- a/GUI/coregui/Models/SessionItemUtils.h
+++ b/GUI/coregui/Models/SessionItemUtils.h
@@ -27,6 +27,9 @@ namespace SessionItemUtils
 {
 //! Returns a VectorType group property's value as a kvector_t
 BA_CORE_API_ kvector_t GetVectorItem(const SessionItem& item, const QString& name);
+
+//! Returns a VectorType group property's value as a kvector_t
+BA_CORE_API_ void SetVectorItem(const SessionItem& item, const QString& name, kvector_t value);
 }  // namespace SessionItemUtils
 
 #endif // SESSIONITEMUTILS_H
diff --git a/GUI/coregui/Models/TransformFromDomain.cpp b/GUI/coregui/Models/TransformFromDomain.cpp
index 76827074d1c..7d9b9c98e43 100644
--- a/GUI/coregui/Models/TransformFromDomain.cpp
+++ b/GUI/coregui/Models/TransformFromDomain.cpp
@@ -54,14 +54,15 @@
 #include "RectangularDetector.h"
 #include "ResolutionFunctionItems.h"
 #include "SphericalDetector.h"
-#include "Units.h"
-#include "VectorItem.h"
 #include "ParameterTreeUtils.h"
 #include "InstrumentItem.h"
 #include "ResolutionFunction2DGaussian.h"
 #include "ParameterUtils.h"
 #include "Particle.h"
 #include "ParticleDistribution.h"
+#include "SessionItemUtils.h"
+#include "Units.h"
+#include "VectorItem.h"
 #include <limits>
 
 using namespace INodeUtils;
@@ -237,7 +238,7 @@ void TransformFromDomain::setItemFromSample(BeamItem* beamItem, const GISASSimul
     }
 
     // polarization parameters
-    beamItem->setVectorItem(BeamItem::P_POLARIZATION, beam.getBlochVector());
+    SessionItemUtils::SetVectorItem(*beamItem, BeamItem::P_POLARIZATION, beam.getBlochVector());
 }
 
 void TransformFromDomain::setInstrumentDetectorFromSample(InstrumentItem* instrumentItem,
@@ -297,7 +298,8 @@ void TransformFromDomain::setInstrumentDetectorFromSample(InstrumentItem* instru
     if (total_transmission>0.0) {
         kvector_t analyzer_dir = p_detector->analyzerDirection();
         double efficiency = p_detector->analyzerEfficiency();
-        detector_item->setVectorItem(DetectorItem::P_ANALYZER_DIRECTION, analyzer_dir);
+        SessionItemUtils::SetVectorItem(*detector_item, DetectorItem::P_ANALYZER_DIRECTION,
+                                        analyzer_dir);
         detector_item->setItemValue(DetectorItem::P_ANALYZER_EFFICIENCY, efficiency);
         detector_item->setItemValue(DetectorItem::P_ANALYZER_TOTAL_TRANSMISSION,
                                     total_transmission);
@@ -347,10 +349,11 @@ void TransformFromDomain::setItemFromSample(RectangularDetectorItem* detectorIte
         detectorItem->setDetectorAlignment(Constants::ALIGNMENT_GENERIC);
 
         kvector_t normal = detector.getNormalVector();
-        detectorItem->setVectorItem(RectangularDetectorItem::P_NORMAL, normal);
+        SessionItemUtils::SetVectorItem(*detectorItem, RectangularDetectorItem::P_NORMAL, normal);
 
         kvector_t direction = detector.getDirectionVector();
-        detectorItem->setVectorItem(RectangularDetectorItem::P_DIRECTION, direction);
+        SessionItemUtils::SetVectorItem(*detectorItem, RectangularDetectorItem::P_DIRECTION,
+                                        direction);
 
         detectorItem->setItemValue(RectangularDetectorItem::P_U0, detector.getU0());
         detectorItem->setItemValue(RectangularDetectorItem::P_V0, detector.getV0());
-- 
GitLab