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>
This commit is contained in:
Thomas Hartmann
2022-01-13 17:21:48 +01:00
committed by Miikka Heikkinen
parent c1c147a9dc
commit f9c21253c0
2 changed files with 26 additions and 9 deletions

View File

@@ -1550,16 +1550,27 @@ void DesignerActionManager::createDefaultAddResourceHandler()
registerAddResourceHandler(AddResourceHandler(category, ext, op)); 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 transformer = [](const QByteArray& format) -> QString { return QString("*.") + format; };
auto imageFormats = Utils::transform(QImageReader::supportedImageFormats(), transformer); QHash<QByteArray, QStringList> imageFormats;
imageFormats.push_back("*.hdr"); for (const auto &mimeType : mimeTypes)
imageFormats.push_back("*.ktx"); 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, // The filters will be displayed in reverse order to these lists in file dialog,
// so declare most common types last // so declare most common types last
registerHandlers(imageFormats, QHash<QByteArray, QStringList>::const_iterator i = imageFormats.constBegin();
ModelNodeOperations::addImageToProject, while (i != imageFormats.constEnd()) {
ComponentCoreConstants::addImagesDisplayString); registerHandlers(i.value(),
ModelNodeOperations::addImageToProject,
QObject::tr("%1: %2")
.arg(ComponentCoreConstants::addImagesDisplayString)
.arg(QString::fromLatin1(i.key())));
++i;
}
registerHandlers({"*.otf", "*.ttf"}, registerHandlers({"*.otf", "*.ttf"},
ModelNodeOperations::addFontToProject, ModelNodeOperations::addFontToProject,
ComponentCoreConstants::addFontsDisplayString); ComponentCoreConstants::addFontsDisplayString);

View File

@@ -619,7 +619,7 @@ void ItemLibraryWidget::addResources(const QStringList &files)
return priorities.value(first) < priorities.value(second); 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)"; QString filterTemplate = "%1 (%2)";
for (const QString &key : qAsConst(sortedKeys)) for (const QString &key : qAsConst(sortedKeys))
filters.append(filterTemplate.arg(key, map.values(key).join(' '))); filters.append(filterTemplate.arg(key, map.values(key).join(' ')));
@@ -660,11 +660,17 @@ void ItemLibraryWidget::addResources(const QStringList &files)
AddResourceOperation operation = categoryToOperation.value(category); AddResourceOperation operation = categoryToOperation.value(category);
QmlDesignerPlugin::emitUsageStatistics(Constants::EVENT_RESOURCE_IMPORTED + category); QmlDesignerPlugin::emitUsageStatistics(Constants::EVENT_RESOURCE_IMPORTED + category);
if (operation) { if (operation) {
AddFilesResult result = operation(fileNames, document->fileName().parentDir().toString()); AddFilesResult result = operation(fileNames,
document->fileName().parentDir().toString());
if (result == AddFilesResult::Failed) { if (result == AddFilesResult::Failed) {
Core::AsynchronousMessageBox::warning(tr("Failed to Add Files"), 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(' ')));
} }
} }
} }