From 3ed95b4e8edd7faaefa0a296a8d33f1dadd60b83 Mon Sep 17 00:00:00 2001 From: Arno Date: Sun, 1 Aug 2010 14:09:27 +0200 Subject: 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 --- seriestreewidget.cpp | 49 ++++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 44 insertions(+), 5 deletions(-) (limited to 'seriestreewidget.cpp') 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(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()){ -- cgit v1.2.3-70-g09d2