diff --git a/src/plugins/qmldesigner/core/include/qmlobjectnode.h b/src/plugins/qmldesigner/core/include/qmlobjectnode.h index 0e321f8485626daed46ded111b2340140cae885a..5dd0ca6448854d9aa3069d7dc784b98b3ab95b37 100644 --- a/src/plugins/qmldesigner/core/include/qmlobjectnode.h +++ b/src/plugins/qmldesigner/core/include/qmlobjectnode.h @@ -68,6 +68,7 @@ public: bool hasBindingProperty(const QString &name) const; bool propertyAffectedByCurrentState(const QString &name) const; QVariant modelValue(const QString &name) const; + QString expression(const QString &name) const; bool isInBaseState() const; QmlPropertyChanges propertyChangeForCurrentState() const; diff --git a/src/plugins/qmldesigner/core/model/qmlobjectnode.cpp b/src/plugins/qmldesigner/core/model/qmlobjectnode.cpp index 3048cb7b90471bd70773301fba7882b1b4fe1ecc..ef88ccfe01c5e57b65af380137a4c5ead1f71dea 100644 --- a/src/plugins/qmldesigner/core/model/qmlobjectnode.cpp +++ b/src/plugins/qmldesigner/core/model/qmlobjectnode.cpp @@ -175,6 +175,25 @@ QVariant QmlObjectNode::modelValue(const QString &name) const return propertyChanges.modelNode().variantProperty(name).value(); } +QString QmlObjectNode::expression(const QString &name) const +{ + if (!isValid()) + throw new InvalidModelNodeException(__LINE__, __FUNCTION__, __FILE__); + + if (currentState().isBaseState()) + return modelNode().bindingProperty(name).expression(); + + if (!currentState().hasPropertyChanges(modelNode())) + return modelNode().bindingProperty(name).expression(); + + QmlPropertyChanges propertyChanges(currentState().propertyChanges(modelNode())); + + if (!propertyChanges.modelNode().hasProperty(name)) + return modelNode().bindingProperty(name).expression(); + + return propertyChanges.modelNode().bindingProperty(name).expression(); +} + /*! \brief returns if ObjectNode is the BaseState \return true if the ObjectNode is in the BaseState