diff options
Diffstat (limited to 'filewidget.cpp')
-rw-r--r-- | filewidget.cpp | 86 |
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){ |