From 6dce72ff6ab8354b449dfad8eca834e9b963a90a Mon Sep 17 00:00:00 2001 From: Marco Bubke Date: Wed, 18 Dec 2013 15:17:07 +0100 Subject: [PATCH] QmlDesigner: Update ContentNotEditableIndicator for movements Task-number: QTCREATORBUG-10644 Change-Id: I23a02dae01faf703dbf9bd5bd643dc091a947eba Reviewed-by: Thomas Hartmann --- .../contentnoteditableindicator.cpp | 20 +++++++++++++++++++ .../formeditor/contentnoteditableindicator.h | 1 + .../components/formeditor/formeditoritem.cpp | 19 ++++++++++++++++++ .../components/formeditor/formeditoritem.h | 3 +++ .../components/formeditor/movetool.cpp | 1 + .../components/formeditor/selectiontool.cpp | 1 + 6 files changed, 45 insertions(+) diff --git a/src/plugins/qmldesigner/components/formeditor/contentnoteditableindicator.cpp b/src/plugins/qmldesigner/components/formeditor/contentnoteditableindicator.cpp index 6763b10f4b9..62166f1e471 100644 --- a/src/plugins/qmldesigner/components/formeditor/contentnoteditableindicator.cpp +++ b/src/plugins/qmldesigner/components/formeditor/contentnoteditableindicator.cpp @@ -30,6 +30,8 @@ #include "contentnoteditableindicator.h" #include "nodemetainfo.h" +#include + namespace QmlDesigner { ContentNotEditableIndicator::ContentNotEditableIndicator(LayerItem *layerItem) @@ -68,6 +70,24 @@ void ContentNotEditableIndicator::setItems(const QList &itemLis addAddiationEntries(itemList); } +void ContentNotEditableIndicator::updateItems(const QList &itemList) +{ + QSet affectedFormEditorItemItems; + affectedFormEditorItemItems.unite(itemList.toSet()); + foreach (FormEditorItem *formEditorItem, itemList) + affectedFormEditorItemItems.unite(formEditorItem->offspringFormEditorItems().toSet()); + + foreach (const EntryPair &entryPair, m_entryList) { + foreach (FormEditorItem *formEditorItem, affectedFormEditorItemItems) { + if (formEditorItem == entryPair.first) { + QRectF boundingRectangleInSceneSpace = formEditorItem->qmlItemNode().instanceSceneTransform().mapRect(formEditorItem->qmlItemNode().instanceBoundingRect()); + entryPair.second->setRect(boundingRectangleInSceneSpace); + entryPair.second->update(); + } + } + } +} + void ContentNotEditableIndicator::addAddiationEntries(const QList &itemList) { foreach (FormEditorItem *formEditorItem, itemList) { diff --git a/src/plugins/qmldesigner/components/formeditor/contentnoteditableindicator.h b/src/plugins/qmldesigner/components/formeditor/contentnoteditableindicator.h index 2567bfaab1b..9b3955f1828 100644 --- a/src/plugins/qmldesigner/components/formeditor/contentnoteditableindicator.h +++ b/src/plugins/qmldesigner/components/formeditor/contentnoteditableindicator.h @@ -49,6 +49,7 @@ public: void clear(); void setItems(const QList &itemList); + void updateItems(const QList &itemList); protected: void addAddiationEntries(const QList &itemList); diff --git a/src/plugins/qmldesigner/components/formeditor/formeditoritem.cpp b/src/plugins/qmldesigner/components/formeditor/formeditoritem.cpp index fbc83519013..326eedd119d 100644 --- a/src/plugins/qmldesigner/components/formeditor/formeditoritem.cpp +++ b/src/plugins/qmldesigner/components/formeditor/formeditoritem.cpp @@ -289,6 +289,20 @@ void FormEditorItem::paintComponentContentVisualisation(QPainter *painter, const painter->fillRect(clippinRectangle, Qt::BDiagPattern); } +QList FormEditorItem::offspringFormEditorItemsRecursive(const FormEditorItem *formEditorItem) const +{ + QList formEditorItemList; + + foreach (QGraphicsItem *item, formEditorItem->childItems()) { + FormEditorItem *formEditorItem = fromQGraphicsItem(item); + if (formEditorItem) { + formEditorItemList.append(formEditorItem); + } + } + + return formEditorItemList; +} + void FormEditorItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *, QWidget *) { if (!painter->isActive()) @@ -394,6 +408,11 @@ QList FormEditorItem::childFormEditorItems() const return formEditorItemList; } +QList FormEditorItem::offspringFormEditorItems() const +{ + return offspringFormEditorItemsRecursive(this); +} + bool FormEditorItem::isContainer() const { NodeMetaInfo nodeMetaInfo = qmlItemNode().modelNode().metaInfo(); diff --git a/src/plugins/qmldesigner/components/formeditor/formeditoritem.h b/src/plugins/qmldesigner/components/formeditor/formeditoritem.h index 29a2ff8d221..1d0e466993f 100644 --- a/src/plugins/qmldesigner/components/formeditor/formeditoritem.h +++ b/src/plugins/qmldesigner/components/formeditor/formeditoritem.h @@ -86,6 +86,8 @@ public: SnapLineMap rightSnappingOffsets() const; QList childFormEditorItems() const; + QList offspringFormEditorItems() const; + FormEditorScene *scene() const; FormEditorItem *parentItem() const; @@ -114,6 +116,7 @@ protected: void paintBoundingRect(QPainter *painter) const; void paintPlaceHolderForInvisbleItem(QPainter *painter) const; void paintComponentContentVisualisation(QPainter *painter, const QRectF &clippinRectangle) const; + QList offspringFormEditorItemsRecursive(const FormEditorItem *formEditorItem) const; private: // functions FormEditorItem(const QmlItemNode &qmlItemNode, FormEditorScene* scene); diff --git a/src/plugins/qmldesigner/components/formeditor/movetool.cpp b/src/plugins/qmldesigner/components/formeditor/movetool.cpp index ddec0e2dcf3..4f5e6a6e205 100644 --- a/src/plugins/qmldesigner/components/formeditor/movetool.cpp +++ b/src/plugins/qmldesigner/components/formeditor/movetool.cpp @@ -401,6 +401,7 @@ void MoveTool::formEditorItemsChanged(const QList &itemList) m_resizeIndicator.updateItems(selectedItemList); m_anchorIndicator.updateItems(selectedItemList); m_bindingIndicator.updateItems(selectedItemList); + m_contentNotEditableIndicator.updateItems(selectedItemList); } } diff --git a/src/plugins/qmldesigner/components/formeditor/selectiontool.cpp b/src/plugins/qmldesigner/components/formeditor/selectiontool.cpp index 3ecd9420247..68820d6cdb1 100644 --- a/src/plugins/qmldesigner/components/formeditor/selectiontool.cpp +++ b/src/plugins/qmldesigner/components/formeditor/selectiontool.cpp @@ -271,6 +271,7 @@ void SelectionTool::formEditorItemsChanged(const QList &itemLis m_resizeIndicator.updateItems(selectedItemList); m_anchorIndicator.updateItems(selectedItemList); m_bindingIndicator.updateItems(selectedItemList); + m_contentNotEditableIndicator.updateItems(selectedItemList); } void SelectionTool::instancesCompleted(const QList &/*itemList*/)