diff --git a/GUI/coregui/Models/GroupItem.cpp b/GUI/coregui/Models/GroupItem.cpp index de656dabb0ca035ccaa13b835ced2a1ec68a5024..dfe5e588ab7424c4e126477d9cee46cc7dbfaed7 100644 --- a/GUI/coregui/Models/GroupItem.cpp +++ b/GUI/coregui/Models/GroupItem.cpp @@ -15,26 +15,21 @@ // ************************************************************************** // #include "GroupItem.h" +#include "GUIHelpers.h" const QString GroupItem::T_ITEMS = "Item tag"; -GroupItem::GroupItem() - :SessionItem(Constants::GroupItemType) +GroupItem::GroupItem() : SessionItem(Constants::GroupItemType) { registerTag(T_ITEMS); setDefaultTag(T_ITEMS); - -// mapper()->setOnChildPropertyChange( -// [this](SessionItem* item, const QString &name) -// { -// group()->setCurrentLabel(item->itemLabel()); -//// emitDataChanged(); -// }); - } void GroupItem::setGroup(GroupProperty_t group) { + if (value().isValid()) + throw GUIHelpers::Error("GroupItem::setGroup() -> Error. Attempt to set group twice."); + group->setGroupItem(this); setValue(QVariant::fromValue(group)); } @@ -44,9 +39,16 @@ GroupProperty_t GroupItem::group() const return value().value<GroupProperty_t>(); } -SessionItem *GroupItem::currentItem() +SessionItem* GroupItem::currentItem() +{ + return value().isValid() ? group()->getCurrentItem() : nullptr; +} + +SessionItem* GroupItem::setCurrentType(const QString& modelType) { - return group()->getCurrentItem(); + GroupProperty_t group_property = group(); + group_property->setCurrentType(modelType); + return currentItem(); } QStringList GroupItem::translateList(const QStringList& list) const diff --git a/GUI/coregui/Models/GroupItem.h b/GUI/coregui/Models/GroupItem.h index b9751ff490c35eb9da8718118c99648c28e3afee..ccda647e3f48da6aff436482b50d37bdab071ec3 100644 --- a/GUI/coregui/Models/GroupItem.h +++ b/GUI/coregui/Models/GroupItem.h @@ -22,16 +22,17 @@ class BA_CORE_API_ GroupItem : public SessionItem { - public: static const QString T_ITEMS; GroupItem(); + void setGroup(GroupProperty_t group); GroupProperty_t group() const; - SessionItem *currentItem(); + SessionItem* currentItem(); - QStringList translateList(const QStringList& list) const; + SessionItem* setCurrentType(const QString& modelType); + QStringList translateList(const QStringList& list) const; }; #endif // GROUPITEM_H diff --git a/GUI/coregui/Models/GroupProperty.cpp b/GUI/coregui/Models/GroupProperty.cpp index e642c71b69cecacf2edb9ac3a74adb407a56f645..093b3aadce53f34eab510866c1e6c7debf65b0d5 100644 --- a/GUI/coregui/Models/GroupProperty.cpp +++ b/GUI/coregui/Models/GroupProperty.cpp @@ -26,7 +26,7 @@ GroupProperty::GroupProperty(QString group_name) SessionItem *GroupProperty::getCurrentItem() { if(m_groupItem) return m_groupItem->getChildByName(this->getCurrentType()); - return 0; + return nullptr; } void GroupProperty::setGroupItem(SessionItem *groupItem) @@ -48,7 +48,7 @@ QString GroupProperty::getCurrentType() const return m_current_type; } -void GroupProperty::setCurrentType(const QString &type, bool) +void GroupProperty::setCurrentType(const QString &type) { if(type == getCurrentType()) return; diff --git a/GUI/coregui/Models/GroupProperty.h b/GUI/coregui/Models/GroupProperty.h index 66bf5289feede0638d1ec965db2afec4257cff1f..e6afc6302ce2f3f481b4c0826365d374a1e38a3d 100644 --- a/GUI/coregui/Models/GroupProperty.h +++ b/GUI/coregui/Models/GroupProperty.h @@ -36,7 +36,7 @@ public: SessionItem *createCorrespondingItem(); QString getCurrentType() const; - void setCurrentType(const QString &type, bool = true); + void setCurrentType(const QString &type); QString getCurrentLabel() const; diff --git a/GUI/coregui/Models/InterferenceFunctionItems.cpp b/GUI/coregui/Models/InterferenceFunctionItems.cpp index 5008356b4b93555dafc1adf865b371cfd58be0f8..f4f07f996ae838d9c81e10ffe5bc0a3db0575132 100644 --- a/GUI/coregui/Models/InterferenceFunctionItems.cpp +++ b/GUI/coregui/Models/InterferenceFunctionItems.cpp @@ -28,6 +28,8 @@ #include "InterferenceFunction2DParaCrystal.h" #include "InterferenceFunctionRadialParaCrystal.h" #include "InterferenceFunction1DLattice.h" +#include "GroupItem.h" +#include <QDebug> InterferenceFunctionItem::InterferenceFunctionItem(const QString& modelType) : SessionGraphicsItem(modelType) @@ -104,10 +106,15 @@ InterferenceFunction2DParaCrystalItem::InterferenceFunction2DParaCrystalItem() } }); - mapper()->setOnChildPropertyChange([this](SessionItem* item, const QString&) { - if (item->modelType() == Constants::GroupItemType) { + mapper()->setOnChildPropertyChange([this](SessionItem* item, const QString& property) { + if (item->modelType() == Constants::GroupItemType && item->displayName() == + InterferenceFunction2DLatticeItem::P_LATTICE_TYPE) { update_rotation_availability(); } +// if (item->modelType() == Constants::GroupItemType && property == GroupItem::T_ITEMS && isTag(P_PDF1) && isTag(P_PDF2)) { +// qDebug() << item->modelType() << property; +// update_distribution_displaynames(); +// } }); } @@ -145,6 +152,29 @@ void InterferenceFunction2DParaCrystalItem::update_rotation_availability() angleItem->setEnabled(!getItemValue(P_XI_INTEGRATION).toBool()); } +//void InterferenceFunction2DParaCrystalItem::update_distribution_displaynames() +//{ +// GroupItem *group1 = dynamic_cast<GroupItem*>(getItem(P_PDF1)); +// GroupItem *group2 = dynamic_cast<GroupItem*>(getItem(P_PDF2)); + +// if(!group1 || !group2) +// return; + +// SessionItem *pdf1 = group1->currentItem(); +// SessionItem *pdf2 = group2->currentItem(); + +// if(pdf1 && pdf2) { +// qDebug() << pdf1->displayName() << pdf2->displayName(); +// if(pdf1->modelType() == pdf2->modelType()) { +// pdf1->setDisplayName(pdf1->modelType()+QString::number(0)); +// pdf2->setDisplayName(pdf2->modelType()+QString::number(1)); +// } else { +// pdf1->setDisplayName(pdf1->modelType()); +// pdf2->setDisplayName(pdf2->modelType()); +// } +// } +//} + // --------------------------------------------------------------------------------------------- // const QString InterferenceFunction1DLatticeItem::P_LENGTH = diff --git a/GUI/coregui/Models/InterferenceFunctionItems.h b/GUI/coregui/Models/InterferenceFunctionItems.h index 13db27f348d76a6093e0ca6dc200996d67d07148..0efb72be58dd3cc1e673cb4d2fa88635b906585d 100644 --- a/GUI/coregui/Models/InterferenceFunctionItems.h +++ b/GUI/coregui/Models/InterferenceFunctionItems.h @@ -55,6 +55,7 @@ public: std::unique_ptr<IInterferenceFunction> createInterferenceFunction() const; private: void update_rotation_availability(); +// void update_distribution_displaynames(); }; class BA_CORE_API_ InterferenceFunction1DLatticeItem : public InterferenceFunctionItem diff --git a/GUI/coregui/Models/SessionItem.cpp b/GUI/coregui/Models/SessionItem.cpp index e5b51ddb9fe93fc10498781c1d6ffe6b9f6a6a0e..ccdeb26a71b3d329851c26e21d0c5feb1b16a35a 100644 --- a/GUI/coregui/Models/SessionItem.cpp +++ b/GUI/coregui/Models/SessionItem.cpp @@ -500,11 +500,9 @@ SessionItem *SessionItem::getGroupItem(const QString &name, const QString &type) SessionItem *SessionItem::setGroupProperty(const QString &name, const QString &value) const { - if (GroupItem *item = dynamic_cast<GroupItem *>(getItem(name))) { - GroupProperty_t group_property = item->group(); - group_property->setCurrentType(value); - return group_property->getCurrentItem(); - } + if (GroupItem *item = dynamic_cast<GroupItem *>(getItem(name))) + return item->setCurrentType(value); + return nullptr; } diff --git a/Tests/Functional/GUI/GUITranslationTest/main.cpp b/Tests/Functional/GUI/GUITranslationTest/main.cpp index d8f70393efa14d182efddc3706b77c30db6baf74..d1d3706038bf2095ee94a6281af530fd1aa3f0d2 100644 --- a/Tests/Functional/GUI/GUITranslationTest/main.cpp +++ b/Tests/Functional/GUI/GUITranslationTest/main.cpp @@ -21,9 +21,9 @@ bool run_tests() { std::vector<std::pair<std::string, std::string>> conditions = { // {"BasicGISAS", "CylindersAndPrismsBuilder"}, - {"BasicGISAS", "RotatedPyramidsBuilder"}, +// {"BasicGISAS", "RotatedPyramidsBuilder"}, // {"BasicGISAS", "RadialParaCrystalBuilder"}, -// {"BasicGISAS", "Basic2DParaCrystalBuilder"}, + {"BasicGISAS", "Basic2DParaCrystalBuilder"}, // {"BasicGISAS", "Lattice1DBuilder"}, // {"BasicGISAS", "Basic2DLatticeBuilder"}, // {"BasicGISAS", "SquareLatticeBuilder"}, diff --git a/Tests/UnitTests/GUI/TestGUI.cpp b/Tests/UnitTests/GUI/TestGUI.cpp index e0a40142e548566a298ebb559cc450f500f8588f..0c4dda97d46b0a0d0966eeba71ebce08da404a12 100644 --- a/Tests/UnitTests/GUI/TestGUI.cpp +++ b/Tests/UnitTests/GUI/TestGUI.cpp @@ -18,6 +18,7 @@ #include "TestMaterialModel.h" #include "TestComboProperty.h" #include "TestTranslations.h" +#include "TestGroupProperty.h" int main(int argc, char** argv) { QCoreApplication app(argc, argv); @@ -42,6 +43,7 @@ int main(int argc, char** argv) { TestMaterialModel testMaterialModel; TestComboProperty testComboProperty; TestTranslations testTranslations; + TestGroupProperty testGroupProperty; bool status(false); @@ -63,6 +65,7 @@ int main(int argc, char** argv) { status |= QTest::qExec(&testMaterialModel, argc, argv); status |= QTest::qExec(&testComboProperty, argc, argv); status |= QTest::qExec(&testTranslations, argc, argv); + status |= QTest::qExec(&testGroupProperty, argc, argv); return status; } diff --git a/Tests/UnitTests/GUI/TestGroupProperty.h b/Tests/UnitTests/GUI/TestGroupProperty.h new file mode 100644 index 0000000000000000000000000000000000000000..6560bb2edb720a4237d8bd95c2f93bed61e6cc79 --- /dev/null +++ b/Tests/UnitTests/GUI/TestGroupProperty.h @@ -0,0 +1,45 @@ +#include <QtTest> +#include <QDebug> +#include "GroupItem.h" +#include "GroupPropertyRegistry.h" +#include "GUIHelpers.h" +#include "verify_throw_macro.h" + +class TestGroupProperty : public QObject { + Q_OBJECT + +private slots: + void test_CreateGroup(); +}; + +inline void TestGroupProperty::test_CreateGroup() +{ + GroupProperty_t property = GroupPropertyRegistry::createGroupProperty( + "MyGroupProperty", Constants::DistributionGroup); + + QCOMPARE(property->getCurrentType(), Constants::DistributionCosineType); + + GroupItem groupItem; + QCOMPARE(groupItem.childItems().size(), 0); + QVERIFY(groupItem.currentItem() == nullptr); + + // setting group property + groupItem.setGroup(property); + QCOMPARE(groupItem.childItems().size(), 1); + QCOMPARE(groupItem.childItems()[0], groupItem.currentItem()); + QCOMPARE(groupItem.currentItem()->modelType(), Constants::DistributionCosineType); + + // setting group property twice + QVERIFY_THROW(groupItem.setGroup(property), GUIHelpers::Error); + + // changing current item + SessionItem *newItem = groupItem.setCurrentType(Constants::DistributionNoneType); + QCOMPARE(newItem, groupItem.currentItem()); + QCOMPARE(newItem->modelType(), Constants::DistributionNoneType); + QCOMPARE(groupItem.childItems().size(), 2); + +} + +//GroupProperty_t group_property = item->group(); +//group_property->setCurrentType(value); +//return group_property->getCurrentItem();