diff --git a/src/plugins/qmldesigner/designercore/include/modelnode.h b/src/plugins/qmldesigner/designercore/include/modelnode.h index 318f37a863d..922d785b5b7 100644 --- a/src/plugins/qmldesigner/designercore/include/modelnode.h +++ b/src/plugins/qmldesigner/designercore/include/modelnode.h @@ -184,6 +184,8 @@ public: NodeSourceType nodeSourceType() const; + bool isComponent() const; + private: // functions Internal::InternalNodePointer internalNode() const; diff --git a/src/plugins/qmldesigner/designercore/model/modelnode.cpp b/src/plugins/qmldesigner/designercore/model/modelnode.cpp index 05e485f5328..e19324e5a80 100644 --- a/src/plugins/qmldesigner/designercore/model/modelnode.cpp +++ b/src/plugins/qmldesigner/designercore/model/modelnode.cpp @@ -984,4 +984,26 @@ ModelNode::NodeSourceType ModelNode::nodeSourceType() const } +bool ModelNode::isComponent() const +{ + if (!isValid()) + throw InvalidModelNodeException(__LINE__, __FUNCTION__, __FILE__); + + if (metaInfo().isFileComponent()) + return true; + + if (nodeSourceType() == ModelNode::NodeWithComponentSource) + return true; + + if (metaInfo().isView() && hasNodeProperty("delegate")) { + if (nodeProperty("delegate").modelNode().metaInfo().isFileComponent()) + return true; + + if (nodeProperty("delegate").modelNode().nodeSourceType() == ModelNode::NodeWithComponentSource) + return true; + } + + return false; +} + }