diff options
author | Arno <am@disconnect.de> | 2010-08-01 14:09:27 +0200 |
---|---|---|
committer | Arno <am@disconnect.de> | 2010-08-01 14:11:52 +0200 |
commit | 3ed95b4e8edd7faaefa0a296a8d33f1dadd60b83 (patch) | |
tree | a97fd92dd6d537cb3696afde395317a3b767ba5d /seriestreewidget.cpp | |
parent | 8eba6e7f033617f3e7ea3bd9913105df0de74ae2 (diff) | |
download | SheMov-3ed95b4e8edd7faaefa0a296a8d33f1dadd60b83.tar.gz SheMov-3ed95b4e8edd7faaefa0a296a8d33f1dadd60b83.tar.bz2 SheMov-3ed95b4e8edd7faaefa0a296a8d33f1dadd60b83.zip |
Implemented extended filters
Extended the filter function in SeriesTreeWidget. By passing an operator
to the filter dialog series can be filtered. The code generates highly
dynamic SQL queries. I hope I didn't introduce possible SQL injections.
Filter operators:
g: genre
a: actor
q: quality
n: filename
d: dvd no
s: size
Diffstat (limited to 'seriestreewidget.cpp')
-rw-r--r-- | seriestreewidget.cpp | 49 |
1 files changed, 44 insertions, 5 deletions
diff --git a/seriestreewidget.cpp b/seriestreewidget.cpp index 3452931..b09d7f7 100644 --- a/seriestreewidget.cpp +++ b/seriestreewidget.cpp @@ -36,12 +36,15 @@ SeriesTreeWidget::SeriesTreeWidget(QWidget *parent) : QWidget(parent){ mFilterEdit = new QLineEdit; l1->setBuddy(mFilterEdit); mFilter = new QPushButton(tr("Filter")); + mClear = new QPushButton(tr("Clear")); QHBoxLayout *filterLayout = new QHBoxLayout; connect(mFilter, SIGNAL(clicked()), this, SLOT(filter())); connect(mFilterEdit, SIGNAL(returnPressed()), this, SLOT(filter())); + connect(mClear, SIGNAL(clicked()), this, SLOT(clearFilter())); filterLayout->addWidget(l1); filterLayout->addWidget(mFilterEdit); filterLayout->addWidget(mFilter); + filterLayout->addWidget(mClear); //the view mView = new SeriesTreeView; @@ -174,10 +177,7 @@ void SeriesTreeWidget::deleteFromSeries(){ void SeriesTreeWidget::readSettings(){ QSettings s; QStringList expanded = s.value("archive/expanded").toStringList(); - foreach(QString s, expanded){ - QModelIndex idx = mProxy->mapFromSource(mModel->findValue(s)); - mView->expand(idx); - } + expandItems(expanded); int sortOrder = s.value("archive/sortorder", Qt::DescendingOrder).toInt(); mView->sortByColumn(0, static_cast<Qt::SortOrder>(sortOrder)); QString selectedSeries = s.value("archive/selectedseries").toString(); @@ -210,7 +210,39 @@ void SeriesTreeWidget::expandCurrent(){ } void SeriesTreeWidget::filter(){ - mProxy->setFilterRegExp(mFilterEdit->text()); + QString filterText = mFilterEdit->text(); + if(filterText.isEmpty()){ + clearFilter(); + return; + } + QRegExp pattern("^([a-z]):\\s+"); + QString op; + if(pattern.indexIn(filterText) != -1){ + op = pattern.cap(1); + filterText.remove(pattern); + } + if(op == "a"){ + mModel->setMappingFilter(filterText, "actor"); + }else if(op == "g"){ + mModel->setMappingFilter(filterText, "genre"); + }else if(op == "q"){ + mModel->setFileFilter(filterText, "siquality", SeriesTreeModel::NumericQuery); + }else if(op == "n"){ + mModel->setFileFilter(filterText, "tfilename", SeriesTreeModel::TextQuery); + }else if(op == "d"){ + mModel->setFileFilter(filterText, "idvd", SeriesTreeModel::NumericQuery); + }else if(op == "s"){ + mModel->setFileFilter(filterText, "bisize", SeriesTreeModel::NumericQuery); + }else{ + mProxy->setFilterRegExp(mFilterEdit->text()); + } +} + +void SeriesTreeWidget::clearFilter(){ + mModel->clearFilter(); + mProxy->setFilterRegExp(QString()); + mFilterEdit->clear(); + expandItems(mExpandedItems); } void SeriesTreeWidget::resort(){ @@ -229,6 +261,13 @@ void SeriesTreeWidget::itemCollaped(const QModelIndex &what){ } } +void SeriesTreeWidget::expandItems(const QStringList &items){ + foreach(QString s, items){ + QModelIndex idx = mProxy->mapFromSource(mModel->findValue(s)); + mView->expand(idx); + } +} + void SeriesTreeWidget::addCover(){ QModelIndexList selected = mView->selectionModel()->selectedRows(); if(selected.isEmpty()){ |