summaryrefslogtreecommitdiffstats
path: root/filewidget.cpp
diff options
context:
space:
mode:
authorArno <arno@disconnect.de>2016-09-04 04:29:21 +0200
committerArno <arno@disconnect.de>2016-09-04 04:29:21 +0200
commite047ecc96b8873d4e293793a67a33027af291efa (patch)
treefeb02248e5d555b1757448981c8803eb7301d1bb /filewidget.cpp
parent8945f641f468e373b4d8d907bcc2f5be2922962e (diff)
downloadShemovCleaner-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
Diffstat (limited to 'filewidget.cpp')
-rw-r--r--filewidget.cpp86
1 files changed, 44 insertions, 42 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){