diff options
author | Eike Ziller <eike.ziller@qt.io> | 2023-06-08 14:14:23 +0200 |
---|---|---|
committer | Eike Ziller <eike.ziller@qt.io> | 2023-06-09 07:20:48 +0000 |
commit | 7f2ad8079d6558444c78e3c87ff66a3fa02d9af1 (patch) | |
tree | 923ccef5648f005c7559b99e2f2b104869d22260 | |
parent | c72c2cbf193f64d54a2ec03b31579ec450e92584 (diff) |
MIME preferences: Add globs and current handler name to filter
It is most useful if a user can type a file extension in the filter to find
the corresponding MIME type(s).
Also fix resetting the filter model when reopening the preferences.
Change-Id: I583e021dcdd2791288f913bc64d2be07e06ebfd3
Reviewed-by: <github-actions-qt-creator@cristianadam.eu>
Reviewed-by: David Schulz <david.schulz@qt.io>
-rw-r--r-- | src/plugins/coreplugin/mimetypesettings.cpp | 43 |
1 files changed, 38 insertions, 5 deletions
diff --git a/src/plugins/coreplugin/mimetypesettings.cpp b/src/plugins/coreplugin/mimetypesettings.cpp index 116fcf4a06..e3dac8ded9 100644 --- a/src/plugins/coreplugin/mimetypesettings.cpp +++ b/src/plugins/coreplugin/mimetypesettings.cpp @@ -83,9 +83,7 @@ public: class MimeTypeSettingsModel : public QAbstractTableModel { public: - enum class Role { - DefaultHandler = Qt::UserRole - }; + enum class Role { DefaultHandler = Qt::UserRole, MimeType }; MimeTypeSettingsModel(QObject *parent = nullptr) : QAbstractTableModel(parent) {} @@ -158,6 +156,8 @@ QVariant MimeTypeSettingsModel::data(const QModelIndex &modelIndex, int role) co } } return QVariant(); + } else if (role == int(Role::MimeType)) { + return QVariant::fromValue(m_mimeTypes.at(modelIndex.row())); } return QVariant(); } @@ -222,6 +222,37 @@ void MimeTypeSettingsModel::resetUserDefaults() endResetModel(); } +class MimeFilterModel : public QSortFilterProxyModel +{ +public: + explicit MimeFilterModel(QObject *parent = nullptr); + +protected: + bool filterAcceptsRow(int source_row, const QModelIndex &source_parent) const override; +}; + +MimeFilterModel::MimeFilterModel(QObject *parent) + : QSortFilterProxyModel(parent) +{ +} + +bool MimeFilterModel::filterAcceptsRow(int source_row, const QModelIndex &source_parent) const +{ + const QModelIndex &index = sourceModel()->index(source_row, 0, source_parent); + const MimeType mt + = sourceModel()->data(index, int(MimeTypeSettingsModel::Role::MimeType)).value<MimeType>(); + const QModelIndex &handlerIndex = sourceModel()->index(source_row, 1, source_parent); + const QString handlerText = sourceModel()->data(handlerIndex, Qt::DisplayRole).toString(); + + const QStringList matchStrings = mt.globPatterns() << mt.name() << handlerText; + const QRegularExpression regex = filterRegularExpression(); + for (const QString &str : matchStrings) { + if (regex.match(str).hasMatch()) + return true; + } + return false; +} + // MimeTypeSettingsPrivate class MimeTypeSettingsPrivate : public QObject { @@ -256,7 +287,7 @@ public: static UserMimeTypeHash m_userModifiedMimeTypes; // these are already in mime database MimeTypeSettingsModel *m_model; - QSortFilterProxyModel *m_filterModel; + MimeFilterModel *m_filterModel; UserMimeTypeHash m_pendingModifiedMimeTypes; // currently edited in the options page QString m_filterPattern; QPointer<QWidget> m_widget; @@ -277,10 +308,11 @@ MimeTypeSettingsPrivate::UserMimeTypeHash MimeTypeSettingsPrivate::m_userModifie MimeTypeSettingsPrivate::MimeTypeSettingsPrivate() : m_model(new MimeTypeSettingsModel(this)) - , m_filterModel(new QSortFilterProxyModel(this)) + , m_filterModel(new MimeFilterModel(this)) { m_filterModel->setSourceModel(m_model); m_filterModel->setFilterKeyColumn(-1); + m_filterModel->setFilterCaseSensitivity(Qt::CaseInsensitive); connect(ICore::instance(), &ICore::saveSettingsRequested, this, &MimeTypeSettingsPrivate::writeUserModifiedMimeTypes); } @@ -317,6 +349,7 @@ void MimeTypeSettingsPrivate::configureUi(QWidget *w) auto filterLineEdit = new FancyLineEdit; filterLineEdit->setObjectName("filterLineEdit"); filterLineEdit->setFiltering(true); + m_filterModel->setFilterWildcard({}); m_mimeTypesTreeView = new QTreeView; m_mimeTypesTreeView->setObjectName("mimeTypesTreeView"); |