From 57fb4fcee6eea4dbbd64b4bbf97614abe5d5a219 Mon Sep 17 00:00:00 2001
From: Gennady Pospelov <g.pospelov@fz-juelich.de>
Date: Wed, 6 Dec 2017 15:59:06 +0100
Subject: [PATCH] GroupProperty renamed to GroupItemController

---
 GUI/coregui/Models/GroupItem.cpp              | 62 +++++++------------
 GUI/coregui/Models/GroupItem.h                |  8 +--
 ...upProperty.cpp => GroupItemController.cpp} | 40 ++++++------
 ...{GroupProperty.h => GroupItemController.h} | 20 +++---
 GUI/coregui/Models/GroupPropertyRegistry.h    |  2 +-
 GUI/coregui/Models/SessionModelDelegate.h     |  1 -
 GUI/coregui/Models/SessionXML.cpp             |  1 +
 .../Views/PropertyEditor/CustomEditors.cpp    |  2 +-
 .../ObsoleteComponentEditor.cpp               |  2 +-
 .../ObsoletePropertyBrowserUtils.h            |  2 +-
 .../ObsoletePropertyVariantFactory.h          |  2 +-
 .../ObsoletePropertyVariantManager.h          |  2 +-
 .../PropertyEditor/PropertyEditorFactory.cpp  |  2 +-
 .../Views/SampleDesigner/ParticleView.cpp     |  1 -
 Tests/UnitTests/GUI/TestParaCrystalItems.h    |  2 +-
 15 files changed, 63 insertions(+), 86 deletions(-)
 rename GUI/coregui/Models/{GroupProperty.cpp => GroupItemController.cpp} (71%)
 rename GUI/coregui/Models/{GroupProperty.h => GroupItemController.h} (80%)

diff --git a/GUI/coregui/Models/GroupItem.cpp b/GUI/coregui/Models/GroupItem.cpp
index 9b6332396db..570eaa64dce 100644
--- a/GUI/coregui/Models/GroupItem.cpp
+++ b/GUI/coregui/Models/GroupItem.cpp
@@ -16,16 +16,17 @@
 
 #include "GroupItem.h"
 #include "GUIHelpers.h"
+#include "GroupItemController.h"
 #include "ComboProperty.h"
 #include <QDebug>
 #include "GUIHelpers.h"
 
 namespace {
-QVariant createCombo(ObsoleteGroupProperty_t groupProperty)
+QVariant createCombo(const GroupItemController& groupProperty)
 {
     ComboProperty result;
-    result.setValues(groupProperty->itemLabels());
-    result.setCurrentIndex(groupProperty->currentIndex());
+    result.setValues(groupProperty.itemLabels());
+    result.setCurrentIndex(groupProperty.currentIndex());
     return result.variant();
 }
 
@@ -41,45 +42,34 @@ GroupItem::GroupItem() : SessionItem(Constants::GroupItemType)
     mapper()->setOnValueChange([this]() { onValueChange(); });
 }
 
+GroupItem::~GroupItem(){}
+
 void GroupItem::setGroupInfo(const GroupInfo& groupInfo)
 {
-    if (m_groupProperty)
+    if (m_controller)
         throw GUIHelpers::Error("GroupItem::setGroup() -> Error. Attempt to set group twice.");
 
-    ObsoleteGroupProperty_t prop(new GroupProperty);
-    prop->setGroupInfo(groupInfo);
-
-    prop->setGroupItem(this);
-    m_groupProperty = prop;
-
-    updateValue();
+    m_controller.reset(new GroupItemController);
+    m_controller->setGroupInfo(groupInfo);
+    m_controller->setGroupItem(this);
 
-//    setValue(QVariant::fromValue(groupProperty));
+    updateComboValue();
 }
 
 SessionItem* GroupItem::currentItem() const
 {
-//    return value().isValid() ? groupProperty()->currentItem() : nullptr;
-    return groupProperty() ? groupProperty()->currentItem() : nullptr;
+    return m_controller ? m_controller->currentItem() : nullptr;
 }
 
 QString GroupItem::currentType() const
 {
-    return groupProperty()->currentType();
+    return m_controller->currentType();
 }
 
-#include <QDebug>
 SessionItem* GroupItem::setCurrentType(const QString& modelType)
 {
-    qDebug() << "GroupItem::setCurrentType -> current"
-             << groupProperty()->currentType() << groupProperty()->currentIndex();
-    qDebug() << "   setting" << modelType;
-    groupProperty()->setCurrentType(modelType);
-    qDebug() << "GroupItem::setCurrentType -> current"
-             << groupProperty()->currentType() << groupProperty()->currentIndex();
-
-    updateValue();
-
+    m_controller->setCurrentType(modelType);
+    updateComboValue();
     return currentItem();
 }
 
