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