diff options
author | Miikka Heikkinen <miikka.heikkinen@qt.io> | 2022-10-13 14:00:39 +0300 |
---|---|---|
committer | Miikka Heikkinen <miikka.heikkinen@qt.io> | 2022-10-13 11:51:42 +0000 |
commit | 67ecfd2fdc830afed7074c04dd46ae0c8519d55f (patch) | |
tree | 2d8af2dbcda038fde4edb78d82f0e7c2825628e3 | |
parent | 348bad2fdb1c99cef37cdef2c6c02950e39f6499 (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.cpp | 14 |
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); |