@@ -89,19 +79,9 @@ QStringList GroupItem::translateList(const QStringList& list) const
     return list;
 }
 
-ObsoleteGroupProperty_t GroupItem::groupProperty() const
-{
-    return m_groupProperty;
-//    return value().value<GroupProperty_t>();
-}
-
 SessionItem* GroupItem::getItemOfType(const QString& type)
 {
-    SessionItem* result = groupProperty()->getItemOfType(type);
-
-//    setValue(createCombo(groupProperty()));
-
-    return result;
+    return m_controller->getItemOfType(type);
 }
 
 void GroupItem::onValueChange()
@@ -112,18 +92,18 @@ void GroupItem::onValueChange()
     qDebug() << "GroupItem::onValueChange()";
 
     ComboProperty property = value().value<ComboProperty>();
-    if (property.currentIndex() != m_groupProperty->currentIndex()) {
+    if (property.currentIndex() != m_controller->currentIndex()) {
         qDebug() << "GroupItem::onValueChange() -> setting index" << property.currentIndex();
-        m_groupProperty->setCurrentIndex(property.currentIndex());
+        m_controller->setCurrentIndex(property.currentIndex());
         // because of the delay between ComboProperty change and the change in GroupItem here,
         // we have to emit signals once again to inform other views (i.e. views other than the view
-        // were property was changed
+        // were property was changed)
         emitDataChanged(Qt::DisplayRole | Qt::EditRole);
     }
 }
 
-void GroupItem::updateValue()
+void GroupItem::updateComboValue()
 {
-    setValue(createCombo(groupProperty()));
+    setValue(createCombo(*m_controller.get()));
 }
 
diff --git a/GUI/coregui/Models/GroupItem.h b/GUI/coregui/Models/GroupItem.h
index 125c3788f12..9aafb6b0260 100644
--- a/GUI/coregui/Models/GroupItem.h
+++ b/GUI/coregui/Models/GroupItem.h
@@ -18,17 +18,18 @@
 #define GROUPITEM_H
 
 #include "SessionItem.h"
-#include "GroupProperty.h"
 #include "GroupInfo.h"
 #include <memory>
 
 class GroupInfo;
+class GroupItemController;
 
 class BA_CORE_API_ GroupItem : public SessionItem
 {
 public:
     static const QString T_ITEMS;
     GroupItem();
+    ~GroupItem();
 
     void setGroupInfo(const GroupInfo& groupInfo);
     SessionItem* currentItem() const;
@@ -43,9 +44,8 @@ public:
 
 private:
     void onValueChange();
-    void updateValue();
-    ObsoleteGroupProperty_t groupProperty() const;
-    ObsoleteGroupProperty_t m_groupProperty;
+    void updateComboValue();
+    std::unique_ptr<GroupItemController> m_controller;
 };
 
 #endif // GROUPITEM_H
diff --git a/GUI/coregui/Models/GroupProperty.cpp b/GUI/coregui/Models/GroupItemController.cpp
similarity index 71%
rename from GUI/coregui/Models/GroupProperty.cpp
rename to GUI/coregui/Models/GroupItemController.cpp
index 0c76bdd2449..030ee7ff4c5 100644
--- a/GUI/coregui/Models/GroupProperty.cpp
+++ b/GUI/coregui/Models/GroupItemController.cpp
@@ -2,8 +2,8 @@
 //
 //  BornAgain: simulate and fit scattering at grazing incidence
 //
-//! @file      GUI/coregui/Models/GroupProperty.cpp
-//! @brief     Implements class GroupProperty
+//! @file      GUI/coregui/Models/GroupItemController.cpp
+//! @brief     Implements class GroupItemController
 //!
 //! @homepage  http://www.bornagainproject.org
 //! @license   GNU General Public License v3 or higher (see COPYING)
@@ -14,20 +14,20 @@
 //
 // ************************************************************************** //
 
-#include "GroupProperty.h"
+#include "GroupItemController.h"
 #include "ItemFactory.h"
 
-GroupProperty::GroupProperty()
+GroupItemController::GroupItemController()
     : m_groupItem(nullptr)
 {
 }
 
-SessionItem* GroupProperty::currentItem()
+SessionItem* GroupItemController::currentItem()
 {
     return m_groupItem ? m_groupItem->getChildOfType(currentType()) : nullptr;
 }
 
