diff --git a/GUI/coregui/Models/GroupItem.cpp b/GUI/coregui/Models/GroupItem.cpp index 3ed87642dee691f45fb81c7f9be7f21022f82565..cb00a25e6d627e9c0fa9368b3e4c16c404162877 100644 --- a/GUI/coregui/Models/GroupItem.cpp +++ b/GUI/coregui/Models/GroupItem.cpp @@ -16,6 +16,30 @@ #include "GroupItem.h" #include "GUIHelpers.h" +#include "ComboProperty.h" +#include <QDebug> +#include "GUIHelpers.h" + +namespace { +//QVariant createCombo(const GroupInfo& groupInfo) +//{ +// ComboProperty result; +// result.setValues(groupInfo.itemLabels()); + +// int index = groupInfo.itemTypes().indexOf(groupInfo.defaultType()); +// result.setCurrentIndex(index); +// return result.variant(); +//} + +QVariant createCombo(GroupProperty_t groupProperty) +{ + ComboProperty result; + result.setValues(groupProperty->itemLabels()); + result.setCurrentIndex(groupProperty->currentIndex()); + return result.variant(); +} + +} const QString GroupItem::T_ITEMS = "Item tag"; @@ -23,25 +47,30 @@ GroupItem::GroupItem() : SessionItem(Constants::GroupItemType) { registerTag(T_ITEMS); setDefaultTag(T_ITEMS); + + mapper()->setOnValueChange([this]() { onValueChange(); }); } void GroupItem::setGroupInfo(const GroupInfo& groupInfo) { - if (m_groupInfo.isValid()) - throw GUIHelpers::Error("GroupItem::setGroup() -> Error. Attempt to set GroupInfo twice."); + if (m_groupProperty) + throw GUIHelpers::Error("GroupItem::setGroup() -> Error. Attempt to set group twice."); - m_groupInfo = groupInfo; + GroupProperty_t prop(new GroupProperty); + prop->setGroupInfo(groupInfo); - GroupProperty_t groupProperty(new GroupProperty); - groupProperty->setGroupInfo(groupInfo); + prop->setGroupItem(this); + m_groupProperty = prop; + setValue(createCombo(groupProperty())); + emitDataChanged(); // necessary because ComboProperty variant comparators are disabled - groupProperty->setGroupItem(this); - setValue(QVariant::fromValue(groupProperty)); +// setValue(QVariant::fromValue(groupProperty)); } SessionItem* GroupItem::currentItem() const { - return value().isValid() ? groupProperty()->currentItem() : nullptr; +// return value().isValid() ? groupProperty()->currentItem() : nullptr; + return groupProperty() ? groupProperty()->currentItem() : nullptr; } QString GroupItem::currentType() const @@ -49,10 +78,18 @@ QString GroupItem::currentType() const return groupProperty()->currentType(); } +#include <QDebug> SessionItem* GroupItem::setCurrentType(const QString& modelType) { - GroupProperty_t group_property = groupProperty(); - group_property->setCurrentType(modelType); + qDebug() << "GroupItem::setCurrentType -> current" + << groupProperty()->currentType() << groupProperty()->currentIndex(); + qDebug() << " setting" << modelType; + groupProperty()->setCurrentType(modelType); + qDebug() << "GroupItem::setCurrentType -> current" + << groupProperty()->currentType() << groupProperty()->currentIndex(); + + setValue(createCombo(groupProperty())); + emitDataChanged(); // necessary because ComboProperty variant comparators are disabled return currentItem(); } @@ -65,11 +102,30 @@ QStringList GroupItem::translateList(const QStringList& list) const GroupProperty_t GroupItem::groupProperty() const { - return value().value<GroupProperty_t>(); + return m_groupProperty; +// return value().value<GroupProperty_t>(); } SessionItem* GroupItem::getItemOfType(const QString& type) { - return groupProperty()->getItemOfType(type); + SessionItem* result = groupProperty()->getItemOfType(type); + +// setValue(createCombo(groupProperty())); + + return result; +} + +void GroupItem::onValueChange() +{ + if (!value().canConvert<ComboProperty>()) + throw GUIHelpers::Error("GroupItem::onValueChange() -> Error. Wrong property type"); + + qDebug() << "GroupItem::onValueChange()"; + + ComboProperty property = value().value<ComboProperty>(); + if (property.currentIndex() != m_groupProperty->currentIndex()) { + qDebug() << "GroupItem::onValueChange() -> setting index" << property.currentIndex(); + m_groupProperty->setCurrentIndex(property.currentIndex()); + } } diff --git a/GUI/coregui/Models/GroupItem.h b/GUI/coregui/Models/GroupItem.h index 2614749e7622fded3ee31dfbc0bc6d978c32e114..7c08b05c718ab2eec8f79c6f5d3bf58a2e73b375 100644 --- a/GUI/coregui/Models/GroupItem.h +++ b/GUI/coregui/Models/GroupItem.h @@ -42,9 +42,9 @@ public: SessionItem* getItemOfType(const QString& type); private: + void onValueChange(); GroupProperty_t groupProperty() const; - - GroupInfo m_groupInfo; + GroupProperty_t m_groupProperty; }; #endif // GROUPITEM_H diff --git a/GUI/coregui/Models/GroupProperty.cpp b/GUI/coregui/Models/GroupProperty.cpp index dfa27c9e5b6c16ca03812bb02870f33939e921c6..0c76bdd24498d0e1ff3259afa5dc1b35e3471efe 100644 --- a/GUI/coregui/Models/GroupProperty.cpp +++ b/GUI/coregui/Models/GroupProperty.cpp @@ -60,7 +60,7 @@ void GroupProperty::setCurrentType(const QString& type) prevItem->setVisible(false); prevItem->setEnabled(false); } - m_groupItem->emitDataChanged(); + //m_groupItem->emitDataChanged(); } } @@ -89,7 +89,7 @@ SessionItem* GroupProperty::getItemOfType(const QString& type) new_item->setEnabled(false); } m_groupItem->insertItem(-1, new_item); - m_groupItem->emitDataChanged(); + //m_groupItem->emitDataChanged(); return new_item; } } diff --git a/Tests/UnitTests/GUI/TestGroupItem.h b/Tests/UnitTests/GUI/TestGroupItem.h index b3387293ff99cc1218e5a1d6c33d5d7ac343adb3..7c9d66d3802249275cd27924a471b03995179c96 100644 --- a/Tests/UnitTests/GUI/TestGroupItem.h +++ b/Tests/UnitTests/GUI/TestGroupItem.h @@ -1,9 +1,11 @@ #include <QtTest> +#include "test_utils.h" #include "GroupInfo.h" #include "GroupItem.h" +#include "ComboProperty.h" #include "GroupPropertyRegistry.h" #include "GUIHelpers.h" -#include "verify_throw_macro.h" +#include "SessionModel.h" class TestGroupItem : public QObject { Q_OBJECT @@ -47,33 +49,54 @@ inline void TestGroupItem::test_groupInfo() inline void TestGroupItem::test_CreateGroup() { - GroupInfo groupInfo = GroupPropertyRegistry::groupInfo(Constants::DistributionGroup); - QCOMPARE(groupInfo.defaultType(), Constants::DistributionGaussianType); + SessionModel model("TestModel"); - GroupItem groupItem; - QCOMPARE(groupItem.children().size(), 0); - QVERIFY(groupItem.currentItem() == nullptr); + GroupInfo groupInfo = GroupPropertyRegistry::groupInfo(Constants::FormFactorGroup); + QCOMPARE(groupInfo.defaultType(), Constants::CylinderType); + + auto groupItem = dynamic_cast<GroupItem*>(model.insertNewItem(Constants::GroupItemType)); + QCOMPARE(groupItem->children().size(), 0); + QVERIFY(groupItem->currentItem() == nullptr); + QVERIFY(groupItem->value().isValid() == false); // setting group property and checking currentItem - groupItem.setGroupInfo(groupInfo); - QCOMPARE(groupItem.children().size(), 1); - QCOMPARE(groupItem.children()[0], groupItem.currentItem()); - SessionItem *cosineItem = groupItem.currentItem(); - QCOMPARE(cosineItem->modelType(), Constants::DistributionGaussianType); + groupItem->setGroupInfo(groupInfo); // setting group info twice - QVERIFY_THROW(groupItem.setGroupInfo(groupInfo), GUIHelpers::Error); + QVERIFY_THROW(groupItem->setGroupInfo(groupInfo), GUIHelpers::Error); + + // checking current item + QCOMPARE(groupItem->children().size(), 1); + QCOMPARE(groupItem->children()[0], groupItem->currentItem()); + SessionItem *ffItem = groupItem->currentItem(); + QCOMPARE(ffItem->modelType(), Constants::CylinderType); + + // checking current variant + QVariant value = groupItem->value(); + QVERIFY(value.canConvert<ComboProperty>() == true); + ComboProperty combo = value.value<ComboProperty>(); + QCOMPARE(combo.getValues(), groupInfo.itemLabels()); + int index = groupInfo.itemTypes().indexOf(groupInfo.defaultType()); + QCOMPARE(combo.currentIndex(), index); + QCOMPARE(combo.getValue(), groupInfo.itemLabels().at(index)); // changing current item - SessionItem *newItem = groupItem.setCurrentType(Constants::DistributionNoneType); - QCOMPARE(newItem, groupItem.currentItem()); - QCOMPARE(newItem->modelType(), Constants::DistributionNoneType); - QCOMPARE(groupItem.children().size(), 2); + SessionItem *newItem = groupItem->setCurrentType(Constants::FullSphereType); + QCOMPARE(newItem, groupItem->currentItem()); + QCOMPARE(newItem->modelType(), Constants::FullSphereType); + QCOMPARE(groupItem->children().size(), 2); + + // checking current variant + combo = groupItem->value().value<ComboProperty>(); + QCOMPARE(combo.getValues(), groupInfo.itemLabels()); + index = groupInfo.itemTypes().indexOf(Constants::FullSphereType); + QCOMPARE(combo.currentIndex(), index); + QCOMPARE(combo.getValue(), groupInfo.itemLabels().at(index)); // returning back to previous item - QCOMPARE(groupItem.setCurrentType(Constants::DistributionGaussianType), cosineItem); - QCOMPARE(groupItem.currentItem(), cosineItem); - QCOMPARE(groupItem.children().size(), 2); + QCOMPARE(groupItem->setCurrentType(Constants::CylinderType), ffItem); + QCOMPARE(groupItem->currentItem(), ffItem); + QCOMPARE(groupItem->children().size(), 2); } //! Checking that GroupProperty stays functional if displayName of currentItem is changed. diff --git a/Tests/UnitTests/GUI/test_utils.h b/Tests/UnitTests/GUI/test_utils.h index 1516eee6e265d774827fcd196b51e8a0bed622bf..ce564f718b60f1c8d85640fc189b0519fabe7bed 100644 --- a/Tests/UnitTests/GUI/test_utils.h +++ b/Tests/UnitTests/GUI/test_utils.h @@ -20,6 +20,7 @@ #include "SessionXML.h" #include "PropertyItem.h" #include <QXmlStreamWriter> +#include "verify_throw_macro.h" namespace TestUtils { diff --git a/auto/Wrap/libBornAgainFit_wrap.cpp b/auto/Wrap/libBornAgainFit_wrap.cpp index 182abc5541c99f92f98a78439a7f630a79c6657c..980a19744c597e8ce4355eef1f3bbad544cc94ca 100644 --- a/auto/Wrap/libBornAgainFit_wrap.cpp +++ b/auto/Wrap/libBornAgainFit_wrap.cpp @@ -5627,7 +5627,7 @@ SWIG_AsVal_std_complex_Sl_double_Sg_ (PyObject *o, std::complex<double>* val) SWIGINTERNINLINE PyObject* -SWIG_From_std_complex_Sl_double_Sg_ (/*@SWIG:/usr/share/swig3.0/typemaps/swigmacros.swg,104,%ifcplusplus@*/ +SWIG_From_std_complex_Sl_double_Sg_ (/*@SWIG:/home/pospelov/software/local/share/swig/3.0.8/typemaps/swigmacros.swg,104,%ifcplusplus@*/ const std::complex<double>&