aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins/qmldesigner
diff options
context:
space:
mode:
authorThomas Hartmann <thomas.hartmann@qt.io>2020-10-05 12:04:34 +0200
committerThomas Hartmann <thomas.hartmann@qt.io>2020-10-05 12:32:26 +0000
commitaeb30c0840928df1ec7117302b28bd7861a79478 (patch)
tree66b94b9ecc8efae6118711141e55d55a5eb6eee1 /src/plugins/qmldesigner
parent35ffc930b8b69bd002e97d49d431a6408fb6c80e (diff)
QmlDesigner: Delete existing node when property does not allow list
Some properties can only contain a single QML element. In this case we should delete the old existing element. This can be checked using NodeMetainfo::propertyIsListProperty. Change-Id: I1782a38b7bfdb8a6f1078b0fa39654a4653dab59 Reviewed-by: Mahmoud Badri <mahmoud.badri@qt.io> Reviewed-by: Miikka Heikkinen <miikka.heikkinen@qt.io>
Diffstat (limited to 'src/plugins/qmldesigner')
-rw-r--r--src/plugins/qmldesigner/designercore/model/qmlvisualnode.cpp27
1 files changed, 23 insertions, 4 deletions
diff --git a/src/plugins/qmldesigner/designercore/model/qmlvisualnode.cpp b/src/plugins/qmldesigner/designercore/model/qmlvisualnode.cpp
index 9a376bab64a..29fd0785b48 100644
--- a/src/plugins/qmldesigner/designercore/model/qmlvisualnode.cpp
+++ b/src/plugins/qmldesigner/designercore/model/qmlvisualnode.cpp
@@ -213,11 +213,20 @@ QmlObjectNode QmlVisualNode::createQmlObjectNode(AbstractView *view,
NodeHints hints = NodeHints::fromItemLibraryEntry(itemLibraryEntry);
const PropertyName forceNonDefaultProperty = hints.forceNonDefaultProperty().toUtf8();
- QmlObjectNode newNode = QmlItemNode::createQmlObjectNode(view, itemLibraryEntry, position, parentProperty);
+ QmlObjectNode newNode = QmlItemNode::createQmlObjectNode(view,
+ itemLibraryEntry,
+ position,
+ parentProperty);
if (!forceNonDefaultProperty.isEmpty()) {
- if (parentQmlItemNode.modelNode().metaInfo().hasProperty(forceNonDefaultProperty))
+ const NodeMetaInfo metaInfo = parentQmlItemNode.modelNode().metaInfo();
+ if (metaInfo.hasProperty(forceNonDefaultProperty)) {
+ if (!metaInfo.propertyIsListProperty(forceNonDefaultProperty)
+ && parentQmlItemNode.modelNode().hasNodeProperty(forceNonDefaultProperty)) {
+ parentQmlItemNode.removeProperty(forceNonDefaultProperty);
+ }
parentQmlItemNode.nodeListProperty(forceNonDefaultProperty).reparentHere(newNode);
+ }
}
return newNode;
@@ -288,8 +297,18 @@ QmlObjectNode QmlVisualNode::createQmlObjectNode(AbstractView *view,
newQmlObjectNode = createQmlObjectNodeFromSource(view, itemLibraryEntry.qmlSource(), position);
}
- if (parentProperty.isValid())
- parentProperty.reparentHere(newQmlObjectNode);
+ if (parentProperty.isValid()) {
+ const PropertyName propertyName = parentProperty.name();
+ const ModelNode parentNode = parentProperty.parentModelNode();
+ const NodeMetaInfo metaInfo = parentNode.metaInfo();
+
+ if (metaInfo.isValid() && !metaInfo.propertyIsListProperty(propertyName)
+ && parentProperty.isNodeProperty()) {
+ parentNode.removeProperty(propertyName);
+ }
+
+ parentNode.nodeAbstractProperty(propertyName).reparentHere(newQmlObjectNode);
+ }
if (!newQmlObjectNode.isValid())
return;