summaryrefslogtreecommitdiffstats
path: root/seriestreewidget.cpp
diff options
context:
space:
mode:
authorArno <am@disconnect.de>2010-08-01 14:09:27 +0200
committerArno <am@disconnect.de>2010-08-01 14:11:52 +0200
commit3ed95b4e8edd7faaefa0a296a8d33f1dadd60b83 (patch)
treea97fd92dd6d537cb3696afde395317a3b767ba5d /seriestreewidget.cpp
parent8eba6e7f033617f3e7ea3bd9913105df0de74ae2 (diff)
downloadSheMov-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.cpp49
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()){