diff options
4 files changed, 42 insertions, 0 deletions
diff --git a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/nodeinstanceserver.cpp b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/nodeinstanceserver.cpp index bd293488f1..9103ef5de0 100644 --- a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/nodeinstanceserver.cpp +++ b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/nodeinstanceserver.cpp @@ -1190,6 +1190,31 @@ ValuesChangedCommand NodeInstanceServer::createValuesChangedCommand(const QVecto return ValuesChangedCommand(valueVector); } +ValuesModifiedCommand NodeInstanceServer::createValuesModifiedCommand( + const QVector<InstancePropertyValueTriple> &propertyList) const +{ + QVector<PropertyValueContainer> valueVector; + + for (const InstancePropertyValueTriple &property : propertyList) { + const PropertyName propertyName = property.propertyName; + const ServerNodeInstance instance = property.instance; + const QVariant propertyValue = property.propertyValue; + + if (instance.isValid()) { + if (QMetaType::isRegistered(propertyValue.userType()) + && supportedVariantType(propertyValue.type())) { + valueVector.append(PropertyValueContainer(instance.instanceId(), + propertyName, + propertyValue, + PropertyName())); + } + } + } + + return ValuesModifiedCommand(valueVector); +} + + QByteArray NodeInstanceServer::importCode() const { return m_importCode; diff --git a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/nodeinstanceserver.h b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/nodeinstanceserver.h index 65c2bdfac1..7af63c0b5b 100644 --- a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/nodeinstanceserver.h +++ b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/nodeinstanceserver.h @@ -60,6 +60,7 @@ namespace QmlDesigner { class NodeInstanceClientInterface; class ValuesChangedCommand; +class ValuesModifiedCommand; class PixmapChangedCommand; class InformationChangedCommand; class ChildrenChangedCommand; @@ -82,6 +83,11 @@ public: using IdPropertyPair = QPair<qint32, QString>; using InstancePropertyPair= QPair<ServerNodeInstance, PropertyName>; using DummyPair = QPair<QString, QPointer<QObject> >; + using InstancePropertyValueTriple = struct { + ServerNodeInstance instance; + PropertyName propertyName; + QVariant propertyValue; + }; explicit NodeInstanceServer(NodeInstanceClientInterface *nodeInstanceClient); @@ -168,6 +174,7 @@ protected: ValuesChangedCommand createValuesChangedCommand(const QList<ServerNodeInstance> &instanceList) const; ValuesChangedCommand createValuesChangedCommand(const QVector<InstancePropertyPair> &propertyList) const; + ValuesModifiedCommand createValuesModifiedCommand(const QVector<InstancePropertyValueTriple> &propertyList) const; PixmapChangedCommand createPixmapChangedCommand(const QList<ServerNodeInstance> &instanceList) const; InformationChangedCommand createAllInformationChangedCommand(const QList<ServerNodeInstance> &instanceList, bool initial = false) const; ChildrenChangedCommand createChildrenChangedCommand(const ServerNodeInstance &parentInstance, const QList<ServerNodeInstance> &instanceList) const; diff --git a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5informationnodeinstanceserver.cpp b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5informationnodeinstanceserver.cpp index 9413c74c0c..b8aabfffc7 100644 --- a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5informationnodeinstanceserver.cpp +++ b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5informationnodeinstanceserver.cpp @@ -165,6 +165,15 @@ void Qt5InformationNodeInstanceServer::selectInstance(const ServerNodeInstance & nodeInstanceClient()->selectionChanged(createChangeSelectionCommand({instance})); } +/* This method allows changing property values from the puppet + * For performance reasons (and the undo stack) properties should always be modifed in 'bulks'. + */ +void Qt5InformationNodeInstanceServer::modifyProperties( + const QVector<NodeInstanceServer::InstancePropertyValueTriple> &properties) +{ + nodeInstanceClient()->valuesModified(createValuesModifiedCommand(properties)); +} + QObject *Qt5InformationNodeInstanceServer::findRootNodeOf3DViewport( const QList<ServerNodeInstance> &instanceList) const { diff --git a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5informationnodeinstanceserver.h b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5informationnodeinstanceserver.h index 962336ccdc..6f05659426 100644 --- a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5informationnodeinstanceserver.h +++ b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5informationnodeinstanceserver.h @@ -51,6 +51,7 @@ protected: bool isDirtyRecursiveForNonInstanceItems(QQuickItem *item) const; bool isDirtyRecursiveForParentInstances(QQuickItem *item) const; void selectInstance(const ServerNodeInstance &instance); + void modifyProperties(const QVector<InstancePropertyValueTriple> &properties); private: void setup3DEditView(const QList<ServerNodeInstance> &instanceList); |