From f1b573023f50d0af357d5ae153ccf1085e575f6c Mon Sep 17 00:00:00 2001 From: Gennady Pospelov <g.pospelov@fz-juelich.de> Date: Wed, 6 Dec 2017 10:03:21 +0100 Subject: [PATCH] Preparation for hiding GroupProperty in GroupItem --- GUI/coregui/Models/GroupInfo.cpp | 5 +++++ GUI/coregui/Models/GroupInfo.h | 2 ++ GUI/coregui/Models/GroupItem.cpp | 22 ++++++++++++++++++-- GUI/coregui/Models/GroupItem.h | 13 +++++++++++- GUI/coregui/Models/GroupProperty.h | 5 +++-- GUI/coregui/Models/GroupPropertyRegistry.cpp | 5 +++++ GUI/coregui/Models/GroupPropertyRegistry.h | 1 + GUI/coregui/Models/SessionItem.cpp | 18 ++++++++-------- GUI/coregui/Models/SessionItem.h | 4 ++-- GUI/coregui/Models/SessionXML.cpp | 3 +-- 10 files changed, 60 insertions(+), 18 deletions(-) diff --git a/GUI/coregui/Models/GroupInfo.cpp b/GUI/coregui/Models/GroupInfo.cpp index 89be911f8fa..66877e8517b 100644 --- a/GUI/coregui/Models/GroupInfo.cpp +++ b/GUI/coregui/Models/GroupInfo.cpp @@ -76,6 +76,11 @@ QStringList GroupInfo::itemLabels() const } +bool GroupInfo::isValid() +{ + return !m_groupType.isEmpty(); +} + bool GroupInfo::containsType(const QString& itemType) const { for (auto& pair : m_info) diff --git a/GUI/coregui/Models/GroupInfo.h b/GUI/coregui/Models/GroupInfo.h index 8e59cb3485d..55b677957f7 100644 --- a/GUI/coregui/Models/GroupInfo.h +++ b/GUI/coregui/Models/GroupInfo.h @@ -40,6 +40,8 @@ public: QStringList itemLabels() const; + bool isValid(); + private: struct TypeAndLabel { QString m_itemType; diff --git a/GUI/coregui/Models/GroupItem.cpp b/GUI/coregui/Models/GroupItem.cpp index bd5a66db178..b908a350629 100644 --- a/GUI/coregui/Models/GroupItem.cpp +++ b/GUI/coregui/Models/GroupItem.cpp @@ -34,9 +34,16 @@ void GroupItem::setGroup(GroupProperty_t group) setValue(QVariant::fromValue(group)); } -GroupProperty_t GroupItem::groupProperty() const +void GroupItem::setGroupInfo(const GroupInfo& groupInfo) { - return value().value<GroupProperty_t>(); + if (m_groupInfo.isValid()) + throw GUIHelpers::Error("GroupItem::setGroup() -> Error. Attempt to set GroupInfo twice."); + + m_groupInfo = groupInfo; + + GroupProperty_t groupProperty(new GroupProperty); + groupProperty->setGroupInfo(groupInfo); + setGroup(groupProperty); } SessionItem* GroupItem::currentItem() const @@ -62,3 +69,14 @@ QStringList GroupItem::translateList(const QStringList& list) const // we do not add here the name of itself return list; } + +GroupProperty_t GroupItem::groupProperty() const +{ + return value().value<GroupProperty_t>(); +} + +SessionItem* GroupItem::getItemOfType(const QString& type) +{ + return groupProperty()->getItemOfType(type); +} + diff --git a/GUI/coregui/Models/GroupItem.h b/GUI/coregui/Models/GroupItem.h index 4aec85c684c..9ea19d3e589 100644 --- a/GUI/coregui/Models/GroupItem.h +++ b/GUI/coregui/Models/GroupItem.h @@ -19,6 +19,10 @@ #include "SessionItem.h" #include "GroupProperty.h" +#include "GroupInfo.h" +#include <memory> + +class GroupInfo; class BA_CORE_API_ GroupItem : public SessionItem { @@ -27,7 +31,7 @@ public: GroupItem(); void setGroup(GroupProperty_t groupProperty); - GroupProperty_t groupProperty() const; + void setGroupInfo(const GroupInfo& groupInfo); SessionItem* currentItem() const; QString currentType() const; @@ -35,6 +39,13 @@ public: SessionItem* setCurrentType(const QString& modelType); QStringList translateList(const QStringList& list) const; + + SessionItem* getItemOfType(const QString& type); + +private: + GroupProperty_t groupProperty() const; + + GroupInfo m_groupInfo; }; #endif // GROUPITEM_H diff --git a/GUI/coregui/Models/GroupProperty.h b/GUI/coregui/Models/GroupProperty.h index 5bccf99ba2c..ec044fb3294 100644 --- a/GUI/coregui/Models/GroupProperty.h +++ b/GUI/coregui/Models/GroupProperty.h @@ -49,10 +49,11 @@ public: QStringList itemTypes() const; QStringList itemLabels() const; -private: GroupProperty(); - void setGroupInfo(GroupInfo groupInfo); + +private: + SessionItem* addItem(const QString& item_type); SessionItem* createCorrespondingItem(); int toIndex(const QString& type) const; diff --git a/GUI/coregui/Models/GroupPropertyRegistry.cpp b/GUI/coregui/Models/GroupPropertyRegistry.cpp index 7740d4b70b6..c2104924064 100644 --- a/GUI/coregui/Models/GroupPropertyRegistry.cpp +++ b/GUI/coregui/Models/GroupPropertyRegistry.cpp @@ -29,6 +29,11 @@ GroupProperty_t GroupPropertyRegistry::createGroupProperty(const Constants::Mode return result; } +GroupInfo GroupPropertyRegistry::groupInfo(const Constants::ModelType& group_type) +{ + return catalogue().groupInfo(group_type); +} + const GroupInfoCatalogue& GroupPropertyRegistry::catalogue() { static GroupInfoCatalogue s_catalogue = GroupInfoCatalogue(); diff --git a/GUI/coregui/Models/GroupPropertyRegistry.h b/GUI/coregui/Models/GroupPropertyRegistry.h index 9c4f3230c8f..9350aaa602c 100644 --- a/GUI/coregui/Models/GroupPropertyRegistry.h +++ b/GUI/coregui/Models/GroupPropertyRegistry.h @@ -30,6 +30,7 @@ public: static GroupProperty_t createGroupProperty(const Constants::ModelType& group_type); + static GroupInfo groupInfo(const Constants::ModelType& group_type); private: static const GroupInfoCatalogue& catalogue(); }; diff --git a/GUI/coregui/Models/SessionItem.cpp b/GUI/coregui/Models/SessionItem.cpp index e5d3ce22279..fcac2af5e30 100644 --- a/GUI/coregui/Models/SessionItem.cpp +++ b/GUI/coregui/Models/SessionItem.cpp @@ -352,37 +352,37 @@ void SessionItem::setItemValue(const QString& tag, const QVariant& variant) } //! Creates new group item and register new tag, returns GroupItem. -SessionItem* SessionItem::addGroupProperty(const QString& groupName, const QString& groupType) +SessionItem* SessionItem::addGroupProperty(const QString& groupTag, const QString& groupType) { SessionItem* result(0); if(GroupPropertyRegistry::isValidGroup(groupType)) { // create group item - GroupProperty_t group_property = GroupPropertyRegistry::createGroupProperty(groupType); + GroupInfo groupInfo = GroupPropertyRegistry::groupInfo(groupType); GroupItem* groupItem = dynamic_cast<GroupItem*>( ItemFactory::createItem(Constants::GroupItemType)); Q_ASSERT(groupItem); - groupItem->setGroup(group_property); - registerTag(groupName, 1, 1, QStringList() << Constants::GroupItemType); + groupItem->setGroupInfo(groupInfo); + registerTag(groupTag, 1, 1, QStringList() << Constants::GroupItemType); result = groupItem; } else { // create single item - registerTag(groupName, 1, 1, QStringList() << groupType); + registerTag(groupTag, 1, 1, QStringList() << groupType); result = ItemFactory::createItem(groupType); } Q_ASSERT(result); - result->setDisplayName(groupName); - if(!insertItem(0, result, groupName)) { + result->setDisplayName(groupTag); + if(!insertItem(0, result, groupTag)) { throw GUIHelpers::Error("SessionItem::addGroupProperty -> Error. Can't insert group item"); } return result; } //! Set the current type of group item. -SessionItem* SessionItem::setGroupProperty(const QString& groupName, const QString& value) const +SessionItem* SessionItem::setGroupProperty(const QString& groupTag, const QString& modelType) const { - return item<GroupItem>(groupName).setCurrentType(value); + return item<GroupItem>(groupTag).setCurrentType(modelType); } //! Access subitem of group item. diff --git a/GUI/coregui/Models/SessionItem.h b/GUI/coregui/Models/SessionItem.h index eb092673366..f7f0aa76967 100644 --- a/GUI/coregui/Models/SessionItem.h +++ b/GUI/coregui/Models/SessionItem.h @@ -89,8 +89,8 @@ public: void setItemValue(const QString& tag, const QVariant& variant); // convenience functions for groups - SessionItem* addGroupProperty(const QString& groupName, const QString& groupType); - SessionItem* setGroupProperty(const QString& name, const QString& value) const; + SessionItem* addGroupProperty(const QString& groupTag, const QString& groupType); + SessionItem* setGroupProperty(const QString& groupTag, const QString& modelType) const; SessionItem* getGroupItem(const QString& groupName) const; template<typename T> T& groupItem(const QString& groupName) const; diff --git a/GUI/coregui/Models/SessionXML.cpp b/GUI/coregui/Models/SessionXML.cpp index e7971e92e19..5a839b51108 100644 --- a/GUI/coregui/Models/SessionXML.cpp +++ b/GUI/coregui/Models/SessionXML.cpp @@ -281,8 +281,7 @@ SessionItem* createItem(SessionItem* parent, const QString& modelType, const QSt if (parent->modelType() == Constants::GroupItemType) { result = parent->parent() ->item<GroupItem>(parent->parent()->tagFromItem(parent)) - .groupProperty() - ->getItemOfType(modelType); + .getItemOfType(modelType); } else { SessionTagInfo info = parent->getTagInfo(tag); if (info.min == 1 && info.max == 1 && info.childCount == 1) -- GitLab