akonadi
recursivecollectionfilterproxymodel.cpp
00001 /* 00002 Copyright (c) 2009 Stephen Kelly <steveire@gmail.com> 00003 00004 This library is free software; you can redistribute it and/or modify it 00005 under the terms of the GNU Library General Public License as published by 00006 the Free Software Foundation; either version 2 of the License, or (at your 00007 option) any later version. 00008 00009 This library is distributed in the hope that it will be useful, but WITHOUT 00010 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 00011 FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public 00012 License for more details. 00013 00014 You should have received a copy of the GNU Library General Public License 00015 along with this library; see the file COPYING.LIB. If not, write to the 00016 Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 00017 02110-1301, USA. 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 }