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>
This commit is contained in:
Miikka Heikkinen
2022-10-13 14:00:39 +03:00
parent 348bad2fdb
commit 67ecfd2fdc

View File

@@ -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);