• Skip to content
  • Skip to link menu
KDE API Reference
  • KDE API Reference
  • kdepim API Reference
  • KDE Home
  • Contact Us
 

mailcommon

  • sources
  • kde-4.12
  • kdepim
  • mailcommon
  • folder
foldertreewidgetproxymodel.cpp
Go to the documentation of this file.
1 /*
2  Copyright (c) 2009, 2010, 2011 Laurent Montel <montel@kde.org>
3 
4  This library is free software; you can redistribute it and/or modify it
5  under the terms of the GNU Library General Public License as published by
6  the Free Software Foundation; either version 2 of the License, or (at your
7  option) any later version.
8 
9  This library is distributed in the hope that it will be useful, but WITHOUT
10  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11  FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public
12  License for more details.
13 
14  You should have received a copy of the GNU Library General Public License
15  along with this library; see the file COPYING.LIB. If not, write to the
16  Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
17  02110-1301, USA.
18 */
19 
20 #include "foldertreewidgetproxymodel.h"
21 #include "foldercollection.h"
22 #include "kernel/mailkernel.h"
23 #include "util/mailutil.h"
24 
25 #include <messagecore/settings/globalsettings.h>
26 
27 #include <Akonadi/AgentInstance>
28 #include <Akonadi/AgentManager>
29 #include <Akonadi/Collection>
30 #include <Akonadi/EntityTreeModel>
31 #include <Akonadi/MimeTypeChecker>
32 
33 #include <KColorScheme>
34 #include <KDebug>
35 #include <KLocale>
36 
37 #include <QApplication>
38 #include <QPalette>
39 
40 namespace MailCommon {
41 
42 class FolderTreeWidgetProxyModel::Private
43 {
44  public:
45  Private()
46  : enableCheck( false ),
47  hideVirtualFolder( false ),
48  hideSpecificFolder( false ),
49  hideOutboxFolder( false )
50  {
51  }
52 
53  QSet<QString> includedMimeTypes;
54  Akonadi::MimeTypeChecker checker;
55 
56  QColor brokenAccountColor;
57  QString filterStr;
58  bool enableCheck;
59  bool hideVirtualFolder;
60  bool hideSpecificFolder;
61  bool hideOutboxFolder;
62 };
63 
64 FolderTreeWidgetProxyModel::FolderTreeWidgetProxyModel( QObject *parent,
65  FolderTreeWidgetProxyModelOptions option )
66  : Akonadi::EntityRightsFilterModel( parent ),
67  d( new Private )
68 {
69  setDynamicSortFilter( true );
70  setFilterCaseSensitivity( Qt::CaseInsensitive );
71 
72  if ( option & HideVirtualFolder ) {
73  d->hideVirtualFolder = true;
74  }
75  if ( option & HideSpecificFolder ) {
76  d->hideSpecificFolder = true;
77  }
78  if ( option & HideOutboxFolder ) {
79  d->hideOutboxFolder = true;
80  }
81  readConfig();
82 }
83 
84 FolderTreeWidgetProxyModel::~FolderTreeWidgetProxyModel()
85 {
86  delete d;
87 }
88 
89 void FolderTreeWidgetProxyModel::readConfig()
90 {
91  KConfigGroup collectionFolderView( KernelIf->config(), "CollectionFolderView" );
92  KColorScheme scheme( QPalette::Active, KColorScheme::View );
93  if ( MessageCore::GlobalSettings::self()->useDefaultColors() ) {
94  d->brokenAccountColor = scheme.foreground( KColorScheme::NegativeText ).color();
95  } else {
96  d->brokenAccountColor =
97  collectionFolderView.readEntry( "BrokenAccountColor",
98  scheme.foreground( KColorScheme::NegativeText ).color() );
99  }
100  invalidate();
101 }
102 
103 Qt::ItemFlags FolderTreeWidgetProxyModel::flags( const QModelIndex &index ) const
104 {
105  if ( d->enableCheck ) {
106  const QModelIndex sourceIndex = mapToSource( index );
107  const QModelIndex rowIndex = sourceIndex.sibling( sourceIndex.row(), 0 );
108  const Akonadi::Collection collection = sourceModel()->data( rowIndex, Akonadi::EntityTreeModel::CollectionRole ).value<Akonadi::Collection>();
109  if ( !MailCommon::Util::isVirtualCollection( collection ) ) {
110  const Akonadi::AgentInstance instance = Akonadi::AgentManager::self()->instance( collection.resource() );
111  if ( instance.status() == Akonadi::AgentInstance::Broken ) {
112  return KRecursiveFilterProxyModel::flags( sourceIndex ) & ~( Qt::ItemIsSelectable | Qt::ItemIsEnabled );
113  }
114  }
115  return Akonadi::EntityRightsFilterModel::flags( index );
116  }
117  return QSortFilterProxyModel::flags( index );
118 }
119 
120 void FolderTreeWidgetProxyModel::setEnabledCheck( bool enable )
121 {
122  if ( d->enableCheck == enable ) {
123  return;
124  }
125 
126  d->enableCheck = enable;
127  if ( enable ) {
128  setAccessRights( Akonadi::Collection::CanCreateItem | Akonadi::Collection::CanCreateCollection );
129  }
130 }
131 
132 bool FolderTreeWidgetProxyModel::enabledCheck() const
133 {
134  return d->enableCheck;
135 }
136 
137 void FolderTreeWidgetProxyModel::setHideVirtualFolder( bool exclude )
138 {
139  d->hideVirtualFolder = exclude;
140  invalidate();
141 }
142 
143 bool FolderTreeWidgetProxyModel::hideVirtualFolder() const
144 {
145  return d->hideVirtualFolder;
146 }
147 
148 void FolderTreeWidgetProxyModel::setHideSpecificFolder( bool hide )
149 {
150  d->hideSpecificFolder = hide;
151  invalidate();
152 }
153 
154 bool FolderTreeWidgetProxyModel::hideSpecificFolder() const
155 {
156  return d->hideSpecificFolder;
157 }
158 
159 void FolderTreeWidgetProxyModel::setHideOutboxFolder( bool hide )
160 {
161  d->hideOutboxFolder = hide;
162  invalidate();
163 }
164 
165 bool FolderTreeWidgetProxyModel::hideOutboxFolder() const
166 {
167  return d->hideOutboxFolder;
168 }
169 
170 bool FolderTreeWidgetProxyModel::acceptRow( int sourceRow, const QModelIndex &sourceParent ) const
171 {
172  const QModelIndex modelIndex = sourceModel()->index( sourceRow, 0, sourceParent );
173 
174  const Akonadi::Collection collection =
175  sourceModel()->data(
176  modelIndex, Akonadi::EntityTreeModel::CollectionRole ).value<Akonadi::Collection>();
177  if ( !d->checker.isWantedCollection( collection ) ) {
178  return false;
179  }
180 
181  if ( d->hideVirtualFolder ) {
182  if ( Util::isVirtualCollection( collection ) ) {
183  return false;
184  }
185  }
186 
187  if ( d->hideSpecificFolder ) {
188  const QSharedPointer<FolderCollection> col =
189  FolderCollection::forCollection( collection, false );
190  if ( col && col->hideInSelectionDialog() ) {
191  return false;
192  }
193  }
194 
195  if ( d->hideOutboxFolder ) {
196  if ( collection == Kernel::self()->outboxCollectionFolder() ) {
197  return false;
198  }
199  }
200 
201  if ( d->filterStr.isEmpty() ) {
202  return Akonadi::EntityRightsFilterModel::acceptRow( sourceRow, sourceParent );
203  }
204 
205  return KRecursiveFilterProxyModel::acceptRow( sourceRow, sourceParent );
206 }
207 
208 void FolderTreeWidgetProxyModel::setFilterFolder( const QString &filter )
209 {
210  d->filterStr = filter;
211  setFilterWildcard( filter );
212 }
213 
214 QVariant FolderTreeWidgetProxyModel::data( const QModelIndex &index, int role ) const
215 {
216  if ( role == Qt::TextColorRole ) {
217  const QModelIndex sourceIndex = mapToSource( index );
218  const QModelIndex rowIndex = sourceIndex.sibling( sourceIndex.row(), 0 );
219  const Akonadi::Collection collection =
220  sourceModel()->data(
221  rowIndex, Akonadi::EntityTreeModel::CollectionRole ).value<Akonadi::Collection>();
222 
223  if ( !MailCommon::Util::isVirtualCollection( collection ) ) {
224 
225  const Akonadi::AgentInstance instance =
226  Akonadi::AgentManager::self()->instance( collection.resource() );
227 
228  if ( instance.status() == Akonadi::AgentInstance::Broken ) {
229  return d->brokenAccountColor;
230  }
231  }
232  } else if ( role == Qt::DisplayRole) {
233  const QModelIndex sourceIndex = mapToSource( index );
234  const QModelIndex rowIndex = sourceIndex.sibling( sourceIndex.row(), 0 );
235  const Akonadi::Collection collection =
236  sourceModel()->data(
237  rowIndex, Akonadi::EntityTreeModel::CollectionRole ).value<Akonadi::Collection>();
238  if ( !MailCommon::Util::isVirtualCollection( collection ) ) {
239 
240  const Akonadi::AgentInstance instance =
241  Akonadi::AgentManager::self()->instance( collection.resource() );
242  if (collection.parentCollection() == Akonadi::Collection::root()) {
243  if (!instance.isOnline()) {
244  return i18n("%1 (Offline)",Akonadi::EntityRightsFilterModel::data(index,role).toString());
245  }
246  }
247  }
248  }
249  return Akonadi::EntityRightsFilterModel::data( index, role );
250 }
251 
252 void FolderTreeWidgetProxyModel::updatePalette()
253 {
254  if ( MessageCore::GlobalSettings::self()->useDefaultColors() ) {
255  KColorScheme scheme( QPalette::Active, KColorScheme::View );
256  d->brokenAccountColor = scheme.foreground( KColorScheme::NegativeText ).color();
257  invalidate();
258  }
259 }
260 
261 void FolderTreeWidgetProxyModel::addContentMimeTypeInclusionFilter( const QString &mimeType )
262 {
263  d->includedMimeTypes << mimeType;
264  d->checker.setWantedMimeTypes( d->includedMimeTypes.toList() );
265  invalidateFilter();
266 }
267 
268 }
269 
270 #include "foldertreewidgetproxymodel.moc"
MailCommon::FolderTreeWidgetProxyModel::setHideOutboxFolder
void setHideOutboxFolder(bool hide)
Definition: foldertreewidgetproxymodel.cpp:159
foldercollection.h
QSharedPointer
Definition: collectiongeneralpage.h:30
KernelIf
#define KernelIf
Definition: mailkernel.h:186
MailCommon::FolderTreeWidgetProxyModel::setEnabledCheck
void setEnabledCheck(bool enable)
Definition: foldertreewidgetproxymodel.cpp:120
foldertreewidgetproxymodel.h
MailCommon::FolderTreeWidgetProxyModel::readConfig
void readConfig()
Definition: foldertreewidgetproxymodel.cpp:89
MailCommon::FolderTreeWidgetProxyModel::FolderTreeWidgetProxyModel
FolderTreeWidgetProxyModel(QObject *parent=0, FolderTreeWidgetProxyModelOptions=FolderTreeWidgetProxyModel::None)
Definition: foldertreewidgetproxymodel.cpp:64
MailCommon::Util::isVirtualCollection
MAILCOMMON_EXPORT bool isVirtualCollection(const Akonadi::Collection &col)
Definition: mailutil.cpp:96
QObject
MailCommon::FolderTreeWidgetProxyModel::addContentMimeTypeInclusionFilter
void addContentMimeTypeInclusionFilter(const QString &mimeTypes)
Definition: foldertreewidgetproxymodel.cpp:261
MailCommon::FolderTreeWidgetProxyModel::hideOutboxFolder
bool hideOutboxFolder() const
Definition: foldertreewidgetproxymodel.cpp:165
MailCommon::FolderTreeWidgetProxyModel::flags
virtual Qt::ItemFlags flags(const QModelIndex &index) const
Definition: foldertreewidgetproxymodel.cpp:103
MailCommon::FolderTreeWidgetProxyModel::setHideSpecificFolder
void setHideSpecificFolder(bool hide)
Definition: foldertreewidgetproxymodel.cpp:148
MailCommon::FolderTreeWidgetProxyModel::data
virtual QVariant data(const QModelIndex &index, int role=Qt::DisplayRole) const
Definition: foldertreewidgetproxymodel.cpp:214
MailCommon::FolderTreeWidgetProxyModel::hideVirtualFolder
bool hideVirtualFolder() const
Definition: foldertreewidgetproxymodel.cpp:143
MailCommon::FolderTreeWidgetProxyModel::HideOutboxFolder
Definition: foldertreewidgetproxymodel.h:37
MailCommon::FolderTreeWidgetProxyModel::hideSpecificFolder
bool hideSpecificFolder() const
Definition: foldertreewidgetproxymodel.cpp:154
MailCommon::FolderTreeWidgetProxyModel::~FolderTreeWidgetProxyModel
virtual ~FolderTreeWidgetProxyModel()
Definition: foldertreewidgetproxymodel.cpp:84
MailCommon::FolderTreeWidgetProxyModel::setFilterFolder
void setFilterFolder(const QString &filter)
Definition: foldertreewidgetproxymodel.cpp:208
MailCommon::FolderTreeWidgetProxyModel::setHideVirtualFolder
void setHideVirtualFolder(bool exclude)
Definition: foldertreewidgetproxymodel.cpp:137
MailCommon::FolderCollection::forCollection
static QSharedPointer< FolderCollection > forCollection(const Akonadi::Collection &coll, bool writeConfig=true)
Definition: foldercollection.cpp:46
MailCommon::FolderTreeWidgetProxyModel::HideVirtualFolder
Definition: foldertreewidgetproxymodel.h:35
mailkernel.h
MailCommon::FolderTreeWidgetProxyModel::acceptRow
virtual bool acceptRow(int sourceRow, const QModelIndex &sourceParent) const
Definition: foldertreewidgetproxymodel.cpp:170
MailCommon::FolderTreeWidgetProxyModel::HideSpecificFolder
Definition: foldertreewidgetproxymodel.h:36
MailCommon::Kernel::outboxCollectionFolder
Akonadi::Collection outboxCollectionFolder()
Definition: mailkernel.cpp:99
MailCommon::FolderTreeWidgetProxyModel::enabledCheck
bool enabledCheck() const
Definition: foldertreewidgetproxymodel.cpp:132
MailCommon::Kernel::self
static Kernel * self()
Definition: mailkernel.cpp:71
mailutil.h
MailCommon::FolderTreeWidgetProxyModel::updatePalette
void updatePalette()
Definition: foldertreewidgetproxymodel.cpp:252
This file is part of the KDE documentation.
Documentation copyright © 1996-2014 The KDE developers.
Generated on Tue Oct 14 2014 22:55:14 by doxygen 1.8.7 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.

mailcommon

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

kdepim API Reference

Skip menu "kdepim API Reference"
  • akonadi_next
  • akregator
  • blogilo
  • calendarsupport
  • console
  •   kabcclient
  •   konsolekalendar
  • kaddressbook
  • kalarm
  •   lib
  • kdgantt2
  • kjots
  • kleopatra
  • kmail
  • knode
  • knotes
  • kontact
  • korgac
  • korganizer
  • ktimetracker
  • libkdepim
  • libkleo
  • libkpgp
  • mailcommon
  • messagelist
  • messageviewer

Search



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