diff options
4 files changed, 35 insertions, 15 deletions
diff --git a/src/plugins/qmldesigner/components/componentcore/componentcore_constants.h b/src/plugins/qmldesigner/components/componentcore/componentcore_constants.h index 352c8796b4..49505d2ca7 100644 --- a/src/plugins/qmldesigner/components/componentcore/componentcore_constants.h +++ b/src/plugins/qmldesigner/components/componentcore/componentcore_constants.h @@ -223,6 +223,8 @@ const char addFontsDisplayString[] = QT_TRANSLATE_NOOP("QmlDesignerAddResources" const char addSoundsDisplayString[] = QT_TRANSLATE_NOOP("QmlDesignerAddResources", "Sound Files"); const char addShadersDisplayString[] = QT_TRANSLATE_NOOP("QmlDesignerAddResources", "Shader Files"); const char add3DAssetsDisplayString[] = QT_TRANSLATE_NOOP("QmlDesignerAddResources", "3D Assets"); +const char addQt3DSPresentationsDisplayString[] = QT_TRANSLATE_NOOP("QmlDesignerAddResources", + "Qt 3D Studio Presentations"); const char addCustomEffectDialogDisplayString[] = QT_TRANSLATE_NOOP("QmlDesignerAddResources", "Add Custom Effect"); diff --git a/src/plugins/qmldesigner/components/edit3d/edit3dwidget.cpp b/src/plugins/qmldesigner/components/edit3d/edit3dwidget.cpp index 025b622789..835ba07b5b 100644 --- a/src/plugins/qmldesigner/components/edit3d/edit3dwidget.cpp +++ b/src/plugins/qmldesigner/components/edit3d/edit3dwidget.cpp @@ -23,14 +23,15 @@ ** ****************************************************************************/ -#include "edit3dwidget.h" -#include "edit3dview.h" -#include "edit3dcanvas.h" -#include "edit3dactions.h" - -#include "qmldesignerplugin.h" #include "designersettings.h" +#include "edit3dactions.h" +#include "edit3dcanvas.h" +#include "edit3dview.h" +#include "edit3dwidget.h" +#include "metainfo.h" #include "qmldesignerconstants.h" +#include "qmldesignerplugin.h" +#include "qmlvisualnode.h" #include "viewmanager.h" #include <coreplugin/actionmanager/actionmanager.h> @@ -174,7 +175,20 @@ void Edit3DWidget::dropEvent(QDropEvent *dropEvent) { const DesignerActionManager &actionManager = QmlDesignerPlugin::instance() ->viewManager().designerActionManager(); - actionManager.handleExternalAssetsDrop(dropEvent->mimeData()); + QHash<QString, QStringList> addedAssets = actionManager.handleExternalAssetsDrop(dropEvent->mimeData()); + + // add 3D assets to 3d editor (QtQuick3D import will be added if missing) + ItemLibraryInfo *itemLibInfo = m_view->model()->metaInfo().itemLibraryInfo(); + + const QStringList added3DAssets = addedAssets.value(ComponentCoreConstants::add3DAssetsDisplayString); + for (const QString &assetPath : added3DAssets) { + QString fileName = QFileInfo(assetPath).baseName(); + fileName = fileName.at(0).toUpper() + fileName.mid(1); // capitalize first letter + QString type = QString("Quick3DAssets.%1.%1").arg(fileName); + QList<ItemLibraryEntry> entriesForType = itemLibInfo->entriesForType(type.toLatin1()); + if (!entriesForType.isEmpty()) // should always be true, but just in case + QmlVisualNode::createQml3DNode(view(), entriesForType.at(0), m_canvas->activeScene()).modelNode(); + } } } // namespace QmlDesigner diff --git a/src/plugins/qmldesigner/components/itemlibrary/itemlibraryview.cpp b/src/plugins/qmldesigner/components/itemlibrary/itemlibraryview.cpp index 52d52d1482..06b84d83f8 100644 --- a/src/plugins/qmldesigner/components/itemlibrary/itemlibraryview.cpp +++ b/src/plugins/qmldesigner/components/itemlibrary/itemlibraryview.cpp @@ -240,9 +240,6 @@ void ItemLibraryView::updateImport3DSupport(const QVariantMap &supportMap) DesignerActionManager *actionManager = &QmlDesignerPlugin::instance()->viewManager().designerActionManager(); - // All things importable by QSSGAssetImportManager are considered to be in the same category - // so we don't get multiple separate import dialogs when different file types are imported. - if (!m_importableExtensions3DMap.isEmpty()) actionManager->unregisterAddResourceHandlers(ComponentCoreConstants::add3DAssetsDisplayString); @@ -253,22 +250,28 @@ void ItemLibraryView::updateImport3DSupport(const QVariantMap &supportMap) m_importableExtensions3DMap, m_importOptions3DMap, {}, {}, Core::ICore::mainWindow()); - importDlg->show(); + importDlg->exec(); return true; }; - auto add3DHandler = [&](const QString &ext) { + auto add3DHandler = [&](const QString &group, const QString &ext) { const QString filter = QStringLiteral("*.%1").arg(ext); actionManager->registerAddResourceHandler( - AddResourceHandler(ComponentCoreConstants::add3DAssetsDisplayString, filter, + AddResourceHandler(group, filter, import3DModelOperation, 10)); }; + const QHash<QString, QString> groupNames { + {"3D Scene", ComponentCoreConstants::add3DAssetsDisplayString}, + {"Qt 3D Studio Presentation", ComponentCoreConstants::addQt3DSPresentationsDisplayString} + }; + const auto groups = extMap.keys(); for (const auto &group : groups) { const QStringList exts = extMap[group].toStringList(); + const QString grp = groupNames.contains(group) ? groupNames.value(group) : group; for (const auto &ext : exts) - add3DHandler(ext); + add3DHandler(grp, ext); } } diff --git a/src/plugins/qmldesigner/designercore/include/itemlibraryinfo.h b/src/plugins/qmldesigner/designercore/include/itemlibraryinfo.h index c44467f002..8244fbb489 100644 --- a/src/plugins/qmldesigner/designercore/include/itemlibraryinfo.h +++ b/src/plugins/qmldesigner/designercore/include/itemlibraryinfo.h @@ -100,7 +100,8 @@ class QMLDESIGNERCORE_EXPORT ItemLibraryInfo : public QObject public: QList<ItemLibraryEntry> entries() const; - QList<ItemLibraryEntry> entriesForType(const QByteArray &typeName, int majorVersion, int minorVersion) const; + QList<ItemLibraryEntry> entriesForType(const QByteArray &typeName, int majorVersion = 1, + int minorVersion = 0) const; void addEntries(const QList<ItemLibraryEntry> &entries, bool overwriteDuplicate = false); bool containsEntry(const ItemLibraryEntry &entry); |