From ee6addb93be2ef2dba2c760b98ed287d87b3b6cf Mon Sep 17 00:00:00 2001
From: Gennady Pospelov <gennady.pospelov@gmail.com>
Date: Wed, 20 Jan 2021 18:20:37 +0100
Subject: [PATCH] Introduce accessors for Particle's position

---
 GUI/coregui/Models/MesoCrystalItem.cpp         | 5 +++++
 GUI/coregui/Models/MesoCrystalItem.h           | 3 +++
 GUI/coregui/Models/ParticleCompositionItem.cpp | 6 ++++++
 GUI/coregui/Models/ParticleCompositionItem.h   | 5 +++++
 GUI/coregui/Models/ParticleCoreShellItem.cpp   | 6 ++++++
 GUI/coregui/Models/ParticleCoreShellItem.h     | 5 +++++
 GUI/coregui/Models/ParticleItem.cpp            | 8 +++++++-
 GUI/coregui/Models/ParticleItem.h              | 3 +++
 8 files changed, 40 insertions(+), 1 deletion(-)

diff --git a/GUI/coregui/Models/MesoCrystalItem.cpp b/GUI/coregui/Models/MesoCrystalItem.cpp
index 209e1af803f..64d8a48c7e9 100644
--- a/GUI/coregui/Models/MesoCrystalItem.cpp
+++ b/GUI/coregui/Models/MesoCrystalItem.cpp
@@ -105,6 +105,11 @@ MesoCrystalItem::MesoCrystalItem() : SessionGraphicsItem("MesoCrystal")
     });
 }
 
+VectorItem* MesoCrystalItem::positionItem() const
+{
+    return item<VectorItem>(ParticleItem::P_POSITION);
+}
+
 std::unique_ptr<MesoCrystal> MesoCrystalItem::createMesoCrystal() const
 {
     const Lattice3D& lattice = getLattice();
diff --git a/GUI/coregui/Models/MesoCrystalItem.h b/GUI/coregui/Models/MesoCrystalItem.h
index 94a20824c68..dfd1de7b082 100644
--- a/GUI/coregui/Models/MesoCrystalItem.h
+++ b/GUI/coregui/Models/MesoCrystalItem.h
@@ -21,6 +21,7 @@
 class IFormFactor;
 class IParticle;
 class MesoCrystal;
+class VectorItem;
 
 class BA_CORE_API_ MesoCrystalItem : public SessionGraphicsItem {
 public:
@@ -32,6 +33,8 @@ public:
 
     MesoCrystalItem();
 
+    VectorItem* positionItem() const;
+
     std::unique_ptr<MesoCrystal> createMesoCrystal() const;
 
     QStringList translateList(const QStringList& list) const override;
diff --git a/GUI/coregui/Models/ParticleCompositionItem.cpp b/GUI/coregui/Models/ParticleCompositionItem.cpp
index 341b77d8bc5..bb6bacac52b 100644
--- a/GUI/coregui/Models/ParticleCompositionItem.cpp
+++ b/GUI/coregui/Models/ParticleCompositionItem.cpp
@@ -19,6 +19,7 @@
 #include "GUI/coregui/Models/ParticleItem.h"
 #include "GUI/coregui/Models/SessionItemUtils.h"
 #include "GUI/coregui/Models/TransformToDomain.h"
+#include "GUI/coregui/Models/VectorItem.h"
 #include "Sample/Particle/MesoCrystal.h"
 #include "Sample/Particle/Particle.h"
 #include "Sample/Particle/ParticleCoreShell.h"
@@ -67,6 +68,11 @@ ParticleCompositionItem::ParticleCompositionItem() : SessionGraphicsItem("Partic
     });
 }
 
