From dadaea43dcf3485b2035fc7ebad8e9df5ef66cbb Mon Sep 17 00:00:00 2001 From: Gennady Pospelov <g.pospelov@fz-juelich.de> Date: Fri, 17 Nov 2017 12:44:59 +0100 Subject: [PATCH] New method in ComponentUtils to return list of children for property editors. --- .../Views/PropertyEditor/ComponentUtils.cpp | 29 +++++++++++++- .../Views/PropertyEditor/ComponentUtils.h | 6 +++ .../PropertyEditor/TestComponentView.cpp | 1 + Tests/UnitTests/GUI/TestComponentUtils.h | 40 +++++++++++++++++++ Tests/UnitTests/GUI/TestGUI.cpp | 2 + 5 files changed, 77 insertions(+), 1 deletion(-) create mode 100644 Tests/UnitTests/GUI/TestComponentUtils.h diff --git a/GUI/coregui/Views/PropertyEditor/ComponentUtils.cpp b/GUI/coregui/Views/PropertyEditor/ComponentUtils.cpp index dc25924c587..7f259000894 100644 --- a/GUI/coregui/Views/PropertyEditor/ComponentUtils.cpp +++ b/GUI/coregui/Views/PropertyEditor/ComponentUtils.cpp @@ -16,11 +16,38 @@ #include "ComponentUtils.h" #include "item_constants.h" +#include "SessionItem.h" QStringList ComponentUtils::propertyRelatedTypes() { QStringList result = QStringList() << Constants::PropertyType << Constants::GroupItemType << Constants::VectorType << Constants::BasicAxisType - << Constants::AmplitudeAxisType; + << Constants::AmplitudeAxisType + << Constants::MaterialDataType; + return result; +} + +QList<SessionItem*> ComponentUtils::componentItems(const SessionItem& item) +{ + static QStringList propertyRelated = ComponentUtils::propertyRelatedTypes(); + + QList<SessionItem*> result; + + for (auto child : item.children()) { + if (!child->isVisible()) + continue; + + if (propertyRelated.contains(child->modelType())) + result.append(child); + + if (child->modelType() == Constants::GroupItemType) { + for (auto grandchild : child->children()) { + if (grandchild->isVisible()) + result+= ComponentUtils::componentItems(*grandchild); + } + } + + } + return result; } diff --git a/GUI/coregui/Views/PropertyEditor/ComponentUtils.h b/GUI/coregui/Views/PropertyEditor/ComponentUtils.h index 42fb0551e4a..8cce7fa11f1 100644 --- a/GUI/coregui/Views/PropertyEditor/ComponentUtils.h +++ b/GUI/coregui/Views/PropertyEditor/ComponentUtils.h @@ -18,8 +18,11 @@ #define COMPONENTUTILS_H #include "WinDllMacros.h" +#include <QList> #include <QStringList> +class SessionItem; + //! Contains collection of utility functions to support editing of SessionItem's components. namespace ComponentUtils @@ -28,6 +31,9 @@ namespace ComponentUtils //! Returns list of strings representing modelTypes suitable for editing in component editors. BA_CORE_API_ QStringList propertyRelatedTypes(); +//! Returns list of SessionItem's children suitable for editing in property editors. +BA_CORE_API_ QList<SessionItem*> componentItems(const SessionItem& item); + } #endif diff --git a/GUI/coregui/Views/PropertyEditor/TestComponentView.cpp b/GUI/coregui/Views/PropertyEditor/TestComponentView.cpp index 42835ec051b..54036eb08de 100644 --- a/GUI/coregui/Views/PropertyEditor/TestComponentView.cpp +++ b/GUI/coregui/Views/PropertyEditor/TestComponentView.cpp @@ -121,6 +121,7 @@ void TestComponentView::init_source() GUIObjectBuilder guiBuilder; guiBuilder.populateSampleModel(m_sourceModel, *sample); m_sourceModel->insertNewItem(Constants::VectorType); + m_sourceModel->insertNewItem(Constants::BeamType); // SessionItem* multilayer = m_sourceModel->insertNewItem(Constants::MultiLayerType); // m_sourceModel->insertNewItem(Constants::LayerType, m_sourceModel->indexOfItem(multilayer)); diff --git a/Tests/UnitTests/GUI/TestComponentUtils.h b/Tests/UnitTests/GUI/TestComponentUtils.h new file mode 100644 index 00000000000..b2b075f897e --- /dev/null +++ b/Tests/UnitTests/GUI/TestComponentUtils.h @@ -0,0 +1,40 @@ +#include <QtTest> +#include "ComponentUtils.h" +#include "SessionItem.h" +#include "SessionModel.h" +#include "item_constants.h" +#include "ParticleItem.h" +#include "FormFactorItems.h" +#include <QDebug> + +class TestComponentUtils : public QObject +{ + Q_OBJECT +public: + +private slots: + void test_componentItems(); +}; + +//! Testing component items of particle item. + +inline void TestComponentUtils::test_componentItems() +{ + SessionModel model("TestModel"); + + SessionItem* particle = model.insertNewItem(Constants::ParticleType); + SessionItem* group = particle->getItem(ParticleItem::P_FORM_FACTOR); + SessionItem* ffItem = particle->getGroupItem(ParticleItem::P_FORM_FACTOR); + + QList<SessionItem*> expectedList = QList<SessionItem*> () + << group + << ffItem->getItem(CylinderItem::P_RADIUS) + << ffItem->getItem(CylinderItem::P_HEIGHT) + << particle->getItem(ParticleItem::P_MATERIAL) + << particle->getItem(ParticleItem::P_ABUNDANCE) + << particle->getItem(ParticleItem::P_POSITION); + + auto itemList = ComponentUtils::componentItems(*particle); + QCOMPARE(itemList.size(), 6); + QCOMPARE(itemList, expectedList); +} diff --git a/Tests/UnitTests/GUI/TestGUI.cpp b/Tests/UnitTests/GUI/TestGUI.cpp index bfcfdbd92d9..c8cd3246e4e 100644 --- a/Tests/UnitTests/GUI/TestGUI.cpp +++ b/Tests/UnitTests/GUI/TestGUI.cpp @@ -35,6 +35,7 @@ #include "TestComponentProxyModel.h" #include "TestProxyModelStrategy.h" #include "TestSessionItemUtils.h" +#include "TestComponentUtils.h" #include <memory> class GUITestFactory { @@ -102,6 +103,7 @@ int main(int argc, char** argv) { tests.add<TestComponentProxyModel>(); tests.add<TestProxyModelStrategy>(); tests.add<TestSessionItemUtils>(); + tests.add<TestComponentUtils>(); return tests.runAll(argc, argv); } -- GitLab