forked from qt-creator/qt-creator
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>
This commit is contained in:
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user