QmlDesigner: Add necessary import when dragging asset to navigator

When a sound asset or a shader asset is dragged to the navigator,
a necessary import to utilize the created item is added as well,
if it is missing and it can be found from possible imports.

Task-number: QDS-3683
Change-Id: I360af1342d5bd72b95d6988495851237694077a7
Reviewed-by: Thomas Hartmann <thomas.hartmann@qt.io>
This commit is contained in:
Miikka Heikkinen
2021-02-04 14:25:47 +02:00
parent a57820f055
commit f15fef7ee1

View File

@@ -798,8 +798,18 @@ void NavigatorTreeModel::handleItemLibraryShaderDrop(const QMimeData *mimeData,
{
QTC_ASSERT(m_view, return);
Import import = Import::createLibraryImport(QStringLiteral("QtQuick3D"));
if (!m_view->model()->hasImport(import, true, true))
return;
bool addImport = false;
if (!m_view->model()->hasImport(import, true, true)) {
const QList<Import> possImports = m_view->model()->possibleImports();
for (const auto &possImport : possImports) {
if (possImport.url() == import.url()) {
import = possImport;
addImport = true;
m_view->model()->changeImports({import}, {});
break;
}
}
}
const QModelIndex rowModelIndex = dropModelIndex.sibling(dropModelIndex.row(), 0);
int targetRowNumber = rowNumber;
@@ -853,6 +863,9 @@ void NavigatorTreeModel::handleItemLibraryShaderDrop(const QMimeData *mimeData,
moveNodesInteractive(targetProperty, {newModelNode}, targetRowNumber);
m_view->setSelectedModelNode(newModelNode);
}
if (addImport)
QmlDesignerPlugin::instance()->currentDesignDocument()->updateSubcomponentManager();
}
}
@@ -861,8 +874,18 @@ void NavigatorTreeModel::handleItemLibrarySoundDrop(const QMimeData *mimeData, i
{
QTC_ASSERT(m_view, return);
Import import = Import::createLibraryImport(QStringLiteral("QtMultimedia"));
if (!m_view->model()->hasImport(import, true, true))
return;
bool addImport = false;
if (!m_view->model()->hasImport(import, true, true)) {
const QList<Import> possImports = m_view->model()->possibleImports();
for (const auto &possImport : possImports) {
if (possImport.url() == import.url()) {
import = possImport;
addImport = true;
m_view->model()->changeImports({import}, {});
break;
}
}
}
const QModelIndex rowModelIndex = dropModelIndex.sibling(dropModelIndex.row(), 0);
int targetRowNumber = rowNumber;
@@ -907,6 +930,9 @@ void NavigatorTreeModel::handleItemLibrarySoundDrop(const QMimeData *mimeData, i
moveNodesInteractive(targetProperty, {newModelNode}, targetRowNumber);
m_view->setSelectedModelNode(newModelNode);
}
if (addImport)
QmlDesignerPlugin::instance()->currentDesignDocument()->updateSubcomponentManager();
}
}