diff options
author | Arno <arno@disconnect.de> | 2016-09-04 04:29:21 +0200 |
---|---|---|
committer | Arno <arno@disconnect.de> | 2016-09-04 04:29:21 +0200 |
commit | e047ecc96b8873d4e293793a67a33027af291efa (patch) | |
tree | feb02248e5d555b1757448981c8803eb7301d1bb | |
parent | 8945f641f468e373b4d8d907bcc2f5be2922962e (diff) | |
download | ShemovCleaner-e047ecc96b8873d4e293793a67a33027af291efa.tar.gz ShemovCleaner-e047ecc96b8873d4e293793a67a33027af291efa.tar.bz2 ShemovCleaner-e047ecc96b8873d4e293793a67a33027af291efa.zip |
Usability fixes for FileWidget
* Use GroupBoxes
* Don't clear filevew if browing is cancelled
* processEvents() when gathering data
* filter the view instead of selecting items when searching/filtering
-rw-r--r-- | filewidget.cpp | 86 | ||||
-rw-r--r-- | filewidget.h | 8 |
2 files changed, 47 insertions, 47 deletions
diff --git a/filewidget.cpp b/filewidget.cpp index 0a2bbbb..ef4e0ad 100644 --- a/filewidget.cpp +++ b/filewidget.cpp @@ -22,6 +22,7 @@ #include <QJsonObject> #include <QJsonDocument> #include <QItemSelectionModel> +#include <QGroupBox> #include "filewidget.h" #include "filesorter.h" @@ -46,31 +47,36 @@ void FileWidget::setupGui(){ fsCompleter->setCompletionMode(QCompleter::PopupCompletion); mDir->setCompleter(fsCompleter); connect(mDir, SIGNAL(returnPressed()), this, SLOT(gatherData())); - mSelDir = new QPushButton(tr("Browse...")); - connect(mSelDir, SIGNAL(clicked()), this, SLOT(selectDir())); - QLabel *dirL = new QLabel(tr("&Directory")); - dirL->setBuddy(mDir); + QPushButton *selDirBtn = new QPushButton(tr("&Browse...")); + connect(selDirBtn, SIGNAL(clicked()), this, SLOT(selectDir())); + QGroupBox *dirGB = new QGroupBox(tr("Directory")); + QHBoxLayout *dirGBL = new QHBoxLayout; + dirGBL->addWidget(mDir); + dirGBL->addWidget(selDirBtn); + dirGB->setLayout(dirGBL); - mSearchFile = new QLineEdit; - connect(mSearchFile, SIGNAL(returnPressed()), this, SLOT(searchFile())); - mSearch = new QPushButton(tr("Search")); - connect(mSearch, SIGNAL(clicked()), this, SLOT(searchFile())); - QLabel *searchL = new QLabel(tr("&Search")); - searchL->setBuddy(mSearchFile); - - QGridLayout *topL = new QGridLayout; - topL->addWidget(dirL, 0, 0); - topL->addWidget(mDir, 0, 1); - topL->addWidget(mSelDir, 0, 2); - topL->addWidget(searchL, 1, 0); - topL->addWidget(mSearchFile, 1, 1); - topL->addWidget(mSearch, 1, 2); + mFilter = new QLineEdit; + connect(mFilter, SIGNAL(returnPressed()), this, SLOT(filter())); + QPushButton *searchBtn = new QPushButton(tr("Filter")); + connect(searchBtn, SIGNAL(clicked()), this, SLOT(filter())); + QPushButton *clearBtn = new QPushButton(tr("Clear")); + connect(clearBtn, SIGNAL(clicked()), this, SLOT(clearFilter())); + QGroupBox *filterGB = new QGroupBox(tr("Filter")); + QHBoxLayout *filterGBL = new QHBoxLayout; + filterGBL->addWidget(mFilter); + filterGBL->addWidget(clearBtn); + filterGBL->addWidget(searchBtn); + filterGB->setLayout(filterGBL); mFileView = new QTreeView; mFileView->setSortingEnabled(true); mFileView->setSelectionBehavior(QAbstractItemView::SelectRows); mFileView->setSelectionMode(QAbstractItemView::ExtendedSelection); connect(mFileView, SIGNAL(doubleClicked(QModelIndex)), this, SLOT(itemDoubleClicked(QModelIndex))); + QGroupBox *filesGB = new QGroupBox(tr("Files")); + QHBoxLayout *filesGBL = new QHBoxLayout; + filesGBL->addWidget(mFileView); + filesGB->setLayout(filesGBL); mModel = new QStandardItemModel; mProxy = new VideoSorter; @@ -90,8 +96,9 @@ void FileWidget::setupGui(){ mFileDisplay = new FileDisplay(this); QVBoxLayout *mainLayout = new QVBoxLayout; - mainLayout->addLayout(topL); - mainLayout->addWidget(mFileView); + mainLayout->addWidget(dirGB); + mainLayout->addWidget(filterGB); + mainLayout->addWidget(filesGB); setLayout(mainLayout); connect(mFileView->selectionModel(), SIGNAL(selectionChanged(QItemSelection,QItemSelection)), this, SLOT(fileSelectionChanged(QItemSelection,QItemSelection))); @@ -99,8 +106,10 @@ void FileWidget::setupGui(){ void FileWidget::selectDir(){ QString dir = QFileDialog::getExistingDirectory(this, tr("Select directory"), QDir::homePath()); - mDir->setText(QDir::toNativeSeparators(dir)); - gatherData(); + if(!dir.isEmpty()){ + mDir->setText(QDir::toNativeSeparators(dir)); + gatherData(); + } } void FileWidget::gatherData(){ @@ -114,6 +123,8 @@ void FileWidget::gatherData(){ QMimeDatabase db; qApp->setOverrideCursor(Qt::BusyCursor); + emit statusMessage(QString(tr("Gathering data..."))); + qApp->processEvents(); foreach(QFileInfo fi, fl){ QMimeType mime = db.mimeTypeForFile(fi); @@ -179,6 +190,8 @@ void FileWidget::gatherData(){ } readHeaderData(); qApp->restoreOverrideCursor(); + fileSelectionChanged(QItemSelection(), QItemSelection()); + emit statusMessage(QString(tr("Gathering data... DONE!"))); } int FileWidget::md5Count(const QString &md5) { @@ -221,26 +234,15 @@ void FileWidget::writeSettings(){ s.setValue("video/searchdir", mDir->text()); } -void FileWidget::searchFile(){ - mFileView->selectionModel()->clear(); - int count = mProxy->rowCount(); - if(mSearchFile->text().isEmpty()){ - return; - } - QRegularExpression regex(mSearchFile->text(), QRegularExpression::CaseInsensitiveOption); - int success = 0; - for(int i = 0; i < count; ++i){ - QModelIndex cur = mProxy->index(i, 1); - QString fn = cur.data().toString(); - QRegularExpressionMatch m = regex.match(fn); - if(m.hasMatch()){ - ++success; - mFileView->selectionModel()->select(cur, QItemSelectionModel::Select | QItemSelectionModel::Rows); - if(success == 1){ - mFileView->scrollTo(cur); - } - } - } +void FileWidget::filter(){ + mProxy->setFilterRegExp(mFilter->text()); + mProxy->setFilterKeyColumn(NameColumn); + mProxy->setFilterCaseSensitivity(Qt::CaseInsensitive); +} + +void FileWidget::clearFilter(){ + mFilter->clear(); + filter(); } void FileWidget::fileSelectionChanged(const QItemSelection &selected, const QItemSelection &deselected){ diff --git a/filewidget.h b/filewidget.h index 7726230..99c8d3d 100644 --- a/filewidget.h +++ b/filewidget.h @@ -7,7 +7,6 @@ #include <QItemSelection> class QLineEdit; -class QPushButton; class QStandardItemModel; class QTreeView; class VideoSorter; @@ -34,7 +33,8 @@ class FileWidget : public QWidget { private slots: void gatherData(); void selectDir(); - void searchFile(); + void filter(); + void clearFilter(); void itemDoubleClicked(const QModelIndex &idx); private: @@ -45,9 +45,7 @@ class FileWidget : public QWidget { void readSettings(); void writeSettings(); QLineEdit *mDir; - QPushButton *mSelDir; - QLineEdit *mSearchFile; - QPushButton *mSearch; + QLineEdit *mFilter; QStandardItemModel *mModel; QTreeView *mFileView; VideoSorter *mProxy; |