aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--share/qtcreator/qml/qmlpuppet/qml2puppet/instances/nodeinstanceserver.cpp25
-rw-r--r--share/qtcreator/qml/qmlpuppet/qml2puppet/instances/nodeinstanceserver.h7
-rw-r--r--share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5informationnodeinstanceserver.cpp9
-rw-r--r--share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5informationnodeinstanceserver.h1
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);