diff --git a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5informationnodeinstanceserver.cpp b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5informationnodeinstanceserver.cpp index 0cb95c98d9c..8dc4ab79099 100644 --- a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5informationnodeinstanceserver.cpp +++ b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5informationnodeinstanceserver.cpp @@ -63,6 +63,7 @@ #include +#include #include #include #include @@ -118,18 +119,45 @@ void Qt5InformationNodeInstanceServer::objectClicked(const QVariant &object) selectInstance(instance); } +QVector +Qt5InformationNodeInstanceServer::vectorToPropertyValue( + const ServerNodeInstance &instance, + const PropertyName &propertyName, + const QVariant &variant) +{ + QVector result; + + auto vector3d = variant.value(); + + if (vector3d.isNull()) + return result; + + const PropertyName dot = propertyName.isEmpty() ? "" : "."; + + InstancePropertyValueTriple propTriple; + propTriple.instance = instance; + propTriple.propertyName = propertyName + dot + PropertyName("x"); + propTriple.propertyValue = vector3d.x(); + result.append(propTriple); + propTriple.propertyName = propertyName + dot + PropertyName("y"); + propTriple.propertyValue = vector3d.y(); + result.append(propTriple); + propTriple.propertyName = propertyName + dot + PropertyName("z"); + propTriple.propertyValue = vector3d.z(); + result.append(propTriple); + + return result; +} + void Qt5InformationNodeInstanceServer::handleObjectPositionCommit(const QVariant &object) { - QObject *obj = object.value(); + auto *obj = object.value(); if (obj) { - ServerNodeInstance instance = instanceForObject(obj); - QVector modifiedpropertyList; - InstancePropertyValueTriple propTriple; - propTriple.instance = instance; - propTriple.propertyName = "position"; - propTriple.propertyValue = obj->property(propTriple.propertyName.constData()); - modifiedpropertyList.append(propTriple); - nodeInstanceClient()->valuesModified(createValuesModifiedCommand(modifiedpropertyList)); + /* We do have to split position into position.x, position.y, position.z */ + nodeInstanceClient()->valuesModified(createValuesModifiedCommand(vectorToPropertyValue( + instanceForObject(obj), + "position", + obj->property("position")))); } } diff --git a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5informationnodeinstanceserver.h b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5informationnodeinstanceserver.h index 243b3339049..7a9334acc07 100644 --- a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5informationnodeinstanceserver.h +++ b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5informationnodeinstanceserver.h @@ -61,6 +61,9 @@ private: QObject *createEditView3D(QQmlEngine *engine); void setup3DEditView(const QList &instanceList); QObject *findRootNodeOf3DViewport(const QList &instanceList) const; + QVector vectorToPropertyValue(const ServerNodeInstance &instance, + const PropertyName &propertyName, + const QVariant &variant); QSet m_parentChangedSet; QList m_completedComponentList;