22 #include "entitymimetypefiltermodel.h"
24 #include "entitytreemodel.h"
25 #include "mimetypechecker.h"
28 #include <kmimetype.h>
30 #include <QtCore/QString>
31 #include <QtCore/QStringList>
33 using namespace Akonadi;
39 class EntityMimeTypeFilterModelPrivate
51 QStringList includedMimeTypes;
52 QStringList excludedMimeTypes;
54 QPersistentModelIndex m_rootIndex;
62 : QSortFilterProxyModel( parent ),
63 d_ptr( new EntityMimeTypeFilterModelPrivate( this ) )
75 d->includedMimeTypes << typeList;
82 d->excludedMimeTypes << typeList;
89 d->includedMimeTypes << type;
96 d->excludedMimeTypes << type;
100 bool EntityMimeTypeFilterModel::filterAcceptsColumn(
int sourceColumn,
const QModelIndex &sourceParent )
const
102 if (sourceColumn >= columnCount(mapFromSource(sourceParent)))
104 return QSortFilterProxyModel::filterAcceptsColumn( sourceColumn, sourceParent );
107 bool EntityMimeTypeFilterModel::filterAcceptsRow(
int sourceRow,
const QModelIndex &sourceParent)
const
110 const QModelIndex idx = sourceModel()->index(sourceRow, 0, sourceParent);
115 kDebug() <<
"Item " << item.
id() <<
" doesn't have payload";
121 if ( d->excludedMimeTypes.contains( rowMimetype ) )
123 if ( d->includedMimeTypes.isEmpty() || d->includedMimeTypes.contains( rowMimetype ) )
132 return d->includedMimeTypes;
138 return d->excludedMimeTypes;
144 d->includedMimeTypes.clear();
145 d->excludedMimeTypes.clear();
152 d->m_headerGroup = headerGroup;
155 QVariant EntityMimeTypeFilterModel::headerData(
int section, Qt::Orientation orientation,
int role )
const
162 return sourceModel()->headerData(section, orientation, role);
165 QModelIndexList EntityMimeTypeFilterModel::match(
const QModelIndex& start,
int role,
const QVariant& value,
int hits, Qt::MatchFlags flags )
const
167 if ( !sourceModel() )
168 return QModelIndexList();
171 if ( role < Qt::UserRole )
172 return QSortFilterProxyModel::match( start, role, value, hits, flags );
174 QModelIndexList list;
175 QModelIndex proxyIndex;
176 foreach (
const QModelIndex &idx, sourceModel()->match( mapToSource( start ), role, value, hits, flags ) ) {
177 proxyIndex = mapFromSource(idx);
178 if (proxyIndex.isValid())
185 const int allHits = -1;
187 QModelIndexList proxyList;
188 QMap<int, QModelIndex> proxyMap;
189 const QModelIndexList sourceList = sourceModel()->match( mapToSource( start ), role, value, allHits, flags );
190 QModelIndexList::const_iterator it;
191 const QModelIndexList::const_iterator begin = sourceList.constBegin();
192 const QModelIndexList::const_iterator end = sourceList.constEnd();
193 QModelIndex proxyIndex;
194 for ( it = begin; it != end; ++it ) {
195 proxyIndex = mapFromSource( *it );
198 if ( !proxyIndex.isValid() )
202 proxyMap.insert( proxyIndex.row(), proxyIndex );
206 return proxyMap.values();
208 return proxyMap.values().mid( 0, hits );
211 int EntityMimeTypeFilterModel::columnCount(
const QModelIndex &parent)
const
219 if ( !value.isValid() )
222 return value.toInt();
225 bool EntityMimeTypeFilterModel::hasChildren(
const QModelIndex &parent)
const
234 return rowCount(parent) > 0;
237 if ( !parent.isValid() )
238 return sourceModel()->hasChildren(parent);
246 QModelIndex childIndex = parent.child( 0, 0 );
247 while ( childIndex.isValid() )
252 childIndex = childIndex.sibling( childIndex.row() + 1, childIndex.column() );
259 bool EntityMimeTypeFilterModel::canFetchMore(
const QModelIndex &parent )
const
264 return QSortFilterProxyModel::canFetchMore(parent);
267 #include "entitymimetypefiltermodel.moc"