From 6e6c01511a703945d8426b955683020481440c33 Mon Sep 17 00:00:00 2001
From: Matthias Puchner <github@mpuchner.de>
Date: Mon, 11 Oct 2021 15:08:24 +0200
Subject: [PATCH] refactor to reduce SessionItem on class interface

---
 GUI/Models/LayerItem.cpp      | 11 ++++++++++-
 GUI/Models/LayerItem.h        | 12 ++++++++++--
 GUI/Models/MultiLayerItem.cpp | 12 ++++--------
 3 files changed, 24 insertions(+), 11 deletions(-)

diff --git a/GUI/Models/LayerItem.cpp b/GUI/Models/LayerItem.cpp
index c71b057e60d..d4522cf60fd 100644
--- a/GUI/Models/LayerItem.cpp
+++ b/GUI/Models/LayerItem.cpp
@@ -76,6 +76,11 @@ bool LayerItem::isThicknessPropertyName(const QString& name)
     return name == P_THICKNESS;
 }
 
+void LayerItem::setThicknessEnabled(bool enabled)
+{
+    getItem(P_THICKNESS)->setEnabled(enabled);
+}
+
 SessionItem* LayerItem::roughness() const
 {
     return getGroupItem(P_ROUGHNESS);
@@ -86,12 +91,16 @@ SessionItem* LayerItem::roughnessItem() const
     return getItem(P_ROUGHNESS);
 }
 
+void LayerItem::setRoughnessEnabled(bool enabled)
+{
+    getItem(P_ROUGHNESS)->setEnabled(enabled);
+}
+
 UIntDescriptor LayerItem::numSlices() const
 {
     return UIntDescriptor(getItem(P_NSLICES), Unit::unitless);
 }
 
-
 QVector<ParticleLayoutItem*> LayerItem::layouts() const
 {
     return items<ParticleLayoutItem>(T_LAYOUTS);
diff --git a/GUI/Models/LayerItem.h b/GUI/Models/LayerItem.h
index a52d171241b..d3b05014da7 100644
--- a/GUI/Models/LayerItem.h
+++ b/GUI/Models/LayerItem.h
@@ -37,13 +37,13 @@ public:
 
     QVector<ItemWithMaterial*> itemsWithMaterial();
 
-    SessionItem* thicknessItem() const;
     DoubleDescriptor thickness() const;
     static bool isThicknessPropertyName(const QString& name);
+    void setThicknessEnabled(bool enabled);
 
     template <typename T> T* setRoughnessType();
     SessionItem* roughness() const;
-    SessionItem* roughnessItem() const;
+    void setRoughnessEnabled(bool enabled);
 
     UIntDescriptor numSlices() const;
 
@@ -52,6 +52,14 @@ public:
 
 private:
     void updateAppearance(SessionItem* new_parent);
+
+    // -- Only for testing
+    friend class TestMultiLayerItem_test_twoLayerSystem_Test;
+    friend class TestMultiLayerItem_test_threeLayerSystem_Test;
+    friend class TestMultiLayerItem_test_movingMiddleLayerOnTop_Test;
+    friend class TestModelUtils_test_iterateIf_Test;
+    SessionItem* thicknessItem() const;
+    SessionItem* roughnessItem() const;
 };
 
 template <typename T> T* LayerItem::setRoughnessType()
diff --git a/GUI/Models/MultiLayerItem.cpp b/GUI/Models/MultiLayerItem.cpp
index 3b145963655..58a5f6decd2 100644
--- a/GUI/Models/MultiLayerItem.cpp
+++ b/GUI/Models/MultiLayerItem.cpp
@@ -120,16 +120,12 @@ void MultiLayerItem::updateLayers()
 {
     QVector<LayerItem*> list = childrenOfType<LayerItem>();
     for (auto it = list.begin(); it != list.end(); ++it) {
-        if (it == list.begin())
-            (*it)->roughnessItem()->setEnabled(false);
-        else
-            (*it)->roughnessItem()->setEnabled(true);
+        (*it)->setRoughnessEnabled(it != list.begin());
 
         if (it == list.begin() || it == (list.end() - 1)) {
-            (*it)->thicknessItem()->setEnabled(false);
+            (*it)->setThicknessEnabled(false);
             (*it)->thickness().set(0.0);
-        } else {
-            (*it)->thicknessItem()->setEnabled(true);
-        }
+        } else
+            (*it)->setThicknessEnabled(true);
     }
 }
-- 
GitLab