From a060480e822ddf49ac4239cf857f9d25d6c497f6 Mon Sep 17 00:00:00 2001
From: Marco Bubke <marco.bubke@nokia.com>
Date: Mon, 18 Jul 2011 21:16:23 +0200
Subject: [PATCH] QmlDesigner.NodeInstances: Item with content are selectable

If a list view for example has content it is now selectable too.

Task-number: QTCREATORBUG-5476
Change-Id: Ifb0902edcda064e488337c94fc4e575994da3ef1
Reviewed-on: http://codereview.qt.nokia.com/1786
Reviewed-by: Qt Sanity Bot <qt_sanity_bot@ovi.com>
Reviewed-by: Thomas Hartmann <Thomas.Hartmann@nokia.com>
---
 .../instances/graphicsobjectnodeinstance.cpp  | 23 ++++++++++++++++++-
 .../instances/graphicsobjectnodeinstance.h    |  2 +-
 2 files changed, 23 insertions(+), 2 deletions(-)

diff --git a/share/qtcreator/qml/qmlpuppet/qmlpuppet/instances/graphicsobjectnodeinstance.cpp b/share/qtcreator/qml/qmlpuppet/qmlpuppet/instances/graphicsobjectnodeinstance.cpp
index 5aa25d4ef97..8ed7b127213 100644
--- a/share/qtcreator/qml/qmlpuppet/qmlpuppet/instances/graphicsobjectnodeinstance.cpp
+++ b/share/qtcreator/qml/qmlpuppet/qmlpuppet/instances/graphicsobjectnodeinstance.cpp
@@ -34,6 +34,8 @@
 
 #include <QGraphicsObject>
 #include "private/qgraphicsitem_p.h"
+#include <private/qdeclarativemetatype_p.h>
+
 #include <QStyleOptionGraphicsItem>
 #include <QPixmap>
 #include <QSizeF>
@@ -57,9 +59,28 @@ QGraphicsObject *GraphicsObjectNodeInstance::graphicsObject() const
     return static_cast<QGraphicsObject*>(object());
 }
 
+bool GraphicsObjectNodeInstance::childrenHasContent(QGraphicsItem *graphicsItem) const
+{
+    QGraphicsObject *graphicsObject = graphicsItem->toGraphicsObject();
+
+    if (graphicsObject && !nodeInstanceServer()->hasInstanceForObject(graphicsObject) && !graphicsItem->flags().testFlag(QGraphicsItem::ItemHasNoContents))
+        return true;
+
+    foreach (QGraphicsItem *childItem, graphicsItem->childItems()) {
+        bool childHasContent = childrenHasContent(childItem);
+        if (childHasContent)
+            return true;
+    }
+
+    return false;
+}
+
 bool GraphicsObjectNodeInstance::hasContent() const
 {
-    return m_hasContent;
+    if (m_hasContent)
+        return true;
+
+    return childrenHasContent(graphicsObject());
 }
 
 QList<ServerNodeInstance> GraphicsObjectNodeInstance::childItems() const
diff --git a/share/qtcreator/qml/qmlpuppet/qmlpuppet/instances/graphicsobjectnodeinstance.h b/share/qtcreator/qml/qmlpuppet/qmlpuppet/instances/graphicsobjectnodeinstance.h
index 0fab8049637..781a18508cf 100644
--- a/share/qtcreator/qml/qmlpuppet/qmlpuppet/instances/graphicsobjectnodeinstance.h
+++ b/share/qtcreator/qml/qmlpuppet/qmlpuppet/instances/graphicsobjectnodeinstance.h
@@ -88,7 +88,7 @@ protected:
     QGraphicsObject *graphicsObject() const;
     void paintRecursively(QGraphicsItem *graphicsItem, QPainter *painter) const;
     QRectF boundingRectWithStepChilds(QGraphicsItem *parentItem) const;
-
+    bool childrenHasContent(QGraphicsItem *graphicsItem) const;
 
 private: // variables
     bool m_hasContent;
-- 
GitLab