From bfafbfc23210afbd1f5778b1af470b13321432b7 Mon Sep 17 00:00:00 2001 From: Thomas Hartmann Date: Fri, 8 Nov 2019 15:42:17 +0100 Subject: [PATCH] QmlDesigner: Add convenience functions Those helpers make it easy to filter by types. Change-Id: I36cedba043a1c89c68b98ef03a309ec0d8e67475 Reviewed-by: Thomas Hartmann Reviewed-by: Miikka Heikkinen --- .../qmldesigner/designercore/include/abstractview.h | 1 + src/plugins/qmldesigner/designercore/include/modelnode.h | 2 ++ .../qmldesigner/designercore/model/abstractview.cpp | 8 ++++++++ src/plugins/qmldesigner/designercore/model/modelnode.cpp | 9 +++++++++ 4 files changed, 20 insertions(+) diff --git a/src/plugins/qmldesigner/designercore/include/abstractview.h b/src/plugins/qmldesigner/designercore/include/abstractview.h index 5a8de860c2f..2e549b52b1e 100644 --- a/src/plugins/qmldesigner/designercore/include/abstractview.h +++ b/src/plugins/qmldesigner/designercore/include/abstractview.h @@ -164,6 +164,7 @@ public: bool hasModelNodeForInternalId(qint32 internalId) const; QList allModelNodes() const; + QList allModelNodesOfType(const TypeName &typeName) const; void emitDocumentMessage(const QList &errors, const QList &warnings = QList()); void emitDocumentMessage(const QString &error); diff --git a/src/plugins/qmldesigner/designercore/include/modelnode.h b/src/plugins/qmldesigner/designercore/include/modelnode.h index 9dd636be625..7f943dddd1c 100644 --- a/src/plugins/qmldesigner/designercore/include/modelnode.h +++ b/src/plugins/qmldesigner/designercore/include/modelnode.h @@ -107,6 +107,8 @@ public: bool hasParentProperty() const; const QList directSubModelNodes() const; + const QList directSubModelNodesOfType(const TypeName &typeName) const; + const QList allSubModelNodes() const; const QList allSubModelNodesAndThisNode() const; bool hasAnySubModelNodes() const; diff --git a/src/plugins/qmldesigner/designercore/model/abstractview.cpp b/src/plugins/qmldesigner/designercore/model/abstractview.cpp index eb7ed16b9ab..f5e07d9f834 100644 --- a/src/plugins/qmldesigner/designercore/model/abstractview.cpp +++ b/src/plugins/qmldesigner/designercore/model/abstractview.cpp @@ -39,6 +39,7 @@ #include #include +#include #include @@ -635,6 +636,13 @@ QList AbstractView::allModelNodes() const return toModelNodeList(model()->d->allNodes()); } +QList AbstractView::allModelNodesOfType(const TypeName &typeName) const +{ + return Utils::filtered(allModelNodes(), [typeName](const ModelNode &node){ + return node.metaInfo().isValid() && node.metaInfo().isSubclassOf(typeName); + }); +} + void AbstractView::emitDocumentMessage(const QString &error) { emitDocumentMessage({DocumentMessage(error)}); diff --git a/src/plugins/qmldesigner/designercore/model/modelnode.cpp b/src/plugins/qmldesigner/designercore/model/modelnode.cpp index 14ca4a67bfe..1fdc29aaa03 100644 --- a/src/plugins/qmldesigner/designercore/model/modelnode.cpp +++ b/src/plugins/qmldesigner/designercore/model/modelnode.cpp @@ -42,6 +42,8 @@ #include "nodeproperty.h" #include +#include + #include #include #include @@ -775,6 +777,13 @@ const QList ModelNode::directSubModelNodes() const return toModelNodeList(internalNode()->allDirectSubNodes(), view()); } +const QList ModelNode::directSubModelNodesOfType(const TypeName &typeName) const +{ + return Utils::filtered(directSubModelNodes(), [typeName](const ModelNode &node){ + return node.metaInfo().isValid() && node.metaInfo().isSubclassOf(typeName); + }); +} + /*! \brief returns all ModelNodes that are direct or indirect children of this ModelNode