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