From b662c50e0a32e7444313758af935e03e20c51892 Mon Sep 17 00:00:00 2001 From: Miikka Heikkinen Date: Mon, 24 Oct 2022 14:26:02 +0300 Subject: [PATCH] QmlDesigner: Fix node creation via 3D view context menu Relevant code was commented out in a previous 8.0->master merge as there were some conflicts caused by API changes in some components. Updated the code to use new APIs. Fixes: QDS-8045 Change-Id: I20f1dd700a2c1864151372624f4ceb1415b76f04 Reviewed-by: Mahmoud Badri Reviewed-by: Reviewed-by: Qt CI Bot --- .../components/edit3d/edit3dwidget.cpp | 46 +++++++++++-------- 1 file changed, 26 insertions(+), 20 deletions(-) diff --git a/src/plugins/qmldesigner/components/edit3d/edit3dwidget.cpp b/src/plugins/qmldesigner/components/edit3d/edit3dwidget.cpp index beb616d53e3..47692b08ba6 100644 --- a/src/plugins/qmldesigner/components/edit3d/edit3dwidget.cpp +++ b/src/plugins/qmldesigner/components/edit3d/edit3dwidget.cpp @@ -12,6 +12,8 @@ #include "qmldesignerplugin.h" #include "qmlvisualnode.h" #include "viewmanager.h" + +#include #include #include #include @@ -209,29 +211,33 @@ void Edit3DWidget::updateCreateSubMenu(const QStringList &keys, // Action triggered from the "create" sub-menu void Edit3DWidget::onCreateAction() { - // QAction *action = qobject_cast(sender()); - // if (!action || !m_view || !m_view->model()) - // return; + QAction *action = qobject_cast(sender()); + if (!action || !m_view || !m_view->model()) + return; - // m_view->executeInTransaction(__FUNCTION__, [&] { - // ItemLibraryEntry entry = m_nameToEntry.value(action->data().toString()); - // Import import = Import::createLibraryImport(entry.requiredImport(), - // QString::number(entry.majorVersion()) - // + QLatin1Char('.') - // + QString::number(entry.minorVersion())); - // if (!m_view->model()->hasImport(import)) - // m_view->model()->changeImports({import}, {}); + m_view->executeInTransaction(__FUNCTION__, [&] { + ItemLibraryEntry entry = m_nameToEntry.value(action->data().toString()); + Import import = Import::createLibraryImport(entry.requiredImport(), + QString::number(entry.majorVersion()) + + QLatin1Char('.') + + QString::number(entry.minorVersion())); + if (!m_view->model()->hasImport(import, true, true)) + m_view->model()->changeImports({import}, {}); - // int activeScene = m_view->rootModelNode().auxiliaryData("active3dScene@Internal").toInt(); - // auto modelNode = QmlVisualNode::createQml3DNode(m_view, entry, - // activeScene, m_contextMenuPos3d).modelNode(); - // QTC_ASSERT(modelNode.isValid(), return); - // m_view->setSelectedModelNode(modelNode); + int activeScene = -1; + auto data = m_view->rootModelNode().auxiliaryData(active3dSceneProperty); + if (data) + activeScene = data->toInt(); + auto modelNode = QmlVisualNode::createQml3DNode(m_view, entry, + activeScene, m_contextMenuPos3d).modelNode(); + QTC_ASSERT(modelNode.isValid(), return); + m_view->setSelectedModelNode(modelNode); + + // if added node is a Model, assign it a material + if (modelNode.metaInfo().isQtQuick3DModel()) + m_view->assignMaterialTo3dModel(modelNode); + }); - // // if added node is a Model, assign it a material - // if (modelNode.isSubclassOf("QtQuick3D.Model")) - // m_view->assignMaterialTo3dModel(modelNode); - // }); } void Edit3DWidget::contextHelp(const Core::IContext::HelpCallback &callback) const