aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMiikka Heikkinen <miikka.heikkinen@qt.io>2022-10-13 14:00:39 +0300
committerMiikka Heikkinen <miikka.heikkinen@qt.io>2022-10-13 11:51:42 +0000
commit67ecfd2fdc830afed7074c04dd46ae0c8519d55f (patch)
tree2d8af2dbcda038fde4edb78d82f0e7c2825628e3
parent348bad2fdb1c99cef37cdef2c6c02950e39f6499 (diff)
QmlDesigner: Add required import when creating nodes via 3D view
Creating nodes via 3D view context menu now adds required import if it is missing. Fixes: QDS-7950 Change-Id: Ibd4faff9d494a232e0fbf0fd5db3690449516bf6 Reviewed-by: Mahmoud Badri <mahmoud.badri@qt.io> Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
-rw-r--r--src/plugins/qmldesigner/components/edit3d/edit3dwidget.cpp14
1 files changed, 11 insertions, 3 deletions
diff --git a/src/plugins/qmldesigner/components/edit3d/edit3dwidget.cpp b/src/plugins/qmldesigner/components/edit3d/edit3dwidget.cpp
index e05c3dd10a..dfe8d8c1a7 100644
--- a/src/plugins/qmldesigner/components/edit3d/edit3dwidget.cpp
+++ b/src/plugins/qmldesigner/components/edit3d/edit3dwidget.cpp
@@ -36,6 +36,7 @@
#include "viewmanager.h"
#include <seekerslider.h>
#include <nodeinstanceview.h>
+#include <import.h>
#include <coreplugin/actionmanager/actionmanager.h>
#include <coreplugin/actionmanager/command.h>
@@ -231,13 +232,20 @@ void Edit3DWidget::updateCreateSubMenu(const QStringList &keys,
void Edit3DWidget::onCreateAction()
{
QAction *action = qobject_cast<QAction *>(sender());
- if (!action)
+ if (!action || !m_view || !m_view->model())
return;
m_view->executeInTransaction(__FUNCTION__, [&] {
- int activeScene = m_view->rootModelNode().auxiliaryData("active3dScene@Internal").toInt();
+ 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}, {});
- auto modelNode = QmlVisualNode::createQml3DNode(m_view, m_nameToEntry.value(action->data().toString()),
+ 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);