From 8e5bcfce5b1f29250be13ff8fd5e11c549dc783d Mon Sep 17 00:00:00 2001
From: Marco Bubke <marco.bubke@nokia.com>
Date: Tue, 19 Jan 2010 14:34:44 +0100
Subject: [PATCH] Highlight selectable item under the mouse in the formeditor

---
 .../components/formeditor/formeditoritem.cpp   | 15 +++++++++++++--
 .../components/formeditor/formeditoritem.h     |  3 +++
 .../components/formeditor/formeditorscene.cpp  | 10 ++++++++++
 .../components/formeditor/formeditorscene.h    |  2 ++
 .../components/formeditor/selectiontool.cpp    | 18 ++++++++++++++++++
 5 files changed, 46 insertions(+), 2 deletions(-)

diff --git a/src/plugins/qmldesigner/components/formeditor/formeditoritem.cpp b/src/plugins/qmldesigner/components/formeditor/formeditoritem.cpp
index 9918b67ba92..8eaf7299fee 100644
--- a/src/plugins/qmldesigner/components/formeditor/formeditoritem.cpp
+++ b/src/plugins/qmldesigner/components/formeditor/formeditoritem.cpp
@@ -160,6 +160,14 @@ void FormEditorItem::setAttentionHighlight(double value)
     update();
 }
 
+void FormEditorItem::setHighlightBoundingRect(bool highlight)
+{
+    if (m_highlightBoundingRect != highlight) {
+        m_highlightBoundingRect = highlight;
+        update();
+    }
+}
+
 FormEditorItem::~FormEditorItem()
 {
    scene()->removeItemFromHash(this);
@@ -202,7 +210,10 @@ void FormEditorItem::paintBoundingRect(QPainter *painter) const
             }
             break;
         case FormEditorScene::NormalMode: {
-                pen.setColor(Qt::gray);
+                if (m_highlightBoundingRect)
+                    pen.setColor("#AAAAAA");
+                else
+                    pen.setColor("#888888");
             }
             break;
     }
@@ -232,7 +243,7 @@ void FormEditorItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *,
 
     painter->setRenderHint(QPainter::Antialiasing, false);
 
-    if (scene()->showBoundingRects())
+    if (scene()->showBoundingRects() || m_highlightBoundingRect)
         paintBoundingRect(painter);
 
     painter->restore();
diff --git a/src/plugins/qmldesigner/components/formeditor/formeditoritem.h b/src/plugins/qmldesigner/components/formeditor/formeditoritem.h
index b5ffc769923..9594f4a17a5 100644
--- a/src/plugins/qmldesigner/components/formeditor/formeditoritem.h
+++ b/src/plugins/qmldesigner/components/formeditor/formeditoritem.h
@@ -96,6 +96,8 @@ public:
 
     FormEditorView *formEditorView() const;
 
+    void setHighlightBoundingRect(bool highlight);
+
 protected:
     AbstractFormEditorTool* tool() const;
     void paintBoundingRect(QPainter *painter) const;
@@ -118,6 +120,7 @@ private: // variables
     QRectF m_boundingRect;
     double m_borderWidth;
     double m_opacity;
+    bool m_highlightBoundingRect;
 };
 
 
diff --git a/src/plugins/qmldesigner/components/formeditor/formeditorscene.cpp b/src/plugins/qmldesigner/components/formeditor/formeditorscene.cpp
index c521d1935ca..be832802a7a 100644
--- a/src/plugins/qmldesigner/components/formeditor/formeditorscene.cpp
+++ b/src/plugins/qmldesigner/components/formeditor/formeditorscene.cpp
@@ -360,6 +360,16 @@ void FormEditorScene::clearFormEditorItems()
     }
 }
 
+void FormEditorScene::highlightBoundingRect(FormEditorItem *highlighItem)
+{
+    foreach(FormEditorItem *item, allFormEditorItems()) {
+        if (item == highlighItem)
+            item->setHighlightBoundingRect(true);
+        else
+            item->setHighlightBoundingRect(false);
+    }
+}
+
 void FormEditorScene::setShowBoundingRects(bool show)
 {
     m_showBoundingRects = show;
diff --git a/src/plugins/qmldesigner/components/formeditor/formeditorscene.h b/src/plugins/qmldesigner/components/formeditor/formeditorscene.h
index bc521fb02ee..ec1eebd22ec 100644
--- a/src/plugins/qmldesigner/components/formeditor/formeditorscene.h
+++ b/src/plugins/qmldesigner/components/formeditor/formeditorscene.h
@@ -93,6 +93,8 @@ public:
 
     void clearFormEditorItems();
 
+    void highlightBoundingRect(FormEditorItem *formEditorItem);
+
 public slots:
     void setShowBoundingRects(bool show);
     bool showBoundingRects() const;
diff --git a/src/plugins/qmldesigner/components/formeditor/selectiontool.cpp b/src/plugins/qmldesigner/components/formeditor/selectiontool.cpp
index 3588f9e4b26..b0a03d137b7 100644
--- a/src/plugins/qmldesigner/components/formeditor/selectiontool.cpp
+++ b/src/plugins/qmldesigner/components/formeditor/selectiontool.cpp
@@ -134,6 +134,24 @@ void SelectionTool::hoverMoveEvent(const QList<QGraphicsItem*> &itemList,
 
     if (topSelectedItemIsMovable(itemList))
         view()->changeToMoveTool();
+
+
+    FormEditorItem *topSelectableItem = 0;
+
+    foreach(QGraphicsItem* item, itemList)
+    {
+        FormEditorItem *formEditorItem = FormEditorItem::fromQGraphicsItem(item);
+
+        if (formEditorItem
+            && !formEditorItem->qmlItemNode().isRootNode()
+            && (formEditorItem->qmlItemNode().hasShowContent() || !m_selectOnlyContentItems))
+        {
+            topSelectableItem = formEditorItem;
+            break;
+        }
+    }
+
+    scene()->highlightBoundingRect(topSelectableItem);
 }
 
 void SelectionTool::mouseReleaseEvent(const QList<QGraphicsItem*> &/*itemList*/,
-- 
GitLab