diff options
Diffstat (limited to 'archiveproxy.cpp')
-rw-r--r-- | archiveproxy.cpp | 69 |
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(); +} + |