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