diff options
author | Thomas Hartmann <thomas.hartmann@qt.io> | 2022-01-13 17:21:48 +0100 |
---|---|---|
committer | Miikka Heikkinen <miikka.heikkinen@qt.io> | 2022-01-17 10:28:14 +0000 |
commit | f9c21253c0cecf788c45f39f5adcff6fc5ce17ec (patch) | |
tree | 4afd2fccd09d91d9a2ec7970160c3eb2579be4a6 | |
parent | c1c147a9dc99cba08582e83ef00883ece87d9e4f (diff) | |
download | qt-creator-f9c21253c0cecf788c45f39f5adcff6fc5ce17ec.tar.gz |
QmlDesigner: Use wildcard for all files and split image formats
Having a large filter makes the dialog unresponsive, so all files
filter is changed to *.* and image formats are split according to
mime type.
For unsuported suffixes we show an error message.
Task-number: QDS-5921
Change-Id: Ia2dc912c7e7004da97da48753562173ed163436f
Reviewed-by: <github-actions-qt-creator@cristianadam.eu>
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Thomas Hartmann <thomas.hartmann@qt.io>
-rw-r--r-- | src/plugins/qmldesigner/components/componentcore/designeractionmanager.cpp | 23 | ||||
-rw-r--r-- | src/plugins/qmldesigner/components/itemlibrary/itemlibrarywidget.cpp | 12 |
2 files changed, 26 insertions, 9 deletions
diff --git a/src/plugins/qmldesigner/components/componentcore/designeractionmanager.cpp b/src/plugins/qmldesigner/components/componentcore/designeractionmanager.cpp index 08a6a048e8..f601ae3986 100644 --- a/src/plugins/qmldesigner/components/componentcore/designeractionmanager.cpp +++ b/src/plugins/qmldesigner/components/componentcore/designeractionmanager.cpp @@ -1550,16 +1550,27 @@ void DesignerActionManager::createDefaultAddResourceHandler() registerAddResourceHandler(AddResourceHandler(category, ext, op)); }; + // Having a single image type category creates too large of a filter, so we split images into + // categories according to their mime types + const QList<QByteArray> mimeTypes = QImageReader::supportedMimeTypes(); auto transformer = [](const QByteArray& format) -> QString { return QString("*.") + format; }; - auto imageFormats = Utils::transform(QImageReader::supportedImageFormats(), transformer); - imageFormats.push_back("*.hdr"); - imageFormats.push_back("*.ktx"); + QHash<QByteArray, QStringList> imageFormats; + for (const auto &mimeType : mimeTypes) + imageFormats.insert(mimeType, Utils::transform(QImageReader::imageFormatsForMimeType(mimeType), transformer)); + imageFormats.insert("image/vnd.radiance", {"*.hdr"}); + imageFormats.insert("image/ktx", {"*.ktx"}); // The filters will be displayed in reverse order to these lists in file dialog, // so declare most common types last - registerHandlers(imageFormats, - ModelNodeOperations::addImageToProject, - ComponentCoreConstants::addImagesDisplayString); + QHash<QByteArray, QStringList>::const_iterator i = imageFormats.constBegin(); + while (i != imageFormats.constEnd()) { + registerHandlers(i.value(), + ModelNodeOperations::addImageToProject, + QObject::tr("%1: %2") + .arg(ComponentCoreConstants::addImagesDisplayString) + .arg(QString::fromLatin1(i.key()))); + ++i; + } registerHandlers({"*.otf", "*.ttf"}, ModelNodeOperations::addFontToProject, ComponentCoreConstants::addFontsDisplayString); diff --git a/src/plugins/qmldesigner/components/itemlibrary/itemlibrarywidget.cpp b/src/plugins/qmldesigner/components/itemlibrary/itemlibrarywidget.cpp index 955f04a7ac..75818fb42a 100644 --- a/src/plugins/qmldesigner/components/itemlibrary/itemlibrarywidget.cpp +++ b/src/plugins/qmldesigner/components/itemlibrary/itemlibrarywidget.cpp @@ -619,7 +619,7 @@ void ItemLibraryWidget::addResources(const QStringList &files) return priorities.value(first) < priorities.value(second); }); - QStringList filters { tr("All Files (%1)").arg(map.values().join(' ')) }; + QStringList filters { tr("All Files (%1)").arg("*.*") }; QString filterTemplate = "%1 (%2)"; for (const QString &key : qAsConst(sortedKeys)) filters.append(filterTemplate.arg(key, map.values(key).join(' '))); @@ -660,11 +660,17 @@ void ItemLibraryWidget::addResources(const QStringList &files) AddResourceOperation operation = categoryToOperation.value(category); QmlDesignerPlugin::emitUsageStatistics(Constants::EVENT_RESOURCE_IMPORTED + category); if (operation) { - AddFilesResult result = operation(fileNames, document->fileName().parentDir().toString()); + AddFilesResult result = operation(fileNames, + document->fileName().parentDir().toString()); if (result == AddFilesResult::Failed) { Core::AsynchronousMessageBox::warning(tr("Failed to Add Files"), - tr("Could not add %1 to project.").arg(fileNames.join(' '))); + tr("Could not add %1 to project.") + .arg(fileNames.join(' '))); } + } else { + Core::AsynchronousMessageBox::warning(tr("Failed to Add Files"), + tr("Could not add %1 to project. Unsupported file format.") + .arg(fileNames.join(' '))); } } } |