35
35
class ContactsFilterProxyModel::Private
40
mExcludeVirtualCollections( false )
44
ContactsFilterProxyModel::FilterFlags flags;
45
bool mExcludeVirtualCollections;
41
48
ContactsFilterProxyModel::ContactsFilterProxyModel( QObject *parent )
60
67
bool ContactsFilterProxyModel::filterAcceptsRow( int row, const QModelIndex &parent ) const
62
if ( d->mFilter.isEmpty() )
65
69
const QModelIndex index = sourceModel()->index( row, 0, parent );
70
if ( d->mExcludeVirtualCollections ) {
71
const Akonadi::Collection collection = index.data(Akonadi::EntityTreeModel::CollectionRole).value<Akonadi::Collection>();
72
if ( collection.isValid() && collection.isVirtual())
76
if ( ( d->mFilter.isEmpty() ) && ( !( d->flags & ContactsFilterProxyModel::HasEmail ) ))
67
79
const Akonadi::Item item = index.data( Akonadi::EntityTreeModel::ItemRole ).value<Akonadi::Item>();
69
81
if ( item.hasPayload<KABC::Addressee>() ) {
70
82
const KABC::Addressee contact = item.payload<KABC::Addressee>();
71
return contactMatchesFilter( contact, d->mFilter );
72
} else if ( item.hasPayload<KABC::ContactGroup>() ) {
73
const KABC::ContactGroup group = item.payload<KABC::ContactGroup>();
74
return contactGroupMatchesFilter( group, d->mFilter );
83
if ( d->flags & ContactsFilterProxyModel::HasEmail ){
84
if ( contact.emails().isEmpty() )
87
if ( !d->mFilter.isEmpty() ) {
88
return contactMatchesFilter( contact, d->mFilter );
91
if ( !d->mFilter.isEmpty() ) {
92
if ( item.hasPayload<KABC::ContactGroup>() ) {
93
const KABC::ContactGroup group = item.payload<KABC::ContactGroup>();
94
return contactGroupMatchesFilter( group, d->mFilter );
94
116
return QSortFilterProxyModel::lessThan( leftIndex, rightIndex );
119
void ContactsFilterProxyModel::setFilterFlags( ContactsFilterProxyModel::FilterFlags flags )
124
void ContactsFilterProxyModel::setExcludeVirtualCollections( bool exclude )
126
if ( exclude != d->mExcludeVirtualCollections ) {
127
d->mExcludeVirtualCollections = exclude;
132
Qt::ItemFlags ContactsFilterProxyModel::flags( const QModelIndex& index ) const
134
if ( !index.isValid() ) {
138
const Akonadi::Collection collection = index.data(Akonadi::EntityTreeModel::CollectionRole).value<Akonadi::Collection>();
139
if ( collection.isValid() )
141
return QSortFilterProxyModel::flags( index ) & ~( Qt::ItemIsSelectable );
143
return QSortFilterProxyModel::flags( index );
97
146
static bool addressMatchesFilter( const KABC::Address &address, const QString &filterString )
99
148
if ( address.street().contains( filterString, Qt::CaseInsensitive ) )