From aa8d72e98dcde7c37015890b0f257a823c1de665 Mon Sep 17 00:00:00 2001 From: David Li <dawei.li@gmx.net> Date: Mon, 21 Mar 2016 11:31:00 +0100 Subject: [PATCH] Experimenting with group item Merge branch 'GUIFixes2' into Fitting --- GUI/coregui/Models/GroupItem.cpp | 2 +- GUI/coregui/Models/GroupItem.h | 2 +- GUI/coregui/Models/ModelPath.cpp | 26 +++++++-- .../Models/ParticleDistributionItem.cpp | 8 +++ Tests/UnitTests/TestGUI/TestGUI.cpp | 33 ++++++----- Tests/UnitTests/TestGUI/TestMapperCases.h | 1 - Tests/UnitTests/TestGUI/TestMapperForItem.h | 4 +- .../TestGUI/TestParticleDistributionItem.h | 56 ++++++++++++++++++ ...TestParticleItems.h => TestParticleItem.h} | 57 ++++++++++++------- 9 files changed, 143 insertions(+), 46 deletions(-) create mode 100644 Tests/UnitTests/TestGUI/TestParticleDistributionItem.h rename Tests/UnitTests/TestGUI/{TestParticleItems.h => TestParticleItem.h} (74%) diff --git a/GUI/coregui/Models/GroupItem.cpp b/GUI/coregui/Models/GroupItem.cpp index 3814621ba0e..339cb166794 100644 --- a/GUI/coregui/Models/GroupItem.cpp +++ b/GUI/coregui/Models/GroupItem.cpp @@ -29,7 +29,7 @@ void GroupItem::setGroup(GroupProperty_t group) setValue(QVariant::fromValue(group)); } -GroupProperty_t GroupItem::group() +GroupProperty_t GroupItem::group() const { return value().value<GroupProperty_t>(); } diff --git a/GUI/coregui/Models/GroupItem.h b/GUI/coregui/Models/GroupItem.h index 3b93e1bb1a5..b5d6fdd8b0d 100644 --- a/GUI/coregui/Models/GroupItem.h +++ b/GUI/coregui/Models/GroupItem.h @@ -25,7 +25,7 @@ class BA_CORE_API_ GroupItem : public SessionItem public: GroupItem(); void setGroup(GroupProperty_t group); - GroupProperty_t group(); + GroupProperty_t group() const; }; #endif diff --git a/GUI/coregui/Models/ModelPath.cpp b/GUI/coregui/Models/ModelPath.cpp index 0666e1b8ef4..70cf5363818 100644 --- a/GUI/coregui/Models/ModelPath.cpp +++ b/GUI/coregui/Models/ModelPath.cpp @@ -15,6 +15,9 @@ #include "ModelPath.h" #include "SessionItem.h" +#include "GroupProperty.h" +#include "GroupItem.h" +#include <QModelIndex> #include <QStringList> #include <sstream> @@ -26,13 +29,26 @@ QStringList ModelPath::getParameterTreeList(const SessionItem *item, QString pre QStringList result; if (item->modelType() == Constants::PropertyType && item->value().type() == QVariant::Double) { - result << prefix + item->itemName(); - } else { + result << prefix; + } + +// else if (item->modelType() == Constants::GroupItemType) { +// if (const GroupItem *groupItem = dynamic_cast<const GroupItem*>(item)) { +// if (const SessionItem *subItem = groupItem->group()->getCurrentItem()) { +// QString child_prefix = prefix + subItem->itemName() + QString("/"); +// result << getParameterTreeList(subItem, child_prefix); +// } +// } +// } + + else { if (item->hasChildren()) { for (auto p_child : item->childItems()) { - QString child_name = p_child->itemName(); - QString child_prefix = prefix + child_name + QString("/"); - result << getParameterTreeList(p_child, child_prefix); + if(p_child->isVisible()) { + QString child_name = p_child->itemName(); + QString child_prefix = prefix + child_name + QString("/"); + result << getParameterTreeList(p_child, child_prefix); + } } } } diff --git a/GUI/coregui/Models/ParticleDistributionItem.cpp b/GUI/coregui/Models/ParticleDistributionItem.cpp index 7264e5e334a..b5a90c141b3 100644 --- a/GUI/coregui/Models/ParticleDistributionItem.cpp +++ b/GUI/coregui/Models/ParticleDistributionItem.cpp @@ -55,6 +55,13 @@ ParticleDistributionItem::ParticleDistributionItem() { updateParameterList(); }); + + mapper()->setOnChildrenChange( + [this]() + { + updateParameterList(); + }); + } ParticleDistributionItem::~ParticleDistributionItem() @@ -128,6 +135,7 @@ QStringList ParticleDistributionItem::getChildParameterNames() const QStringList result; QVector<SessionItem *> children = getItems(); if (children.size() > 1) { + Q_ASSERT(0); qDebug() << "ParticleDistributionItem::getChildParameterNames(): " << "More than one child item"; return result; diff --git a/Tests/UnitTests/TestGUI/TestGUI.cpp b/Tests/UnitTests/TestGUI/TestGUI.cpp index f697316c599..144619c6e54 100644 --- a/Tests/UnitTests/TestGUI/TestGUI.cpp +++ b/Tests/UnitTests/TestGUI/TestGUI.cpp @@ -7,13 +7,14 @@ #include "TestFormFactorItems.h" #include "TestFTDistributionItems.h" #include "TestParameterizedItem.h" -#include "TestParticleItems.h" +#include "TestParticleItem.h" #include "TestLayerRoughnessItems.h" #include "TestParaCrystalItems.h" #include "TestSessionModel.h" #include "TestSessionItem.h" #include "TestGUICoreObjectCorrespondence.h" #include "TestMapperForItem.h" +#include "TestParticleDistributionItem.h" int main(int argc, char** argv) { QCoreApplication app(argc, argv); @@ -23,7 +24,7 @@ int main(int argc, char** argv) { TestFormFactorItems testFormFactorItems; TestFTDistributionItems testFTDistributionItems; TestParameterizedItem testParameterizedItem; - TestParticleItems testParticleItems; + TestParticleItem testParticleItem; TestLayerRoughnessItems testLayerRoughnessItems; TestParaCrystalItems testParaCrystalItems; TestSessionModel testSessionModel; @@ -31,22 +32,24 @@ int main(int argc, char** argv) { TestSessionItem testSessionItem; TestMapperCases testMapperCases; TestMapperForItem testMapperForItem; + TestParticleDistributionItem testParticleDistributionItem; bool status(false); - status |= QTest::qExec(&testFormFactorItems, argc, argv); - status |= QTest::qExec(&testFTDistributionItems, argc, argv); - status |= QTest::qExec(&testParameterizedItem, argc, argv); - status |= QTest::qExec(&testParticleItems, argc, argv); - status |= QTest::qExec(&testLayerRoughnessItems, argc, argv); - status |= QTest::qExec(&testParaCrystalItems, argc, argv); - status |= QTest::qExec(&testSessionModel, argc, argv); - status |= QTest::qExec(&testGUICoreObjectCorrespondence, argc, argv); - status |= QTest::qExec(&testSessionItem); - //status |= QTest::qExec(&testPropertyAttributes, argc, argv); - status |= QTest::qExec(&testMapperCases, argc, argv); - //status |= QTest::qExec(&testSessionModel, argc, argv); - status |= QTest::qExec(&testMapperForItem, argc, argv); +// status |= QTest::qExec(&testFormFactorItems, argc, argv); +// status |= QTest::qExec(&testFTDistributionItems, argc, argv); +// status |= QTest::qExec(&testParameterizedItem, argc, argv); + status |= QTest::qExec(&testParticleItem, argc, argv); +// status |= QTest::qExec(&testLayerRoughnessItems, argc, argv); +// status |= QTest::qExec(&testParaCrystalItems, argc, argv); +// status |= QTest::qExec(&testSessionModel, argc, argv); +// status |= QTest::qExec(&testGUICoreObjectCorrespondence, argc, argv); +// status |= QTest::qExec(&testSessionItem); +// //status |= QTest::qExec(&testPropertyAttributes, argc, argv); +// status |= QTest::qExec(&testMapperCases, argc, argv); +// //status |= QTest::qExec(&testSessionModel, argc, argv); +// status |= QTest::qExec(&testMapperForItem, argc, argv); +// status |= QTest::qExec(&testParticleDistributionItem, argc, argv); return status; diff --git a/Tests/UnitTests/TestGUI/TestMapperCases.h b/Tests/UnitTests/TestGUI/TestMapperCases.h index a466e5c3ca6..53c3c954a45 100644 --- a/Tests/UnitTests/TestGUI/TestMapperCases.h +++ b/Tests/UnitTests/TestGUI/TestMapperCases.h @@ -7,7 +7,6 @@ #include "item_constants.h" #include "ParticleItem.h" #include "ParticleCompositionItem.h" -#include "ParticleDistributionItem.h" #include "InterferenceFunctionItems.h" #include "ParticleLayoutItem.h" #include "DetectorItems.h" diff --git a/Tests/UnitTests/TestGUI/TestMapperForItem.h b/Tests/UnitTests/TestGUI/TestMapperForItem.h index aba4625591b..a9c77aa0b50 100644 --- a/Tests/UnitTests/TestGUI/TestMapperForItem.h +++ b/Tests/UnitTests/TestGUI/TestMapperForItem.h @@ -219,9 +219,9 @@ inline void TestMapperForItem::test_onChildrenChange() SampleModel model; SessionItem *multilayer = model.insertNewItem(Constants::MultiLayerType); - // Mapper is looking on child; adding new child to parent + // Mapper is looking on parent; adding new child to parent setItem(multilayer); - SessionItem *layer = model.insertNewItem(Constants::LayerType, model.indexOfItem(multilayer)); + model.insertNewItem(Constants::LayerType, model.indexOfItem(multilayer)); QVERIFY(m_onPropertyChangeCount == 0); QVERIFY(m_onChildPropertyChangeCount == 2); diff --git a/Tests/UnitTests/TestGUI/TestParticleDistributionItem.h b/Tests/UnitTests/TestGUI/TestParticleDistributionItem.h new file mode 100644 index 00000000000..46d148cbc98 --- /dev/null +++ b/Tests/UnitTests/TestGUI/TestParticleDistributionItem.h @@ -0,0 +1,56 @@ +#ifndef TESTPARTICLEDISTRIBUTIONITEM_H +#define TESTPARTICLEDISTRIBUTIONITEM_H + + +#include <QtTest> +#include "SampleModel.h" +#include "ParticleDistributionItem.h" +#include "ComboProperty.h" +#include <QDebug> + +class TestParticleDistributionItem : public QObject { + Q_OBJECT + +private slots: + void test_InitialState(); + void test_AddParticle(); + +}; + +inline void TestParticleDistributionItem::test_InitialState() +{ + SampleModel model; + SessionItem *item = model.insertNewItem(Constants::ParticleDistributionType); + + QCOMPARE(item->displayName(), Constants::ParticleDistributionType); + QCOMPARE(item->displayName(), item->itemName()); + QCOMPARE(item->childItems().size(), 5); // xpos, ypos, P_ABUNDANCE, P_DISTRIBUTION, P_DISTRIBUTED_PARAMETER + QCOMPARE(item->defaultTag(), ParticleDistributionItem::T_PARTICLES); + QCOMPARE(item->acceptableDefaultItemTypes(), + QVector<QString>() << Constants::ParticleType + << Constants::ParticleCoreShellType << Constants::ParticleCompositionType); + + ComboProperty prop = item->getItemValue(ParticleDistributionItem::P_DISTRIBUTED_PARAMETER) + .value<ComboProperty>(); + + QCOMPARE(prop.getValues(), QStringList() << QStringLiteral("None")); + QCOMPARE(prop.getValue(), QStringLiteral("None")); + QVERIFY(prop.getCachedValue().isEmpty()); +} + +inline void TestParticleDistributionItem::test_AddParticle() +{ + SampleModel model; + SessionItem *item = model.insertNewItem(Constants::ParticleDistributionType); + SessionItem *particle = model.insertNewItem(Constants::ParticleType, item->index()); + + QCOMPARE(item->childItems().size(), 6); // xpos, ypos, P_ABUNDANCE, P_DISTRIBUTION, T_PARTICLES, P_DISTRIBUTED_PARAMETER + + ComboProperty prop = item->getItemValue(ParticleDistributionItem::P_DISTRIBUTED_PARAMETER) + .value<ComboProperty>(); + qDebug() << prop.getValues(); + +} + + +#endif diff --git a/Tests/UnitTests/TestGUI/TestParticleItems.h b/Tests/UnitTests/TestGUI/TestParticleItem.h similarity index 74% rename from Tests/UnitTests/TestGUI/TestParticleItems.h rename to Tests/UnitTests/TestGUI/TestParticleItem.h index 3f65d5bcbdb..c17f4793cd2 100644 --- a/Tests/UnitTests/TestGUI/TestParticleItems.h +++ b/Tests/UnitTests/TestGUI/TestParticleItem.h @@ -1,32 +1,47 @@ -#ifndef TESTPARTICLEITEMS_H -#define TESTPARTICLEITEMS_H +#ifndef TESTPARTICLEITEM_H +#define TESTPARTICLEITEM_H #include <QtTest> -#include "Particle.h" -#include "ParticleLayout.h" -#include "ParticleCoreShell.h" -#include "SessionModel.h" -#include "GUIObjectBuilder.h" +#include "SampleModel.h" +#include "SessionItem.h" #include "ParticleItem.h" -#include "TransformToDomain.h" -#include "MaterialSvc.h" -#include "MaterialModel.h" -#include "GroupProperty.h" -#include "FormFactorItems.h" +#include "GroupItem.h" -class TestParticleItems : public QObject { +class TestParticleItem : public QObject { Q_OBJECT private slots: - void test_ParticleToDomain(); - void test_FormFactorGroupProperty(); - + void test_InitialState(); }; -inline void TestParticleItems::test_ParticleToDomain() +inline void TestParticleItem::test_InitialState() { + SampleModel model; + SessionItem *item = model.insertNewItem(Constants::ParticleType); + + QCOMPARE(item->displayName(), Constants::ParticleType); + QCOMPARE(item->displayName(), item->itemName()); + QCOMPARE(item->childItems().size(), 6); // xpos, ypos, P_FORM_FACTOR, P_MATERIAL, P_ABUNDANCE, P_POSITION + QCOMPARE(item->defaultTag(), ParticleItem::T_TRANSFORMATION); + + GroupItem *group = dynamic_cast<GroupItem *>(item->getItem(ParticleItem::P_FORM_FACTOR)); + QCOMPARE(group->displayName(), ParticleItem::P_FORM_FACTOR); + QCOMPARE(group->childItems().size(), 1); + + + + +// QCOMPARE(item->acceptableDefaultItemTypes(), +// QVector<QString>() << Constants::ParticleType +// << Constants::ParticleCoreShellType << Constants::ParticleCompositionType); + +} + + +//inline void TestParticleItems::test_ParticleToDomain() +//{ // MaterialModel materialModel; // MaterialEditor editor(&materialModel); // Q_UNUSED(editor); @@ -38,11 +53,11 @@ inline void TestParticleItems::test_ParticleToDomain() // QCOMPARE(depth, 10.0); // QCOMPARE(abundance, 5.0); // Q_UNUSED(particle); -} +//} -inline void TestParticleItems::test_FormFactorGroupProperty() -{ +//inline void TestParticleItems::test_FormFactorGroupProperty() +//{ // // FIXME remove MaterialEditor and model from SessionItem // MaterialModel materialModel; // MaterialEditor editor(&materialModel); @@ -104,7 +119,7 @@ inline void TestParticleItems::test_FormFactorGroupProperty() // QCOMPARE(spyPropertyItem.count(), 0); -} +//} -- GitLab