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

akonadi/kmime

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

KDE's Doxygen guidelines are available online.

akonadi/kmime

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

kdepimlibs API Reference

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

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