diff options
author | Arno <arno@disconnect.de> | 2018-01-04 10:55:25 +0100 |
---|---|---|
committer | Arno <arno@disconnect.de> | 2018-01-04 10:55:25 +0100 |
commit | ffffb6e63abfc33bc339d89a7bfcdd1734c48bef (patch) | |
tree | eb7869ac8b4c81ef510f568f536a82e3a3b26897 | |
parent | 94869e2c1fc55bec86c80777baa41f2c9f41e4ed (diff) | |
download | ShemovCleaner-ffffb6e63abfc33bc339d89a7bfcdd1734c48bef.tar.gz ShemovCleaner-ffffb6e63abfc33bc339d89a7bfcdd1734c48bef.tar.bz2 ShemovCleaner-ffffb6e63abfc33bc339d89a7bfcdd1734c48bef.zip |
Implement filtering by MIME-Type
The MIME-type is a regular expression that can be configured. Show the
configured types in a QComboBox with the special value "<all>" at the
top, which invalidates the MIME type filter.
-rw-r--r-- | filesorter.cpp | 9 | ||||
-rw-r--r-- | filesorter.h | 1 | ||||
-rw-r--r-- | filewidget.cpp | 40 | ||||
-rw-r--r-- | filewidget.h | 5 |
4 files changed, 42 insertions, 13 deletions
diff --git a/filesorter.cpp b/filesorter.cpp index 7c6d1d1..fcecfad 100644 --- a/filesorter.cpp +++ b/filesorter.cpp @@ -54,3 +54,12 @@ bool VideoSorter::lessThan(const QModelIndex &source_left, const QModelIndex &so return QSortFilterProxyModel::lessThan(source_left, source_right); } + +bool VideoSorter::filterAcceptsRow(int source_row, const QModelIndex &source_parent) const { + QModelIndex nameIdx = sourceModel()->index(source_row, 0, source_parent); + int attr = nameIdx.data(FileWidget::AttrsRole).toInt(); + if(attr == FileWidget::Directory || attr == FileWidget::ParentDir){ + return true; + } + return QSortFilterProxyModel::filterAcceptsRow(source_row, source_parent); +} diff --git a/filesorter.h b/filesorter.h index 11012ed..968edf2 100644 --- a/filesorter.h +++ b/filesorter.h @@ -19,6 +19,7 @@ class VideoSorter : public QSortFilterProxyModel { protected: virtual bool lessThan(const QModelIndex &source_left, const QModelIndex &source_right) const; + virtual bool filterAcceptsRow(int source_row, const QModelIndex &source_parent) const; }; diff --git a/filewidget.cpp b/filewidget.cpp index e3759ff..fc94cdb 100644 --- a/filewidget.cpp +++ b/filewidget.cpp @@ -79,9 +79,12 @@ void FileWidget::setupGui(){ connect(mFavDirs, QOverload<const QString &>::of(&QComboBox::activated), [=](const QString &text) { cdAbsolute(text); }); mFilter = new QLineEdit; - connect(mFilter, &QLineEdit::returnPressed, this, &FileWidget::filter); + connect(mFilter, &QLineEdit::returnPressed, [this] { filter(NameColumn, mFilter->text()); }); QPushButton *searchBtn = new QPushButton(tr("F&ilter")); - connect(searchBtn, &QPushButton::clicked, this, &FileWidget::filter); + connect(searchBtn, &QPushButton::clicked, [this] { filter(NameColumn, mFilter->text()); }); + mMimeFilters = new QComboBox; + populateMimeFilters(); + connect(mMimeFilters, QOverload<const QString &>::of(&QComboBox::activated), [this](const QString &text) { filter(MimeColumn, text); }); QGridLayout *topL = new QGridLayout; topL->addWidget(new QLabel(tr("Directory")), 0, 0); @@ -89,8 +92,9 @@ void FileWidget::setupGui(){ topL->addWidget(selDirBtn, 0, 2); topL->addWidget(mFavDirs, 0, 3); topL->addWidget(new QLabel(tr("Filter")), 1, 0); - topL->addWidget(mFilter, 1, 1, 2, 1); + topL->addWidget(mFilter, 1, 1); topL->addWidget(searchBtn, 1, 2); + topL->addWidget(mMimeFilters, 1, 3); mFileView = new QTreeView; mFileView->setSortingEnabled(true); @@ -419,17 +423,22 @@ QAction *FileWidget::createSeparator(){ return retval; } -void FileWidget::filter(){ - mProxy->setFilterRegExp(mFilter->text()); - mProxy->setFilterKeyColumn(NameColumn); +void FileWidget::filter(int column, QString regexp){ + if(column == NameColumn){ + if(regexp.isEmpty()){ + column = MimeColumn; + regexp = mMimeFilters->currentText(); + } + }else if(column == MimeColumn){ + if(regexp == "<all>"){ + regexp = QString(); + } + } + mProxy->setFilterRegExp(regexp); + mProxy->setFilterKeyColumn(column); mProxy->setFilterCaseSensitivity(Qt::CaseInsensitive); } -void FileWidget::clearFilter(){ - mFilter->clear(); - filter(); -} - void FileWidget::copy(){ mFileAction = Copy; cutOrCopy(); @@ -460,6 +469,15 @@ void FileWidget::populateFavDirs(){ mFavDirs->addItems(favDirs); } +void FileWidget::populateMimeFilters(){ + QSettings s; + QStringList mimeFilters = s.value("mimefilters").toStringList(); + mimeFilters.sort(); + mimeFilters.prepend(tr("<all>")); + mMimeFilters->clear(); + mMimeFilters->addItems(mimeFilters); +} + QList<QStandardItem*> FileWidget::constructRow(CachedFileData *fd) const{ QList<QStandardItem*> fData; QBrush redBrush(Qt::red); diff --git a/filewidget.h b/filewidget.h index 964c6a7..a58ec06 100644 --- a/filewidget.h +++ b/filewidget.h @@ -62,8 +62,7 @@ class FileWidget : public QWidget { void properties(); void properties(const QModelIndex &idx); void preview(); - void filter(); - void clearFilter(); + void filter(int column, QString regexp); void copy(); void cut(); void paste(); @@ -95,6 +94,7 @@ class FileWidget : public QWidget { void writeCache(); void cutOrCopy(); void populateFavDirs(); + void populateMimeFilters(); QList<QStandardItem*> constructRow(CachedFileData *fd) const; QAction *createSeparator(); QLineEdit *mDir; @@ -130,6 +130,7 @@ class FileWidget : public QWidget { FileCopier *mFileCopier; QCache<QString, CachedFileData> mFileCache; QComboBox *mFavDirs; + QComboBox *mMimeFilters; int mFileAction; }; |