From 40e36e0cd0600b24d2bafc9e1e4e01eb703f039a Mon Sep 17 00:00:00 2001
From: Kai Koehne <kai.koehne@nokia.com>
Date: Thu, 22 Jul 2010 10:12:04 +0200
Subject: [PATCH] QmlOutline: Treat grouped property items as properties

E.g. "anchors {}" is represented in the AST as a UiObjectDefinition.
Treat it nevertheless like a property in the outline, such that it
isn't shown in the outline if you deactivate showing bindings.
---
 src/plugins/qmljseditor/qmljsoutline.cpp    |  3 +--
 src/plugins/qmljseditor/qmloutlinemodel.cpp | 26 ++++++++++++++-------
 2 files changed, 18 insertions(+), 11 deletions(-)

diff --git a/src/plugins/qmljseditor/qmljsoutline.cpp b/src/plugins/qmljseditor/qmljsoutline.cpp
index b80d746078a..66d505672b7 100644
--- a/src/plugins/qmljseditor/qmljsoutline.cpp
+++ b/src/plugins/qmljseditor/qmljsoutline.cpp
@@ -44,8 +44,7 @@ bool QmlJSOutlineFilterModel::filterAcceptsRow(int sourceRow,
     if (m_filterBindings) {
         QModelIndex sourceIndex = sourceModel()->index(sourceRow, 0, sourceParent);
         QVariant itemType = sourceIndex.data(QmlOutlineModel::ItemTypeRole);
-        Q_ASSERT(itemType.isValid());
-        if (itemType.isValid() && itemType == QmlOutlineModel::PropertyType) {
+        if (itemType == QmlOutlineModel::PropertyType) {
             return false;
         }
     }
diff --git a/src/plugins/qmljseditor/qmloutlinemodel.cpp b/src/plugins/qmljseditor/qmloutlinemodel.cpp
index 77eae8d008a..9064277687b 100644
--- a/src/plugins/qmljseditor/qmloutlinemodel.cpp
+++ b/src/plugins/qmljseditor/qmloutlinemodel.cpp
@@ -347,20 +347,28 @@ QModelIndex QmlOutlineModel::enterObjectDefinition(AST::UiObjectDefinition *objD
     QmlOutlineItem prototype(this);
 
     const QString typeName = asString(objDef->qualifiedTypeNameId);
-    const QString id = getId(objDef);
-    if (!id.isEmpty()) {
-        prototype.setText(id);
+
+    if (typeName.at(0).isUpper()) {
+        const QString id = getId(objDef);
+        if (!id.isEmpty()) {
+            prototype.setText(id);
+        } else {
+            prototype.setText(typeName);
+        }
+        if (!m_typeToIcon.contains(typeName)) {
+            m_typeToIcon.insert(typeName, getIcon(objDef));
+        }
+        prototype.setIcon(m_typeToIcon.value(typeName));
+        prototype.setData(ElementType, ItemTypeRole);
+        prototype.setIdNode(objDef->qualifiedTypeNameId);
     } else {
+        // it's a grouped propery like 'anchors'
         prototype.setText(typeName);
+        prototype.setIcon(m_icons->scriptBindingIcon());
+        prototype.setData(PropertyType, ItemTypeRole);
     }
-    if (!m_typeToIcon.contains(typeName)) {
-        m_typeToIcon.insert(typeName, getIcon(objDef));
-    }
-    prototype.setIcon(m_typeToIcon.value(typeName));
-    prototype.setData(ElementType, ItemTypeRole);
     prototype.setSourceLocation(getLocation(objDef));
     prototype.setNode(objDef);
-    prototype.setIdNode(objDef->qualifiedTypeNameId);
 
     return enterNode(prototype);
 }
-- 
GitLab