aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/plugins/qmldesigner/components/componentcore/componentcore_constants.h2
-rw-r--r--src/plugins/qmldesigner/components/edit3d/edit3dwidget.cpp28
-rw-r--r--src/plugins/qmldesigner/components/itemlibrary/itemlibraryview.cpp17
-rw-r--r--src/plugins/qmldesigner/designercore/include/itemlibraryinfo.h3
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);