From 6f0ea53f8a78a3aeb1a4130363e9b48496dd8613 Mon Sep 17 00:00:00 2001 From: Marco Bubke Date: Tue, 24 Jun 2014 19:38:45 +0200 Subject: [PATCH] QmlDesigner: Fix quick position update for states It is ugly but the workaround is ugly anyway. Change-Id: Idcd55e19e9c97b0bfce0863cfcbe9f7ca18bf5bf Reviewed-by: Tim Jenssen --- .../instances/nodeinstanceview.cpp | 43 ++++++++++++++++--- 1 file changed, 37 insertions(+), 6 deletions(-) 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); + } } }