/* 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 #include #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(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(); }