+VectorItem* ParticleCompositionItem::positionItem() const
+{
+    return item<VectorItem>(ParticleItem::P_POSITION);
+}
+
 std::unique_ptr<ParticleComposition> ParticleCompositionItem::createParticleComposition() const
 {
     double abundance = getItemValue(ParticleItem::P_ABUNDANCE).toDouble();
diff --git a/GUI/coregui/Models/ParticleCompositionItem.h b/GUI/coregui/Models/ParticleCompositionItem.h
index f8341f7cc9d..9159ee63650 100644
--- a/GUI/coregui/Models/ParticleCompositionItem.h
+++ b/GUI/coregui/Models/ParticleCompositionItem.h
@@ -18,10 +18,15 @@
 #include "GUI/coregui/Models/SessionGraphicsItem.h"
 #include "Sample/Particle/ParticleComposition.h"
 
+class VectorItem;
+
 class BA_CORE_API_ ParticleCompositionItem : public SessionGraphicsItem {
 public:
     static const QString T_PARTICLES;
     ParticleCompositionItem();
+
+    VectorItem* positionItem() const;
+
     std::unique_ptr<ParticleComposition> createParticleComposition() const;
 };
 
diff --git a/GUI/coregui/Models/ParticleCoreShellItem.cpp b/GUI/coregui/Models/ParticleCoreShellItem.cpp
index e809572aec3..b171c54d33b 100644
--- a/GUI/coregui/Models/ParticleCoreShellItem.cpp
+++ b/GUI/coregui/Models/ParticleCoreShellItem.cpp
@@ -19,6 +19,7 @@
 #include "GUI/coregui/Models/TransformToDomain.h"
 #include "GUI/coregui/utils/GUIHelpers.h"
 #include "Sample/Particle/Particle.h"
+#include "GUI/coregui/Models/VectorItem.h"
 #include "Sample/Particle/ParticleCoreShell.h"
 
 namespace {
@@ -63,6 +64,11 @@ ParticleCoreShellItem::ParticleCoreShellItem() : SessionGraphicsItem("ParticleCo
     });
 }
 
+VectorItem* ParticleCoreShellItem::positionItem() const
+{
+    return item<VectorItem>(ParticleItem::P_POSITION);
+}
+
 std::unique_ptr<ParticleCoreShell> ParticleCoreShellItem::createParticleCoreShell() const
 {
     double abundance = getItemValue(ParticleItem::P_ABUNDANCE).toDouble();
diff --git a/GUI/coregui/Models/ParticleCoreShellItem.h b/GUI/coregui/Models/ParticleCoreShellItem.h
index 5e05b8e6a1c..b74f2b4e66d 100644
--- a/GUI/coregui/Models/ParticleCoreShellItem.h
+++ b/GUI/coregui/Models/ParticleCoreShellItem.h
@@ -18,12 +18,17 @@
 #include "GUI/coregui/Models/SessionGraphicsItem.h"
 
 class ParticleCoreShell;
+class VectorItem;
 
 class BA_CORE_API_ ParticleCoreShellItem : public SessionGraphicsItem {
 public:
     static const QString T_CORE;
     static const QString T_SHELL;
+
     ParticleCoreShellItem();
+
+    VectorItem* positionItem() const;
+
     std::unique_ptr<ParticleCoreShell> createParticleCoreShell() const;
     QVector<SessionItem*> materialPropertyItems();
 };
diff --git a/GUI/coregui/Models/ParticleItem.cpp b/GUI/coregui/Models/ParticleItem.cpp
index 02d9850faa9..f5a1b391519 100644
--- a/GUI/coregui/Models/ParticleItem.cpp
+++ b/GUI/coregui/Models/ParticleItem.cpp
@@ -62,6 +62,12 @@ ParticleItem::ParticleItem() : SessionGraphicsItem("Particle")
         [this](SessionItem* newParent) { updatePropertiesAppearance(newParent); });
 }
 
+
+VectorItem* ParticleItem::positionItem() const
+{
+    return item<VectorItem>(P_POSITION);
+}
+
 std::unique_ptr<Particle> ParticleItem::createParticle() const
 {
     auto& ffItem = groupItem<FormFactorItem>(ParticleItem::P_FORM_FACTOR);
@@ -92,7 +98,7 @@ void ParticleItem::updatePropertiesAppearance(SessionItem* newParent)
         setItemValue(ParticleItem::P_ABUNDANCE, 1.0);
         getItem(ParticleItem::P_ABUNDANCE)->setEnabled(false);
         if (isShellParticle()) {
-            auto pos = item<VectorItem>(P_POSITION);
+            auto pos = positionItem();
             pos->setVector(kvector_t());
             pos->setEnabled(false);
         }
diff --git a/GUI/coregui/Models/ParticleItem.h b/GUI/coregui/Models/ParticleItem.h
index 4a642b483a0..511e2b3a8be 100644
--- a/GUI/coregui/Models/ParticleItem.h
+++ b/GUI/coregui/Models/ParticleItem.h
@@ -18,6 +18,7 @@
 #include "GUI/coregui/Models/SessionGraphicsItem.h"
 
 class Particle;
+class VectorItem;
 
 class BA_CORE_API_ ParticleItem : public SessionGraphicsItem {
 public:
@@ -29,6 +30,8 @@ public:
 
     ParticleItem();
 
+    VectorItem* positionItem() const;
+
     std::unique_ptr<Particle> createParticle() const;
     QVector<SessionItem*> materialPropertyItems();
 
-- 
GitLab