From 0b2cab590abbd4a24999f6ae5d0a45dcd978c34b Mon Sep 17 00:00:00 2001 From: Marco Bubke Date: Tue, 1 Jul 2014 18:35:25 +0200 Subject: [PATCH] QmlDesigner: Update the parent too for bypass manipulation Task-number: QTCREATORBUG-12570 Change-Id: I038bfb233c0a8a734ae82b1b31fca8f5aa8c9763 Reviewed-by: Tim Jenssen --- .../components/formeditor/movemanipulator.cpp | 3 -- .../designercore/include/nodeinstanceview.h | 1 + .../instances/nodeinstanceview.cpp | 29 +++++++++++++++++-- 3 files changed, 27 insertions(+), 6 deletions(-) diff --git a/src/plugins/qmldesigner/components/formeditor/movemanipulator.cpp b/src/plugins/qmldesigner/components/formeditor/movemanipulator.cpp index fd6a7383c2b..fd901b08c15 100644 --- a/src/plugins/qmldesigner/components/formeditor/movemanipulator.cpp +++ b/src/plugins/qmldesigner/components/formeditor/movemanipulator.cpp @@ -99,9 +99,6 @@ void MoveManipulator::synchronizeParent(const QList &itemList, } } } - - if (!parentNode.metaInfo().isLayoutable()) - update(m_lastPosition, Snapper::NoSnapping, UseBaseState); } void MoveManipulator::synchronizeInstanceParent(const QList &itemList) diff --git a/src/plugins/qmldesigner/designercore/include/nodeinstanceview.h b/src/plugins/qmldesigner/designercore/include/nodeinstanceview.h index 7d9759e364c..bc027c0f71d 100644 --- a/src/plugins/qmldesigner/designercore/include/nodeinstanceview.h +++ b/src/plugins/qmldesigner/designercore/include/nodeinstanceview.h @@ -136,6 +136,7 @@ public: NodeInstance activeStateInstance() const; + void updateChildren(const NodeAbstractProperty &newPropertyParent); void updatePosition(const QList& propertyList); void valuesChanged(const ValuesChangedCommand &command); diff --git a/src/plugins/qmldesigner/designercore/instances/nodeinstanceview.cpp b/src/plugins/qmldesigner/designercore/instances/nodeinstanceview.cpp index f299c6b5a8e..15de5c2242f 100644 --- a/src/plugins/qmldesigner/designercore/instances/nodeinstanceview.cpp +++ b/src/plugins/qmldesigner/designercore/instances/nodeinstanceview.cpp @@ -387,8 +387,10 @@ void NodeInstanceView::variantPropertiesChanged(const QList& pr void NodeInstanceView::nodeReparented(const ModelNode &node, const NodeAbstractProperty &newPropertyParent, const NodeAbstractProperty &oldPropertyParent, AbstractView::PropertyChangeFlags /*propertyChange*/) { - if (!isSkippedNode(node)) + if (!isSkippedNode(node)) { + updateChildren(newPropertyParent); nodeInstanceServer()->reparentInstances(createReparentInstancesCommand(node, newPropertyParent, oldPropertyParent)); + } } void NodeInstanceView::nodeAboutToBeReparented(const ModelNode &/*node*/, const NodeAbstractProperty &/*newPropertyParent*/, const NodeAbstractProperty &/*oldPropertyParent*/, AbstractView::PropertyChangeFlags /*propertyChange*/) @@ -676,6 +678,25 @@ NodeInstance NodeInstanceView::activeStateInstance() const return m_activeStateInstance; } +void NodeInstanceView::updateChildren(const NodeAbstractProperty &newPropertyParent) +{ + QVector childNodeVector = newPropertyParent.directSubNodes().toVector(); + + qint32 parentInstanceId = newPropertyParent.parentModelNode().internalId(); + + foreach (const ModelNode &childNode, childNodeVector) { + qint32 instanceId = childNode.internalId(); + if (hasInstanceForId(instanceId)) { + NodeInstance instance = instanceForId(instanceId); + if (!instance.updateTransform()) + instance.setParentId(parentInstanceId); + } + } + + if (!childNodeVector.isEmpty()) + emitInstancesChildrenChanged(childNodeVector); +} + void setXValue(NodeInstance &instance, const VariantProperty &variantProperty, QMultiHash &informationChangeHash) { instance.setX(variantProperty.value().toDouble()); @@ -1224,8 +1245,10 @@ void NodeInstanceView::childrenChanged(const ChildrenChangedCommand &command) foreach (qint32 instanceId, command.childrenInstances()) { if (hasInstanceForId(instanceId)) { NodeInstance instance = instanceForId(instanceId); - instance.setParentId(command.parentInstanceId()); - childNodeVector.append(instance.modelNode()); + if (instance.updateTransform()) { + instance.setParentId(command.parentInstanceId()); + childNodeVector.append(instance.modelNode()); + } } }