summaryrefslogtreecommitdiffstats
path: root/archiveproxy.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'archiveproxy.cpp')
-rw-r--r--archiveproxy.cpp69
1 files changed, 69 insertions, 0 deletions
diff --git a/archiveproxy.cpp b/archiveproxy.cpp
new file mode 100644
index 0000000..6b1a9e7
--- /dev/null
+++ b/archiveproxy.cpp
@@ -0,0 +1,69 @@
+/*
+ This program is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public License
+ as published by the Free Software Foundation; either version
+ 2 of the License, or (at your option) any later version.
+*/
+
+#include <QStringList>
+#include <QRegExp>
+
+#include "archiveproxy.h"
+#include "moviemodel.h"
+
+ArchiveProxy::ArchiveProxy(QObject *parent) : QSortFilterProxyModel(parent){};
+
+void ArchiveProxy::setFilter(const QString &filter, FilterMode mode){
+ mFilterMode = mode;
+ switch(mFilterMode){
+ case NoFilter:
+ mGenreFilter = QString();
+ mActorFilter = QString();
+ mTitleFilter = QString();
+ break;
+ case GenreFilter:
+ mGenreFilter = filter;
+ break;
+ case ActorFilter:
+ mActorFilter = filter;
+ break;
+ case TitleFilter:
+ mTitleFilter = filter.toLower();
+ break;
+ }
+ invalidate();
+}
+
+bool ArchiveProxy::filterAcceptsRow(int sourceRow, const QModelIndex & /*sourceParent*/) const{
+ if(mFilterMode == NoFilter){
+ return true;
+ }
+ MovieModel *model = static_cast<MovieModel*>(sourceModel());
+ Q_ASSERT(model != 0);
+ if(mFilterMode == ActorFilter){
+ QModelIndex idx = model->index(sourceRow, 0, QModelIndex());
+ QStringList actors = model->data(idx, MovieModel::ActorsRole).toStringList();
+ return actors.contains(mActorFilter);
+ }
+ if(mFilterMode == GenreFilter){
+ QModelIndex idx = model->index(sourceRow, 4, QModelIndex());
+ QString genre = idx.data().toString();
+ return (genre == mGenreFilter);
+ }
+ if(mFilterMode == TitleFilter){
+ QModelIndex idx = model->index(sourceRow, 0, QModelIndex());
+ QString title = idx.data().toString();
+ QRegExp re(mTitleFilter);
+ return( re.indexIn(title) != -1);
+ }
+ return true;
+}
+
+void ArchiveProxy::clearFilter(){
+ mFilterMode = NoFilter;
+ mGenreFilter = QString();
+ mActorFilter = QString();
+ mTitleFilter = QString();
+ invalidate();
+}
+