From 9ae3e461ce668fb715db01c8da22108c166dfcce Mon Sep 17 00:00:00 2001 From: Marco Bubke Date: Mon, 14 Oct 2013 19:22:01 +0200 Subject: [PATCH] QmlDesigner: Fix resize handle shown at start Task-number: QTCREATORBUG-10374 Change-Id: I68ec998ad156a74d37e0321e1538b0936fded8da Reviewed-by: Thomas Hartmann --- .../components/formeditor/abstractformeditortool.cpp | 12 ++++++++++++ .../components/formeditor/abstractformeditortool.h | 2 ++ .../qmldesigner/components/formeditor/movetool.cpp | 10 ++++++---- .../qmldesigner/components/formeditor/resizetool.cpp | 8 +++++--- .../components/formeditor/selectiontool.cpp | 10 ++++++---- .../qmldesigner/designercore/include/abstractview.h | 1 + .../qmldesigner/designercore/model/abstractview.cpp | 5 +++++ 7 files changed, 37 insertions(+), 11 deletions(-) diff --git a/src/plugins/qmldesigner/components/formeditor/abstractformeditortool.cpp b/src/plugins/qmldesigner/components/formeditor/abstractformeditortool.cpp index 0f70ca0cd77..17ad8e469e1 100644 --- a/src/plugins/qmldesigner/components/formeditor/abstractformeditortool.cpp +++ b/src/plugins/qmldesigner/components/formeditor/abstractformeditortool.cpp @@ -190,6 +190,18 @@ FormEditorItem* AbstractFormEditorTool::topFormEditorItemWithRootItem(const QLis return 0; } +QList AbstractFormEditorTool::filterSelectedModelNodes(const QList &itemList) const +{ + QList filteredItemList; + + foreach (FormEditorItem *item, itemList) { + if (view()->isSelectedModelNode(item->qmlItemNode())) + filteredItemList.append(item); + } + + return filteredItemList; +} + void AbstractFormEditorTool::dropEvent(QGraphicsSceneDragDropEvent * /* event */) { } diff --git a/src/plugins/qmldesigner/components/formeditor/abstractformeditortool.h b/src/plugins/qmldesigner/components/formeditor/abstractformeditortool.h index 0ec408738da..5238eb81764 100644 --- a/src/plugins/qmldesigner/components/formeditor/abstractformeditortool.h +++ b/src/plugins/qmldesigner/components/formeditor/abstractformeditortool.h @@ -99,6 +99,8 @@ public: static FormEditorItem* topFormEditorItem(const QList &itemList); static FormEditorItem* topFormEditorItemWithRootItem(const QList &itemList); + QList filterSelectedModelNodes(const QList &itemList) const; + protected: virtual void selectedItemsChanged(const QList &itemList) = 0; virtual void showContextMenu(QGraphicsSceneMouseEvent *event); diff --git a/src/plugins/qmldesigner/components/formeditor/movetool.cpp b/src/plugins/qmldesigner/components/formeditor/movetool.cpp index 8a6132d4068..ddec0e2dcf3 100644 --- a/src/plugins/qmldesigner/components/formeditor/movetool.cpp +++ b/src/plugins/qmldesigner/components/formeditor/movetool.cpp @@ -395,10 +395,12 @@ QList MoveTool::movingItems(const QList &selec void MoveTool::formEditorItemsChanged(const QList &itemList) { - m_selectionIndicator.updateItems(itemList); - m_resizeIndicator.updateItems(itemList); - m_anchorIndicator.updateItems(itemList); - m_bindingIndicator.updateItems(itemList); + const QList selectedItemList = filterSelectedModelNodes(itemList); + + m_selectionIndicator.updateItems(selectedItemList); + m_resizeIndicator.updateItems(selectedItemList); + m_anchorIndicator.updateItems(selectedItemList); + m_bindingIndicator.updateItems(selectedItemList); } } diff --git a/src/plugins/qmldesigner/components/formeditor/resizetool.cpp b/src/plugins/qmldesigner/components/formeditor/resizetool.cpp index 48f36d6fbd6..08fa85ff319 100644 --- a/src/plugins/qmldesigner/components/formeditor/resizetool.cpp +++ b/src/plugins/qmldesigner/components/formeditor/resizetool.cpp @@ -192,9 +192,11 @@ void ResizeTool::clear() void ResizeTool::formEditorItemsChanged(const QList &itemList) { - m_selectionIndicator.updateItems(itemList); - m_resizeIndicator.updateItems(itemList); - m_anchorIndicator.updateItems(itemList); + const QList selectedItemList = filterSelectedModelNodes(itemList); + + m_selectionIndicator.updateItems(selectedItemList); + m_resizeIndicator.updateItems(selectedItemList); + m_anchorIndicator.updateItems(selectedItemList); } void ResizeTool::instancesCompleted(const QList &/*itemList*/) diff --git a/src/plugins/qmldesigner/components/formeditor/selectiontool.cpp b/src/plugins/qmldesigner/components/formeditor/selectiontool.cpp index eb51bb808d4..3ecd9420247 100644 --- a/src/plugins/qmldesigner/components/formeditor/selectiontool.cpp +++ b/src/plugins/qmldesigner/components/formeditor/selectiontool.cpp @@ -265,10 +265,12 @@ void SelectionTool::selectedItemsChanged(const QList &itemList) void SelectionTool::formEditorItemsChanged(const QList &itemList) { - m_selectionIndicator.updateItems(itemList); - m_resizeIndicator.updateItems(itemList); - m_anchorIndicator.updateItems(itemList); - m_bindingIndicator.updateItems(itemList); + const QList selectedItemList = filterSelectedModelNodes(itemList); + + m_selectionIndicator.updateItems(selectedItemList); + m_resizeIndicator.updateItems(selectedItemList); + m_anchorIndicator.updateItems(selectedItemList); + m_bindingIndicator.updateItems(selectedItemList); } void SelectionTool::instancesCompleted(const QList &/*itemList*/) diff --git a/src/plugins/qmldesigner/designercore/include/abstractview.h b/src/plugins/qmldesigner/designercore/include/abstractview.h index ef03f82d67c..b3e61fe1a0d 100644 --- a/src/plugins/qmldesigner/designercore/include/abstractview.h +++ b/src/plugins/qmldesigner/designercore/include/abstractview.h @@ -152,6 +152,7 @@ public: void clearSelectedModelNodes(); bool hasSelectedModelNodes() const; bool hasSingleSelectedModelNode() const; + bool isSelectedModelNode(const ModelNode &modelNode) const; QList selectedModelNodes() const; ModelNode firstSelectedModelNode() const; diff --git a/src/plugins/qmldesigner/designercore/model/abstractview.cpp b/src/plugins/qmldesigner/designercore/model/abstractview.cpp index b3d5af69632..20efe516f40 100644 --- a/src/plugins/qmldesigner/designercore/model/abstractview.cpp +++ b/src/plugins/qmldesigner/designercore/model/abstractview.cpp @@ -293,6 +293,11 @@ bool AbstractView::hasSingleSelectedModelNode() const return model()->d->selectedNodes().count() == 1; } +bool AbstractView::isSelectedModelNode(const ModelNode &modelNode) const +{ + return model()->d->selectedNodes().contains(modelNode.internalNode()); +} + /*! Sets the list of nodes to the actual selected nodes. Returns a list of the selected nodes.