Skip to content
Snippets Groups Projects
Commit 7a68b676 authored by Pospelov, Gennady's avatar Pospelov, Gennady
Browse files

GroupItem now relies on ComboProperty in its interaction with editors.

parent de335df4
No related branches found
No related tags found
No related merge requests found
...@@ -16,6 +16,30 @@ ...@@ -16,6 +16,30 @@
#include "GroupItem.h" #include "GroupItem.h"
#include "GUIHelpers.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"; const QString GroupItem::T_ITEMS = "Item tag";
...@@ -23,25 +47,30 @@ GroupItem::GroupItem() : SessionItem(Constants::GroupItemType) ...@@ -23,25 +47,30 @@ GroupItem::GroupItem() : SessionItem(Constants::GroupItemType)
{ {
registerTag(T_ITEMS); registerTag(T_ITEMS);
setDefaultTag(T_ITEMS); setDefaultTag(T_ITEMS);
mapper()->setOnValueChange([this]() { onValueChange(); });
} }
void GroupItem::setGroupInfo(const GroupInfo& groupInfo) void GroupItem::setGroupInfo(const GroupInfo& groupInfo)
{ {
if (m_groupInfo.isValid()) if (m_groupProperty)
throw GUIHelpers::Error("GroupItem::setGroup() -> Error. Attempt to set GroupInfo twice."); 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); prop->setGroupItem(this);
groupProperty->setGroupInfo(groupInfo); 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 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 QString GroupItem::currentType() const
...@@ -49,10 +78,18 @@ QString GroupItem::currentType() const ...@@ -49,10 +78,18 @@ QString GroupItem::currentType() const
return groupProperty()->currentType(); return groupProperty()->currentType();
} }
#include <QDebug>
SessionItem* GroupItem::setCurrentType(const QString& modelType) SessionItem* GroupItem::setCurrentType(const QString& modelType)
{ {
GroupProperty_t group_property = groupProperty(); qDebug() << "GroupItem::setCurrentType -> current"
group_property->setCurrentType(modelType); << 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(); return currentItem();
} }
...@@ -65,11 +102,30 @@ QStringList GroupItem::translateList(const QStringList& list) const ...@@ -65,11 +102,30 @@ QStringList GroupItem::translateList(const QStringList& list) const
GroupProperty_t GroupItem::groupProperty() 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) 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());
}
} }
...@@ -42,9 +42,9 @@ public: ...@@ -42,9 +42,9 @@ public:
SessionItem* getItemOfType(const QString& type); SessionItem* getItemOfType(const QString& type);
private: private:
void onValueChange();
GroupProperty_t groupProperty() const; GroupProperty_t groupProperty() const;
GroupProperty_t m_groupProperty;
GroupInfo m_groupInfo;
}; };
#endif // GROUPITEM_H #endif // GROUPITEM_H
......
...@@ -60,7 +60,7 @@ void GroupProperty::setCurrentType(const QString& type) ...@@ -60,7 +60,7 @@ void GroupProperty::setCurrentType(const QString& type)
prevItem->setVisible(false); prevItem->setVisible(false);
prevItem->setEnabled(false); prevItem->setEnabled(false);
} }
m_groupItem->emitDataChanged(); //m_groupItem->emitDataChanged();
} }
} }
...@@ -89,7 +89,7 @@ SessionItem* GroupProperty::getItemOfType(const QString& type) ...@@ -89,7 +89,7 @@ SessionItem* GroupProperty::getItemOfType(const QString& type)
new_item->setEnabled(false); new_item->setEnabled(false);
} }
m_groupItem->insertItem(-1, new_item); m_groupItem->insertItem(-1, new_item);
m_groupItem->emitDataChanged(); //m_groupItem->emitDataChanged();
return new_item; return new_item;
} }
} }
......
#include <QtTest> #include <QtTest>
#include "test_utils.h"
#include "GroupInfo.h" #include "GroupInfo.h"
#include "GroupItem.h" #include "GroupItem.h"
#include "ComboProperty.h"
#include "GroupPropertyRegistry.h" #include "GroupPropertyRegistry.h"
#include "GUIHelpers.h" #include "GUIHelpers.h"
#include "verify_throw_macro.h" #include "SessionModel.h"
class TestGroupItem : public QObject { class TestGroupItem : public QObject {
Q_OBJECT Q_OBJECT
...@@ -47,33 +49,54 @@ inline void TestGroupItem::test_groupInfo() ...@@ -47,33 +49,54 @@ inline void TestGroupItem::test_groupInfo()
inline void TestGroupItem::test_CreateGroup() inline void TestGroupItem::test_CreateGroup()
{ {
GroupInfo groupInfo = GroupPropertyRegistry::groupInfo(Constants::DistributionGroup); SessionModel model("TestModel");
QCOMPARE(groupInfo.defaultType(), Constants::DistributionGaussianType);
GroupItem groupItem; GroupInfo groupInfo = GroupPropertyRegistry::groupInfo(Constants::FormFactorGroup);
QCOMPARE(groupItem.children().size(), 0); QCOMPARE(groupInfo.defaultType(), Constants::CylinderType);
QVERIFY(groupItem.currentItem() == nullptr);
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 // setting group property and checking currentItem
groupItem.setGroupInfo(groupInfo); groupItem->setGroupInfo(groupInfo);
QCOMPARE(groupItem.children().size(), 1);
QCOMPARE(groupItem.children()[0], groupItem.currentItem());
SessionItem *cosineItem = groupItem.currentItem();
QCOMPARE(cosineItem->modelType(), Constants::DistributionGaussianType);
// setting group info twice // 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 // changing current item
SessionItem *newItem = groupItem.setCurrentType(Constants::DistributionNoneType); SessionItem *newItem = groupItem->setCurrentType(Constants::FullSphereType);
QCOMPARE(newItem, groupItem.currentItem()); QCOMPARE(newItem, groupItem->currentItem());
QCOMPARE(newItem->modelType(), Constants::DistributionNoneType); QCOMPARE(newItem->modelType(), Constants::FullSphereType);
QCOMPARE(groupItem.children().size(), 2); 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 // returning back to previous item
QCOMPARE(groupItem.setCurrentType(Constants::DistributionGaussianType), cosineItem); QCOMPARE(groupItem->setCurrentType(Constants::CylinderType), ffItem);
QCOMPARE(groupItem.currentItem(), cosineItem); QCOMPARE(groupItem->currentItem(), ffItem);
QCOMPARE(groupItem.children().size(), 2); QCOMPARE(groupItem->children().size(), 2);
} }
//! Checking that GroupProperty stays functional if displayName of currentItem is changed. //! Checking that GroupProperty stays functional if displayName of currentItem is changed.
......
...@@ -20,6 +20,7 @@ ...@@ -20,6 +20,7 @@
#include "SessionXML.h" #include "SessionXML.h"
#include "PropertyItem.h" #include "PropertyItem.h"
#include <QXmlStreamWriter> #include <QXmlStreamWriter>
#include "verify_throw_macro.h"
namespace TestUtils namespace TestUtils
{ {
......
...@@ -5627,7 +5627,7 @@ SWIG_AsVal_std_complex_Sl_double_Sg_ (PyObject *o, std::complex<double>* val) ...@@ -5627,7 +5627,7 @@ SWIG_AsVal_std_complex_Sl_double_Sg_ (PyObject *o, std::complex<double>* val)
   
   
SWIGINTERNINLINE PyObject* 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>& const std::complex<double>&
   
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment