From 43e8dc9f3a977b86c3f0314c7c207053d91035e6 Mon Sep 17 00:00:00 2001 From: Gennady Pospelov <g.pospelov@fz-juelich.de> Date: Thu, 19 Feb 2015 18:41:13 +0100 Subject: [PATCH] First working version of AwesomePropertyEditor with flat positions of subItems. --- .../TestBeamEditorWidget.cpp | 2 +- .../PropertyEditor/AwesomePropertyEditor.cpp | 49 ++++++++++++++++--- .../PropertyEditor/AwesomePropertyEditor.h | 10 ++-- 3 files changed, 47 insertions(+), 14 deletions(-) diff --git a/GUI/coregui/Views/InstrumentWidgets/TestBeamEditorWidget.cpp b/GUI/coregui/Views/InstrumentWidgets/TestBeamEditorWidget.cpp index ff2821cb788..72d97396682 100644 --- a/GUI/coregui/Views/InstrumentWidgets/TestBeamEditorWidget.cpp +++ b/GUI/coregui/Views/InstrumentWidgets/TestBeamEditorWidget.cpp @@ -97,7 +97,7 @@ void TestBeamEditorWidget::initWavelengthWidget() // m_wavelengthEditor->addItemPropertyToGroup(wavelengthItem, BeamWavelengthItem::P_VALUE, "Wavelength"); // m_wavelengthEditor->insertItemProperty(wavelengthItem, BeamWavelengthItem::P_VALUE); - m_wavelengthEditor->insertItemProperties(wavelengthItem); + m_wavelengthEditor->insertItemProperties(wavelengthItem, 0, AwesomePropertyEditor::INSERT_AFTER, AwesomePropertyEditor::INSERT_AFTER); // connect(wavelengthItem, SIGNAL(propertyItemChanged(QString)), diff --git a/GUI/coregui/Views/PropertyEditor/AwesomePropertyEditor.cpp b/GUI/coregui/Views/PropertyEditor/AwesomePropertyEditor.cpp index 91ebefdd440..624ca6d34c3 100644 --- a/GUI/coregui/Views/PropertyEditor/AwesomePropertyEditor.cpp +++ b/GUI/coregui/Views/PropertyEditor/AwesomePropertyEditor.cpp @@ -60,6 +60,7 @@ public: QMap<QString, QtVariantProperty *> m_groupname_to_qtvariant; // QMap<ParameterizedItem *, QMap<QString, QList<QtVariantProperty *> > m_item_to_connected_qtvariant; QMap<QtVariantProperty *, QList<QtVariantProperty *> > m_qtvariant_to_dependend; + QMap<ParameterizedItem *, QMap<QString, AwesomePropertyEditor::EInsertMode > > m_item_subitem_insert_mode; bool m_recursive_flag; }; @@ -230,32 +231,34 @@ void AwesomePropertyEditor::addItemProperty(ParameterizedItem *item, const QStri this, SLOT(onPropertyItemChanged(QString)), Qt::UniqueConnection); } -void AwesomePropertyEditor::insertItemProperties(ParameterizedItem *item, QtVariantProperty *parent_qtproperty, EInsertMode insert_mode) +void AwesomePropertyEditor::insertItemProperties(ParameterizedItem *item, QtVariantProperty *parent_qtproperty, EInsertMode insert_mode, EInsertMode subitem_insert_mode) { Q_ASSERT(item); qDebug() << "AwesomePropertyEditor::insertItemProperties()"; QList<QByteArray> property_names = item->dynamicPropertyNames(); for (int i = 0; i < property_names.length(); ++i) { QString prop_name = QString(property_names[i]); - insertItemProperty(item, prop_name, parent_qtproperty, insert_mode); + insertItemProperty(item, prop_name, parent_qtproperty, insert_mode, subitem_insert_mode); } } -void AwesomePropertyEditor::insertItemProperty(ParameterizedItem *item, const QString &property_name, QtVariantProperty *parent_qtproperty, EInsertMode insert_mode) +void AwesomePropertyEditor::insertItemProperty(ParameterizedItem *item, const QString &property_name, QtVariantProperty *parent_qtproperty, EInsertMode insert_mode, EInsertMode subitem_insert_mode) { Q_ASSERT(item); qDebug() << "AwesomePropertyEditor::insertItemProperty()"; + if(insert_mode == SKIP) return; + QtVariantProperty *qtVariantItem = createQtVariantProperty(item, property_name); if(!qtVariantItem) return; insertQtVariantProperty(qtVariantItem, parent_qtproperty, insert_mode); // Processing SubProperty - if(item->getSubItems().contains(property_name)) { + if(subitem_insert_mode != SKIP && item->getSubItems().contains(property_name)) { ParameterizedItem *subitem = item->getSubItems()[property_name]; if (subitem) { - insertItemProperties(subitem, qtVariantItem, INSERT_AS_CHILD); + insertItemProperties(subitem, qtVariantItem, subitem_insert_mode, subitem_insert_mode); } } @@ -266,6 +269,7 @@ void AwesomePropertyEditor::insertItemProperty(ParameterizedItem *item, const QS m_d->m_item_to_property_to_qtvariant[item][property_name] = qtVariantItem; m_d->m_qtvariant_to_dependend[parent_qtproperty].append(qtVariantItem); + m_d->m_item_subitem_insert_mode[item][property_name] = subitem_insert_mode; connect(item, SIGNAL(propertyChanged(QString)), this, SLOT(onPropertyChanged(QString)), Qt::UniqueConnection); @@ -407,10 +411,11 @@ void AwesomePropertyEditor::onPropertyItemChanged(const QString &property_name) variant_property->setEnabled(true); } - removeSubProperties(variant_property); + //removeSubProperties(variant_property); + removeQtVariantProperties(m_d->m_qtvariant_to_dependend[variant_property]); // if(m_d->m_recursive_flag) addItemProperties( item->getSubItems()[property_name], variant_property); - insertItemProperties( item->getSubItems()[property_name], variant_property, INSERT_AS_CHILD); + insertItemProperties( item->getSubItems()[property_name], variant_property, m_d->m_item_subitem_insert_mode[item][property_name]); connect(item, SIGNAL(propertyChanged(QString)), @@ -502,3 +507,33 @@ void AwesomePropertyEditor::insertQtVariantProperty(QtVariantProperty *qtVariant m_d->m_browser->addProperty(qtVariantItem); } } + +void AwesomePropertyEditor::removeQtVariantProperties(QList<QtVariantProperty *> &list_of_properties) +{ + qDebug() << "AwesomePropertyEditor::removeQtVarintProperties(QList<QtVariantProperty> &list_of_properties)"; + + foreach(QtVariantProperty *child, list_of_properties) { + m_d->m_browser->removeProperty(child); + delete child; + +// m_d->m_qtvariant_to_dependend + + QMap<QtProperty *, AwesomePropertyEditorPrivate::ItemPropertyPair >::iterator it = m_d->m_qtproperty_to_itempropertypair.find(child); + if(it != m_d->m_qtproperty_to_itempropertypair.end()) { + AwesomePropertyEditorPrivate::ItemPropertyPair itemPair = it.value(); + m_d->m_item_to_property_to_qtvariant.remove(itemPair.m_item); + m_d->m_qtproperty_to_itempropertypair.erase(it); + } + } + + list_of_properties.clear(); +} + + + +//QMap<QtProperty *, ItemPropertyPair> m_qtproperty_to_itempropertypair; +//QMap<ParameterizedItem *, QMap<QString, QtVariantProperty *> > m_item_to_property_to_qtvariant; +//QMap<QString, QtVariantProperty *> m_groupname_to_qtvariant; +//// QMap<ParameterizedItem *, QMap<QString, QList<QtVariantProperty *> > m_item_to_connected_qtvariant; +//QMap<QtVariantProperty *, QList<QtVariantProperty *> > m_qtvariant_to_dependend; +//QMap<ParameterizedItem *, QMap<QString, AwesomePropertyEditor::EInsertMode > > m_item_subitem_insert_mode; diff --git a/GUI/coregui/Views/PropertyEditor/AwesomePropertyEditor.h b/GUI/coregui/Views/PropertyEditor/AwesomePropertyEditor.h index a6bdb5d5559..f24dda3e923 100644 --- a/GUI/coregui/Views/PropertyEditor/AwesomePropertyEditor.h +++ b/GUI/coregui/Views/PropertyEditor/AwesomePropertyEditor.h @@ -32,7 +32,7 @@ class BA_CORE_API_ AwesomePropertyEditor : public QWidget public: enum EBrowserType {BROWSER_TREE_TYPE, BROWSER_GROUPBOX_TYPE, BROWSER_BUTTON_TYPE}; - enum EInsertMode {INSERT_AS_CHILD, INSERT_AFTER}; + enum EInsertMode {INSERT_AS_CHILD, INSERT_AFTER, SKIP}; // enum ESubItemsPolicy {SUBITEMS_SKIP, SUBITEMS_AS_CHILD, SUBITEMS_AFTER}; AwesomePropertyEditor(QWidget *parent = 0, EBrowserType browser_type = BROWSER_TREE_TYPE); @@ -48,17 +48,14 @@ public: //! add single ParameterizedItem property void addItemProperty(ParameterizedItem *item, const QString &property_name, QtProperty *parent_qtproperty = 0); - void insertItemProperties(ParameterizedItem *item, QtVariantProperty *parent_qtproperty=0, EInsertMode insert_mode = INSERT_AFTER); - void insertItemProperty(ParameterizedItem *item, const QString &property_name, QtVariantProperty *parent_qtproperty=0, EInsertMode insert_mode = INSERT_AFTER); + void insertItemProperties(ParameterizedItem *item, QtVariantProperty *parent_qtproperty=0, EInsertMode insert_mode = INSERT_AFTER, EInsertMode subitem_insert_mode = INSERT_AS_CHILD); + void insertItemProperty(ParameterizedItem *item, const QString &property_name, QtVariantProperty *parent_qtproperty=0, EInsertMode insert_mode = INSERT_AFTER, EInsertMode subitem_insert_mode = INSERT_AS_CHILD); //! add single ParameterizedItem property to group void addItemPropertyToGroup(ParameterizedItem *item, const QString &property_name, const QString &group_name); void setRecursive(bool recursive_flag); - - - void clearEditor(); private slots: @@ -70,6 +67,7 @@ private slots: private: QtVariantProperty *createQtVariantProperty(ParameterizedItem *item, const QString &property_name); void insertQtVariantProperty(QtVariantProperty *qtVariantItem, QtVariantProperty *parent_qtproperty, EInsertMode insert_mode); + void removeQtVariantProperties(QList<QtVariantProperty *> &list_of_properties); AwesomePropertyEditorPrivate *m_d; }; -- GitLab