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