diff options
author | Thomas Hartmann <thomas.hartmann@qt.io> | 2020-10-05 12:04:34 +0200 |
---|---|---|
committer | Thomas Hartmann <thomas.hartmann@qt.io> | 2020-10-05 12:32:26 +0000 |
commit | aeb30c0840928df1ec7117302b28bd7861a79478 (patch) | |
tree | 66b94b9ecc8efae6118711141e55d55a5eb6eee1 /src/plugins/qmldesigner | |
parent | 35ffc930b8b69bd002e97d49d431a6408fb6c80e (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.cpp | 27 |
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; |