-void GroupProperty::setGroupItem(SessionItem* groupItem)
+void GroupItemController::setGroupItem(SessionItem* groupItem)
 {
     Q_ASSERT(groupItem);
     m_groupItem = groupItem;
@@ -35,12 +35,12 @@ void GroupProperty::setGroupItem(SessionItem* groupItem)
     m_groupItem->insertItem(-1, item);
 }
 
-QString GroupProperty::currentType() const
+QString GroupItemController::currentType() const
 {
     return m_current_type;
 }
 
-void GroupProperty::setCurrentType(const QString& type)
+void GroupItemController::setCurrentType(const QString& type)
 {
     if (type == currentType())
         return;
@@ -64,7 +64,7 @@ void GroupProperty::setCurrentType(const QString& type)
     }
 }
 
-void GroupProperty::setCurrentTypeName(const QString& type)
+void GroupItemController::setCurrentTypeName(const QString& type)
 {
     if (type == currentType())
         return;
@@ -77,7 +77,7 @@ void GroupProperty::setCurrentTypeName(const QString& type)
     }
 }
 
-SessionItem* GroupProperty::getItemOfType(const QString& type)
+SessionItem* GroupItemController::getItemOfType(const QString& type)
 {
     if (m_groupItem) {
         if (auto item = m_groupItem->getChildOfType(type)) {
@@ -96,53 +96,53 @@ SessionItem* GroupProperty::getItemOfType(const QString& type)
     return nullptr;
 }
 
-int GroupProperty::currentIndex() const
+int GroupItemController::currentIndex() const
 {
     return toIndex(m_current_type);
 }
 
-void GroupProperty::setCurrentIndex(int index)
+void GroupItemController::setCurrentIndex(int index)
 {
     setCurrentType(toString(index));
 }
 
-QString GroupProperty::currentLabel() const
+QString GroupItemController::currentLabel() const
 {
     return itemLabels().at(currentIndex());
 }
 
-QStringList GroupProperty::itemTypes() const
+QStringList GroupItemController::itemTypes() const
 {
     return m_groupInfo.itemTypes();
 }
 
-QStringList GroupProperty::itemLabels() const
+QStringList GroupItemController::itemLabels() const
 {
     return m_groupInfo.itemLabels();
 }
 
-void GroupProperty::setGroupInfo(GroupInfo groupInfo)
+void GroupItemController::setGroupInfo(GroupInfo groupInfo)
 {
     m_groupInfo = std::move(groupInfo);
     setCurrentType(m_groupInfo.defaultType());
 }
 
-SessionItem* GroupProperty::addItem(const QString& item_type)
+SessionItem* GroupItemController::addItem(const QString& item_type)
 {
     return ItemFactory::createItem(item_type);
 }
 
-SessionItem* GroupProperty::createCorrespondingItem()
+SessionItem* GroupItemController::createCorrespondingItem()
 {
     return addItem(currentType());
 }
 
-int GroupProperty::toIndex(const QString& type) const
+int GroupItemController::toIndex(const QString& type) const
 {
     return itemTypes().indexOf(type);
 }
 
-QString GroupProperty::toString(int index) const
+QString GroupItemController::toString(int index) const
 {
     return itemTypes().at(index);
 }
diff --git a/GUI/coregui/Models/GroupProperty.h b/GUI/coregui/Models/GroupItemController.h
similarity index 80%
rename from GUI/coregui/Models/GroupProperty.h
rename to GUI/coregui/Models/GroupItemController.h
index 6b0a289c6a6..a7d78f45a82 100644
--- a/GUI/coregui/Models/GroupProperty.h
+++ b/GUI/coregui/Models/GroupItemController.h
@@ -2,8 +2,8 @@
 //
 //  BornAgain: simulate and fit scattering at grazing incidence
 //
-//! @file      GUI/coregui/Models/GroupProperty.h
-//! @brief     Defines class GroupProperty
+//! @file      GUI/coregui/Models/GroupItemController.h
+//! @brief     Defines class GroupItemController
 //!
 //! @homepage  http://www.bornagainproject.org
 //! @license   GNU General Public License v3 or higher (see COPYING)
@@ -14,8 +14,8 @@
 //
 // ************************************************************************** //
 
-#ifndef GROUPPROPERTY_H
-#define GROUPPROPERTY_H
+#ifndef GROUPITEMCONTROLLER_H
+#define GROUPITEMCONTROLLER_H
 
 #include "GroupInfo.h"
 #include <QSharedPointer>
@@ -24,13 +24,10 @@
 class SessionItem;
 
 //! Provides logic for manipulating items belonging to GroupItem parent.
-//! Its construction is handled by a GroupPropertyRegistry object.
 
-class BA_CORE_API_ GroupProperty
+class BA_CORE_API_ GroupItemController
 {
 public:
-    friend class GroupPropertyRegistry;
-
     void setGroupItem(SessionItem* groupItem);
 
     SessionItem* currentItem();
@@ -49,7 +46,7 @@ public:
     QStringList itemTypes() const;
     QStringList itemLabels() const;
 
-    GroupProperty();
+    GroupItemController();
     void setGroupInfo(GroupInfo groupInfo);
 
 private:
@@ -64,7 +61,8 @@ private:
     GroupInfo m_groupInfo;
 };
 
-typedef QSharedPointer<GroupProperty> ObsoleteGroupProperty_t;
+// TODO Remove simultaneously with qtpropertybrowserframework
+typedef QSharedPointer<GroupItemController> ObsoleteGroupProperty_t;
 Q_DECLARE_METATYPE(ObsoleteGroupProperty_t)
 
-#endif // GROUPPROPERTY_H
+#endif // GROUPITEMCONTROLLER_H
diff --git a/GUI/coregui/Models/GroupPropertyRegistry.h b/GUI/coregui/Models/GroupPropertyRegistry.h
index 57d3f84873b..67237b5b12a 100644
--- a/GUI/coregui/Models/GroupPropertyRegistry.h
+++ b/GUI/coregui/Models/GroupPropertyRegistry.h
@@ -17,7 +17,7 @@
 #ifndef GROUPPROPERTYREGISTRY_H
 #define GROUPPROPERTYREGISTRY_H
 
-#include "GroupProperty.h"
+#include "GroupItemController.h"
 #include "GroupInfoCatalogue.h"
 #include "item_constants.h"
 
diff --git a/GUI/coregui/Models/SessionModelDelegate.h b/GUI/coregui/Models/SessionModelDelegate.h
index ec02ac81fa1..82f68d149ae 100644
--- a/GUI/coregui/Models/SessionModelDelegate.h
+++ b/GUI/coregui/Models/SessionModelDelegate.h
@@ -18,7 +18,6 @@
 #define SESSIONMODELDELEGATE_H
 
 #include "WinDllMacros.h"
-#include "GroupProperty.h"
 #include <QStyledItemDelegate>
 
 //! The SessionModelDelegate class presents the content of SessionModel items in
diff --git a/GUI/coregui/Models/SessionXML.cpp b/GUI/coregui/Models/SessionXML.cpp
index efdd1559bd5..7d6defcc325 100644
--- a/GUI/coregui/Models/SessionXML.cpp
+++ b/GUI/coregui/Models/SessionXML.cpp
@@ -20,6 +20,7 @@
 #include "GroupItem.h"
 #include "ItemFactory.h"
 #include "ExternalProperty.h"
+#include "GroupItemController.h"
 #include "SessionModel.h"
 #include "WarningMessageService.h"
 #include <QtCore/QXmlStreamWriter>
diff --git a/GUI/coregui/Views/PropertyEditor/CustomEditors.cpp b/GUI/coregui/Views/PropertyEditor/CustomEditors.cpp
index 97f2e5c016e..5b2085fc9d2 100644
--- a/GUI/coregui/Views/PropertyEditor/CustomEditors.cpp
+++ b/GUI/coregui/Views/PropertyEditor/CustomEditors.cpp
@@ -17,7 +17,7 @@
 #include "CustomEditors.h"
 #include "CustomEventFilters.h"
 #include "ExternalProperty.h"
-#include "GroupProperty.h"
+#include "GroupItemController.h"
 #include "ComboProperty.h"
 #include "ObsoleteColorProperty.h"
 #include "MaterialItemUtils.h"
diff --git a/GUI/coregui/Views/PropertyEditor/ObsoleteComponentEditor.cpp b/GUI/coregui/Views/PropertyEditor/ObsoleteComponentEditor.cpp
index 440e975566c..427d608dfd8 100644
--- a/GUI/coregui/Views/PropertyEditor/ObsoleteComponentEditor.cpp
+++ b/GUI/coregui/Views/PropertyEditor/ObsoleteComponentEditor.cpp
@@ -16,7 +16,7 @@
 #include "ObsoleteComponentEditor.h"
 #include "ObsoleteComponentEditorPrivate.h"
 #include "GroupItem.h"
-#include "GroupProperty.h"
+#include "GroupItemController.h"
 #include "SessionItem.h"
 #include "SessionModel.h"
 #include "qtpropertybrowser.h"
diff --git a/GUI/coregui/Views/PropertyEditor/ObsoletePropertyBrowserUtils.h b/GUI/coregui/Views/PropertyEditor/ObsoletePropertyBrowserUtils.h
index f0a6c68cbf0..9d082894770 100644
--- a/GUI/coregui/Views/PropertyEditor/ObsoletePropertyBrowserUtils.h
+++ b/GUI/coregui/Views/PropertyEditor/ObsoletePropertyBrowserUtils.h
@@ -21,7 +21,7 @@
 #include "ExternalProperty.h"
 #include "ObsoleteColorProperty.h"
 #include "ObsoleteScientificDoubleProperty.h"
-#include "GroupProperty.h"
+#include "GroupItemController.h"
 #include "ComboProperty.h"
 
 class QLabel;
diff --git a/GUI/coregui/Views/PropertyEditor/ObsoletePropertyVariantFactory.h b/GUI/coregui/Views/PropertyEditor/ObsoletePropertyVariantFactory.h
index d6b894b6695..e37002e0da8 100644
--- a/GUI/coregui/Views/PropertyEditor/ObsoletePropertyVariantFactory.h
+++ b/GUI/coregui/Views/PropertyEditor/ObsoletePropertyVariantFactory.h
@@ -19,7 +19,7 @@
 
 //! collection of classes extending QtPropertyBrowser functionality
 
-#include "GroupProperty.h"
+#include "GroupItemController.h"
 #include <QtVariantEditorFactory>
 
 class ObsoleteMaterialPropertyEdit;
diff --git a/GUI/coregui/Views/PropertyEditor/ObsoletePropertyVariantManager.h b/GUI/coregui/Views/PropertyEditor/ObsoletePropertyVariantManager.h
index edfecc75f5f..04c7b71aa40 100644
--- a/GUI/coregui/Views/PropertyEditor/ObsoletePropertyVariantManager.h
+++ b/GUI/coregui/Views/PropertyEditor/ObsoletePropertyVariantManager.h
@@ -21,7 +21,7 @@
 
 #include "ObsoleteColorProperty.h"
 #include "ComboProperty.h"
-#include "GroupProperty.h"
+#include "GroupItemController.h"
 #include "ExternalProperty.h"
 #include "ObsoleteScientificDoubleProperty.h"
 #include <QtVariantPropertyManager>
diff --git a/GUI/coregui/Views/PropertyEditor/PropertyEditorFactory.cpp b/GUI/coregui/Views/PropertyEditor/PropertyEditorFactory.cpp
index 95fe158d55e..0039b950468 100644
--- a/GUI/coregui/Views/PropertyEditor/PropertyEditorFactory.cpp
+++ b/GUI/coregui/Views/PropertyEditor/PropertyEditorFactory.cpp
@@ -18,7 +18,7 @@
 #include "SessionItem.h"
 #include "RealLimits.h"
 #include "ExternalProperty.h"
-#include "GroupProperty.h"
+#include "GroupItemController.h"
 #include "CustomEditors.h"
 #include "ComboProperty.h"
 #include "CustomEventFilters.h"
diff --git a/GUI/coregui/Views/SampleDesigner/ParticleView.cpp b/GUI/coregui/Views/SampleDesigner/ParticleView.cpp
index b5e40323699..99988fe0c04 100644
--- a/GUI/coregui/Views/SampleDesigner/ParticleView.cpp
+++ b/GUI/coregui/Views/SampleDesigner/ParticleView.cpp
@@ -17,7 +17,6 @@
 #include "ParticleView.h"
 #include "GUIHelpers.h"
 #include "GroupItem.h"
-#include "GroupProperty.h"
 #include "ParticleItem.h"
 #include "FormFactorItems.h"
 #include <QObject>
diff --git a/Tests/UnitTests/GUI/TestParaCrystalItems.h b/Tests/UnitTests/GUI/TestParaCrystalItems.h
index 19da5800620..c6afd008803 100644
--- a/Tests/UnitTests/GUI/TestParaCrystalItems.h
+++ b/Tests/UnitTests/GUI/TestParaCrystalItems.h
@@ -1,6 +1,5 @@
 #include <QtTest>
 #include "InterferenceFunctionItems.h"
-#include "GroupProperty.h"
 #include "InterferenceFunction2DParaCrystal.h"
 #include "FTDistributions2D.h"
 #include "FTDistributionItems.h"
@@ -9,6 +8,7 @@
 #include "Lattice2DItems.h"
 #include "SampleModel.h"
 #include "Units.h"
+#include "item_constants.h"
 
 class TestParaCrystalItems : public QObject {
     Q_OBJECT
-- 
GitLab