diff --git a/src/plugins/qmldesigner/designercore/instances/nodeinstanceview.cpp b/src/plugins/qmldesigner/designercore/instances/nodeinstanceview.cpp index f8d54b57f4b..f299c6b5a8e 100644 --- a/src/plugins/qmldesigner/designercore/instances/nodeinstanceview.cpp +++ b/src/plugins/qmldesigner/designercore/instances/nodeinstanceview.cpp @@ -43,6 +43,8 @@ #include "bindingproperty.h" #include "nodeabstractproperty.h" #include "nodelistproperty.h" +#include "nodeproperty.h" +#include "qmlchangeset.h" #include "createscenecommand.h" #include "createinstancescommand.h" @@ -674,19 +676,48 @@ NodeInstance NodeInstanceView::activeStateInstance() const return m_activeStateInstance; } +void setXValue(NodeInstance &instance, const VariantProperty &variantProperty, QMultiHash &informationChangeHash) +{ + instance.setX(variantProperty.value().toDouble()); + informationChangeHash.insert(variantProperty.parentModelNode(), Transform); +} + +void setYValue(NodeInstance &instance, const VariantProperty &variantProperty, QMultiHash &informationChangeHash) +{ + instance.setY(variantProperty.value().toDouble()); + informationChangeHash.insert(variantProperty.parentModelNode(), Transform); +} + + void NodeInstanceView::updatePosition(const QList &propertyList) { QMultiHash informationChangeHash; foreach (const VariantProperty &variantProperty, propertyList) { if (variantProperty.name() == "x") { - NodeInstance instance = instanceForModelNode(variantProperty.parentModelNode()); - instance.setX(variantProperty.value().toDouble()); - informationChangeHash.insert(variantProperty.parentModelNode(), Transform); + const ModelNode modelNode = variantProperty.parentModelNode(); + if (QmlPropertyChanges::isValidQmlPropertyChanges(modelNode)) { + ModelNode targetModelNode = QmlPropertyChanges(modelNode).target(); + if (targetModelNode.isValid()) { + NodeInstance instance = instanceForModelNode(targetModelNode); + setXValue(instance, variantProperty, informationChangeHash); + } + } else { + NodeInstance instance = instanceForModelNode(modelNode); + setXValue(instance, variantProperty, informationChangeHash); + } } else if (variantProperty.name() == "y") { - NodeInstance instance = instanceForModelNode(variantProperty.parentModelNode()); - instance.setY(variantProperty.value().toDouble()); - informationChangeHash.insert(variantProperty.parentModelNode(), Transform); + const ModelNode modelNode = variantProperty.parentModelNode(); + if (QmlPropertyChanges::isValidQmlPropertyChanges(modelNode)) { + ModelNode targetModelNode = QmlPropertyChanges(modelNode).target(); + if (targetModelNode.isValid()) { + NodeInstance instance = instanceForModelNode(targetModelNode); + setYValue(instance, variantProperty, informationChangeHash); + } + } else { + NodeInstance instance = instanceForModelNode(modelNode); + setYValue(instance, variantProperty, informationChangeHash); + } } }