From ab3442ea7abc1664fcaa3780121d0eff2046d8f3 Mon Sep 17 00:00:00 2001 From: Thomas Hartmann <Thomas.Hartmann@nokia.com> Date: Fri, 7 May 2010 13:36:33 +0200 Subject: [PATCH] QmlDesigner.model extending QmlState --- .../designercore/include/qmlobjectnode.h | 2 ++ .../qmldesigner/designercore/include/qmlstate.h | 2 ++ .../designercore/model/qmlobjectnode.cpp | 14 +++++++++++--- .../qmldesigner/designercore/model/qmlstate.cpp | 16 ++++++++++++++++ 4 files changed, 31 insertions(+), 3 deletions(-) diff --git a/src/plugins/qmldesigner/designercore/include/qmlobjectnode.h b/src/plugins/qmldesigner/designercore/include/qmlobjectnode.h index 5dd0ca64488..63d6517924f 100644 --- a/src/plugins/qmldesigner/designercore/include/qmlobjectnode.h +++ b/src/plugins/qmldesigner/designercore/include/qmlobjectnode.h @@ -89,6 +89,8 @@ public: bool isAncestorOf(const QmlObjectNode &objectNode) const; + static QVariant instanceValue(const ModelNode &modelNode, const QString &name); + protected: NodeInstance nodeInstance() const; QmlObjectNode nodeForInstance(const NodeInstance &instance) const; diff --git a/src/plugins/qmldesigner/designercore/include/qmlstate.h b/src/plugins/qmldesigner/designercore/include/qmlstate.h index e77e29c2bfe..017a0f370f3 100644 --- a/src/plugins/qmldesigner/designercore/include/qmlstate.h +++ b/src/plugins/qmldesigner/designercore/include/qmlstate.h @@ -38,6 +38,7 @@ namespace QmlDesigner { class QmlModelView; class QmlModelStateGroup; +class QmlObjectNode; class CORESHARED_EXPORT QmlModelState : public QmlModelNodeFacade { @@ -59,6 +60,7 @@ public: void removePropertyChanges(const ModelNode &node); bool affectsModelNode(const ModelNode &node) const; + QList<QmlObjectNode> allAffectedNodes() const; QString name() const; void setName(const QString &name); bool isValid() const; diff --git a/src/plugins/qmldesigner/designercore/model/qmlobjectnode.cpp b/src/plugins/qmldesigner/designercore/model/qmlobjectnode.cpp index ef88ccfe01c..69a70cb8d99 100644 --- a/src/plugins/qmldesigner/designercore/model/qmlobjectnode.cpp +++ b/src/plugins/qmldesigner/designercore/model/qmlobjectnode.cpp @@ -93,9 +93,8 @@ instanciated instance of this object. */ QVariant QmlObjectNode::instanceValue(const QString &name) const -{ - Q_ASSERT(qmlModelView()->hasInstanceForModelNode(modelNode())); - return qmlModelView()->instanceForModelNode(modelNode()).property(name); +{ + return instanceValue(modelNode(), name); } @@ -378,6 +377,15 @@ bool QmlObjectNode::isAncestorOf(const QmlObjectNode &objectNode) const return modelNode().isAncestorOf(objectNode.modelNode()); } +QVariant QmlObjectNode::instanceValue(const ModelNode &modelNode, const QString &name) +{ + QmlModelView *modelView = qobject_cast<QmlModelView*>(modelNode.view()); + if (!modelView) + throw new InvalidModelNodeException(__LINE__, __FUNCTION__, __FILE__); + Q_ASSERT(modelView->hasInstanceForModelNode(modelNode)); + return modelView->instanceForModelNode(modelNode).property(name); +} + NodeInstance QmlObjectNode::nodeInstance() const { return qmlModelView()->nodeInstanceView()->instanceForNode(modelNode()); diff --git a/src/plugins/qmldesigner/designercore/model/qmlstate.cpp b/src/plugins/qmldesigner/designercore/model/qmlstate.cpp index 5b6109e232f..2c21384598d 100644 --- a/src/plugins/qmldesigner/designercore/model/qmlstate.cpp +++ b/src/plugins/qmldesigner/designercore/model/qmlstate.cpp @@ -189,6 +189,9 @@ void QmlModelState::removePropertyChanges(const ModelNode &node) { //### exception if not valid + if (!isValid()) + throw new InvalidModelNodeException(__LINE__, __FUNCTION__, __FILE__); + if (isBaseState()) return; @@ -211,6 +214,19 @@ bool QmlModelState::affectsModelNode(const ModelNode &node) const return !stateOperations(node).isEmpty(); } +QList<QmlObjectNode> QmlModelState::allAffectedNodes() const +{ + QList<QmlObjectNode> returnList; + + foreach (const ModelNode &childNode, modelNode().nodeListProperty("changes").toModelNodeList()) { + //### exception if not valid QmlModelStateOperation + if (QmlModelStateOperation(childNode).isValid() && + !returnList.contains(QmlModelStateOperation(childNode).target())) + returnList.append(QmlModelStateOperation(childNode).target()); + } + return returnList; +} + QString QmlModelState::name() const { if (isBaseState()) -- GitLab