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

akonadi

  • sources
  • kde-4.14
  • kdepimlibs
  • akonadi
  • calendar
standardcalendaractionmanager.cpp
1 /*
2  * Copyright (C) 2010 Casey Link <unnamedrambler@gmail.com>
3  * Copyright (C) 2010 Klaralvdalens Datakonsult AB, a KDAB Group company <info@kdab.net>
4  * Copyright (C) 2009 - 2010 Tobias Koenig <tokoe@kde.org>
5  *
6  * This library is free software; you can redistribute it and/or modify it
7  * under the terms of the GNU Library General Public License as published by
8  * the Free Software Foundation; either version 2 of the License, or (at your
9  * option) any later version.
10  *
11  * This library is distributed in the hope that it will be useful, but WITHOUT
12  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13  * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public
14  * License for more details.
15  *
16  * You should have received a copy of the GNU Library General Public License
17  * along with this library; see the file COPYING.LIB. If not, write to the
18  * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
19  * 02110-1301, USA.
20  */
21 
22 #include "standardcalendaractionmanager.h"
23 
24 #include <akonadi/entitytreemodel.h>
25 
26 #include <kaction.h>
27 #include <kactioncollection.h>
28 #include <kcalcore/event.h>
29 #include <kcalcore/journal.h>
30 #include <kcalcore/todo.h>
31 #include <klocale.h>
32 #include <klocalizedstring.h>
33 #include <kglobal.h>
34 #include <kicon.h>
35 
36 #include <QItemSelectionModel>
37 
38 using namespace Akonadi;
39 
40 class StandardCalendarActionManager::Private
41 {
42 public:
43  Private(KActionCollection *actionCollection, QWidget *parentWidget, StandardCalendarActionManager *parent)
44  : mActionCollection(actionCollection),
45  mParentWidget(parentWidget),
46  mCollectionSelectionModel(0),
47  mItemSelectionModel(0),
48  mParent(parent)
49  {
50  KGlobal::locale()->insertCatalog(QLatin1String("libakonadi-calendar"));
51  mGenericManager = new StandardActionManager(actionCollection, parentWidget);
52  mParent->connect(mGenericManager, SIGNAL(actionStateUpdated()),
53  mParent, SIGNAL(actionStateUpdated()));
54  mGenericManager->setMimeTypeFilter(QStringList() << QLatin1String("text/calendar"));
55  mGenericManager->setCapabilityFilter(QStringList() << QLatin1String("Resource"));
56  }
57 
58  ~Private()
59  {
60  delete mGenericManager;
61  }
62 
63  void updateGenericAction(StandardActionManager::Type type)
64  {
65  switch (type) {
66  case Akonadi::StandardActionManager::CreateCollection:
67  mGenericManager->action(Akonadi::StandardActionManager::CreateCollection)->setText(
68  i18n("Add Calendar Folder..."));
69  mGenericManager->action(Akonadi::StandardActionManager::CreateCollection)->setWhatsThis(
70  i18n("Add a new calendar folder to the currently selected calendar folder."));
71  mGenericManager->setContextText(
72  StandardActionManager::CreateCollection, StandardActionManager::DialogTitle,
73  i18nc("@title:window", "New Calendar Folder"));
74 
75  mGenericManager->setContextText(
76  StandardActionManager::CreateCollection, StandardActionManager::ErrorMessageText,
77  ki18n("Could not create calendar folder: %1"));
78 
79  mGenericManager->setContextText(
80  StandardActionManager::CreateCollection, StandardActionManager::ErrorMessageTitle,
81  i18n("Calendar folder creation failed"));
82  mGenericManager->action(Akonadi::StandardActionManager::CreateCollection)->setProperty("ContentMimeTypes", QStringList() <<
83  QLatin1String("inode/directory") <<
84  QLatin1String("application/x-vnd.akonadi.calendar.todo") <<
85  QLatin1String("application/x-vnd.akonadi.calendar.event") <<
86  QLatin1String("application/x-vnd.akonadi.calendar.journal") );
87 
88  break;
89  case Akonadi::StandardActionManager::CopyCollections:
90  mGenericManager->setActionText(Akonadi::StandardActionManager::CopyCollections,
91  ki18np("Copy Calendar Folder", "Copy %1 Calendar Folders"));
92  mGenericManager->action(Akonadi::StandardActionManager::CopyCollections)->setWhatsThis(
93  i18n("Copy the selected calendar folders to the clipboard."));
94  break;
95  case Akonadi::StandardActionManager::DeleteCollections:
96  mGenericManager->setActionText(Akonadi::StandardActionManager::DeleteCollections,
97  ki18np("Delete Calendar Folder", "Delete %1 Calendar Folders"));
98  mGenericManager->action(Akonadi::StandardActionManager::DeleteCollections)->setWhatsThis(
99  i18n("Delete the selected calendar folders from the calendar."));
100  mGenericManager->setContextText(
101  StandardActionManager::DeleteCollections, StandardActionManager::MessageBoxText,
102  ki18np("Do you really want to delete this calendar folder and all its sub-folders?",
103  "Do you really want to delete %1 calendar folders and all their sub-folders?"));
104 
105  mGenericManager->setContextText(
106  StandardActionManager::DeleteCollections, StandardActionManager::MessageBoxTitle,
107  ki18ncp("@title:window", "Delete calendar folder?", "Delete calendar folders?"));
108 
109  mGenericManager->setContextText(
110  StandardActionManager::DeleteCollections, StandardActionManager::ErrorMessageText,
111  ki18n("Could not delete calendar folder: %1"));
112 
113  mGenericManager->setContextText(
114  StandardActionManager::DeleteCollections, StandardActionManager::ErrorMessageTitle,
115  i18n("Calendar folder deletion failed"));
116 
117  break;
118  case Akonadi::StandardActionManager::SynchronizeCollections:
119  mGenericManager->setActionText(Akonadi::StandardActionManager::SynchronizeCollections,
120  ki18np("Update Calendar Folder", "Update %1 Calendar Folders"));
121  mGenericManager->action(Akonadi::StandardActionManager::SynchronizeCollections)->setWhatsThis(
122  i18n("Update the content of the selected calendar folders."));
123 
124  break;
125  case Akonadi::StandardActionManager::CutCollections:
126  mGenericManager->setActionText(Akonadi::StandardActionManager::CutCollections,
127  ki18np("Cut Calendar Folder", "Cut %1 Calendar Folders"));
128  mGenericManager->action(Akonadi::StandardActionManager::CutCollections)->setWhatsThis(
129  i18n("Cut the selected calendar folders from the calendar."));
130  break;
131  case Akonadi::StandardActionManager::CollectionProperties:
132  mGenericManager->action(Akonadi::StandardActionManager::CollectionProperties)->setText(
133  i18n("Folder Properties..."));
134  mGenericManager->action(Akonadi::StandardActionManager::CollectionProperties)->setWhatsThis(
135  i18n("Open a dialog to edit the properties of the selected calendar folder."));
136  mGenericManager->setContextText(
137  StandardActionManager::CollectionProperties, StandardActionManager::DialogTitle,
138  ki18nc("@title:window", "Properties of Calendar Folder %1"));
139  break;
140  case Akonadi::StandardActionManager::CopyItems:
141  mGenericManager->setActionText(Akonadi::StandardActionManager::CopyItems,
142  ki18np("Copy Event", "Copy %1 Events"));
143  mGenericManager->action(Akonadi::StandardActionManager::CopyItems)->setWhatsThis(
144  i18n("Copy the selected events to the clipboard."));
145 
146  break;
147  case Akonadi::StandardActionManager::DeleteItems:
148  mGenericManager->setActionText(Akonadi::StandardActionManager::DeleteItems,
149  ki18np("Delete Event", "Delete %1 Events"));
150  mGenericManager->action(Akonadi::StandardActionManager::DeleteItems)->setWhatsThis(
151  i18n("Delete the selected events from the calendar."));
152  mGenericManager->setContextText(
153  StandardActionManager::DeleteItems, StandardActionManager::MessageBoxText,
154  ki18np("Do you really want to delete the selected event?",
155  "Do you really want to delete %1 events?"));
156 
157  mGenericManager->setContextText(
158  StandardActionManager::DeleteItems, StandardActionManager::MessageBoxTitle,
159  ki18ncp("@title:window", "Delete Event?", "Delete Events?"));
160 
161  mGenericManager->setContextText(
162  StandardActionManager::DeleteItems, StandardActionManager::ErrorMessageText,
163  ki18n("Could not delete event: %1"));
164 
165  mGenericManager->setContextText(
166  StandardActionManager::DeleteItems, StandardActionManager::ErrorMessageTitle,
167  i18n("Event deletion failed"));
168  break;
169 
170  case Akonadi::StandardActionManager::CutItems:
171  mGenericManager->setActionText(Akonadi::StandardActionManager::CutItems,
172  ki18np("Cut Event", "Cut %1 Events"));
173  mGenericManager->action(Akonadi::StandardActionManager::CutItems)->setWhatsThis(
174  i18n("Cut the selected events from the calendar."));
175  break;
176  case Akonadi::StandardActionManager::CreateResource:
177  mGenericManager->action(Akonadi::StandardActionManager::CreateResource)->setText(
178  i18n("Add &Calendar..."));
179  mGenericManager->action(Akonadi::StandardActionManager::CreateResource)->setWhatsThis(
180  i18n("Add a new calendar<p>"
181  "You will be presented with a dialog where you can select "
182  "the type of the calendar that shall be added.</p>"));
183  mGenericManager->setContextText(
184  StandardActionManager::CreateResource, StandardActionManager::DialogTitle,
185  i18nc("@title:window", "Add Calendar"));
186 
187  mGenericManager->setContextText(
188  StandardActionManager::CreateResource, StandardActionManager::ErrorMessageText,
189  ki18n("Could not create calendar: %1"));
190 
191  mGenericManager->setContextText(
192  StandardActionManager::CreateResource, StandardActionManager::ErrorMessageTitle,
193  i18n("Calendar creation failed"));
194 
195  break;
196  case Akonadi::StandardActionManager::DeleteResources:
197 
198  mGenericManager->setActionText(Akonadi::StandardActionManager::DeleteResources,
199  ki18np("&Delete Calendar", "&Delete %1 Calendars"));
200  mGenericManager->action(Akonadi::StandardActionManager::DeleteResources)->setWhatsThis(
201  i18n("Delete the selected calendars<p>"
202  "The currently selected calendars will be deleted, "
203  "along with all the events, todos and journals they contain.</p>"));
204  mGenericManager->setContextText(
205  StandardActionManager::DeleteResources, StandardActionManager::MessageBoxText,
206  ki18np("Do you really want to delete this calendar?",
207  "Do you really want to delete %1 calendars?"));
208 
209  mGenericManager->setContextText(
210  StandardActionManager::DeleteResources, StandardActionManager::MessageBoxTitle,
211  ki18ncp("@title:window", "Delete Calendar?", "Delete Calendars?"));
212 
213  break;
214  case Akonadi::StandardActionManager::ResourceProperties:
215  mGenericManager->action(Akonadi::StandardActionManager::ResourceProperties)->setText(
216  i18n("Calendar Properties..."));
217  mGenericManager->action(Akonadi::StandardActionManager::ResourceProperties)->setWhatsThis(
218  i18n("Open a dialog to edit properties of the selected calendar."));
219  break;
220  case Akonadi::StandardActionManager::SynchronizeResources:
221 
222  mGenericManager->setActionText(Akonadi::StandardActionManager::SynchronizeResources,
223  ki18np("Update Calendar", "Update %1 Calendars"));
224  mGenericManager->action(Akonadi::StandardActionManager::SynchronizeResources)->setWhatsThis(
225  i18n("Updates the content of all folders of the selected calendars."));
226  break;
227  case Akonadi::StandardActionManager::CopyItemToMenu:
228  mGenericManager->action(Akonadi::StandardActionManager::CopyItemToMenu)->setText(
229  i18n("&Copy to Calendar"));
230  mGenericManager->action(Akonadi::StandardActionManager::CopyItemToMenu)->setWhatsThis(
231  i18n("Copy the selected event to a different calendar."));
232  break;
233  case Akonadi::StandardActionManager::MoveItemToMenu:
234  mGenericManager->action(Akonadi::StandardActionManager::MoveItemToMenu)->setText(
235  i18n("&Move to Calendar"));
236  mGenericManager->action(Akonadi::StandardActionManager::MoveItemToMenu)->setWhatsThis(
237  i18n("Move the selected event to a different calendar."));
238  break;
239  case StandardActionManager::Paste:
240  mGenericManager->setContextText(
241  StandardActionManager::Paste, StandardActionManager::ErrorMessageText,
242  ki18n("Could not paste event: %1"));
243 
244  mGenericManager->setContextText(
245  StandardActionManager::Paste, StandardActionManager::ErrorMessageTitle,
246  i18n("Paste failed"));
247  break;
248  default:
249  break;
250  }
251  }
252  void updateGenericAllActions()
253  {
254  updateGenericAction(StandardActionManager::CreateCollection);
255  updateGenericAction(StandardActionManager::CopyCollections);
256  updateGenericAction(StandardActionManager::DeleteCollections);
257  updateGenericAction(StandardActionManager::SynchronizeCollections);
258  updateGenericAction(StandardActionManager::CollectionProperties);
259  updateGenericAction(StandardActionManager::CopyItems);
260  updateGenericAction(StandardActionManager::Paste);
261  updateGenericAction(StandardActionManager::DeleteItems);
262  updateGenericAction(StandardActionManager::ManageLocalSubscriptions);
263  updateGenericAction(StandardActionManager::AddToFavoriteCollections);
264  updateGenericAction(StandardActionManager::RemoveFromFavoriteCollections);
265  updateGenericAction(StandardActionManager::RenameFavoriteCollection);
266  updateGenericAction(StandardActionManager::CopyCollectionToMenu);
267  updateGenericAction(StandardActionManager::CopyItemToMenu);
268  updateGenericAction(StandardActionManager::MoveItemToMenu);
269  updateGenericAction(StandardActionManager::MoveCollectionToMenu);
270  updateGenericAction(StandardActionManager::CutItems);
271  updateGenericAction(StandardActionManager::CutCollections);
272  updateGenericAction(StandardActionManager::CreateResource);
273  updateGenericAction(StandardActionManager::DeleteResources);
274  updateGenericAction(StandardActionManager::ResourceProperties);
275  updateGenericAction(StandardActionManager::SynchronizeResources);
276  updateGenericAction(StandardActionManager::ToggleWorkOffline);
277  updateGenericAction(StandardActionManager::CopyCollectionToDialog);
278  updateGenericAction(StandardActionManager::MoveCollectionToDialog);
279  updateGenericAction(StandardActionManager::CopyItemToDialog);
280  updateGenericAction(StandardActionManager::MoveItemToDialog);
281  updateGenericAction(StandardActionManager::SynchronizeCollectionsRecursive);
282  updateGenericAction(StandardActionManager::MoveCollectionsToTrash);
283  updateGenericAction(StandardActionManager::MoveItemsToTrash);
284  updateGenericAction(StandardActionManager::RestoreCollectionsFromTrash);
285  updateGenericAction(StandardActionManager::RestoreItemsFromTrash);
286  updateGenericAction(StandardActionManager::MoveToTrashRestoreCollection);
287  updateGenericAction(StandardActionManager::MoveToTrashRestoreCollectionAlternative);
288  updateGenericAction(StandardActionManager::MoveToTrashRestoreItem);
289  updateGenericAction(StandardActionManager::MoveToTrashRestoreItemAlternative);
290  updateGenericAction(StandardActionManager::SynchronizeFavoriteCollections);
291 
292  }
293 
294  static bool hasWritableCollection(const QModelIndex &index, const QString &mimeType)
295  {
296  const Akonadi::Collection collection =
297  index.data(Akonadi::EntityTreeModel::CollectionRole).value<Akonadi::Collection>();
298  if (collection.isValid()) {
299  if (collection.contentMimeTypes().contains(mimeType) &&
300  (collection.rights() & Akonadi::Collection::CanCreateItem)) {
301  return true;
302  }
303  }
304 
305  const QAbstractItemModel *model = index.model();
306  if (!model) {
307  return false;
308  }
309 
310  for (int row = 0; row < model->rowCount(index); ++row) {
311  if (hasWritableCollection(model->index(row, 0, index), mimeType)) {
312  return true;
313  }
314  }
315 
316  return false;
317  }
318 
319  bool hasWritableCollection(const QString &mimeType) const
320  {
321  if (!mCollectionSelectionModel) {
322  return false;
323  }
324 
325  const QAbstractItemModel *collectionModel = mCollectionSelectionModel->model();
326  for (int row = 0; row < collectionModel->rowCount(); ++row) {
327  if (hasWritableCollection(collectionModel->index(row, 0, QModelIndex()), mimeType)) {
328  return true;
329  }
330  }
331 
332  return false;
333  }
334 
335  void updateActions()
336  {
337  if (!mItemSelectionModel) {
338  return;
339  }
340 
341  // update action labels
342  const int itemCount = mItemSelectionModel->selectedRows().count();
343  if (itemCount == 1) {
344  const QModelIndex index = mItemSelectionModel->selectedRows().first();
345  if (index.isValid()) {
346  const QString mimeType = index.data(EntityTreeModel::MimeTypeRole).toString();
347  if (mimeType == KCalCore::Event::eventMimeType()) {
348  if (mGenericManager->action(Akonadi::StandardActionManager::CopyItems)) {
349  mGenericManager->setActionText(Akonadi::StandardActionManager::CopyItems,
350  ki18np("Copy Event", "Copy %1 Events"));
351  }
352  if (mGenericManager->action(Akonadi::StandardActionManager::CopyItemToMenu)) {
353  mGenericManager->action(Akonadi::StandardActionManager::CopyItemToMenu)->setText(i18n("Copy Event To"));
354  }
355  if (mGenericManager->action(Akonadi::StandardActionManager::CopyItemToDialog)) {
356  mGenericManager->action(Akonadi::StandardActionManager::CopyItemToDialog)->setText(i18n("Copy Event To"));
357  }
358  if (mGenericManager->action(Akonadi::StandardActionManager::DeleteItems)) {
359  mGenericManager->setActionText(Akonadi::StandardActionManager::DeleteItems,
360  ki18np("Delete Event", "Delete %1 Events"));
361  }
362  if (mGenericManager->action(Akonadi::StandardActionManager::CutItems)) {
363  mGenericManager->setActionText(Akonadi::StandardActionManager::CutItems,
364  ki18np("Cut Event", "Cut %1 Events"));
365  }
366  if (mGenericManager->action(Akonadi::StandardActionManager::MoveItemToMenu)) {
367  mGenericManager->action(Akonadi::StandardActionManager::MoveItemToMenu)->setText(i18n("Move Event To"));
368  }
369  if (mGenericManager->action(Akonadi::StandardActionManager::MoveItemToDialog)) {
370  mGenericManager->action(Akonadi::StandardActionManager::MoveItemToDialog)->setText(i18n("Move Event To"));
371  }
372  if (mActions.contains(StandardCalendarActionManager::EditIncidence)) {
373  mActions.value(StandardCalendarActionManager::EditIncidence)->setText(i18n("Edit Event..."));
374  }
375  } else if (mimeType == KCalCore::Todo::todoMimeType()) {
376  if (mGenericManager->action(Akonadi::StandardActionManager::CopyItems)) {
377  mGenericManager->setActionText(Akonadi::StandardActionManager::CopyItems,
378  ki18np("Copy To-do", "Copy %1 To-dos"));
379  }
380  if (mGenericManager->action(Akonadi::StandardActionManager::CopyItemToMenu)) {
381  mGenericManager->action(Akonadi::StandardActionManager::CopyItemToMenu)->setText(i18n("Copy To-do To"));
382  }
383  if (mGenericManager->action(Akonadi::StandardActionManager::CopyItemToDialog)) {
384  mGenericManager->action(Akonadi::StandardActionManager::CopyItemToDialog)->setText(i18n("Copy To-do To"));
385  }
386  if (mGenericManager->action(Akonadi::StandardActionManager::DeleteItems)) {
387  mGenericManager->setActionText(Akonadi::StandardActionManager::DeleteItems,
388  ki18np("Delete To-do", "Delete %1 To-dos"));
389  }
390  if (mGenericManager->action(Akonadi::StandardActionManager::CutItems)) {
391  mGenericManager->setActionText(Akonadi::StandardActionManager::CutItems,
392  ki18np("Cut To-do", "Cut %1 To-dos"));
393  }
394  if (mGenericManager->action(Akonadi::StandardActionManager::MoveItemToMenu)) {
395  mGenericManager->action(Akonadi::StandardActionManager::MoveItemToMenu)->setText(i18n("Move To-do To"));
396  }
397  if (mGenericManager->action(Akonadi::StandardActionManager::MoveItemToDialog)) {
398  mGenericManager->action(Akonadi::StandardActionManager::MoveItemToDialog)->setText(i18n("Move To-do To"));
399  }
400  if (mActions.contains(StandardCalendarActionManager::EditIncidence)) {
401  mActions.value(StandardCalendarActionManager::EditIncidence)->setText(i18n("Edit To-do..."));
402  }
403  } else if (mimeType == KCalCore::Journal::journalMimeType()) {
404  if (mGenericManager->action(Akonadi::StandardActionManager::CopyItems)) {
405  mGenericManager->setActionText(Akonadi::StandardActionManager::CopyItems,
406  ki18np("Copy Journal", "Copy %1 Journals"));
407  }
408  if (mGenericManager->action(Akonadi::StandardActionManager::CopyItemToMenu)) {
409  mGenericManager->action(Akonadi::StandardActionManager::CopyItemToMenu)->setText(i18n("Copy Journal To"));
410  }
411  if (mGenericManager->action(Akonadi::StandardActionManager::CopyItemToDialog)) {
412  mGenericManager->action(Akonadi::StandardActionManager::CopyItemToDialog)->setText(i18n("Copy Journal To"));
413  }
414  if (mGenericManager->action(Akonadi::StandardActionManager::DeleteItems)) {
415  mGenericManager->setActionText(Akonadi::StandardActionManager::DeleteItems,
416  ki18np("Delete Journal", "Delete %1 Journals"));
417  }
418  if (mGenericManager->action(Akonadi::StandardActionManager::CutItems)) {
419  mGenericManager->setActionText(Akonadi::StandardActionManager::CutItems,
420  ki18np("Cut Journal", "Cut %1 Journals"));
421  }
422  if (mGenericManager->action(Akonadi::StandardActionManager::MoveItemToMenu)) {
423  mGenericManager->action(Akonadi::StandardActionManager::MoveItemToMenu)->setText(i18n("Move Journal To"));
424  }
425  if (mGenericManager->action(Akonadi::StandardActionManager::MoveItemToDialog)) {
426  mGenericManager->action(Akonadi::StandardActionManager::MoveItemToDialog)->setText(i18n("Move Journal To"));
427  }
428  if (mActions.contains(StandardCalendarActionManager::EditIncidence)) {
429  mActions.value(StandardCalendarActionManager::EditIncidence)->setText(i18n("Edit Journal..."));
430  }
431  }
432  }
433  }
434 
435  // update action states
436  if (mActions.contains(StandardCalendarActionManager::CreateEvent)) {
437  mActions[ StandardCalendarActionManager::CreateEvent ]->setEnabled(hasWritableCollection(KCalCore::Event::eventMimeType()));
438  }
439  if (mActions.contains(StandardCalendarActionManager::CreateTodo)) {
440  mActions[ StandardCalendarActionManager::CreateTodo ]->setEnabled(hasWritableCollection(KCalCore::Todo::todoMimeType()));
441  }
442  if (mActions.contains(StandardCalendarActionManager::CreateJournal)) {
443  mActions[ StandardCalendarActionManager::CreateJournal ]->setEnabled(hasWritableCollection(KCalCore::Journal::journalMimeType()));
444  }
445 
446  if (mActions.contains(StandardCalendarActionManager::EditIncidence)) {
447  bool canEditItem = true;
448 
449  // only one selected item can be edited
450  canEditItem = canEditItem && (itemCount == 1);
451 
452  // check whether parent collection allows changing the item
453  const QModelIndexList rows = mItemSelectionModel->selectedRows();
454  if (rows.count() == 1) {
455  const QModelIndex index = rows.first();
456  const Collection parentCollection = index.data(EntityTreeModel::ParentCollectionRole).value<Collection>();
457  if (parentCollection.isValid()) {
458  canEditItem = canEditItem && (parentCollection.rights() & Collection::CanChangeItem);
459  }
460  }
461 
462  mActions.value(StandardCalendarActionManager::EditIncidence)->setEnabled(canEditItem);
463  }
464 
465  if (mActions.contains(StandardCalendarActionManager::CreateSubTodo)) {
466  mActions[ StandardCalendarActionManager::CreateSubTodo ]->setEnabled(false);
467  }
468 
469  if (itemCount == 1) {
470  const Akonadi::Item item = mGenericManager->selectedItems().first();
471 
472  if (item.isValid() && item.hasPayload<KCalCore::Todo::Ptr>()) {
473  if (mActions.contains(StandardCalendarActionManager::CreateSubTodo)) {
474  mActions[ StandardCalendarActionManager::CreateSubTodo ]->setEnabled(hasWritableCollection(KCalCore::Todo::todoMimeType()));
475  }
476  }
477  }
478 
479  emit mParent->actionStateUpdated();
480  }
481 
482  void slotCreateEvent()
483  {
484  // dummy as long as there are no editors available in kdepimlibs/
485  }
486 
487  void slotCreateTodo()
488  {
489  // dummy as long as there are no editors available in kdepimlibs/
490  }
491 
492  void slotCreateSubTodo()
493  {
494  // dummy as long as there are no editors available in kdepimlibs/
495  }
496 
497  void slotCreateJournal()
498  {
499  // dummy as long as there are no editors available in kdepimlibs/
500  }
501 
502  void slotEditIncidence()
503  {
504  // dummy as long as there are no editors available in kdepimlibs/
505  }
506 
507  KActionCollection *mActionCollection;
508  QWidget *mParentWidget;
509  StandardActionManager *mGenericManager;
510  QItemSelectionModel *mCollectionSelectionModel;
511  QItemSelectionModel *mItemSelectionModel;
512  QHash<StandardCalendarActionManager::Type, KAction*> mActions;
513  QSet<StandardCalendarActionManager::Type> mInterceptedActions;
514  StandardCalendarActionManager *mParent;
515 };
516 
517 Akonadi::StandardCalendarActionManager::StandardCalendarActionManager(KActionCollection *actionCollection, QWidget *parent)
518  : QObject(parent),
519  d(new Private(actionCollection, parent, this))
520 {
521 }
522 
523 StandardCalendarActionManager::~StandardCalendarActionManager()
524 {
525  delete d;
526 }
527 
528 void StandardCalendarActionManager::setCollectionSelectionModel(QItemSelectionModel *selectionModel)
529 {
530  d->mCollectionSelectionModel = selectionModel;
531  d->mGenericManager->setCollectionSelectionModel(selectionModel);
532 
533  connect(selectionModel->model(), SIGNAL(rowsInserted(QModelIndex,int,int)),
534  SLOT(updateActions()));
535  connect(selectionModel->model(), SIGNAL(rowsRemoved(QModelIndex,int,int)),
536  SLOT(updateActions()));
537  connect(selectionModel, SIGNAL(selectionChanged(QItemSelection,QItemSelection)),
538  SLOT(updateActions()));
539  d->updateActions();
540 }
541 
542 void StandardCalendarActionManager::setItemSelectionModel(QItemSelectionModel *selectionModel)
543 {
544  d->mItemSelectionModel = selectionModel;
545  d->mGenericManager->setItemSelectionModel(selectionModel);
546 
547  connect(selectionModel, SIGNAL(selectionChanged(QItemSelection,QItemSelection)),
548  SLOT(updateActions()));
549 
550  d->updateActions();
551 }
552 
553 KAction* StandardCalendarActionManager::createAction(StandardCalendarActionManager::Type type)
554 {
555  if (d->mActions.contains(type)) {
556  return d->mActions.value(type);
557  }
558 
559  KAction *action = 0;
560  switch (type) {
561  case CreateEvent:
562  action = new KAction(d->mParentWidget);
563  action->setIcon(KIcon(QLatin1String("appointment-new")));
564  action->setText(i18n("New E&vent..."));
565  action->setWhatsThis(i18n("Create a new event"));
566  d->mActions.insert(CreateEvent, action);
567  d->mActionCollection->addAction(QString::fromLatin1("akonadi_event_create"), action);
568  connect(action, SIGNAL(triggered(bool)), this, SLOT(slotCreateEvent()));
569  break;
570  case CreateTodo:
571  action = new KAction(d->mParentWidget);
572  action->setIcon(KIcon(QLatin1String("task-new")));
573  action->setText(i18n("New &To-do..."));
574  action->setWhatsThis(i18n("Create a new To-do"));
575  d->mActions.insert(CreateTodo, action);
576  d->mActionCollection->addAction(QString::fromLatin1("akonadi_todo_create"), action);
577  connect(action, SIGNAL(triggered(bool)), this, SLOT(slotCreateTodo()));
578  break;
579  case CreateSubTodo:
580  action = new KAction(d->mParentWidget);
581  action->setIcon(KIcon(QLatin1String("new_subtodo")));
582  action->setText(i18n("New Su&b-to-do..."));
583  action->setWhatsThis(i18n("Create a new Sub-to-do"));
584  d->mActions.insert(CreateSubTodo, action);
585  d->mActionCollection->addAction(QString::fromLatin1("akonadi_subtodo_create"), action);
586  connect(action, SIGNAL(triggered(bool)), this, SLOT(slotCreateSubTodo()));
587  break;
588  case CreateJournal:
589  action = new KAction(d->mParentWidget);
590  action->setIcon(KIcon(QLatin1String("journal-new")));
591  action->setText(i18n("New &Journal..."));
592  action->setWhatsThis(i18n("Create a new Journal"));
593  d->mActions.insert(CreateJournal, action);
594  d->mActionCollection->addAction(QString::fromLatin1("akonadi_journal_create"), action);
595  connect(action, SIGNAL(triggered(bool)), this, SLOT(slotCreateJournal()));
596  break;
597  case EditIncidence:
598  action = new KAction(d->mParentWidget);
599  action->setText(i18n("&Edit..."));
600  action->setWhatsThis(i18n("Edit the selected incidence."));
601  d->mActions.insert(EditIncidence, action);
602  d->mActionCollection->addAction(QString::fromLatin1("akonadi_incidence_edit"), action);
603  connect(action, SIGNAL(triggered(bool)), this, SLOT(slotEditIncidence()));
604  break;
605  default:
606  Q_ASSERT(false); // should never happen
607  break;
608  }
609 
610  return action;
611 }
612 
613 KAction* StandardCalendarActionManager::createAction(StandardActionManager::Type type)
614 {
615  KAction *act = d->mGenericManager->action(type);
616  if (!act)
617  act = d->mGenericManager->createAction(type);
618  d->updateGenericAction(type);
619  return act;
620 }
621 
622 void StandardCalendarActionManager::createAllActions()
623 {
624  createAction(CreateEvent);
625  createAction(CreateTodo);
626  createAction(CreateSubTodo);
627  createAction(CreateJournal);
628  createAction(EditIncidence);
629 
630  d->mGenericManager->createAllActions();
631  d->updateGenericAllActions();
632  d->updateActions();
633 }
634 
635 KAction* StandardCalendarActionManager::action(StandardCalendarActionManager::Type type) const
636 {
637  if (d->mActions.contains(type)) {
638  return d->mActions.value(type);
639  }
640 
641  return 0;
642 }
643 
644 KAction* StandardCalendarActionManager::action(StandardActionManager::Type type) const
645 {
646  return d->mGenericManager->action(type);
647 }
648 
649 void StandardCalendarActionManager::setActionText(StandardActionManager::Type type, const KLocalizedString &text)
650 {
651  d->mGenericManager->setActionText(type, text);
652 }
653 
654 void StandardCalendarActionManager::interceptAction(StandardCalendarActionManager::Type type, bool intercept)
655 {
656  if (intercept) {
657  d->mInterceptedActions.insert(type);
658  } else {
659  d->mInterceptedActions.remove(type);
660  }
661 }
662 
663 void StandardCalendarActionManager::interceptAction(StandardActionManager::Type type, bool intercept)
664 {
665  d->mGenericManager->interceptAction(type, intercept);
666 }
667 
668 Akonadi::Collection::List StandardCalendarActionManager::selectedCollections() const
669 {
670  return d->mGenericManager->selectedCollections();
671 }
672 
673 Akonadi::Item::List StandardCalendarActionManager::selectedItems() const
674 {
675  return d->mGenericManager->selectedItems();
676 }
677 
678 void StandardCalendarActionManager::setContextText(StandardActionManager::Type type, StandardActionManager::TextContext context, const QString &text)
679 {
680  d->mGenericManager->setContextText(type, context, text);
681 }
682 
683 void StandardCalendarActionManager::setContextText(StandardActionManager::Type type, StandardActionManager::TextContext context, const KLocalizedString &text)
684 {
685  d->mGenericManager->setContextText(type, context, text);
686 }
687 
688 void StandardCalendarActionManager::setCollectionPropertiesPageNames(const QStringList &names)
689 {
690  d->mGenericManager->setCollectionPropertiesPageNames(names);
691 }
692 
693 #include "moc_standardcalendaractionmanager.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::StandardActionManager::TextContext
TextContext
Describes the text context that can be customized.
Definition: standardactionmanager.h:177
QModelIndex
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
QWidget
Akonadi::StandardCalendarActionManager::CreateSubTodo
Creates a new sub-todo.
Definition: standardcalendaractionmanager.h:59
QAbstractItemModel::rowCount
virtual int rowCount(const QModelIndex &parent) const =0
Akonadi::StandardActionManager::CreateCollection
Creates an collection.
Definition: standardactionmanager.h:134
QAbstractItemModel::index
virtual QModelIndex index(int row, int column, const QModelIndex &parent) const =0
Akonadi::StandardActionManager::MoveCollectionsToTrash
Moves the selected collection to trash and marks it as deleted, needs EntityDeletedAttribute.
Definition: standardactionmanager.h:162
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::StandardActionManager
Manages generic actions for collection and item views.
Definition: standardactionmanager.h:126
Akonadi::StandardCalendarActionManager::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: standardcalendaractionmanager.cpp:654
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::StandardActionManager::ResourceProperties
Provides the resource properties.
Definition: standardactionmanager.h:154
Akonadi::StandardCalendarActionManager::selectedItems
Akonadi::Item::List selectedItems() const
Returns the list of items that are currently selected.
Definition: standardcalendaractionmanager.cpp:673
QStringList::contains
bool contains(const QString &str, Qt::CaseSensitivity cs) const
Akonadi::StandardActionManager::CutItems
Cuts the selected items.
Definition: standardactionmanager.h:150
QVariant::value
T value() const
Akonadi::StandardCalendarActionManager::setContextText
void setContextText(StandardActionManager::Type type, StandardActionManager::TextContext context, const QString &text)
Sets the text of the action type for the given context.
Definition: standardcalendaractionmanager.cpp:678
Akonadi::Collection::CanChangeItem
Can change items in this collection.
Definition: collection.h:88
Akonadi::StandardCalendarActionManager::createAllActions
void createAllActions()
Convenience method to create all standard actions.
Definition: standardcalendaractionmanager.cpp:622
Akonadi::StandardCalendarActionManager
Manages calendar specific actions for collection and item views.
Definition: standardcalendaractionmanager.h:49
Akonadi::StandardActionManager::RestoreItemsFromTrash
Restores the selected items from trash, needs EntityDeletedAttribute.
Definition: standardactionmanager.h:165
Akonadi::StandardCalendarActionManager::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: standardcalendaractionmanager.cpp:649
Akonadi::StandardCalendarActionManager::~StandardCalendarActionManager
~StandardCalendarActionManager()
Destroys the standard calendar action manager.
Definition: standardcalendaractionmanager.cpp:523
Akonadi::StandardActionManager::ToggleWorkOffline
Toggles the work offline state of all resources.
Definition: standardactionmanager.h:156
Akonadi::StandardCalendarActionManager::setCollectionSelectionModel
void setCollectionSelectionModel(QItemSelectionModel *selectionModel)
Sets the collection selection model based on which the collection related actions should operate...
Definition: standardcalendaractionmanager.cpp:528
Akonadi::Collection::setEnabled
void setEnabled(bool enabled)
Sets the collection's enabled state.
Definition: collection.cpp:273
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::StandardCalendarActionManager::createAction
KAction * createAction(Type type)
Creates the action of the given type and adds it to the action collection specified in the constructo...
Definition: standardcalendaractionmanager.cpp:553
QModelIndex::isValid
bool isValid() const
QHash
Akonadi::StandardActionManager::CollectionProperties
Provides collection properties.
Definition: standardactionmanager.h:138
QObject
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::StandardCalendarActionManager::StandardCalendarActionManager
StandardCalendarActionManager(KActionCollection *actionCollection, QWidget *parent=0)
Creates a new standard calendar action manager.
Definition: standardcalendaractionmanager.cpp:517
Akonadi::StandardActionManager::AddToFavoriteCollections
Add the collection to the favorite collections model.
Definition: standardactionmanager.h:143
Akonadi::StandardCalendarActionManager::action
KAction * action(Type type) const
Returns the action of the given type, 0 if it has not been created (yet).
Definition: standardcalendaractionmanager.cpp:635
Akonadi::StandardActionManager::MessageBoxTitle
The window title of a message box.
Definition: standardactionmanager.h:180
Akonadi::StandardCalendarActionManager::actionStateUpdated
void actionStateUpdated()
This signal is emitted whenever the action state has been updated.
Akonadi::Collection::CanCreateItem
Can create new items in this collection.
Definition: collection.h:89
Akonadi::StandardCalendarActionManager::CreateJournal
Creates a new journal.
Definition: standardcalendaractionmanager.h:60
Akonadi::StandardActionManager::SynchronizeCollectionsRecursive
Synchronizes collections in a recursive way.
Definition: standardactionmanager.h:161
Akonadi::StandardCalendarActionManager::CreateTodo
Creates a new todo.
Definition: standardcalendaractionmanager.h:58
Akonadi::StandardActionManager::CopyCollectionToMenu
Menu allowing to quickly copy a collection into another collection.
Definition: standardactionmanager.h:146
QSet
Definition: itemfetchscope.h:29
Akonadi::EntityTreeModel::CollectionRole
The collection.
Definition: entitytreemodel.h:336
QString
QList
Akonadi::EntityTreeModel::ParentCollectionRole
The parent collection of the entity.
Definition: entitytreemodel.h:341
Akonadi::StandardCalendarActionManager::setItemSelectionModel
void setItemSelectionModel(QItemSelectionModel *selectionModel)
Sets the item selection model based on which the item related actions should operate.
Definition: standardcalendaractionmanager.cpp:542
QStringList
Akonadi::Collection::rights
Rights rights() const
Returns the rights the user has on the collection.
Definition: collection.cpp:99
Akonadi::StandardActionManager::CutCollections
Cuts the selected collections.
Definition: standardactionmanager.h:151
Akonadi::StandardCalendarActionManager::selectedCollections
Akonadi::Collection::List selectedCollections() const
Returns the list of collections that are currently selected.
Definition: standardcalendaractionmanager.cpp:668
Akonadi::StandardActionManager::DialogTitle
The window title of a dialog.
Definition: standardactionmanager.h:178
Akonadi::StandardCalendarActionManager::EditIncidence
Edit currently selected event/todo/journal.
Definition: standardcalendaractionmanager.h:61
QItemSelection
Akonadi::StandardActionManager::CopyItemToMenu
Menu allowing to quickly copy an item into a collection.
Definition: standardactionmanager.h:147
Akonadi::StandardActionManager::SynchronizeResources
Synchronizes the selected resources.
Definition: standardactionmanager.h:155
QModelIndex::model
const QAbstractItemModel * model() const
Akonadi::StandardActionManager::DeleteResources
Deletes the selected resources.
Definition: standardactionmanager.h:153
QModelIndex::data
QVariant data(int role) const
Akonadi::EntityTreeModel::MimeTypeRole
The mimetype of the entity.
Definition: entitytreemodel.h:333
Akonadi::StandardCalendarActionManager::Type
Type
Describes the supported actions.
Definition: standardcalendaractionmanager.h:56
QLatin1String
Akonadi::StandardActionManager::CopyCollections
Copies the selected collections.
Definition: standardactionmanager.h:135
Akonadi::StandardCalendarActionManager::CreateEvent
Creates a new event.
Definition: standardcalendaractionmanager.h:57
Akonadi::Collection::contentMimeTypes
QStringList contentMimeTypes() const
Returns a list of possible content mimetypes, e.g.
Definition: collection.cpp:115
QAbstractItemModel
QString::fromLatin1
QString fromLatin1(const char *str, int size)
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::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::Entity::isValid
bool isValid() const
Returns whether the entity is valid.
Definition: entity.cpp:97
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::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
QVariant::toString
QString toString() const
QItemSelectionModel::model
const QAbstractItemModel * model() const
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::StandardActionManager::MoveCollectionToMenu
Menu allowing to move a collection into another collection.
Definition: standardactionmanager.h:149
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
This file is part of the KDE documentation.
Documentation copyright © 1996-2020 The KDE developers.
Generated on Mon Jun 22 2020 13:38:03 by doxygen 1.8.7 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 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