diff options
author | Thomas Hartmann <thomas.hartmann@qt.io> | 2019-10-29 17:55:56 +0100 |
---|---|---|
committer | Thomas Hartmann <thomas.hartmann@qt.io> | 2019-10-30 09:46:35 +0000 |
commit | 17dbc74cca3214d5e5bfcca846eb8ad4a55c5053 (patch) | |
tree | 6fb673f5d9153afbddafec012a5bac9b122418fe /share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5informationnodeinstanceserver.cpp | |
parent | 70373fbf1ac4510bf862a2ae45b2d4c2f52bcfca (diff) | |
download | qt-creator-17dbc74cca3214d5e5bfcca846eb8ad4a55c5053.tar.gz |
QmlDesigner: Avoid reflection when setting values from puppet
When editing values in the puppet we did not take reflection into account.
This means that any changes we did from the puppet for notified back
from Qt Creator. Since those notifications are asynchronous this leads
to various issues especially when more than one axis (property) was modified
at once.
This patch avoids reflection. The notifications are 'flagged' and then
ignored in the Qt5InformationNodeInstanceServer.
While a node is moved we ignore any changes to that specific node.
Task-number: QDS-1191
Change-Id: Ic74e22ea71832ce12321f9085a7296c2a7d9893d
Reviewed-by: Mahmoud Badri <mahmoud.badri@qt.io>
Reviewed-by: Thomas Hartmann <thomas.hartmann@qt.io>
Diffstat (limited to 'share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5informationnodeinstanceserver.cpp')
-rw-r--r-- | share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5informationnodeinstanceserver.cpp | 28 |
1 files changed, 27 insertions, 1 deletions
diff --git a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5informationnodeinstanceserver.cpp b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5informationnodeinstanceserver.cpp index 879918e95f..d97cc2d503 100644 --- a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5informationnodeinstanceserver.cpp +++ b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5informationnodeinstanceserver.cpp @@ -56,6 +56,7 @@ #include "tokencommand.h" #include "removesharedmemorycommand.h" #include "changeselectioncommand.h" +#include "objectnodeinstance.h" #include "dummycontextobject.h" #include "../editor3d/cameracontrolhelper.h" @@ -166,10 +167,18 @@ void Qt5InformationNodeInstanceServer::modifyVariantValue( targetPopertyName = propertyName; auto *obj = node.value<QObject *>(); + if (obj) { + ServerNodeInstance instance = instanceForObject(obj); + + if (option == ValuesModifiedCommand::TransactionOption::Start) + instance.setModifiedFlag(true); + else if (option == ValuesModifiedCommand::TransactionOption::End) + instance.setModifiedFlag(false); + // We do have to split position into position.x, position.y, position.z ValuesModifiedCommand command = createValuesModifiedCommand(vectorToPropertyValue( - instanceForObject(obj), + instance, targetPopertyName, obj->property(propertyName))); @@ -539,4 +548,21 @@ void Qt5InformationNodeInstanceServer::changeSelection(const ChangeSelectionComm } } +void Qt5InformationNodeInstanceServer::changePropertyValues(const ChangeValuesCommand &command) +{ + bool hasDynamicProperties = false; + const QVector<PropertyValueContainer> values = command.valueChanges(); + for (const PropertyValueContainer &container : values) { + if (!container.isReflected()) { + hasDynamicProperties |= container.isDynamic(); + setInstancePropertyVariant(container); + } + } + + if (hasDynamicProperties) + refreshBindings(); + + startRenderTimer(); +} + } // namespace QmlDesigner |