summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorArno <arno@disconnect.de>2018-01-04 10:55:25 +0100
committerArno <arno@disconnect.de>2018-01-04 10:55:25 +0100
commitffffb6e63abfc33bc339d89a7bfcdd1734c48bef (patch)
treeeb7869ac8b4c81ef510f568f536a82e3a3b26897
parent94869e2c1fc55bec86c80777baa41f2c9f41e4ed (diff)
downloadShemovCleaner-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.cpp9
-rw-r--r--filesorter.h1
-rw-r--r--filewidget.cpp40
-rw-r--r--filewidget.h5
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;
};