00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #include "recursivecollectionfilterproxymodel.h"
00021
00022 #include "entitytreemodel.h"
00023 #include "entityhiddenattribute.h"
00024
00025 #include <kdebug.h>
00026
00027 using namespace Akonadi;
00028
00029 namespace Akonadi
00030 {
00031
00032 class RecursiveCollectionFilterProxyModelPrivate
00033 {
00034 Q_DECLARE_PUBLIC(RecursiveCollectionFilterProxyModel)
00035 RecursiveCollectionFilterProxyModel *q_ptr;
00036 public:
00037 RecursiveCollectionFilterProxyModelPrivate(RecursiveCollectionFilterProxyModel *model)
00038 : q_ptr(model)
00039 {
00040
00041 }
00042
00043 QSet<QString> includedMimeTypes;
00044 };
00045
00046 }
00047
00048 RecursiveCollectionFilterProxyModel::RecursiveCollectionFilterProxyModel( QObject* parent )
00049 : KRecursiveFilterProxyModel(parent), d_ptr(new RecursiveCollectionFilterProxyModelPrivate( this ) )
00050 {
00051
00052 }
00053
00054 RecursiveCollectionFilterProxyModel::~RecursiveCollectionFilterProxyModel()
00055 {
00056 delete d_ptr;
00057 }
00058
00059 bool RecursiveCollectionFilterProxyModel::acceptRow(int sourceRow, const QModelIndex& sourceParent) const
00060 {
00061 Q_D(const RecursiveCollectionFilterProxyModel);
00062
00063 QModelIndex rowIndex = sourceModel()->index(sourceRow, 0, sourceParent);
00064 Akonadi::Collection col = rowIndex.data(Akonadi::EntityTreeModel::CollectionRole).value<Akonadi::Collection>();
00065 if (!col.isValid())
00066 return false;
00067
00068 if (d->includedMimeTypes.isEmpty())
00069 return true;
00070
00071 QSet<QString> contentMimeTypes = col.contentMimeTypes().toSet();
00072
00073 if ( contentMimeTypes.intersect(d->includedMimeTypes).isEmpty())
00074 return false;
00075 return true;
00076 }
00077
00078 void RecursiveCollectionFilterProxyModel::addContentMimeTypeInclusionFilter(const QString& mimeType)
00079 {
00080 Q_D(RecursiveCollectionFilterProxyModel);
00081 d->includedMimeTypes << mimeType;
00082 invalidateFilter();
00083 }
00084
00085 void RecursiveCollectionFilterProxyModel::addContentMimeTypeInclusionFilters(const QStringList& mimeTypes)
00086 {
00087 Q_D(RecursiveCollectionFilterProxyModel);
00088 d->includedMimeTypes.unite(mimeTypes.toSet());
00089 invalidateFilter();
00090 }
00091
00092 void RecursiveCollectionFilterProxyModel::clearFilters()
00093 {
00094 Q_D(RecursiveCollectionFilterProxyModel);
00095 d->includedMimeTypes.clear();
00096 invalidateFilter();
00097 }
00098
00099 void RecursiveCollectionFilterProxyModel::setContentMimeTypeInclusionFilters(const QStringList& mimeTypes)
00100 {
00101 Q_D(RecursiveCollectionFilterProxyModel);
00102 d->includedMimeTypes = mimeTypes.toSet();
00103 invalidateFilter();
00104 }
00105
00106 QStringList RecursiveCollectionFilterProxyModel::contentMimeTypeInclusionFilters() const
00107 {
00108 Q_D(const RecursiveCollectionFilterProxyModel);
00109 return d->includedMimeTypes.toList();
00110 }