• Skip to content
  • Skip to link menu
  • KDE API Reference
  • kdepimlibs-4.14.10 API Reference
  • KDE Home
  • Contact Us
 

akonadi

  • akonadi
entityrightsfiltermodel.cpp
1/*
2 Copyright (c) 2007 Bruno Virlet <bruno.virlet@gmail.com>
3 Copyright (c) 2009 Stephen Kelly <steveire@gmail.com>
4
5 This library is free software; you can redistribute it and/or modify it
6 under the terms of the GNU Library General Public License as published by
7 the Free Software Foundation; either version 2 of the License, or (at your
8 option) any later version.
9
10 This library is distributed in the hope that it will be useful, but WITHOUT
11 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
12 FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public
13 License for more details.
14
15 You should have received a copy of the GNU Library General Public License
16 along with this library; see the file COPYING.LIB. If not, write to the
17 Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
18 02110-1301, USA.
19*/
20
21#include "entityrightsfiltermodel.h"
22
23#include "entitytreemodel.h"
24
25#include <kdebug.h>
26
27using namespace Akonadi;
28
29namespace Akonadi {
30
34class EntityRightsFilterModelPrivate
35{
36public:
37 EntityRightsFilterModelPrivate(EntityRightsFilterModel *parent)
38 : q_ptr(parent)
39 , mAccessRights(Collection::AllRights)
40 {
41 }
42
43 bool rightsMatches(const QModelIndex &index) const
44 {
45 if (mAccessRights == Collection::AllRights ||
46 mAccessRights == Collection::ReadOnly) {
47 return true;
48 }
49
50 const Collection collection = index.data(EntityTreeModel::CollectionRole).value<Collection>();
51 if (collection.isValid()) {
52 return (mAccessRights &collection.rights());
53 } else {
54 const Item item = index.data(EntityTreeModel::ItemRole).value<Item>();
55 if (item.isValid()) {
56 const Collection collection = index.data(EntityTreeModel::ParentCollectionRole).value<Collection>();
57 return (mAccessRights &collection.rights());
58 } else {
59 return false;
60 }
61 }
62 }
63
64 Q_DECLARE_PUBLIC(EntityRightsFilterModel)
65 EntityRightsFilterModel *q_ptr;
66
67 Collection::Rights mAccessRights;
68};
69
70}
71
72EntityRightsFilterModel::EntityRightsFilterModel(QObject *parent)
73 : KRecursiveFilterProxyModel(parent)
74 , d_ptr(new EntityRightsFilterModelPrivate(this))
75{
76}
77
78EntityRightsFilterModel::~EntityRightsFilterModel()
79{
80 delete d_ptr;
81}
82
83void EntityRightsFilterModel::setAccessRights(Collection::Rights rights)
84{
85 Q_D(EntityRightsFilterModel);
86 d->mAccessRights = rights;
87 invalidateFilter();
88}
89
90Collection::Rights EntityRightsFilterModel::accessRights() const
91{
92 Q_D(const EntityRightsFilterModel);
93 return d->mAccessRights;
94}
95
96bool EntityRightsFilterModel::acceptRow(int sourceRow, const QModelIndex &sourceParent) const
97{
98 Q_D(const EntityRightsFilterModel);
99
100 const QModelIndex modelIndex = sourceModel()->index(sourceRow, 0, sourceParent);
101
102 return d->rightsMatches(modelIndex);
103}
104
105Qt::ItemFlags EntityRightsFilterModel::flags(const QModelIndex &index) const
106{
107 Q_D(const EntityRightsFilterModel);
108
109 if (d->rightsMatches(index)) {
110 return KRecursiveFilterProxyModel::flags(index);
111 } else {
112 return KRecursiveFilterProxyModel::flags(index) &~(Qt::ItemIsSelectable | Qt::ItemIsEnabled);
113 }
114}
115
116QModelIndexList EntityRightsFilterModel::match(const QModelIndex &start, int role, const QVariant &value, int hits, Qt::MatchFlags flags) const
117{
118 if (role < Qt::UserRole) {
119 return QSortFilterProxyModel::match(start, role, value, hits, flags);
120 }
121
122 QModelIndexList list;
123 QModelIndex proxyIndex;
124 foreach (const QModelIndex &idx, sourceModel()->match(mapToSource(start), role, value, hits, flags)) {
125 proxyIndex = mapFromSource(idx);
126 if (proxyIndex.isValid())
127 list << proxyIndex;
128 }
129
130 return list;
131}
Akonadi::Collection
Represents a collection of PIM items.
Definition: collection.h:76
Akonadi::Collection::ReadOnly
@ ReadOnly
Can only read items or subcollection of this collection.
Definition: collection.h:87
Akonadi::Collection::AllRights
@ AllRights
Has all rights on this storage collection.
Definition: collection.h:96
Akonadi::EntityRightsFilterModel
A proxy model that filters entities by access rights.
Definition: entityrightsfiltermodel.h:61
Akonadi::EntityRightsFilterModel::setAccessRights
void setAccessRights(Collection::Rights rights)
Sets the access rights the entities shall be filtered against.
Definition: entityrightsfiltermodel.cpp:83
Akonadi::EntityRightsFilterModel::match
virtual QModelIndexList match(const QModelIndex &start, int role, const QVariant &value, int hits=1, Qt::MatchFlags flags=Qt::MatchFlags(Qt::MatchStartsWith|Qt::MatchWrap)) const
Definition: entityrightsfiltermodel.cpp:116
Akonadi::EntityRightsFilterModel::flags
virtual Qt::ItemFlags flags(const QModelIndex &index) const
Definition: entityrightsfiltermodel.cpp:105
Akonadi::EntityRightsFilterModel::~EntityRightsFilterModel
virtual ~EntityRightsFilterModel()
Destroys the entity rights filter model.
Definition: entityrightsfiltermodel.cpp:78
Akonadi::EntityRightsFilterModel::accessRights
Collection::Rights accessRights() const
Returns the access rights that are used for filtering.
Definition: entityrightsfiltermodel.cpp:90
Akonadi::EntityRightsFilterModel::EntityRightsFilterModel
EntityRightsFilterModel(QObject *parent=0)
Creates a new entity rights filter model.
Definition: entityrightsfiltermodel.cpp:72
Akonadi::EntityTreeModel::ParentCollectionRole
@ ParentCollectionRole
The parent collection of the entity.
Definition: entitytreemodel.h:341
Akonadi::EntityTreeModel::ItemRole
@ ItemRole
The Item.
Definition: entitytreemodel.h:332
Akonadi::EntityTreeModel::CollectionRole
@ CollectionRole
The collection.
Definition: entitytreemodel.h:336
Akonadi
FreeBusyManager::Singleton.
Definition: actionstatemanager_p.h:28
This file is part of the KDE documentation.
Documentation copyright © 1996-2022 The KDE developers.
Generated on Thu Jul 21 2022 00:00:00 by doxygen 1.9.5 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.

akonadi

Skip menu "akonadi"
  • Main Page
  • Namespace List
  • Namespace Members
  • Alphabetical List
  • Class List
  • Class Hierarchy
  • Class Members
  • File List
  • Modules
  • Related Pages

kdepimlibs-4.14.10 API Reference

Skip menu "kdepimlibs-4.14.10 API Reference"
  • akonadi
  •   contact
  •   kmime
  •   socialutils
  • kabc
  • kalarmcal
  • kblog
  • kcal
  • kcalcore
  • kcalutils
  • kholidays
  • kimap
  • kioslave
  •   imap4
  •   mbox
  •   nntp
  • kldap
  • kmbox
  • kmime
  • kontactinterface
  • kpimidentities
  • kpimtextedit
  • kpimutils
  • kresources
  • ktnef
  • kxmlrpcclient
  • mailtransport
  • microblog
  • qgpgme
  • syndication
  •   atom
  •   rdf
  •   rss2
Report problems with this website to our bug tracking system.
Contact the specific authors with questions and comments about the page contents.

KDE® and the K Desktop Environment® logo are registered trademarks of KDE e.V. | Legal