From c6115771f9b71e065cb49328bf9d387d327ac996 Mon Sep 17 00:00:00 2001 From: Thomas Hartmann Date: Fri, 8 Nov 2019 15:43:01 +0100 Subject: [PATCH] QmlDesigner: Add createQmlVisualNode() Change-Id: I7e1a739a58b740c2b5fc171e66ce7b6950bb1a26 Reviewed-by: Mahmoud Badri Reviewed-by: Miikka Heikkinen --- .../designercore/include/qmlvisualnode.h | 7 +++++ .../designercore/model/qmlvisualnode.cpp | 28 +++++++++++++++++++ 2 files changed, 35 insertions(+) diff --git a/src/plugins/qmldesigner/designercore/include/qmlvisualnode.h b/src/plugins/qmldesigner/designercore/include/qmlvisualnode.h index 95af9fdfd30..3150ad61e23 100644 --- a/src/plugins/qmldesigner/designercore/include/qmlvisualnode.h +++ b/src/plugins/qmldesigner/designercore/include/qmlvisualnode.h @@ -101,6 +101,13 @@ public: const ItemLibraryEntry &itemLibraryEntry, const Position &position, NodeAbstractProperty parentproperty); + + static QmlVisualNode createQmlVisualNode(AbstractView *view, + const ItemLibraryEntry &itemLibraryEntry, + const QVector3D &position); + + static NodeListProperty findSceneNodeProperty(AbstractView *view); + private: void setDoubleProperty(const PropertyName &name, double value); }; diff --git a/src/plugins/qmldesigner/designercore/model/qmlvisualnode.cpp b/src/plugins/qmldesigner/designercore/model/qmlvisualnode.cpp index 15226fa32b8..e9977d5c98c 100644 --- a/src/plugins/qmldesigner/designercore/model/qmlvisualnode.cpp +++ b/src/plugins/qmldesigner/designercore/model/qmlvisualnode.cpp @@ -39,6 +39,8 @@ #include "modelmerger.h" #include "rewritingexception.h" +#include + #include #include #include @@ -289,6 +291,32 @@ QmlObjectNode QmlVisualNode::createQmlObjectNode(AbstractView *view, return newQmlObjectNode; } +QmlVisualNode QmlVisualNode::createQmlVisualNode(AbstractView *view, + const ItemLibraryEntry &itemLibraryEntry, + const QVector3D &position) +{ + NodeAbstractProperty sceneNodeProperty = findSceneNodeProperty(view); + QTC_ASSERT(sceneNodeProperty.isValid(), return {}); + ModelNode node = createQmlObjectNode(view, itemLibraryEntry, position, sceneNodeProperty).modelNode(); + + return node; +} + +NodeListProperty QmlVisualNode::findSceneNodeProperty(AbstractView *view) +{ + QTC_ASSERT(view, return {}); + + QList quickViews = view->allModelNodesOfType("QtQuick3D.View3D"); + QTC_ASSERT(!quickViews.isEmpty(), return {}); + const ModelNode quickView = quickViews.first(); + + QList nodes = quickView.directSubModelNodesOfType("QtQuick3D.Node"); + QTC_ASSERT(!nodes.isEmpty(), return {}); + const ModelNode node = nodes.first(); + + return node.defaultNodeListProperty(); +} + QList toModelNodeList(const QList &qmlVisualNodeList) { QList modelNodeList;