aboutsummaryrefslogtreecommitdiffstats
path: root/share
diff options
context:
space:
mode:
authorThomas Hartmann <thomas.hartmann@qt.io>2019-10-23 16:29:31 +0200
committerThomas Hartmann <thomas.hartmann@qt.io>2019-10-24 08:22:11 +0000
commit946943203566167a2f8d3e785d6250ed8a8a87cd (patch)
treee823e51c05eba795eb549bca6e612047570ed845 /share
parent0ddd473cc026c2e4d33ac1a65ee8ffdeb9ac85af (diff)
QmlDesigner: Add Qt5InformationNodeInstanceServer::modifyProperties()
This method allows to modify properties in the data model from the puppet. For performance reasons, properties should be modified in bulks. Each bulk will be one step on the undo stack. Change-Id: I7dbef02781706c8638981512ca0ec45d24c54545 Reviewed-by: Miikka Heikkinen <miikka.heikkinen@qt.io> Reviewed-by: Thomas Hartmann <thomas.hartmann@qt.io>
Diffstat (limited to 'share')
-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);