From 9b130ce7db4bb9c93eadbaf7c23f0f93a1eeb098 Mon Sep 17 00:00:00 2001
From: Tobias Knopff <t.knopff@fz-juelich.de>
Date: Wed, 26 May 2021 15:17:13 +0200
Subject: [PATCH] Introduce SessionItem::setGroupPropertyType, a templated
 version of SessionItem::setGroupProperty, to reduce the need for casting

---
 GUI/Models/SessionItem.h           | 8 ++++++++
 GUI/Models/TransformFromDomain.cpp | 5 ++---
 2 files changed, 10 insertions(+), 3 deletions(-)

diff --git a/GUI/Models/SessionItem.h b/GUI/Models/SessionItem.h
index 0ff1ede2fdc..e5f423e37bb 100644
--- a/GUI/Models/SessionItem.h
+++ b/GUI/Models/SessionItem.h
@@ -81,6 +81,8 @@ public:
     // convenience functions for groups
     SessionItem* addGroupProperty(const QString& groupTag, const QString& groupType);
     SessionItem* setGroupProperty(const QString& groupTag, const QString& modelType) const;
+    template <typename T>
+    T* setGroupPropertyType(const QString& groupTag);
     SessionItem* getGroupItem(const QString& groupName) const;
     template <typename T> T& groupItem(const QString& groupName) const;
 
@@ -181,6 +183,12 @@ template <typename T> T* SessionItem::addProperty(const QString& tagname)
     return property;
 }
 
+template <typename T>
+T* SessionItem::setGroupPropertyType(const QString& groupTag)
+{
+    return dynamic_cast<T*>(setGroupProperty(groupTag, T::M_TYPE));
+}
+
 template <typename T> T& SessionItem::groupItem(const QString& groupName) const
 {
     T* t = dynamic_cast<T*>(getGroupItem(groupName));
diff --git a/GUI/Models/TransformFromDomain.cpp b/GUI/Models/TransformFromDomain.cpp
index 6d60fcb0798..fd0c11f0b80 100644
--- a/GUI/Models/TransformFromDomain.cpp
+++ b/GUI/Models/TransformFromDomain.cpp
@@ -559,9 +559,8 @@ void TransformFromDomain::setBackground(InstrumentItem* instrument_item,
     auto p_bg = simulation.background();
     if (auto p_constant_bg = dynamic_cast<const ConstantBackground*>(p_bg)) {
         ConstantBackgroundItem* constant_bg_item =
-            dynamic_cast<ConstantBackgroundItem*>
-            (instrument_item->setGroupProperty(InstrumentItem::P_BACKGROUND,
-                                               ConstantBackgroundItem::M_TYPE));
+            instrument_item->setGroupPropertyType<ConstantBackgroundItem>
+            (InstrumentItem::P_BACKGROUND);
         double value = p_constant_bg->backgroundValue();
         constant_bg_item->setBackgroundValue(value);
     } else if (dynamic_cast<const PoissonNoiseBackground*>(p_bg)) {
-- 
GitLab