diff --git a/src/plugins/qmldesigner/designercore/include/nodehints.h b/src/plugins/qmldesigner/designercore/include/nodehints.h index 16fe18320cd..581dfd48220 100644 --- a/src/plugins/qmldesigner/designercore/include/nodehints.h +++ b/src/plugins/qmldesigner/designercore/include/nodehints.h @@ -72,6 +72,7 @@ public: bool visibleInLibrary() const; QString forceNonDefaultProperty() const; QPair setParentProperty() const; + QString bindParentToProperty() const; QHash hints() const; static NodeHints fromModelNode(const ModelNode &modelNode); diff --git a/src/plugins/qmldesigner/designercore/metainfo/nodehints.cpp b/src/plugins/qmldesigner/designercore/metainfo/nodehints.cpp index 84cc5650747..099dc8ee903 100644 --- a/src/plugins/qmldesigner/designercore/metainfo/nodehints.cpp +++ b/src/plugins/qmldesigner/designercore/metainfo/nodehints.cpp @@ -295,6 +295,16 @@ QPair NodeHints::setParentProperty() const return qMakePair(list.first().trimmed(), parseValue(list.last().trimmed())); } +QString NodeHints::bindParentToProperty() const +{ + const QString expression = m_hints.value("bindParentToProperty"); + + if (expression.isEmpty()) + return {}; + + return Internal::evaluateExpression(expression, modelNode(), ModelNode()).toString(); +} + QHash NodeHints::hints() const { return m_hints; diff --git a/src/plugins/qmldesigner/designercore/model/qmlvisualnode.cpp b/src/plugins/qmldesigner/designercore/model/qmlvisualnode.cpp index a580ee55495..6a78e11cdba 100644 --- a/src/plugins/qmldesigner/designercore/model/qmlvisualnode.cpp +++ b/src/plugins/qmldesigner/designercore/model/qmlvisualnode.cpp @@ -301,7 +301,7 @@ QmlObjectNode QmlVisualNode::createQmlObjectNode(AbstractView *view, for (const auto &property : itemLibraryEntry.properties()) { if (property.type() == "binding") { propertyBindingList.append(PropertyBindingEntry(property.name(), property.value().toString())); - } else if (property.type() == "enum") { + } else if (property.type() == "enum") { propertyEnumList.append(PropertyBindingEntry(property.name(), property.value().toString())); } else if (property.value().toString() == QString::fromLatin1(imagePlaceHolder)) { propertyPairList.append({property.name(), imagePlaceHolderPath(view->model()) }); @@ -361,6 +361,15 @@ QmlObjectNode QmlVisualNode::createQmlObjectNode(AbstractView *view, parent.variantProperty(property).setValue(value); } + if (!hints.bindParentToProperty().isEmpty() && parentProperty.isValid()) { + const PropertyName property = hints.bindParentToProperty().toUtf8(); + ModelNode parent = parentProperty.parentModelNode(); + + const NodeMetaInfo metaInfo = newQmlObjectNode.modelNode().metaInfo(); + if (metaInfo.hasProperty(property)) + newQmlObjectNode.setBindingProperty(property, parent.validId()); + } + return newQmlObjectNode; }