aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins/coreplugin/mimetypesettings.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/coreplugin/mimetypesettings.cpp')
-rw-r--r--src/plugins/coreplugin/mimetypesettings.cpp43
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");