summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Hartmann <thomas.hartmann@qt.io>2022-01-26 13:31:46 +0100
committerThomas Hartmann <thomas.hartmann@qt.io>2022-01-26 13:13:30 +0000
commit3e1095076e2ecbf99115bce18c23ed194cc0810e (patch)
treeddc421904505d74a0079ede5d65f2c0050fc3544
parent250738d858bcdbcbeab0037d3dddee71a06bd8c7 (diff)
downloadqt-creator-3e1095076e2ecbf99115bce18c23ed194cc0810e.tar.gz
QmlDesigner: Split image category only for dialog
If we split the categories on the action level, then a separate dialog is opened for every image suffix/type. Task-number: QDS-6076 Change-Id: Ie80203cebca41e8dee4cb5c091b1163a9fde6e26 Reviewed-by: Miikka Heikkinen <miikka.heikkinen@qt.io>
-rw-r--r--src/plugins/qmldesigner/components/componentcore/designeractionmanager.cpp21
-rw-r--r--src/plugins/qmldesigner/components/itemlibrary/itemlibrarywidget.cpp28
2 files changed, 32 insertions, 17 deletions
diff --git a/src/plugins/qmldesigner/components/componentcore/designeractionmanager.cpp b/src/plugins/qmldesigner/components/componentcore/designeractionmanager.cpp
index 89fa1d39d1..e160f030db 100644
--- a/src/plugins/qmldesigner/components/componentcore/designeractionmanager.cpp
+++ b/src/plugins/qmldesigner/components/componentcore/designeractionmanager.cpp
@@ -1556,25 +1556,16 @@ void DesignerActionManager::createDefaultAddResourceHandler()
// 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; };
- 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"});
+ auto imageFormats = Utils::transform(QImageReader::supportedImageFormats(), transformer);
+ imageFormats.push_back("*.hdr");
+ imageFormats.push_back("*.ktx");
// The filters will be displayed in reverse order to these lists in file dialog,
// so declare most common types last
- 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(imageFormats,
+ ModelNodeOperations::addImageToProject,
+ ComponentCoreConstants::addImagesDisplayString);
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 75818fb42a..10913090b4 100644
--- a/src/plugins/qmldesigner/components/itemlibrary/itemlibrarywidget.cpp
+++ b/src/plugins/qmldesigner/components/itemlibrary/itemlibrarywidget.cpp
@@ -596,6 +596,19 @@ void ItemLibraryWidget::addImportForItem(const QString &importUrl)
m_model->changeImports({import}, {});
}
+static QHash<QByteArray, QStringList> allImageFormats()
+{
+ const QList<QByteArray> mimeTypes = QImageReader::supportedMimeTypes();
+ auto transformer = [](const QByteArray& format) -> QString { return QString("*.") + format; };
+ 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"});
+
+ return imageFormats;
+}
+
void ItemLibraryWidget::addResources(const QStringList &files)
{
DesignDocument *document = QmlDesignerPlugin::instance()->currentDesignDocument();
@@ -621,8 +634,19 @@ void ItemLibraryWidget::addResources(const QStringList &files)
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(' ')));
+ for (const QString &key : qAsConst(sortedKeys)) {
+ const QStringList values = map.values(key);
+ if (values.contains("*.png")) { // Avoid long filter for images by splitting
+ const QHash<QByteArray, QStringList> imageFormats = allImageFormats();
+ QHash<QByteArray, QStringList>::const_iterator i = imageFormats.constBegin();
+ while (i != imageFormats.constEnd()) {
+ filters.append(filterTemplate.arg(key + QString::fromLatin1(i.key()), i.value().join(' ')));
+ ++i;
+ }
+ } else {
+ filters.append(filterTemplate.arg(key, values.join(' ')));
+ }
+ }
static QString lastDir;
const QString currentDir = lastDir.isEmpty() ? document->fileName().parentDir().toString() : lastDir;