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 "mimetypechecker.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 Akonadi::MimeTypeChecker checker; 00064 checker.setWantedMimeTypes( d->includedMimeTypes.toList() ); 00065 00066 const QModelIndex rowIndex = sourceModel()->index( sourceRow, 0, sourceParent ); 00067 const Akonadi::Collection collection = rowIndex.data( Akonadi::EntityTreeModel::CollectionRole ).value<Akonadi::Collection>(); 00068 if ( !collection.isValid() ) 00069 return false; 00070 00071 return checker.isWantedCollection( collection ); 00072 } 00073 00074 void RecursiveCollectionFilterProxyModel::addContentMimeTypeInclusionFilter(const QString& mimeType) 00075 { 00076 Q_D(RecursiveCollectionFilterProxyModel); 00077 d->includedMimeTypes << mimeType; 00078 invalidateFilter(); 00079 } 00080 00081 void RecursiveCollectionFilterProxyModel::addContentMimeTypeInclusionFilters(const QStringList& mimeTypes) 00082 { 00083 Q_D(RecursiveCollectionFilterProxyModel); 00084 d->includedMimeTypes.unite(mimeTypes.toSet()); 00085 invalidateFilter(); 00086 } 00087 00088 void RecursiveCollectionFilterProxyModel::clearFilters() 00089 { 00090 Q_D(RecursiveCollectionFilterProxyModel); 00091 d->includedMimeTypes.clear(); 00092 invalidateFilter(); 00093 } 00094 00095 void RecursiveCollectionFilterProxyModel::setContentMimeTypeInclusionFilters(const QStringList& mimeTypes) 00096 { 00097 Q_D(RecursiveCollectionFilterProxyModel); 00098 d->includedMimeTypes = mimeTypes.toSet(); 00099 invalidateFilter(); 00100 } 00101 00102 QStringList RecursiveCollectionFilterProxyModel::contentMimeTypeInclusionFilters() const 00103 { 00104 Q_D(const RecursiveCollectionFilterProxyModel); 00105 return d->includedMimeTypes.toList(); 00106 }