From f6988e8319946d008183f33c5276bbbee561ddfd Mon Sep 17 00:00:00 2001 From: Thomas Hartmann Date: Fri, 7 Jun 2024 15:10:03 +0200 Subject: [PATCH] QmlDesigner: Qualify properties of the root item when sending to puppet In the qml2puppet bindings to properties have to be fully qualified. This is good practice i nany case, but customers reported broken files. Therefore we fully qualify property bindings, if they exist in the root item, but not in the item referenced from. Task-number: QDS-9340 Change-Id: I11aaa4ce1ed6ddefcac7e7873fdfd931ee2d978f Reviewed-by: Marco Bubke --- .../designercore/include/nodeinstanceview.h | 2 + .../instances/nodeinstanceview.cpp | 71 ++++++++++++++++++- 2 files changed, 71 insertions(+), 2 deletions(-) diff --git a/src/plugins/qmldesigner/designercore/include/nodeinstanceview.h b/src/plugins/qmldesigner/designercore/include/nodeinstanceview.h index 5c69b55afad..4156d62551c 100644 --- a/src/plugins/qmldesigner/designercore/include/nodeinstanceview.h +++ b/src/plugins/qmldesigner/designercore/include/nodeinstanceview.h @@ -261,6 +261,8 @@ private: QList loadInstancesFromCache(const QList &nodeList, const NodeInstanceCacheData &cache); + QString fullyQualifyPropertyIfApplies(const BindingProperty &property) const; + mutable QHash m_imageDataMap; NodeInstance m_rootNodeInstance; diff --git a/src/plugins/qmldesigner/designercore/instances/nodeinstanceview.cpp b/src/plugins/qmldesigner/designercore/instances/nodeinstanceview.cpp index 08a046cfb39..abc821469bf 100644 --- a/src/plugins/qmldesigner/designercore/instances/nodeinstanceview.cpp +++ b/src/plugins/qmldesigner/designercore/instances/nodeinstanceview.cpp @@ -1161,7 +1161,12 @@ CreateSceneCommand NodeInstanceView::createCreateSceneCommand() ModelNode node = property.parentModelNode(); if (node.isValid() && hasInstanceForModelNode(node)) { NodeInstance instance = instanceForModelNode(node); - PropertyBindingContainer container(instance.instanceId(), property.name(), property.expression(), property.dynamicTypeName()); + const QString expression = fullyQualifyPropertyIfApplies(property); + + PropertyBindingContainer container(instance.instanceId(), + property.name(), + expression, + property.dynamicTypeName()); bindingContainerList.append(container); } } @@ -1370,7 +1375,11 @@ ChangeBindingsCommand NodeInstanceView::createChangeBindingCommand(const QList NodeInstanceView::loadInstancesFromCache(const QList