20 #include "collectionfilterproxymodel.h"
22 #include "collectionmodel.h"
23 #include "mimetypechecker.h"
27 #include <QtCore/QString>
28 #include <QtCore/QStringList>
31 using namespace Akonadi;
36 class CollectionFilterProxyModel::Private
40 : mParent( parent ), mExcludeVirtualCollections( false )
42 mimeChecker.addWantedMimeType( QLatin1String(
"text/uri-list" ) );
45 bool collectionAccepted(
const QModelIndex &index,
bool checkResourceVisibility =
true );
47 QVector< QModelIndex > acceptedResources;
50 bool mExcludeVirtualCollections;
53 bool CollectionFilterProxyModel::Private::collectionAccepted(
const QModelIndex &index,
bool checkResourceVisibility )
62 if ( collection.
isVirtual() && mExcludeVirtualCollections ) {
67 if ( mimeChecker.isWantedCollection( collection ) ) {
69 if ( checkResourceVisibility ) {
72 QModelIndex resource = index;
73 while ( resource.parent().isValid() ) {
74 resource = resource.
parent();
78 if ( resource != index && !acceptedResources.contains( resource ) ) {
79 kDebug() <<
"We got a new collection:" << mParent->sourceModel()->data( index ).toString()
80 <<
"but the resource is not visible:" << mParent->sourceModel()->data( resource ).toString();
81 acceptedResources.clear();
83 mParent->invalidateFilter();
89 if ( !index.parent().isValid() ) {
90 acceptedResources.append( index );
97 QModelIndex childIndex = index.child( 0, 0 );
98 while ( childIndex.isValid() ) {
99 if ( collectionAccepted( childIndex,
false ) ) {
102 if ( !index.parent().isValid() ) {
103 acceptedResources.append( index );
108 childIndex = childIndex.sibling( childIndex.row() + 1, 0 );
117 : QSortFilterProxyModel( parent ),
118 d( new Private( this ) )
129 QStringList mimeTypes = d->mimeChecker.wantedMimeTypes() + typeList;
130 d->mimeChecker.setWantedMimeTypes( mimeTypes );
136 d->mimeChecker.addWantedMimeType( type );
140 bool CollectionFilterProxyModel::filterAcceptsRow(
int sourceRow,
const QModelIndex &sourceParent)
const
142 return d->collectionAccepted( sourceModel()->index( sourceRow, 0, sourceParent ) );
147 return d->mimeChecker.wantedMimeTypes();
158 if ( exclude != d->mExcludeVirtualCollections ) {
159 d->mExcludeVirtualCollections = exclude;
164 Qt::ItemFlags CollectionFilterProxyModel::flags(
const QModelIndex& index )
const
166 if ( !index.isValid() ) {
174 if ( d->mimeChecker.isWantedCollection( collection ) ) {
175 return QSortFilterProxyModel::flags( index );
177 return QSortFilterProxyModel::flags( index ) & ~( Qt::ItemIsSelectable );