diff --git a/GUI/coregui/Models/GroupItem.cpp b/GUI/coregui/Models/GroupItem.cpp index 0d9bbaf6decb2e738360a3d44c548f73e77475c2..ec92c13c1205b622c20e5bc4720dcbc7af629eec 100644 --- a/GUI/coregui/Models/GroupItem.cpp +++ b/GUI/coregui/Models/GroupItem.cpp @@ -20,17 +20,6 @@ #include "ComboProperty.h" #include "GUIHelpers.h" -namespace { -QVariant createCombo(const GroupItemController& groupProperty) -{ - ComboProperty result; - result.setValues(groupProperty.itemLabels()); - result.setCurrentIndex(groupProperty.currentIndex()); - return result.variant(); -} - -} - const QString GroupItem::T_ITEMS = "Item tag"; GroupItem::GroupItem() : SessionItem(Constants::GroupItemType) @@ -41,17 +30,14 @@ GroupItem::GroupItem() : SessionItem(Constants::GroupItemType) mapper()->setOnValueChange([this]() { onValueChange(); }); } -GroupItem::~GroupItem(){} +GroupItem::~GroupItem() = default; void GroupItem::setGroupInfo(const GroupInfo& groupInfo) { if (m_controller) throw GUIHelpers::Error("GroupItem::setGroup() -> Error. Attempt to set group twice."); - m_controller.reset(new GroupItemController); - m_controller->setGroupInfo(groupInfo); - m_controller->setGroupItem(this); - + m_controller = std::make_unique<GroupItemController>(this, groupInfo); updateComboValue(); } @@ -100,6 +86,6 @@ void GroupItem::onValueChange() void GroupItem::updateComboValue() { - setValue(createCombo(*m_controller.get())); + setValue(m_controller->createCombo()); } diff --git a/GUI/coregui/Models/GroupItemController.cpp b/GUI/coregui/Models/GroupItemController.cpp index 030ee7ff4c5beadea7739fd4e76d304fa7e7b598..42310cfba023e03df7ee381edab9c18bb66b981f 100644 --- a/GUI/coregui/Models/GroupItemController.cpp +++ b/GUI/coregui/Models/GroupItemController.cpp @@ -16,10 +16,14 @@ #include "GroupItemController.h" #include "ItemFactory.h" +#include "ComboProperty.h" -GroupItemController::GroupItemController() - : m_groupItem(nullptr) +GroupItemController::GroupItemController(SessionItem* groupItem, GroupInfo groupInfo) + : m_groupItem(groupItem) + , m_groupInfo(groupInfo) { + m_current_type = m_groupInfo.defaultType(); + m_groupItem->insertItem(-1, createCorrespondingItem()); } SessionItem* GroupItemController::currentItem() @@ -27,14 +31,6 @@ SessionItem* GroupItemController::currentItem() return m_groupItem ? m_groupItem->getChildOfType(currentType()) : nullptr; } -void GroupItemController::setGroupItem(SessionItem* groupItem) -{ - Q_ASSERT(groupItem); - m_groupItem = groupItem; - SessionItem* item = createCorrespondingItem(); - m_groupItem->insertItem(-1, item); -} - QString GroupItemController::currentType() const { return m_current_type; @@ -45,7 +41,7 @@ void GroupItemController::setCurrentType(const QString& type) if (type == currentType()) return; - SessionItem* prevItem = currentItem(); + auto prevItem = currentItem(); m_current_type = type; if (m_groupItem) { @@ -53,29 +49,17 @@ void GroupItemController::setCurrentType(const QString& type) item->setVisible(true); item->setEnabled(true); } else { - SessionItem* new_item = createCorrespondingItem(); - m_groupItem->insertItem(-1, new_item); + m_groupItem->insertItem(-1, createCorrespondingItem()); } if (prevItem) { prevItem->setVisible(false); prevItem->setEnabled(false); } - //m_groupItem->emitDataChanged(); } } -void GroupItemController::setCurrentTypeName(const QString& type) -{ - if (type == currentType()) - return; - - SessionItem* prevItem = currentItem(); - m_current_type = type; - if (prevItem) { - prevItem->setVisible(false); - prevItem->setEnabled(false); - } -} +//! Returns item of give type. If it doesn't exist, it will be created. +//! Method do _not_ change current item. SessionItem* GroupItemController::getItemOfType(const QString& type) { @@ -89,7 +73,6 @@ SessionItem* GroupItemController::getItemOfType(const QString& type) new_item->setEnabled(false); } m_groupItem->insertItem(-1, new_item); - //m_groupItem->emitDataChanged(); return new_item; } } @@ -121,10 +104,12 @@ QStringList GroupItemController::itemLabels() const return m_groupInfo.itemLabels(); } -void GroupItemController::setGroupInfo(GroupInfo groupInfo) +QVariant GroupItemController::createCombo() const { - m_groupInfo = std::move(groupInfo); - setCurrentType(m_groupInfo.defaultType()); + ComboProperty result; + result.setValues(itemLabels()); + result.setCurrentIndex(currentIndex()); + return result.variant(); } SessionItem* GroupItemController::addItem(const QString& item_type) diff --git a/GUI/coregui/Models/GroupItemController.h b/GUI/coregui/Models/GroupItemController.h index a7d78f45a82efa8868b6de076b856e47ee0c15ab..b2055b688c8f36d9fbc5b18c104b1bc4d673f112 100644 --- a/GUI/coregui/Models/GroupItemController.h +++ b/GUI/coregui/Models/GroupItemController.h @@ -18,8 +18,8 @@ #define GROUPITEMCONTROLLER_H #include "GroupInfo.h" -#include <QSharedPointer> #include <QStringList> +#include <QVariant> class SessionItem; @@ -28,26 +28,27 @@ class SessionItem; class BA_CORE_API_ GroupItemController { public: - void setGroupItem(SessionItem* groupItem); + GroupItemController(SessionItem* groupItem, GroupInfo groupInfo); SessionItem* currentItem(); QString currentType() const; void setCurrentType(const QString& type); - void setCurrentTypeName(const QString& type); SessionItem* getItemOfType(const QString& type); int currentIndex() const; void setCurrentIndex(int index); + // FIXME remove after qtpropertybrowserframework removal QString currentLabel() const; QStringList itemTypes() const; + + // FIXME make private after qtpropertybrowserframework removal QStringList itemLabels() const; - GroupItemController(); - void setGroupInfo(GroupInfo groupInfo); + QVariant createCombo() const; private: @@ -62,6 +63,7 @@ private: }; // TODO Remove simultaneously with qtpropertybrowserframework +#include <QSharedPointer> typedef QSharedPointer<GroupItemController> ObsoleteGroupProperty_t; Q_DECLARE_METATYPE(ObsoleteGroupProperty_t) diff --git a/GUI/coregui/Models/SessionXML.cpp b/GUI/coregui/Models/SessionXML.cpp index 18116c7530e81b9b28fda65cfb7928493fa29435..6315bd32277dcfe715fc15cd79a4dc108f7172cf 100644 --- a/GUI/coregui/Models/SessionXML.cpp +++ b/GUI/coregui/Models/SessionXML.cpp @@ -38,7 +38,7 @@ const QString qstring_type_name = "QString"; void report_error(WarningMessageService* messageService, SessionItem* item, const QString& error_type, const QString& message); -SessionItem* createItem(SessionItem* parent, const QString& modelType, const QString& tag); +SessionItem* createItem(SessionItem* item, const QString& modelType, const QString& tag); } void SessionXML::writeTo(QXmlStreamWriter* writer, SessionItem* parent) @@ -255,20 +255,19 @@ void report_error(WarningMessageService* messageService, SessionItem* item, } } -SessionItem* createItem(SessionItem* parent, const QString& modelType, const QString& tag) +SessionItem* createItem(SessionItem* item, const QString& modelType, const QString& tag) { SessionItem* result(nullptr); - if (parent->modelType() == Constants::GroupItemType) { - result = parent->parent() - ->item<GroupItem>(parent->parent()->tagFromItem(parent)) - .getItemOfType(modelType); + if (item->modelType() == Constants::GroupItemType) { + if (auto groupItem = dynamic_cast<GroupItem*>(item)) + result = groupItem->getItemOfType(modelType); } else { - SessionTagInfo info = parent->getTagInfo(tag); + SessionTagInfo info = item->getTagInfo(tag); if (info.min == 1 && info.max == 1 && info.childCount == 1) - result = parent->getItem(tag); + result = item->getItem(tag); else - result = parent->model()->insertNewItem(modelType, parent->index(), -1, tag); + result = item->model()->insertNewItem(modelType, item->index(), -1, tag); } Q_ASSERT(result); return result; diff --git a/GUI/coregui/Views/PropertyEditor/CustomEditors.h b/GUI/coregui/Views/PropertyEditor/CustomEditors.h index bf2f143b47bbf6fe65cc47ffe0cc265125260daa..c10f1a8288826798fe1aed9dc856a6b40a20925a 100644 --- a/GUI/coregui/Views/PropertyEditor/CustomEditors.h +++ b/GUI/coregui/Views/PropertyEditor/CustomEditors.h @@ -138,5 +138,4 @@ private: QCheckBox *m_checkBox; }; - #endif // CUSTOMEDITORS_H