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

akonadi

  • akonadi
  • kmime
standardmailactionmanager.cpp
1 /*
2  This file is part of Akonadi Contact.
3 
4  Copyright (c) 2009 - 2010 Tobias Koenig <tokoe@kde.org>
5  Copyright (c) 2010 Klarälvdalens Datakonsult AB, a KDAB Group company, info@kdab.com
6  Copyright (c) 2010 Andras Mantia <andras@kdab.com>
7 
8  This library is free software; you can redistribute it and/or modify it
9  under the terms of the GNU Library General Public License as published by
10  the Free Software Foundation; either version 2 of the License, or (at your
11  option) any later version.
12 
13  This library is distributed in the hope that it will be useful, but WITHOUT
14  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
15  FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public
16  License for more details.
17 
18  You should have received a copy of the GNU Library General Public License
19  along with this library; see the file COPYING.LIB. If not, write to the
20  Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
21  02110-1301, USA.
22 */
23 
24 #include "standardmailactionmanager.h"
25 
26 #include "emptytrashcommand_p.h"
27 #include "markascommand_p.h"
28 #include "movetotrashcommand_p.h"
29 #include "specialmailcollections.h"
30 #include "removeduplicatesjob.h"
31 
32 #include "akonadi/agentfilterproxymodel.h"
33 #include "akonadi/agentinstance.h"
34 #include "akonadi/agentinstancecreatejob.h"
35 #include "akonadi/agentmanager.h"
36 #include "akonadi/agenttypedialog.h"
37 #include "akonadi/collectionstatistics.h"
38 #include "akonadi/entitytreemodel.h"
39 #include "akonadi/kmime/messagestatus.h"
40 #include "util_p.h"
41 #include "akonadi/mimetypechecker.h"
42 #include "akonadi/subscriptiondialog_p.h"
43 
44 #include <kaction.h>
45 #include <kactioncollection.h>
46 #include <kicon.h>
47 #include <klocalizedstring.h>
48 #include <kmessagebox.h>
49 #include <kmime/kmime_message.h>
50 
51 #include <QtCore/QPointer>
52 #include <QItemSelectionModel>
53 
54 using namespace Akonadi;
55 
56 class StandardMailActionManager::Private
57 {
58  public:
59  Private( KActionCollection *actionCollection, QWidget *parentWidget, StandardMailActionManager *parent )
60  : mActionCollection( actionCollection ),
61  mParentWidget( parentWidget ),
62  mCollectionSelectionModel( 0 ),
63  mItemSelectionModel( 0 ),
64  mParent( parent )
65  {
66  mGenericManager = new StandardActionManager( actionCollection, parentWidget );
67 
68  mParent->connect( mGenericManager, SIGNAL(actionStateUpdated()),
69  mParent, SIGNAL(actionStateUpdated()) );
70 
71 
72  mGenericManager->setMimeTypeFilter( QStringList() << KMime::Message::mimeType() );
73  mGenericManager->setCapabilityFilter( QStringList() << QLatin1String( "Resource" ) );
74  }
75 
76  ~Private()
77  {
78  delete mGenericManager;
79  }
80 
81  void updateGenericAllActions()
82  {
83  updateGenericAction(StandardActionManager::CreateCollection);
84  updateGenericAction(StandardActionManager::CopyCollections);
85  updateGenericAction(StandardActionManager::DeleteCollections);
86  updateGenericAction(StandardActionManager::SynchronizeCollections);
87  updateGenericAction(StandardActionManager::CollectionProperties);
88  updateGenericAction(StandardActionManager::CopyItems);
89  updateGenericAction(StandardActionManager::Paste);
90  updateGenericAction(StandardActionManager::DeleteItems);
91  updateGenericAction(StandardActionManager::ManageLocalSubscriptions);
92  updateGenericAction(StandardActionManager::AddToFavoriteCollections);
93  updateGenericAction(StandardActionManager::RemoveFromFavoriteCollections);
94  updateGenericAction(StandardActionManager::RenameFavoriteCollection);
95  updateGenericAction(StandardActionManager::CopyCollectionToMenu);
96  updateGenericAction(StandardActionManager::CopyItemToMenu);
97  updateGenericAction(StandardActionManager::MoveItemToMenu);
98  updateGenericAction(StandardActionManager::MoveCollectionToMenu);
99  updateGenericAction(StandardActionManager::CutItems);
100  updateGenericAction(StandardActionManager::CutCollections);
101  updateGenericAction(StandardActionManager::CreateResource);
102  updateGenericAction(StandardActionManager::DeleteResources);
103  updateGenericAction(StandardActionManager::ResourceProperties);
104  updateGenericAction(StandardActionManager::SynchronizeResources);
105  updateGenericAction(StandardActionManager::ToggleWorkOffline);
106  updateGenericAction(StandardActionManager::CopyCollectionToDialog);
107  updateGenericAction(StandardActionManager::MoveCollectionToDialog);
108  updateGenericAction(StandardActionManager::CopyItemToDialog);
109  updateGenericAction(StandardActionManager::MoveItemToDialog);
110  updateGenericAction(StandardActionManager::SynchronizeCollectionsRecursive);
111  updateGenericAction(StandardActionManager::MoveCollectionsToTrash);
112  updateGenericAction(StandardActionManager::MoveItemsToTrash);
113  updateGenericAction(StandardActionManager::RestoreCollectionsFromTrash);
114  updateGenericAction(StandardActionManager::RestoreItemsFromTrash);
115  updateGenericAction(StandardActionManager::MoveToTrashRestoreCollection);
116  updateGenericAction(StandardActionManager::MoveToTrashRestoreCollectionAlternative);
117  updateGenericAction(StandardActionManager::MoveToTrashRestoreItem);
118  updateGenericAction(StandardActionManager::MoveToTrashRestoreItemAlternative);
119  updateGenericAction(StandardActionManager::SynchronizeFavoriteCollections);
120  }
121  void updateGenericAction(StandardActionManager::Type type)
122  {
123  switch(type) {
124  case Akonadi::StandardActionManager::CreateCollection:
125  mGenericManager->action( Akonadi::StandardActionManager::CreateCollection )->setText(
126  i18n( "Add Folder..." ) );
127  mGenericManager->action( Akonadi::StandardActionManager::CreateCollection )->setWhatsThis(
128  i18n( "Add a new folder to the currently selected account." ) );
129  mGenericManager->action( Akonadi::StandardActionManager::CreateCollection )->setHelpText(
130  i18n( "Add a new folder to the currently selected account." ) );
131 
132  mGenericManager->setContextText(
133  StandardActionManager::CreateCollection, StandardActionManager::DialogTitle,
134  i18nc( "@title:window", "New Folder" ) );
135 
136  mGenericManager->setContextText(
137  StandardActionManager::CreateCollection, StandardActionManager::ErrorMessageText,
138  ki18n( "Could not create folder: %1" ) );
139 
140  mGenericManager->setContextText(
141  StandardActionManager::CreateCollection, StandardActionManager::ErrorMessageTitle,
142  i18n( "Folder creation failed" ) );
143 
144  break;
145  case Akonadi::StandardActionManager::CopyCollections:
146  mGenericManager->setActionText( Akonadi::StandardActionManager::CopyCollections,
147  ki18np( "Copy Folder", "Copy %1 Folders" ) );
148  mGenericManager->action( Akonadi::StandardActionManager::CopyCollections )->setWhatsThis(
149  i18n( "Copy the selected folders to the clipboard." ) );
150  mGenericManager->action( Akonadi::StandardActionManager::CopyCollections )->setHelpText(
151  i18n( "Copy the selected folders to the clipboard." ) );
152  mGenericManager->setContextText(
153  StandardActionManager::CollectionProperties, StandardActionManager::DialogTitle,
154  ki18nc( "@title:window", "Properties of Folder %1" ) );
155 
156  break;
157  case Akonadi::StandardActionManager::DeleteCollections:
158  mGenericManager->setActionText( Akonadi::StandardActionManager::DeleteCollections,
159  ki18np( "Delete Folder", "Delete %1 Folders" ) );
160  mGenericManager->action( Akonadi::StandardActionManager::DeleteCollections )->setWhatsThis(
161  i18n( "Delete the selected folders from the account." ) );
162  mGenericManager->action( Akonadi::StandardActionManager::DeleteCollections )->setHelpText(
163  i18n( "Delete the selected folders from the account." ) );
164  mGenericManager->setContextText(
165  StandardActionManager::DeleteCollections, StandardActionManager::MessageBoxText,
166  ki18np( "Do you really want to delete this folder and all its sub-folders?",
167  "Do you really want to delete %1 folders and all their sub-folders?" ) );
168 
169  mGenericManager->setContextText(
170  StandardActionManager::DeleteCollections, StandardActionManager::MessageBoxTitle,
171  ki18ncp( "@title:window", "Delete folder?", "Delete folders?" ) );
172 
173  mGenericManager->setContextText(
174  StandardActionManager::DeleteCollections, StandardActionManager::ErrorMessageText,
175  ki18n( "Could not delete folder: %1" ) );
176 
177  mGenericManager->setContextText(
178  StandardActionManager::DeleteCollections, StandardActionManager::ErrorMessageTitle,
179  i18n( "Folder deletion failed" ) );
180 
181  break;
182  case Akonadi::StandardActionManager::SynchronizeCollections:
183  mGenericManager->setActionText( Akonadi::StandardActionManager::SynchronizeCollections,
184  ki18np( "Update Folder", "Update Folders" ) );
185 
186  mGenericManager->action( Akonadi::StandardActionManager::SynchronizeCollections )->setWhatsThis(
187  i18n( "Update the contents of the selected folders." ) );
188  mGenericManager->action( Akonadi::StandardActionManager::SynchronizeCollections )->setHelpText(
189  i18n( "Update the contents of the selected folders." ) );
190  break;
191  case Akonadi::StandardActionManager::CutCollections:
192  mGenericManager->setActionText( Akonadi::StandardActionManager::CutCollections,
193  ki18np( "Cut Folder", "Cut %1 Folders" ) );
194  mGenericManager->action( Akonadi::StandardActionManager::CutCollections )->setWhatsThis(
195  i18n( "Cut the selected folders from the account." ) );
196  mGenericManager->action( Akonadi::StandardActionManager::CutCollections )->setHelpText(
197  i18n( "Cut the selected folders from the account." ) );
198  break;
199  case Akonadi::StandardActionManager::CollectionProperties:
200  mGenericManager->action( Akonadi::StandardActionManager::CollectionProperties )->setText(
201  i18n( "Folder Properties..." ) );
202  mGenericManager->action( Akonadi::StandardActionManager::CollectionProperties)->setWhatsThis(
203  i18n( "Open a dialog to edit the properties of the selected folder." ) );
204  mGenericManager->action( Akonadi::StandardActionManager::CollectionProperties)->setHelpText(
205  i18n( "Open a dialog to edit the properties of the selected folder." ) );
206  break;
207  case Akonadi::StandardActionManager::CopyItems:
208  mGenericManager->setActionText( Akonadi::StandardActionManager::CopyItems,
209  ki18np( "Copy Message", "Copy %1 Messages" ) );
210  mGenericManager->action( Akonadi::StandardActionManager::CopyItems )->setWhatsThis(
211  i18n( "Copy the selected messages to the clipboard." ) );
212  mGenericManager->action( Akonadi::StandardActionManager::CopyItems )->setHelpText(
213  i18n( "Copy the selected messages to the clipboard." ) );
214  break;
215  case Akonadi::StandardActionManager::DeleteItems:
216  mGenericManager->setActionText( Akonadi::StandardActionManager::DeleteItems,
217  ki18np( "Delete Message", "Delete %1 Messages" ) );
218  mGenericManager->action( Akonadi::StandardActionManager::DeleteItems )->setWhatsThis(
219  i18n( "Delete the selected messages from the folder." ) );
220  mGenericManager->action( Akonadi::StandardActionManager::DeleteItems )->setHelpText(
221  i18n( "Delete the selected messages from the folder." ) );
222  mGenericManager->setContextText(
223  StandardActionManager::DeleteItems, StandardActionManager::MessageBoxText,
224  ki18np( "Do you really want to delete the selected message?",
225  "Do you really want to delete %1 messages?" ) );
226 
227  mGenericManager->setContextText(
228  StandardActionManager::DeleteItems, StandardActionManager::MessageBoxTitle,
229  ki18ncp( "@title:window", "Delete Message?", "Delete Messages?" ) );
230 
231  mGenericManager->setContextText(
232  StandardActionManager::DeleteItems, StandardActionManager::ErrorMessageText,
233  ki18n( "Could not delete message: %1" ) );
234 
235  mGenericManager->setContextText(
236  StandardActionManager::DeleteItems, StandardActionManager::ErrorMessageTitle,
237  i18n( "Message deletion failed" ) );
238  break;
239  case Akonadi::StandardActionManager::CutItems:
240  mGenericManager->setActionText( Akonadi::StandardActionManager::CutItems,
241  ki18np( "Cut Message", "Cut %1 Messages" ) );
242  mGenericManager->action( Akonadi::StandardActionManager::CutItems )->setWhatsThis(
243  i18n( "Cut the selected message from the folder." ) );
244  mGenericManager->action( Akonadi::StandardActionManager::CutItems )->setHelpText(
245  i18n( "Cut the selected message from the folder." ) );
246  break;
247  case Akonadi::StandardActionManager::CreateResource:
248  mGenericManager->action( Akonadi::StandardActionManager::CreateResource )->setText(
249  i18n( "Add &Account..." ) );
250  mGenericManager->action( Akonadi::StandardActionManager::CreateResource )->setWhatsThis(
251  i18n( "Add a new account<p>"
252  "You will be presented with a dialog where you can select "
253  "the type of the account that shall be added.</p>" ) );
254  mGenericManager->setContextText(
255  StandardActionManager::CreateResource, StandardActionManager::DialogTitle,
256  i18nc( "@title:window", "Add Account" ) );
257 
258  mGenericManager->setContextText(
259  StandardActionManager::CreateResource, StandardActionManager::ErrorMessageText,
260  ki18n( "Could not create account: %1" ) );
261 
262  mGenericManager->setContextText(
263  StandardActionManager::CreateResource, StandardActionManager::ErrorMessageTitle,
264  i18n( "Account creation failed" ) );
265  break;
266  case Akonadi::StandardActionManager::DeleteResources:
267  mGenericManager->setActionText( Akonadi::StandardActionManager::DeleteResources,
268  ki18np( "&Delete Account", "&Delete %1 Accounts" ) );
269  mGenericManager->action( Akonadi::StandardActionManager::DeleteResources )->setWhatsThis(
270  i18n( "Delete the selected accounts<p>"
271  "The currently selected accounts will be deleted, "
272  "along with all the messages they contain.</p>" ) );
273  mGenericManager->setContextText(
274  StandardActionManager::DeleteResources, StandardActionManager::MessageBoxText,
275  ki18np( "Do you really want to delete this account?",
276  "Do you really want to delete %1 accounts?" ) );
277 
278  mGenericManager->setContextText(
279  StandardActionManager::DeleteResources, StandardActionManager::MessageBoxTitle,
280  ki18ncp( "@title:window", "Delete Account?", "Delete Accounts?" ) );
281  break;
282  case Akonadi::StandardActionManager::ResourceProperties:
283  mGenericManager->action( Akonadi::StandardActionManager::ResourceProperties )->setText(
284  i18n( "Account Properties..." ) );
285  mGenericManager->action( Akonadi::StandardActionManager::ResourceProperties )->setWhatsThis(
286  i18n( "Open a dialog to edit properties of the selected account." ) );
287  break;
288  case Akonadi::StandardActionManager::SynchronizeResources:
289  mGenericManager->setActionText( Akonadi::StandardActionManager::SynchronizeResources,
290  ki18np( "Update Account", "Update %1 Accounts" ) );
291  mGenericManager->action( Akonadi::StandardActionManager::SynchronizeResources )->setWhatsThis(
292  i18n( "Updates the content of all folders of the selected accounts." ) );
293 
294  break;
295  case Akonadi::StandardActionManager::SynchronizeCollectionsRecursive:
296 
297  mGenericManager->setActionText( Akonadi::StandardActionManager::SynchronizeCollectionsRecursive,
298  ki18np( "Update This Folder and All Its Subfolders",
299  "Update These Folders and All Their Subfolders" ));
300 
301  mGenericManager->action( Akonadi::StandardActionManager::SynchronizeCollectionsRecursive )->setWhatsThis(
302  i18n( "Update the contents of the selected folders and all their subfolders." ) );
303  mGenericManager->action( Akonadi::StandardActionManager::SynchronizeCollectionsRecursive )->setHelpText(
304  i18n( "Update the contents of the selected folders and all their subfolders." ) );
305  break;
306  case Akonadi::StandardActionManager::Paste:
307  mGenericManager->setContextText(
308  StandardActionManager::Paste, StandardActionManager::ErrorMessageText,
309  ki18n( "Could not paste message: %1" ) );
310 
311  mGenericManager->setContextText(
312  StandardActionManager::Paste, StandardActionManager::ErrorMessageTitle,
313  i18n( "Paste failed" ) );
314  break;
315  default:
316  break;
317  }
318 
319  }
320 
321  void updateActions()
322  {
323  const Akonadi::Item::List selectedItems = mGenericManager->selectedItems();
324  const Akonadi::Collection::List selectedCollections = mGenericManager->selectedCollections();
325 
326  bool itemIsSelected = !selectedItems.isEmpty();
327  bool collectionIsSelected = !selectedCollections.isEmpty();
328 
329  if ( itemIsSelected ) {
330  bool allMarkedAsImportant = true;
331  bool allMarkedAsRead = true;
332  bool allMarkedAsUnread = true;
333  bool allMarkedAsActionItem = true;
334 
335  foreach ( const Akonadi::Item &item, selectedItems ) {
336  Akonadi::MessageStatus status;
337  status.setStatusFromFlags( item.flags() );
338  if ( !status.isImportant() ) {
339  allMarkedAsImportant = false;
340  }
341  if ( !status.isRead() ) {
342  allMarkedAsRead= false;
343  } else {
344  allMarkedAsUnread = false;
345  }
346  if ( !status.isToAct() ) {
347  allMarkedAsActionItem = false;
348  }
349  }
350 
351  QAction *action = mActions.value( Akonadi::StandardMailActionManager::MarkMailAsRead );
352  if ( action ) {
353  updateMarkAction( action, allMarkedAsRead );
354  if ( allMarkedAsRead ) {
355  action->setEnabled( false );
356  } else {
357  action->setEnabled( true );
358  }
359  }
360 
361  action = mActions.value( Akonadi::StandardMailActionManager::MarkMailAsUnread );
362  if ( action ) {
363  updateMarkAction( action, allMarkedAsUnread );
364  if ( allMarkedAsUnread ) {
365  action->setEnabled( false );
366  } else {
367  action->setEnabled( true );
368  }
369  }
370 
371  action = mActions.value( Akonadi::StandardMailActionManager::MarkMailAsImportant );
372  if ( action ) {
373  updateMarkAction( action, allMarkedAsImportant );
374  if ( allMarkedAsImportant ) {
375  action->setText( i18n( "Remove Important Mark" ) );
376  } else {
377  action->setText( i18n( "&Mark Mail as Important" ) );
378  }
379  action->setEnabled( true );
380  }
381 
382  action = mActions.value( Akonadi::StandardMailActionManager::MarkMailAsActionItem );
383  if ( action ) {
384  updateMarkAction( action, allMarkedAsActionItem );
385  if ( allMarkedAsActionItem ) {
386  action->setText( i18n( "Remove Action Item Mark" ) );
387  } else {
388  action->setText( i18n( "&Mark Mail as Action Item" ) );
389  }
390  action->setEnabled( true );
391  }
392  } else {
393  QAction *action = mActions.value( Akonadi::StandardMailActionManager::MarkMailAsRead );
394  if ( action ) {
395  action->setEnabled( false );
396  }
397 
398  action = mActions.value( Akonadi::StandardMailActionManager::MarkMailAsImportant );
399  if ( action ) {
400  action->setEnabled( false );
401  }
402 
403  action = mActions.value( Akonadi::StandardMailActionManager::MarkMailAsActionItem );
404  if ( action ) {
405  action->setEnabled( false );
406  }
407  }
408 
409  bool enableMarkAllAsRead = false;
410  bool enableMarkAllAsUnread = false;
411  bool canDeleteItem = true;
412  bool isSystemFolder = false;
413  if ( collectionIsSelected ) {
414  foreach ( const Collection &collection, selectedCollections ) {
415  if ( collection.isValid() ) {
416  const Akonadi::CollectionStatistics stats = collection.statistics();
417  if ( !enableMarkAllAsRead ) {
418  enableMarkAllAsRead = ( stats.unreadCount() > 0 );
419  }
420  if ( !enableMarkAllAsUnread ) {
421  enableMarkAllAsUnread = ( stats.count() != stats.unreadCount() );
422  }
423  if ( canDeleteItem ) {
424  canDeleteItem = collection.rights() & Akonadi::Collection::CanDeleteItem;
425  }
426  if ( !isSystemFolder ) {
427  isSystemFolder = ( collection == SpecialMailCollections::self()->defaultCollection( SpecialMailCollections::Inbox ) ||
428  collection == SpecialMailCollections::self()->defaultCollection( SpecialMailCollections::Outbox ) ||
429  collection == SpecialMailCollections::self()->defaultCollection( SpecialMailCollections::SentMail ) ||
430  collection == SpecialMailCollections::self()->defaultCollection( SpecialMailCollections::Trash ) ||
431  collection == SpecialMailCollections::self()->defaultCollection( SpecialMailCollections::Drafts ) ||
432  collection == SpecialMailCollections::self()->defaultCollection( SpecialMailCollections::Templates ) );
433  }
434  //We will not change after that.
435  if ( enableMarkAllAsRead && enableMarkAllAsUnread && !canDeleteItem && isSystemFolder ) {
436  break;
437  }
438  }
439  }
440  }
441  if ( isSystemFolder ) {
442  if ( mGenericManager->action( StandardActionManager::DeleteCollections ) ) {
443  mGenericManager->action( StandardActionManager::DeleteCollections )->setEnabled( false );
444  }
445  }
446 
447  if ( mActions.contains( Akonadi::StandardMailActionManager::MoveToTrash ) ) {
448  mActions.value( Akonadi::StandardMailActionManager::MoveToTrash )->setEnabled( itemIsSelected && canDeleteItem );
449  }
450  if ( mActions.contains( Akonadi::StandardMailActionManager::RemoveDuplicates ) ) {
451  mActions.value( Akonadi::StandardMailActionManager::RemoveDuplicates )->setEnabled( canDeleteItem );
452  }
453 
454  QAction *action = mActions.value( Akonadi::StandardMailActionManager::MarkAllMailAsRead );
455  if ( action ) {
456  action->setEnabled( enableMarkAllAsRead );
457  }
458 
459  action = mActions.value( Akonadi::StandardMailActionManager::MarkAllMailAsUnread );
460  if ( action ) {
461  action->setEnabled( enableMarkAllAsUnread );
462  }
463 
464  emit mParent->actionStateUpdated();
465  }
466 
467  void updateMarkAction( QAction* action, bool allMarked )
468  {
469  QByteArray data = action->data().toByteArray();
470  if ( allMarked ) {
471  if ( !data.startsWith( '!' ) ) {
472  data.prepend( '!' );
473  }
474  } else {
475  if ( data.startsWith( '!' ) ) {
476  data = data.mid( 1 );
477  }
478  }
479  action->setData( data );
480  }
481 
482  void slotMarkAs()
483  {
484  const QAction *action = qobject_cast<QAction*>( mParent->sender() );
485  Q_ASSERT( action );
486 
487  const Akonadi::Item::List items = mGenericManager->selectedItems();
488  if ( items.isEmpty() ) {
489  return;
490  }
491 
492  QByteArray typeStr = action->data().toByteArray();
493  kDebug() << "Mark mail as: " << typeStr;
494 
495  bool invert = false;
496  if ( typeStr.startsWith( '!' ) ) {
497  invert = true;
498  typeStr = typeStr.mid( 1 );
499  }
500 
501  Akonadi::MessageStatus targetStatus;
502  targetStatus.setStatusFromStr( QLatin1String( typeStr ) );
503 
504  StandardMailActionManager::Type type = MarkMailAsRead;
505  if ( typeStr == "U" ) {
506  type = MarkMailAsUnread;
507  targetStatus.setRead( true );
508  invert = true;
509  } else if ( typeStr == "K" ) {
510  type = MarkMailAsActionItem;
511  } else if ( typeStr == "G" ) {
512  type = MarkMailAsImportant;
513  }
514 
515  if ( mInterceptedActions.contains( type ) ) {
516  return;
517  }
518 
519  MarkAsCommand *command = new MarkAsCommand( targetStatus, items, invert, mParent );
520  command->execute();
521  }
522 
523  void slotMarkAllAs()
524  {
525  const QAction *action = qobject_cast<QAction*>( mParent->sender() );
526  Q_ASSERT( action );
527 
528  QByteArray typeStr = action->data().toByteArray();
529  kDebug() << "Mark all as: " << typeStr;
530 
531  const Akonadi::Collection::List collections = mGenericManager->selectedCollections();
532  if ( collections.isEmpty() ) {
533  return;
534  }
535 
536  Akonadi::MessageStatus targetStatus;
537  targetStatus.setStatusFromStr( QLatin1String( typeStr ) );
538 
539  bool invert = false;
540  if ( typeStr.startsWith( '!' ) ) {
541  invert = true;
542  typeStr = typeStr.mid( 1 );
543  }
544 
545  StandardMailActionManager::Type type = MarkAllMailAsRead;
546  if ( typeStr == "U" ) {
547  type = MarkAllMailAsUnread;
548  targetStatus.setRead( true );
549  invert = true;
550  } else if ( typeStr == "K" ) {
551  type = MarkAllMailAsActionItem;
552  } else if ( typeStr == "G" ) {
553  type = MarkAllMailAsImportant;
554  }
555 
556  if ( mInterceptedActions.contains( type ) ) {
557  return;
558  }
559 
560  MarkAsCommand *command = new MarkAsCommand( targetStatus, collections, invert, mParent );
561  command->execute();
562  }
563 
564  void slotMoveToTrash()
565  {
566  if ( mInterceptedActions.contains( StandardMailActionManager::MoveToTrash ) ) {
567  return;
568  }
569 
570  if ( mCollectionSelectionModel->selection().indexes().isEmpty() ) {
571  return;
572  }
573 
574  const Item::List items = mGenericManager->selectedItems();
575  if ( items.isEmpty() ) {
576  return;
577  }
578 
579  MoveToTrashCommand *command = new MoveToTrashCommand( mCollectionSelectionModel->model(), items, mParent );
580  command->execute();
581  }
582 
583  void slotMoveAllToTrash()
584  {
585  if ( mInterceptedActions.contains( StandardMailActionManager::MoveAllToTrash ) ) {
586  return;
587  }
588 
589  if ( mCollectionSelectionModel->selection().indexes().isEmpty() ) {
590  return;
591  }
592 
593  const Collection::List collections = mGenericManager->selectedCollections();
594  if ( collections.isEmpty() ) {
595  return;
596  }
597 
598  MoveToTrashCommand *command = new MoveToTrashCommand( mCollectionSelectionModel->model(), collections, mParent );
599  command->execute();
600  }
601 
602  void slotRemoveDuplicates()
603  {
604  if ( mInterceptedActions.contains( StandardMailActionManager::RemoveDuplicates ) ) {
605  return;
606  }
607 
608  const Collection::List collections = mGenericManager->selectedCollections();
609  if ( collections.isEmpty() ) {
610  return;
611  }
612 
613  RemoveDuplicatesJob *job = new RemoveDuplicatesJob( collections, mParent );
614  connect( job, SIGNAL(finished(KJob*)), mParent, SLOT(slotJobFinished(KJob*)) );
615  }
616 
617  void slotJobFinished( KJob *job )
618  {
619  if ( job->error() ) {
620  Util::showJobError( job );
621  }
622  }
623 
624  void slotEmptyAllTrash()
625  {
626  if ( mInterceptedActions.contains( StandardMailActionManager::EmptyAllTrash ) ) {
627  return;
628  }
629 
630  EmptyTrashCommand *command = new EmptyTrashCommand( const_cast<QAbstractItemModel*>( mCollectionSelectionModel->model() ), mParent );
631  command->execute();
632  }
633 
634  void slotEmptyTrash()
635  {
636  if ( mInterceptedActions.contains( StandardMailActionManager::EmptyTrash ) ) {
637  return;
638  }
639 
640  if ( mCollectionSelectionModel->selection().indexes().isEmpty() ) {
641  return;
642  }
643 
644  const Collection::List collections = mGenericManager->selectedCollections();
645  if ( collections.count() != 1 ) {
646  return;
647  }
648 
649  EmptyTrashCommand *command = new EmptyTrashCommand( collections.first(), mParent );
650  command->execute();
651  }
652 
653  KActionCollection *mActionCollection;
654  QWidget *mParentWidget;
655  StandardActionManager *mGenericManager;
656  QItemSelectionModel *mCollectionSelectionModel;
657  QItemSelectionModel *mItemSelectionModel;
658  QHash<StandardMailActionManager::Type, KAction*> mActions;
659  QSet<StandardMailActionManager::Type> mInterceptedActions;
660  StandardMailActionManager *mParent;
661 };
662 
663 
664 StandardMailActionManager::StandardMailActionManager( KActionCollection *actionCollection, QWidget *parent )
665  : QObject( parent ), d( new Private( actionCollection, parent, this ) )
666 {
667 }
668 
669 StandardMailActionManager::~StandardMailActionManager()
670 {
671  delete d;
672 }
673 
674 void StandardMailActionManager::setCollectionSelectionModel( QItemSelectionModel *selectionModel )
675 {
676  d->mCollectionSelectionModel = selectionModel;
677  d->mGenericManager->setCollectionSelectionModel( selectionModel );
678 
679  connect( selectionModel->model(), SIGNAL(rowsInserted(QModelIndex,int,int)),
680  SLOT(updateActions()) );
681  connect( selectionModel->model(), SIGNAL(rowsRemoved(QModelIndex,int,int)),
682  SLOT(updateActions()) );
683  connect( selectionModel, SIGNAL(selectionChanged(QItemSelection,QItemSelection)),
684  SLOT(updateActions()) );
685 
686  d->updateActions();
687 }
688 
689 void StandardMailActionManager::setItemSelectionModel( QItemSelectionModel* selectionModel )
690 {
691  d->mItemSelectionModel = selectionModel;
692  d->mGenericManager->setItemSelectionModel( selectionModel );
693 
694  connect( selectionModel, SIGNAL(selectionChanged(QItemSelection,QItemSelection)),
695  SLOT(updateActions()) );
696 
697  //to catch item modifications, listen to the model's dataChanged signal as well
698  connect( selectionModel->model(), SIGNAL(dataChanged(QModelIndex,QModelIndex)),
699  SLOT(updateActions()) );
700 
701  d->updateActions();
702 }
703 
704 KAction* StandardMailActionManager::createAction( Type type )
705 {
706  if ( d->mActions.contains( type ) ) {
707  return d->mActions.value( type );
708  }
709 
710  KAction *action = 0;
711 
712  switch ( type ) {
713  case MarkMailAsRead:
714  action = new KAction( d->mParentWidget );
715  action->setIcon( KIcon( QLatin1String( "mail-mark-read" ) ) );
716  action->setText( i18n( "&Mark Message as Read" ) );
717  action->setIconText( i18n( "Mark as Read" ) );
718  action->setHelpText( i18n( "Mark selected messages as read." ) );
719  action->setWhatsThis( i18n( "Mark selected messages as read." ) );
720  d->mActions.insert( MarkMailAsRead, action );
721  d->mActionCollection->addAction( QString::fromLatin1( "akonadi_mark_as_read" ), action );
722  action->setData( QByteArray( "R" ) );
723  action->setShortcut( Qt::CTRL+Qt::Key_R );
724  connect( action, SIGNAL(triggered(bool)), this, SLOT(slotMarkAs()) );
725  break;
726  case MarkMailAsUnread:
727  action = new KAction( d->mParentWidget );
728  action->setIcon( KIcon( QLatin1String( "mail-mark-unread" ) ) );
729  action->setText( i18n( "&Mark Message as Unread" ) );
730  action->setIconText( i18n( "Mark as Unread" ) );
731  action->setHelpText( i18n( "Mark selected messages as unread." ) );
732  action->setWhatsThis( i18n( "Mark selected messages as unread." ) );
733  d->mActions.insert( MarkMailAsUnread, action );
734  d->mActionCollection->addAction( QString::fromLatin1( "akonadi_mark_as_unread" ), action );
735  action->setShortcut( Qt::CTRL+Qt::Key_U );
736  action->setData( QByteArray( "U" ) );
737  connect( action, SIGNAL(triggered(bool)), this, SLOT(slotMarkAs()) );
738  break;
739  case MarkMailAsImportant:
740  action = new KAction( d->mParentWidget );
741  action->setIcon( KIcon( QLatin1String( "mail-mark-important" ) ) );
742  action->setText( i18n( "&Mark Message as Important" ) );
743  action->setIconText( i18n( "Mark as Important" ) );
744  action->setHelpText( i18n( "Mark selected messages as important." ) );
745 
746  d->mActions.insert( MarkMailAsImportant, action );
747  d->mActionCollection->addAction( QString::fromLatin1( "akonadi_mark_as_important" ), action );
748  action->setData( QByteArray( "G" ) );
749  connect( action, SIGNAL(triggered(bool)), this, SLOT(slotMarkAs()) );
750  break;
751  case MarkMailAsActionItem:
752  action = new KAction( d->mParentWidget );
753  action->setIcon( KIcon( QLatin1String( "mail-mark-task" ) ) );
754  action->setText( i18n( "&Mark Message as Action Item" ) );
755  action->setIconText( i18n( "Mark as Action Item" ) );
756  action->setHelpText( i18n( "Mark selected messages as action items." ) );
757  action->setWhatsThis( i18n( "Mark selected messages as action items." ) );
758  d->mActions.insert( MarkMailAsActionItem, action );
759  d->mActionCollection->addAction( QString::fromLatin1( "akonadi_mark_as_action_item" ), action );
760  action->setData( QByteArray( "K" ) );
761  connect( action, SIGNAL(triggered(bool)), this, SLOT(slotMarkAs()) );
762  break;
763  case MarkAllMailAsRead:
764  action = new KAction( d->mParentWidget );
765  action->setIcon( KIcon( QLatin1String( "mail-mark-read" ) ) );
766  action->setText( i18n( "Mark &All Messages as Read" ) );
767  action->setIconText( i18n( "Mark All as Read" ) );
768  action->setHelpText( i18n( "Mark all messages as read." ) );
769  action->setWhatsThis( i18n( "Mark all messages as read." ) );
770  d->mActions.insert( MarkAllMailAsRead, action );
771  d->mActionCollection->addAction( QString::fromLatin1( "akonadi_mark_all_as_read" ), action );
772  action->setData( QByteArray( "R" ) );
773  connect( action, SIGNAL(triggered(bool)), this, SLOT(slotMarkAllAs()) );
774  break;
775  case MarkAllMailAsUnread:
776  action = new KAction( d->mParentWidget );
777  action->setIcon( KIcon( QLatin1String( "mail-mark-unread" ) ) );
778  action->setText( i18n( "Mark &All Messages as Unread" ) );
779  action->setIconText( i18n( "Mark All as Unread" ) );
780  action->setHelpText( i18n( "Mark all messages as unread." ) );
781  action->setWhatsThis( i18n( "Mark all messages as unread." ) );
782  d->mActions.insert( MarkAllMailAsUnread, action );
783  d->mActionCollection->addAction( QString::fromLatin1( "akonadi_mark_all_as_unread" ), action );
784  action->setData( QByteArray( "U" ) );
785  connect( action, SIGNAL(triggered(bool)), this, SLOT(slotMarkAllAs()) );
786  break;
787  case MarkAllMailAsImportant:
788  action = new KAction( d->mParentWidget );
789  action->setIcon( KIcon( QLatin1String( "mail-mark-important" ) ) );
790  action->setText( i18n( "Mark &All Messages as Important" ) );
791  action->setIconText( i18n( "Mark All as Important" ) );
792  action->setHelpText( i18n( "Mark all messages as important." ) );
793  action->setWhatsThis( i18n( "Mark all messages as important." ) );
794  d->mActions.insert( MarkAllMailAsImportant, action );
795  d->mActionCollection->addAction( QString::fromLatin1( "akonadi_mark_all_as_important" ), action );
796  action->setData( QByteArray( "G" ) );
797  connect( action, SIGNAL(triggered(bool)), this, SLOT(slotMarkAllAs()) );
798  break;
799  case MarkAllMailAsActionItem:
800  action = new KAction( d->mParentWidget );
801  action->setIconText( i18n( "Mark All as Action Item" ) );
802  action->setText( i18n( "Mark &All Messages as Action Item" ) );
803  action->setIcon( KIcon( QLatin1String( "mail-mark-task" ) ) );
804  action->setHelpText( i18n( "Mark all messages as action items." ) );
805  action->setWhatsThis( i18n( "Mark all messages as action items." ) );
806  d->mActions.insert( MarkAllMailAsActionItem, action );
807  d->mActionCollection->addAction( QString::fromLatin1( "akonadi_mark_all_as_action_item" ), action );
808  action->setData( QByteArray( "K" ) );
809  connect( action, SIGNAL(triggered(bool)), this, SLOT(slotMarkAllAs()) );
810  break;
811  case MoveToTrash:
812  action = new KAction( d->mParentWidget );
813  action->setIcon( KIcon( QLatin1String( "user-trash" ) ) );
814  action->setText( i18n( "Move to &Trash" ) );
815  action->setShortcut( QKeySequence( Qt::Key_Delete ) );
816  action->setHelpText( i18n( "Move selected messages to the trash folder." ) );
817  action->setWhatsThis( i18n( "Move selected messages to the trash folder." ) );
818  d->mActions.insert( MoveToTrash, action );
819  d->mActionCollection->addAction( QString::fromLatin1( "akonadi_move_to_trash" ), action );
820  connect( action, SIGNAL(triggered(bool)), this, SLOT(slotMoveToTrash()) );
821  break;
822  case MoveAllToTrash:
823  action = new KAction( d->mParentWidget );
824  action->setIcon( KIcon( QLatin1String( "user-trash" ) ) );
825  action->setText( i18n( "Move All to &Trash" ) );
826  action->setHelpText( i18n( "Move all messages to the trash folder." ) );
827  action->setWhatsThis( i18n( "Move all messages to the trash folder." ) );
828  d->mActions.insert( MoveAllToTrash, action );
829  d->mActionCollection->addAction( QString::fromLatin1( "akonadi_move_all_to_trash" ), action );
830  connect( action, SIGNAL(triggered(bool)), this, SLOT(slotMoveAllToTrash()) );
831  break;
832  case RemoveDuplicates:
833  action = new KAction( d->mParentWidget );
834  action->setText( i18n( "Remove &Duplicate Messages" ) );
835  action->setHelpText( i18n( "Remove duplicate messages." ) );
836  action->setWhatsThis( i18n( "Remove duplicate messages." ) );
837  action->setShortcut( QKeySequence( Qt::CTRL + Qt::Key_Asterisk ) );
838  d->mActions.insert( RemoveDuplicates, action );
839  d->mActionCollection->addAction( QString::fromLatin1( "akonadi_remove_duplicates" ), action );
840  connect( action, SIGNAL(triggered(bool)), this, SLOT(slotRemoveDuplicates()) );
841  break;
842  case EmptyAllTrash:
843  action = new KAction( d->mParentWidget );
844  action->setText( i18n( "Empty All &Trash Folders" ) );
845  action->setHelpText( i18n( "Permanently delete all messages from all trash folders." ) );
846  action->setWhatsThis( i18n( "Permanently delete all messages from all trash folders." ) );
847  d->mActions.insert( EmptyAllTrash, action );
848  d->mActionCollection->addAction( QString::fromLatin1( "akonadi_empty_all_trash" ), action );
849  connect( action, SIGNAL(triggered(bool)), this, SLOT(slotEmptyAllTrash()) );
850  break;
851  case EmptyTrash:
852  action = new KAction( d->mParentWidget );
853  action->setText( i18n( "E&mpty Trash" ) );
854  action->setHelpText( i18n( "Permanently delete all messages from the trash folder." ) );
855  action->setWhatsThis( i18n( "Permanently delete all messages from the trash folder." ) );
856  d->mActions.insert( EmptyTrash, action );
857  d->mActionCollection->addAction( QString::fromLatin1( "akonadi_empty_trash" ), action );
858  connect( action, SIGNAL(triggered(bool)), this, SLOT(slotEmptyTrash()) );
859  break;
860  default:
861  Q_ASSERT( false ); // should never happen
862  break;
863  }
864 
865  return action;
866 }
867 
868 KAction* StandardMailActionManager::createAction( StandardActionManager::Type type )
869 {
870  KAction *act = d->mGenericManager->action(type);
871  if(!act )
872  act = d->mGenericManager->createAction( type );
873  d->updateGenericAction(type);
874  return act;
875 }
876 
877 void StandardMailActionManager::createAllActions()
878 {
879  createAction( MarkMailAsRead );
880  createAction( MarkMailAsUnread );
881  createAction( MarkMailAsImportant );
882  createAction( MarkMailAsActionItem );
883  createAction( MarkAllMailAsRead );
884  createAction( MarkAllMailAsUnread );
885  createAction( MarkAllMailAsImportant );
886  createAction( MarkAllMailAsActionItem );
887  createAction( MoveToTrash );
888  createAction( MoveAllToTrash );
889  createAction( RemoveDuplicates );
890  createAction( EmptyAllTrash );
891  createAction( EmptyTrash );
892 
893  d->mGenericManager->createAllActions();
894  d->updateGenericAllActions();
895 
896  d->updateActions();
897 }
898 
899 KAction* StandardMailActionManager::action( Type type ) const
900 {
901  if ( d->mActions.contains( type ) ) {
902  return d->mActions.value( type );
903  }
904 
905  return 0;
906 }
907 
908 KAction* StandardMailActionManager::action( StandardActionManager::Type type ) const
909 {
910  return d->mGenericManager->action( type );
911 }
912 
913 void StandardMailActionManager::setActionText( StandardActionManager::Type type, const KLocalizedString &text )
914 {
915  d->mGenericManager->setActionText( type, text );
916 }
917 
918 void StandardMailActionManager::interceptAction( Type type, bool intercept )
919 {
920  if ( intercept ) {
921  d->mInterceptedActions.insert( type );
922  } else {
923  d->mInterceptedActions.remove( type );
924  }
925 }
926 
927 void StandardMailActionManager::interceptAction( StandardActionManager::Type type, bool intercept )
928 {
929  d->mGenericManager->interceptAction( type, intercept );
930 }
931 
932 Akonadi::Collection::List StandardMailActionManager::selectedCollections() const
933 {
934  return d->mGenericManager->selectedCollections();
935 }
936 
937 Akonadi::Item::List StandardMailActionManager::selectedItems() const
938 {
939  return d->mGenericManager->selectedItems();
940 }
941 
942 void StandardMailActionManager::setFavoriteCollectionsModel( FavoriteCollectionsModel *favoritesModel )
943 {
944  d->mGenericManager->setFavoriteCollectionsModel( favoritesModel );
945 }
946 
947 void StandardMailActionManager::setFavoriteSelectionModel( QItemSelectionModel *selectionModel )
948 {
949  d->mGenericManager->setFavoriteSelectionModel( selectionModel );
950 }
951 
952 void StandardMailActionManager::setCollectionPropertiesPageNames( const QStringList &names )
953 {
954  d->mGenericManager->setCollectionPropertiesPageNames( names );
955 }
956 
957 Akonadi::StandardActionManager* StandardMailActionManager::standardActionManager() const
958 {
959  return d->mGenericManager;
960 }
961 
962 #include "moc_standardmailactionmanager.cpp"
Akonadi::StandardActionManager::Type
Type
Describes the supported actions.
Definition: standardactionmanager.h:133
Akonadi::StandardActionManager::MoveItemsToTrash
Moves the selected items to trash and marks them as deleted, needs EntityDeletedAttribute.
Definition: standardactionmanager.h:163
Akonadi::StandardMailActionManager::MarkMailAsActionItem
Marks a mail as action item.
Definition: standardmailactionmanager.h:59
Akonadi::StandardMailActionManager::createAllActions
void createAllActions()
Convenience method to create all standard actions.
Definition: standardmailactionmanager.cpp:877
Akonadi::CollectionStatistics::count
qint64 count() const
Returns the number of items in this collection or -1 if this information is not available.
Definition: collectionstatistics.cpp:68
Akonadi::StandardActionManager::MoveToTrashRestoreItemAlternative
Helper type for MoveToTrashRestoreItem, do not create directly. Use this to override texts of the res...
Definition: standardactionmanager.h:169
Akonadi::StandardActionManager::MoveItemToMenu
Menu allowing to move item into a collection.
Definition: standardactionmanager.h:148
Akonadi::StandardActionManager::CreateCollection
Creates an collection.
Definition: standardactionmanager.h:134
Akonadi::MessageStatus::setRead
void setRead(bool read=true)
Set the status to read.
Definition: messagestatus.cpp:303
Akonadi::StandardActionManager::MoveCollectionsToTrash
Moves the selected collection to trash and marks it as deleted, needs EntityDeletedAttribute.
Definition: standardactionmanager.h:162
Akonadi::SpecialMailCollections::Trash
The trash collection.
Definition: specialmailcollections.h:85
Akonadi::StandardActionManager::ErrorMessageTitle
The window title of an error message.
Definition: standardactionmanager.h:183
Akonadi::StandardActionManager::CopyItems
Copies the selected items.
Definition: standardactionmanager.h:139
Akonadi::StandardMailActionManager::MarkMailAsRead
Marks a mail as read.
Definition: standardmailactionmanager.h:56
Akonadi::StandardMailActionManager::MarkMailAsImportant
Marks a mail as important.
Definition: standardmailactionmanager.h:58
Akonadi::StandardActionManager
Manages generic actions for collection and item views.
Definition: standardactionmanager.h:126
Akonadi::CollectionStatistics
Provides statistics information of a Collection.
Definition: collectionstatistics.h:69
Akonadi::SpecialMailCollections::Templates
The templates collection.
Definition: specialmailcollections.h:87
Akonadi::StandardActionManager::CopyCollectionToDialog
Copy a collection into another collection, select the target in a dialog.
Definition: standardactionmanager.h:157
Akonadi::Collection
Represents a collection of PIM items.
Definition: collection.h:75
Akonadi::StandardMailActionManager::selectedItems
Akonadi::Item::List selectedItems() const
Returns the list of items that are currently selected.
Definition: standardmailactionmanager.cpp:937
Akonadi::StandardMailActionManager::interceptAction
void interceptAction(Type type, bool intercept=true)
Sets whether the default implementation for the given action type shall be executed when the action i...
Definition: standardmailactionmanager.cpp:918
Akonadi::StandardActionManager::ResourceProperties
Provides the resource properties.
Definition: standardactionmanager.h:154
Akonadi::StandardActionManager::CutItems
Cuts the selected items.
Definition: standardactionmanager.h:150
Akonadi::StandardMailActionManager::MarkAllMailAsUnread
Marks all mails in a folder as unread.
Definition: standardmailactionmanager.h:61
Akonadi::StandardMailActionManager::MoveToTrash
Move all selected messages and folders to trash.
Definition: standardmailactionmanager.h:64
Akonadi::StandardMailActionManager::actionStateUpdated
void actionStateUpdated()
This signal is emitted whenever the action state has been updated.
Akonadi::StandardActionManager::RestoreItemsFromTrash
Restores the selected items from trash, needs EntityDeletedAttribute.
Definition: standardactionmanager.h:165
Akonadi::StandardActionManager::ToggleWorkOffline
Toggles the work offline state of all resources.
Definition: standardactionmanager.h:156
Akonadi::SpecialMailCollections::Inbox
The inbox collection.
Definition: specialmailcollections.h:82
Akonadi::StandardActionManager::RestoreCollectionsFromTrash
Restores the selected collection from trash, needs EntityDeletedAttribute.
Definition: standardactionmanager.h:164
Akonadi::StandardActionManager::MoveToTrashRestoreCollectionAlternative
Helper type for MoveToTrashRestoreCollection, do not create directly. Use this to override texts of t...
Definition: standardactionmanager.h:167
Akonadi::StandardActionManager::Paste
Paste collections or items.
Definition: standardactionmanager.h:140
Akonadi::StandardMailActionManager::createAction
KAction * createAction(Type type)
Creates the action of the given type and adds it to the action collection specified in the constructo...
Definition: standardmailactionmanager.cpp:704
Akonadi::MessageStatus::setStatusFromFlags
void setStatusFromFlags(const QSet< QByteArray > &flags)
Set the status as a whole e.g.
Definition: messagestatus.cpp:621
Akonadi::StandardMailActionManager::setItemSelectionModel
void setItemSelectionModel(QItemSelectionModel *selectionModel)
Sets the item selection model based on which the item related actions should operate.
Definition: standardmailactionmanager.cpp:689
Akonadi::Collection::CanDeleteItem
Can delete items in this collection.
Definition: collection.h:90
Akonadi::SpecialMailCollections::Outbox
The outbox collection.
Definition: specialmailcollections.h:83
Akonadi::StandardMailActionManager::Type
Type
Describes the supported actions.
Definition: standardmailactionmanager.h:55
Akonadi::StandardActionManager::CollectionProperties
Provides collection properties.
Definition: standardactionmanager.h:138
Akonadi::SpecialMailCollections::SentMail
The sent-mail collection.
Definition: specialmailcollections.h:84
Akonadi::StandardActionManager::RemoveFromFavoriteCollections
Remove the collection from the favorite collections model.
Definition: standardactionmanager.h:144
Akonadi::StandardActionManager::CopyItemToDialog
Copy an item into a collection, select the target in a dialog.
Definition: standardactionmanager.h:159
Akonadi::StandardActionManager::AddToFavoriteCollections
Add the collection to the favorite collections model.
Definition: standardactionmanager.h:143
Akonadi::MessageStatus::isToAct
bool isToAct() const
Check for ToAct status.
Definition: messagestatus.cpp:262
Akonadi::StandardActionManager::MessageBoxTitle
The window title of a message box.
Definition: standardactionmanager.h:180
Akonadi::StandardMailActionManager::setFavoriteCollectionsModel
void setFavoriteCollectionsModel(FavoriteCollectionsModel *favoritesModel)
Sets the favorite collections model based on which the collection relatedactions should operate...
Definition: standardmailactionmanager.cpp:942
Akonadi::StandardActionManager::SynchronizeCollectionsRecursive
Synchronizes collections in a recursive way.
Definition: standardactionmanager.h:161
Akonadi::StandardMailActionManager::selectedCollections
Akonadi::Collection::List selectedCollections() const
Returns the list of collections that are currently selected.
Definition: standardmailactionmanager.cpp:932
Akonadi::StandardActionManager::CopyCollectionToMenu
Menu allowing to quickly copy a collection into another collection.
Definition: standardactionmanager.h:146
Akonadi::Collection::rights
Rights rights() const
Returns the rights the user has on the collection.
Definition: collection.cpp:99
Akonadi::SpecialMailCollections::self
static SpecialMailCollections * self()
Returns the global SpecialMailCollections instance.
Definition: specialmailcollections.cpp:97
Akonadi::StandardMailActionManager::EmptyTrash
Empties the trash folder, if a trash folder was selected.
Definition: standardmailactionmanager.h:68
Akonadi::StandardActionManager::CutCollections
Cuts the selected collections.
Definition: standardactionmanager.h:151
Akonadi::StandardMailActionManager::action
KAction * action(Type type) const
Returns the action of the given type, 0 if it has not been created (yet).
Definition: standardmailactionmanager.cpp:899
Akonadi::StandardActionManager::DialogTitle
The window title of a dialog.
Definition: standardactionmanager.h:178
Akonadi::StandardMailActionManager::MarkAllMailAsImportant
Marks all mails in a folder as important.
Definition: standardmailactionmanager.h:62
Akonadi::StandardActionManager::CopyItemToMenu
Menu allowing to quickly copy an item into a collection.
Definition: standardactionmanager.h:147
Akonadi::StandardMailActionManager::StandardMailActionManager
StandardMailActionManager(KActionCollection *actionCollection, QWidget *parent=0)
Creates a new standard mail action manager.
Definition: standardmailactionmanager.cpp:664
Akonadi::StandardActionManager::SynchronizeResources
Synchronizes the selected resources.
Definition: standardactionmanager.h:155
Akonadi::StandardActionManager::DeleteResources
Deletes the selected resources.
Definition: standardactionmanager.h:153
Akonadi::StandardActionManager::CopyCollections
Copies the selected collections.
Definition: standardactionmanager.h:135
Akonadi::StandardMailActionManager
Manages emails specific actions for collection and item views.
Definition: standardmailactionmanager.h:47
Akonadi::StandardMailActionManager::MarkAllMailAsActionItem
Marks all mails in a folder as action item.
Definition: standardmailactionmanager.h:63
Akonadi::RemoveDuplicatesJob
Job that finds and removes duplicate messages in given collection.
Definition: removeduplicatesjob.h:41
Akonadi::StandardMailActionManager::setActionText
void setActionText(StandardActionManager::Type type, const KLocalizedString &text)
Sets the label of the action type to text, which is used during updating the action state and substit...
Definition: standardmailactionmanager.cpp:913
Akonadi::SpecialMailCollections::Drafts
The drafts collection.
Definition: specialmailcollections.h:86
Akonadi::CollectionStatistics::unreadCount
qint64 unreadCount() const
Returns the number of unread items in this collection or -1 if this information is not available...
Definition: collectionstatistics.cpp:78
Akonadi::MessageStatus
Akonadi KMime Message Status.
Definition: messagestatus.h:51
Akonadi::StandardMailActionManager::~StandardMailActionManager
~StandardMailActionManager()
Destroys the standard mail action manager.
Definition: standardmailactionmanager.cpp:669
Akonadi::StandardMailActionManager::EmptyAllTrash
Empties trash folders on all accounts.
Definition: standardmailactionmanager.h:67
Akonadi::StandardActionManager::MessageBoxText
The text of a message box.
Definition: standardactionmanager.h:181
Akonadi::StandardActionManager::MoveToTrashRestoreItem
Move Item to Trash or Restore it from Trash, needs EntityDeletedAttribute.
Definition: standardactionmanager.h:168
Akonadi::StandardActionManager::CreateResource
Creates a new resource.
Definition: standardactionmanager.h:152
Akonadi::StandardActionManager::MoveItemToDialog
Move an item into a collection, select the target in a dialog.
Definition: standardactionmanager.h:160
Akonadi::SpecialMailCollections::defaultCollection
Akonadi::Collection defaultCollection(Type type) const
Returns the special mail collection of given type in the default resource, or an invalid collection i...
Definition: specialmailcollections.cpp:122
Akonadi::StandardMailActionManager::setFavoriteSelectionModel
void setFavoriteSelectionModel(QItemSelectionModel *selectionModel)
Sets the favorite collection selection model based on which the favorite collection related actions s...
Definition: standardmailactionmanager.cpp:947
Akonadi::StandardActionManager::MoveCollectionToDialog
Move a collection into another collection, select the target in a dialog.
Definition: standardactionmanager.h:158
Akonadi::StandardActionManager::SynchronizeCollections
Synchronizes collections.
Definition: standardactionmanager.h:137
Akonadi::MessageStatus::setStatusFromStr
void setStatusFromStr(const QString &aStr)
Set the status based on a string representation.
Definition: messagestatus.cpp:522
Akonadi::Entity::isValid
bool isValid() const
Returns whether the entity is valid.
Definition: entity.cpp:97
Akonadi::StandardMailActionManager::RemoveDuplicates
Removes all duplicated messages.
Definition: standardmailactionmanager.h:66
Akonadi::StandardMailActionManager::MoveAllToTrash
Move all messages of the current folder to trash.
Definition: standardmailactionmanager.h:65
Akonadi::StandardActionManager::MoveToTrashRestoreCollection
Move Collection to Trash or Restore it from Trash, needs EntityDeletedAttribute.
Definition: standardactionmanager.h:166
Akonadi::StandardActionManager::ManageLocalSubscriptions
Manages local subscriptions.
Definition: standardactionmanager.h:142
Akonadi::StandardMailActionManager::MarkAllMailAsRead
Marks all mails in a folder as read.
Definition: standardmailactionmanager.h:60
Akonadi::Collection::statistics
CollectionStatistics statistics() const
Returns the collection statistics of the collection.
Definition: collection.cpp:238
Akonadi::Collection::List
QList< Collection > List
Describes a list of collections.
Definition: collection.h:81
Akonadi::StandardActionManager::ErrorMessageText
The text of an error message.
Definition: standardactionmanager.h:184
Akonadi::StandardActionManager::DeleteItems
Deletes the selected items.
Definition: standardactionmanager.h:141
Akonadi::StandardActionManager::DeleteCollections
Deletes the selected collections.
Definition: standardactionmanager.h:136
Akonadi::StandardMailActionManager::setCollectionSelectionModel
void setCollectionSelectionModel(QItemSelectionModel *selectionModel)
Sets the collection selection model based on which the collection related actions should operate...
Definition: standardmailactionmanager.cpp:674
Akonadi::MessageStatus::isRead
bool isRead() const
Check for Read status.
Definition: messagestatus.cpp:217
Akonadi::StandardActionManager::MoveCollectionToMenu
Menu allowing to move a collection into another collection.
Definition: standardactionmanager.h:149
Akonadi::StandardMailActionManager::MarkMailAsUnread
Marks a mail as unread.
Definition: standardmailactionmanager.h:57
Akonadi::FavoriteCollectionsModel
A model that lists a set of favorite collections.
Definition: favoritecollectionsmodel.h:65
Akonadi::StandardActionManager::RenameFavoriteCollection
Rename the collection of the favorite collections model.
Definition: standardactionmanager.h:145
Akonadi::StandardActionManager::SynchronizeFavoriteCollections
Synchronize favorite collections.
Definition: standardactionmanager.h:170
Akonadi::MessageStatus::isImportant
bool isImportant() const
Check for Important status.
Definition: messagestatus.cpp:247
This file is part of the KDE documentation.
Documentation copyright © 1996-2013 The KDE developers.
Generated on Tue Nov 26 2013 09:03:19 by doxygen 1.8.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.11.3 API Reference

Skip menu "kdepimlibs-4.11.3 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