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);
|
NodeHints hints = NodeHints::fromItemLibraryEntry(itemLibraryEntry);
|
||||||
const PropertyName forceNonDefaultProperty = hints.forceNonDefaultProperty().toUtf8();
|
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 (!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);
|
parentQmlItemNode.nodeListProperty(forceNonDefaultProperty).reparentHere(newNode);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return newNode;
|
return newNode;
|
||||||
@@ -288,8 +297,18 @@ QmlObjectNode QmlVisualNode::createQmlObjectNode(AbstractView *view,
|
|||||||
newQmlObjectNode = createQmlObjectNodeFromSource(view, itemLibraryEntry.qmlSource(), position);
|
newQmlObjectNode = createQmlObjectNodeFromSource(view, itemLibraryEntry.qmlSource(), position);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (parentProperty.isValid())
|
if (parentProperty.isValid()) {
|
||||||
parentProperty.reparentHere(newQmlObjectNode);
|
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())
|
if (!newQmlObjectNode.isValid())
|
||||||
return;
|
return;
|
||||||
|
|||||||
Reference in New Issue
Block a user