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

akonadi

  • sources
  • kde-4.12
  • 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 
83  break;
84  case Akonadi::StandardActionManager::CopyCollections:
85  mGenericManager->setActionText(Akonadi::StandardActionManager::CopyCollections,
86  ki18np("Copy Calendar Folder", "Copy %1 Calendar Folders"));
87  mGenericManager->action(Akonadi::StandardActionManager::CopyCollections)->setWhatsThis(
88  i18n("Copy the selected calendar folders to the clipboard."));
89  break;
90  case Akonadi::StandardActionManager::DeleteCollections:
91  mGenericManager->setActionText(Akonadi::StandardActionManager::DeleteCollections,
92  ki18np("Delete Calendar Folder", "Delete %1 Calendar Folders"));
93  mGenericManager->action(Akonadi::StandardActionManager::DeleteCollections)->setWhatsThis(
94  i18n("Delete the selected calendar folders from the calendar."));
95  mGenericManager->setContextText(
96  StandardActionManager::DeleteCollections, StandardActionManager::MessageBoxText,
97  ki18np("Do you really want to delete this calendar folder and all its sub-folders?",
98  "Do you really want to delete %1 calendar folders and all their sub-folders?"));
99 
100  mGenericManager->setContextText(
101  StandardActionManager::DeleteCollections, StandardActionManager::MessageBoxTitle,
102  ki18ncp("@title:window", "Delete calendar folder?", "Delete calendar folders?"));
103 
104  mGenericManager->setContextText(
105  StandardActionManager::DeleteCollections, StandardActionManager::ErrorMessageText,
106  ki18n("Could not delete calendar folder: %1"));
107 
108  mGenericManager->setContextText(
109  StandardActionManager::DeleteCollections, StandardActionManager::ErrorMessageTitle,
110  i18n("Calendar folder deletion failed"));
111 
112  break;
113  case Akonadi::StandardActionManager::SynchronizeCollections:
114  mGenericManager->setActionText(Akonadi::StandardActionManager::SynchronizeCollections,
115  ki18np("Update Calendar Folder", "Update %1 Calendar Folders"));
116  mGenericManager->action(Akonadi::StandardActionManager::SynchronizeCollections)->setWhatsThis(
117  i18n("Update the content of the selected calendar folders."));
118 
119  break;
120  case Akonadi::StandardActionManager::CutCollections:
121  mGenericManager->setActionText(Akonadi::StandardActionManager::CutCollections,
122  ki18np("Cut Calendar Folder", "Cut %1 Calendar Folders"));
123  mGenericManager->action(Akonadi::StandardActionManager::CutCollections)->setWhatsThis(
124  i18n("Cut the selected calendar folders from the calendar."));
125  break;
126  case Akonadi::StandardActionManager::CollectionProperties:
127  mGenericManager->action(Akonadi::StandardActionManager::CollectionProperties)->setText(
128  i18n("Folder Properties..."));
129  mGenericManager->action(Akonadi::StandardActionManager::CollectionProperties)->setWhatsThis(
130  i18n("Open a dialog to edit the properties of the selected calendar folder."));
131  mGenericManager->setContextText(
132  StandardActionManager::CollectionProperties, StandardActionManager::DialogTitle,
133  ki18nc("@title:window", "Properties of Calendar Folder %1"));
134  break;
135  case Akonadi::StandardActionManager::CopyItems:
136  mGenericManager->setActionText(Akonadi::StandardActionManager::CopyItems,
137  ki18np("Copy Event", "Copy %1 Events"));
138  mGenericManager->action(Akonadi::StandardActionManager::CopyItems)->setWhatsThis(
139  i18n("Copy the selected events to the clipboard."));
140 
141  break;
142  case Akonadi::StandardActionManager::DeleteItems:
143  mGenericManager->setActionText(Akonadi::StandardActionManager::DeleteItems,
144  ki18np("Delete Event", "Delete %1 Events"));
145  mGenericManager->action(Akonadi::StandardActionManager::DeleteItems)->setWhatsThis(
146  i18n("Delete the selected events from the calendar."));
147  mGenericManager->setContextText(
148  StandardActionManager::DeleteItems, StandardActionManager::MessageBoxText,
149  ki18np("Do you really want to delete the selected event?",
150  "Do you really want to delete %1 events?"));
151 
152  mGenericManager->setContextText(
153  StandardActionManager::DeleteItems, StandardActionManager::MessageBoxTitle,
154  ki18ncp("@title:window", "Delete Event?", "Delete Events?"));
155 
156  mGenericManager->setContextText(
157  StandardActionManager::DeleteItems, StandardActionManager::ErrorMessageText,
158  ki18n("Could not delete event: %1"));
159 
160  mGenericManager->setContextText(
161  StandardActionManager::DeleteItems, StandardActionManager::ErrorMessageTitle,
162  i18n("Event deletion failed"));
163  break;
164 
165  case Akonadi::StandardActionManager::CutItems:
166  mGenericManager->setActionText(Akonadi::StandardActionManager::CutItems,
167  ki18np("Cut Event", "Cut %1 Events"));
168  mGenericManager->action(Akonadi::StandardActionManager::CutItems)->setWhatsThis(
169  i18n("Cut the selected events from the calendar."));
170  break;
171  case Akonadi::StandardActionManager::CreateResource:
172  mGenericManager->action(Akonadi::StandardActionManager::CreateResource)->setText(
173  i18n("Add &Calendar..."));
174  mGenericManager->action(Akonadi::StandardActionManager::CreateResource)->setWhatsThis(
175  i18n("Add a new calendar<p>"
176  "You will be presented with a dialog where you can select "
177  "the type of the calendar that shall be added.</p>"));
178  mGenericManager->setContextText(
179  StandardActionManager::CreateResource, StandardActionManager::DialogTitle,
180  i18nc("@title:window", "Add Calendar"));
181 
182  mGenericManager->setContextText(
183  StandardActionManager::CreateResource, StandardActionManager::ErrorMessageText,
184  ki18n("Could not create calendar: %1"));
185 
186  mGenericManager->setContextText(
187  StandardActionManager::CreateResource, StandardActionManager::ErrorMessageTitle,
188  i18n("Calendar creation failed"));
189 
190  break;
191  case Akonadi::StandardActionManager::DeleteResources:
192 
193  mGenericManager->setActionText(Akonadi::StandardActionManager::DeleteResources,
194  ki18np("&Delete Calendar", "&Delete %1 Calendars"));
195  mGenericManager->action(Akonadi::StandardActionManager::DeleteResources)->setWhatsThis(
196  i18n("Delete the selected calendars<p>"
197  "The currently selected calendars will be deleted, "
198  "along with all the events, todos and journals they contain.</p>"));
199  mGenericManager->setContextText(
200  StandardActionManager::DeleteResources, StandardActionManager::MessageBoxText,
201  ki18np("Do you really want to delete this calendar?",
202  "Do you really want to delete %1 calendars?"));
203 
204  mGenericManager->setContextText(
205  StandardActionManager::DeleteResources, StandardActionManager::MessageBoxTitle,
206  ki18ncp("@title:window", "Delete Calendar?", "Delete Calendars?"));
207 
208  break;
209  case Akonadi::StandardActionManager::ResourceProperties:
210  mGenericManager->action(Akonadi::StandardActionManager::ResourceProperties)->setText(
211  i18n("Calendar Properties..."));
212  mGenericManager->action(Akonadi::StandardActionManager::ResourceProperties)->setWhatsThis(
213  i18n("Open a dialog to edit properties of the selected calendar."));
214  break;
215  case Akonadi::StandardActionManager::SynchronizeResources:
216 
217  mGenericManager->setActionText(Akonadi::StandardActionManager::SynchronizeResources,
218  ki18np("Update Calendar", "Update %1 Calendars"));
219  mGenericManager->action(Akonadi::StandardActionManager::SynchronizeResources)->setWhatsThis(
220  i18n("Updates the content of all folders of the selected calendars."));
221  break;
222  case Akonadi::StandardActionManager::CopyItemToMenu:
223  mGenericManager->action(Akonadi::StandardActionManager::CopyItemToMenu)->setText(
224  i18n("&Copy to Calendar"));
225  mGenericManager->action(Akonadi::StandardActionManager::CopyItemToMenu)->setWhatsThis(
226  i18n("Copy the selected event to a different calendar."));
227  break;
228  case Akonadi::StandardActionManager::MoveItemToMenu:
229  mGenericManager->action(Akonadi::StandardActionManager::MoveItemToMenu)->setText(
230  i18n("&Move to Calendar"));
231  mGenericManager->action(Akonadi::StandardActionManager::MoveItemToMenu)->setWhatsThis(
232  i18n("Move the selected event to a different calendar."));
233  break;
234  case StandardActionManager::Paste:
235  mGenericManager->setContextText(
236  StandardActionManager::Paste, StandardActionManager::ErrorMessageText,
237  ki18n("Could not paste event: %1"));
238 
239  mGenericManager->setContextText(
240  StandardActionManager::Paste, StandardActionManager::ErrorMessageTitle,
241  i18n("Paste failed"));
242  break;
243  default:
244  break;
245  }
246  }
247  void updateGenericAllActions()
248  {
249  updateGenericAction(StandardActionManager::CreateCollection);
250  updateGenericAction(StandardActionManager::CopyCollections);
251  updateGenericAction(StandardActionManager::DeleteCollections);
252  updateGenericAction(StandardActionManager::SynchronizeCollections);
253  updateGenericAction(StandardActionManager::CollectionProperties);
254  updateGenericAction(StandardActionManager::CopyItems);
255  updateGenericAction(StandardActionManager::Paste);
256  updateGenericAction(StandardActionManager::DeleteItems);
257  updateGenericAction(StandardActionManager::ManageLocalSubscriptions);
258  updateGenericAction(StandardActionManager::AddToFavoriteCollections);
259  updateGenericAction(StandardActionManager::RemoveFromFavoriteCollections);
260  updateGenericAction(StandardActionManager::RenameFavoriteCollection);
261  updateGenericAction(StandardActionManager::CopyCollectionToMenu);
262  updateGenericAction(StandardActionManager::CopyItemToMenu);
263  updateGenericAction(StandardActionManager::MoveItemToMenu);
264  updateGenericAction(StandardActionManager::MoveCollectionToMenu);
265  updateGenericAction(StandardActionManager::CutItems);
266  updateGenericAction(StandardActionManager::CutCollections);
267  updateGenericAction(StandardActionManager::CreateResource);
268  updateGenericAction(StandardActionManager::DeleteResources);
269  updateGenericAction(StandardActionManager::ResourceProperties);
270  updateGenericAction(StandardActionManager::SynchronizeResources);
271  updateGenericAction(StandardActionManager::ToggleWorkOffline);
272  updateGenericAction(StandardActionManager::CopyCollectionToDialog);
273  updateGenericAction(StandardActionManager::MoveCollectionToDialog);
274  updateGenericAction(StandardActionManager::CopyItemToDialog);
275  updateGenericAction(StandardActionManager::MoveItemToDialog);
276  updateGenericAction(StandardActionManager::SynchronizeCollectionsRecursive);
277  updateGenericAction(StandardActionManager::MoveCollectionsToTrash);
278  updateGenericAction(StandardActionManager::MoveItemsToTrash);
279  updateGenericAction(StandardActionManager::RestoreCollectionsFromTrash);
280  updateGenericAction(StandardActionManager::RestoreItemsFromTrash);
281  updateGenericAction(StandardActionManager::MoveToTrashRestoreCollection);
282  updateGenericAction(StandardActionManager::MoveToTrashRestoreCollectionAlternative);
283  updateGenericAction(StandardActionManager::MoveToTrashRestoreItem);
284  updateGenericAction(StandardActionManager::MoveToTrashRestoreItemAlternative);
285  updateGenericAction(StandardActionManager::SynchronizeFavoriteCollections);
286 
287  }
288 
289  static bool hasWritableCollection(const QModelIndex &index, const QString &mimeType)
290  {
291  const Akonadi::Collection collection =
292  index.data(Akonadi::EntityTreeModel::CollectionRole).value<Akonadi::Collection>();
293  if (collection.isValid()) {
294  if (collection.contentMimeTypes().contains(mimeType) &&
295  (collection.rights() & Akonadi::Collection::CanCreateItem)) {
296  return true;
297  }
298  }
299 
300  const QAbstractItemModel *model = index.model();
301  if (!model) {
302  return false;
303  }
304 
305  for (int row = 0; row < model->rowCount(index); ++row) {
306  if (hasWritableCollection(model->index(row, 0, index), mimeType)) {
307  return true;
308  }
309  }
310 
311  return false;
312  }
313 
314  bool hasWritableCollection(const QString &mimeType) const
315  {
316  if (!mCollectionSelectionModel) {
317  return false;
318  }
319 
320  const QAbstractItemModel *collectionModel = mCollectionSelectionModel->model();
321  for (int row = 0; row < collectionModel->rowCount(); ++row) {
322  if (hasWritableCollection(collectionModel->index(row, 0, QModelIndex()), mimeType)) {
323  return true;
324  }
325  }
326 
327  return false;
328  }
329 
330  void updateActions()
331  {
332  if (!mItemSelectionModel) {
333  return;
334  }
335 
336  // update action labels
337  const int itemCount = mItemSelectionModel->selectedRows().count();
338  if (itemCount == 1) {
339  const QModelIndex index = mItemSelectionModel->selectedRows().first();
340  if (index.isValid()) {
341  const QString mimeType = index.data(EntityTreeModel::MimeTypeRole).toString();
342  if (mimeType == KCalCore::Event::eventMimeType()) {
343  if (mGenericManager->action(Akonadi::StandardActionManager::CopyItems)) {
344  mGenericManager->setActionText(Akonadi::StandardActionManager::CopyItems,
345  ki18np("Copy Event", "Copy %1 Events"));
346  }
347  if (mGenericManager->action(Akonadi::StandardActionManager::CopyItemToMenu)) {
348  mGenericManager->action(Akonadi::StandardActionManager::CopyItemToMenu)->setText(i18n("Copy Event To"));
349  }
350  if (mGenericManager->action(Akonadi::StandardActionManager::CopyItemToDialog)) {
351  mGenericManager->action(Akonadi::StandardActionManager::CopyItemToDialog)->setText(i18n("Copy Event To"));
352  }
353  if (mGenericManager->action(Akonadi::StandardActionManager::DeleteItems)) {
354  mGenericManager->setActionText(Akonadi::StandardActionManager::DeleteItems,
355  ki18np("Delete Event", "Delete %1 Events"));
356  }
357  if (mGenericManager->action(Akonadi::StandardActionManager::CutItems)) {
358  mGenericManager->setActionText(Akonadi::StandardActionManager::CutItems,
359  ki18np("Cut Event", "Cut %1 Events"));
360  }
361  if (mGenericManager->action(Akonadi::StandardActionManager::MoveItemToMenu)) {
362  mGenericManager->action(Akonadi::StandardActionManager::MoveItemToMenu)->setText(i18n("Move Event To"));
363  }
364  if (mGenericManager->action(Akonadi::StandardActionManager::MoveItemToDialog)) {
365  mGenericManager->action(Akonadi::StandardActionManager::MoveItemToDialog)->setText(i18n("Move Event To"));
366  }
367  if (mActions.contains(StandardCalendarActionManager::EditIncidence)) {
368  mActions.value(StandardCalendarActionManager::EditIncidence)->setText(i18n("Edit Event..."));
369  }
370  } else if (mimeType == KCalCore::Todo::todoMimeType()) {
371  if (mGenericManager->action(Akonadi::StandardActionManager::CopyItems)) {
372  mGenericManager->setActionText(Akonadi::StandardActionManager::CopyItems,
373  ki18np("Copy To-do", "Copy %1 To-dos"));
374  }
375  if (mGenericManager->action(Akonadi::StandardActionManager::CopyItemToMenu)) {
376  mGenericManager->action(Akonadi::StandardActionManager::CopyItemToMenu)->setText(i18n("Copy To-do To"));
377  }
378  if (mGenericManager->action(Akonadi::StandardActionManager::CopyItemToDialog)) {
379  mGenericManager->action(Akonadi::StandardActionManager::CopyItemToDialog)->setText(i18n("Copy To-do To"));
380  }
381  if (mGenericManager->action(Akonadi::StandardActionManager::DeleteItems)) {
382  mGenericManager->setActionText(Akonadi::StandardActionManager::DeleteItems,
383  ki18np("Delete To-do", "Delete %1 To-dos"));
384  }
385  if (mGenericManager->action(Akonadi::StandardActionManager::CutItems)) {
386  mGenericManager->setActionText(Akonadi::StandardActionManager::CutItems,
387  ki18np("Cut To-do", "Cut %1 To-dos"));
388  }
389  if (mGenericManager->action(Akonadi::StandardActionManager::MoveItemToMenu)) {
390  mGenericManager->action(Akonadi::StandardActionManager::MoveItemToMenu)->setText(i18n("Move To-do To"));
391  }
392  if (mGenericManager->action(Akonadi::StandardActionManager::MoveItemToDialog)) {
393  mGenericManager->action(Akonadi::StandardActionManager::MoveItemToDialog)->setText(i18n("Move To-do To"));
394  }
395  if (mActions.contains(StandardCalendarActionManager::EditIncidence)) {
396  mActions.value(StandardCalendarActionManager::EditIncidence)->setText(i18n("Edit To-do..."));
397  }
398  } else if (mimeType == KCalCore::Journal::journalMimeType()) {
399  if (mGenericManager->action(Akonadi::StandardActionManager::CopyItems)) {
400  mGenericManager->setActionText(Akonadi::StandardActionManager::CopyItems,
401  ki18np("Copy Journal", "Copy %1 Journals"));
402  }
403  if (mGenericManager->action(Akonadi::StandardActionManager::CopyItemToMenu)) {
404  mGenericManager->action(Akonadi::StandardActionManager::CopyItemToMenu)->setText(i18n("Copy Journal To"));
405  }
406  if (mGenericManager->action(Akonadi::StandardActionManager::CopyItemToDialog)) {
407  mGenericManager->action(Akonadi::StandardActionManager::CopyItemToDialog)->setText(i18n("Copy Journal To"));
408  }
409  if (mGenericManager->action(Akonadi::StandardActionManager::DeleteItems)) {
410  mGenericManager->setActionText(Akonadi::StandardActionManager::DeleteItems,
411  ki18np("Delete Journal", "Delete %1 Journals"));
412  }
413  if (mGenericManager->action(Akonadi::StandardActionManager::CutItems)) {
414  mGenericManager->setActionText(Akonadi::StandardActionManager::CutItems,
415  ki18np("Cut Journal", "Cut %1 Journals"));
416  }
417  if (mGenericManager->action(Akonadi::StandardActionManager::MoveItemToMenu)) {
418  mGenericManager->action(Akonadi::StandardActionManager::MoveItemToMenu)->setText(i18n("Move Journal To"));
419  }
420  if (mGenericManager->action(Akonadi::StandardActionManager::MoveItemToDialog)) {
421  mGenericManager->action(Akonadi::StandardActionManager::MoveItemToDialog)->setText(i18n("Move Journal To"));
422  }
423  if (mActions.contains(StandardCalendarActionManager::EditIncidence)) {
424  mActions.value(StandardCalendarActionManager::EditIncidence)->setText(i18n("Edit Journal..."));
425  }
426  }
427  }
428  }
429 
430  // update action states
431  if (mActions.contains(StandardCalendarActionManager::CreateEvent)) {
432  mActions[ StandardCalendarActionManager::CreateEvent ]->setEnabled(hasWritableCollection(KCalCore::Event::eventMimeType()));
433  }
434  if (mActions.contains(StandardCalendarActionManager::CreateTodo)) {
435  mActions[ StandardCalendarActionManager::CreateTodo ]->setEnabled(hasWritableCollection(KCalCore::Todo::todoMimeType()));
436  }
437  if (mActions.contains(StandardCalendarActionManager::CreateJournal)) {
438  mActions[ StandardCalendarActionManager::CreateJournal ]->setEnabled(hasWritableCollection(KCalCore::Journal::journalMimeType()));
439  }
440 
441  if (mActions.contains(StandardCalendarActionManager::EditIncidence)) {
442  bool canEditItem = true;
443 
444  // only one selected item can be edited
445  canEditItem = canEditItem && (itemCount == 1);
446 
447  // check whether parent collection allows changing the item
448  const QModelIndexList rows = mItemSelectionModel->selectedRows();
449  if (rows.count() == 1) {
450  const QModelIndex index = rows.first();
451  const Collection parentCollection = index.data(EntityTreeModel::ParentCollectionRole).value<Collection>();
452  if (parentCollection.isValid()) {
453  canEditItem = canEditItem && (parentCollection.rights() & Collection::CanChangeItem);
454  }
455  }
456 
457  mActions.value(StandardCalendarActionManager::EditIncidence)->setEnabled(canEditItem);
458  }
459 
460  if (mActions.contains(StandardCalendarActionManager::CreateSubTodo)) {
461  mActions[ StandardCalendarActionManager::CreateSubTodo ]->setEnabled(false);
462  }
463 
464  if (itemCount == 1) {
465  const Akonadi::Item item = mGenericManager->selectedItems().first();
466 
467  if (item.isValid() && item.hasPayload<KCalCore::Todo::Ptr>()) {
468  if (mActions.contains(StandardCalendarActionManager::CreateSubTodo)) {
469  mActions[ StandardCalendarActionManager::CreateSubTodo ]->setEnabled(hasWritableCollection(KCalCore::Todo::todoMimeType()));
470  }
471  }
472  }
473 
474  emit mParent->actionStateUpdated();
475  }
476 
477  void slotCreateEvent()
478  {
479  // dummy as long as there are no editors available in kdepimlibs/
480  }
481 
482  void slotCreateTodo()
483  {
484  // dummy as long as there are no editors available in kdepimlibs/
485  }
486 
487  void slotCreateSubTodo()
488  {
489  // dummy as long as there are no editors available in kdepimlibs/
490  }
491 
492  void slotCreateJournal()
493  {
494  // dummy as long as there are no editors available in kdepimlibs/
495  }
496 
497  void slotEditIncidence()
498  {
499  // dummy as long as there are no editors available in kdepimlibs/
500  }
501 
502  KActionCollection *mActionCollection;
503  QWidget *mParentWidget;
504  StandardActionManager *mGenericManager;
505  QItemSelectionModel *mCollectionSelectionModel;
506  QItemSelectionModel *mItemSelectionModel;
507  QHash<StandardCalendarActionManager::Type, KAction*> mActions;
508  QSet<StandardCalendarActionManager::Type> mInterceptedActions;
509  StandardCalendarActionManager *mParent;
510 };
511 
512 Akonadi::StandardCalendarActionManager::StandardCalendarActionManager(KActionCollection *actionCollection, QWidget *parent)
513  : QObject(parent),
514  d(new Private(actionCollection, parent, this))
515 {
516 }
517 
518 StandardCalendarActionManager::~StandardCalendarActionManager()
519 {
520  delete d;
521 }
522 
523 void StandardCalendarActionManager::setCollectionSelectionModel(QItemSelectionModel *selectionModel)
524 {
525  d->mCollectionSelectionModel = selectionModel;
526  d->mGenericManager->setCollectionSelectionModel(selectionModel);
527 
528  connect(selectionModel->model(), SIGNAL(rowsInserted(QModelIndex,int,int)),
529  SLOT(updateActions()));
530  connect(selectionModel->model(), SIGNAL(rowsRemoved(QModelIndex,int,int)),
531  SLOT(updateActions()));
532  connect(selectionModel, SIGNAL(selectionChanged(QItemSelection,QItemSelection)),
533  SLOT(updateActions()));
534  d->updateActions();
535 }
536 
537 void StandardCalendarActionManager::setItemSelectionModel(QItemSelectionModel *selectionModel)
538 {
539  d->mItemSelectionModel = selectionModel;
540  d->mGenericManager->setItemSelectionModel(selectionModel);
541 
542  connect(selectionModel, SIGNAL(selectionChanged(QItemSelection,QItemSelection)),
543  SLOT(updateActions()));
544 
545  d->updateActions();
546 }
547 
548 KAction* StandardCalendarActionManager::createAction(StandardCalendarActionManager::Type type)
549 {
550  if (d->mActions.contains(type)) {
551  return d->mActions.value(type);
552  }
553 
554  KAction *action = 0;
555  switch (type) {
556  case CreateEvent:
557  action = new KAction(d->mParentWidget);
558  action->setIcon(KIcon(QLatin1String("appointment-new")));
559  action->setText(i18n("New E&vent..."));
560  action->setWhatsThis(i18n("Create a new event"));
561  d->mActions.insert(CreateEvent, action);
562  d->mActionCollection->addAction(QString::fromLatin1("akonadi_event_create"), action);
563  connect(action, SIGNAL(triggered(bool)), this, SLOT(slotCreateEvent()));
564  break;
565  case CreateTodo:
566  action = new KAction(d->mParentWidget);
567  action->setIcon(KIcon(QLatin1String("task-new")));
568  action->setText(i18n("New &To-do..."));
569  action->setWhatsThis(i18n("Create a new To-do"));
570  d->mActions.insert(CreateTodo, action);
571  d->mActionCollection->addAction(QString::fromLatin1("akonadi_todo_create"), action);
572  connect(action, SIGNAL(triggered(bool)), this, SLOT(slotCreateTodo()));
573  break;
574  case CreateSubTodo:
575  action = new KAction(d->mParentWidget);
576  action->setIcon(KIcon(QLatin1String("new_subtodo")));
577  action->setText(i18n("New Su&b-to-do..."));
578  action->setWhatsThis(i18n("Create a new Sub-to-do"));
579  d->mActions.insert(CreateSubTodo, action);
580  d->mActionCollection->addAction(QString::fromLatin1("akonadi_subtodo_create"), action);
581  connect(action, SIGNAL(triggered(bool)), this, SLOT(slotCreateSubTodo()));
582  break;
583  case CreateJournal:
584  action = new KAction(d->mParentWidget);
585  action->setIcon(KIcon(QLatin1String("journal-new")));
586  action->setText(i18n("New &Journal..."));
587  action->setWhatsThis(i18n("Create a new Journal"));
588  d->mActions.insert(CreateJournal, action);
589  d->mActionCollection->addAction(QString::fromLatin1("akonadi_journal_create"), action);
590  connect(action, SIGNAL(triggered(bool)), this, SLOT(slotCreateJournal()));
591  break;
592  case EditIncidence:
593  action = new KAction(d->mParentWidget);
594  action->setText(i18n("&Edit..."));
595  action->setWhatsThis(i18n("Edit the selected incidence."));
596  d->mActions.insert(EditIncidence, action);
597  d->mActionCollection->addAction(QString::fromLatin1("akonadi_incidence_edit"), action);
598  connect(action, SIGNAL(triggered(bool)), this, SLOT(slotEditIncidence()));
599  break;
600  default:
601  Q_ASSERT(false); // should never happen
602  break;
603  }
604 
605  return action;
606 }
607 
608 KAction* StandardCalendarActionManager::createAction(StandardActionManager::Type type)
609 {
610  KAction *act = d->mGenericManager->action(type);
611  if (!act)
612  act = d->mGenericManager->createAction(type);
613  d->updateGenericAction(type);
614  return act;
615 }
616 
617 void StandardCalendarActionManager::createAllActions()
618 {
619  createAction(CreateEvent);
620  createAction(CreateTodo);
621  createAction(CreateSubTodo);
622  createAction(CreateJournal);
623  createAction(EditIncidence);
624 
625  d->mGenericManager->createAllActions();
626  d->updateGenericAllActions();
627  d->updateActions();
628 }
629 
630 KAction* StandardCalendarActionManager::action(StandardCalendarActionManager::Type type) const
631 {
632  if (d->mActions.contains(type)) {
633  return d->mActions.value(type);
634  }
635 
636  return 0;
637 }
638 
639 KAction* StandardCalendarActionManager::action(StandardActionManager::Type type) const
640 {
641  return d->mGenericManager->action(type);
642 }
643 
644 void StandardCalendarActionManager::setActionText(StandardActionManager::Type type, const KLocalizedString &text)
645 {
646  d->mGenericManager->setActionText(type, text);
647 }
648 
649 void StandardCalendarActionManager::interceptAction(StandardCalendarActionManager::Type type, bool intercept)
650 {
651  if (intercept) {
652  d->mInterceptedActions.insert(type);
653  } else {
654  d->mInterceptedActions.remove(type);
655  }
656 }
657 
658 void StandardCalendarActionManager::interceptAction(StandardActionManager::Type type, bool intercept)
659 {
660  d->mGenericManager->interceptAction(type, intercept);
661 }
662 
663 Akonadi::Collection::List StandardCalendarActionManager::selectedCollections() const
664 {
665  return d->mGenericManager->selectedCollections();
666 }
667 
668 Akonadi::Item::List StandardCalendarActionManager::selectedItems() const
669 {
670  return d->mGenericManager->selectedItems();
671 }
672 
673 void StandardCalendarActionManager::setContextText(StandardActionManager::Type type, StandardActionManager::TextContext context, const QString &text)
674 {
675  d->mGenericManager->setContextText(type, context, text);
676 }
677 
678 void StandardCalendarActionManager::setContextText(StandardActionManager::Type type, StandardActionManager::TextContext context, const KLocalizedString &text)
679 {
680  d->mGenericManager->setContextText(type, context, text);
681 }
682 
683 void StandardCalendarActionManager::setCollectionPropertiesPageNames(const QStringList &names)
684 {
685  d->mGenericManager->setCollectionPropertiesPageNames(names);
686 }
687 
688 #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
Akonadi::StandardActionManager::MoveToTrashRestoreItemAlternative
Helper type for MoveToTrashRestoreItem, do not create directly. Use this to override texts of the res...
Definition: standardactionmanager.h:169
Akonadi::StandardActionManager::MoveItemToMenu
Menu allowing to move item into a collection.
Definition: standardactionmanager.h:148
Akonadi::StandardCalendarActionManager::CreateSubTodo
Creates a new sub-todo.
Definition: standardcalendaractionmanager.h:59
Akonadi::StandardActionManager::CreateCollection
Creates an collection.
Definition: standardactionmanager.h:134
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:649
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:668
Akonadi::StandardActionManager::CutItems
Cuts the selected items.
Definition: standardactionmanager.h:150
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:673
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:617
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:644
Akonadi::StandardCalendarActionManager::~StandardCalendarActionManager
~StandardCalendarActionManager()
Destroys the standard calendar action manager.
Definition: standardcalendaractionmanager.cpp:518
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:523
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:548
Akonadi::StandardActionManager::CollectionProperties
Provides collection properties.
Definition: standardactionmanager.h:138
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:512
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:630
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
Akonadi::EntityTreeModel::CollectionRole
The collection.
Definition: entitytreemodel.h:335
Akonadi::EntityTreeModel::ParentCollectionRole
The parent collection of the entity.
Definition: entitytreemodel.h:340
Akonadi::StandardCalendarActionManager::setItemSelectionModel
void setItemSelectionModel(QItemSelectionModel *selectionModel)
Sets the item selection model based on which the item related actions should operate.
Definition: standardcalendaractionmanager.cpp:537
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:663
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
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
Akonadi::StandardActionManager::DeleteResources
Deletes the selected resources.
Definition: standardactionmanager.h:153
Akonadi::EntityTreeModel::MimeTypeRole
The mimetype of the entity.
Definition: entitytreemodel.h:332
Akonadi::StandardCalendarActionManager::Type
Type
Describes the supported actions.
Definition: standardcalendaractionmanager.h:56
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
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
Akonadi::StandardActionManager::MoveToTrashRestoreCollection
Move Collection to Trash or Restore it from Trash, needs EntityDeletedAttribute.
Definition: standardactionmanager.h:166
Akonadi::StandardActionManager::ManageLocalSubscriptions
Manages local subscriptions.
Definition: standardactionmanager.h:142
Akonadi::Collection::List
QList< Collection > List
Describes a list of collections.
Definition: collection.h:81
Akonadi::StandardActionManager::ErrorMessageText
The text of an error message.
Definition: standardactionmanager.h:184
Akonadi::StandardActionManager::DeleteItems
Deletes the selected items.
Definition: standardactionmanager.h:141
Akonadi::StandardActionManager::DeleteCollections
Deletes the selected collections.
Definition: standardactionmanager.h:136
Akonadi::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-2014 The KDE developers.
Generated on Tue Oct 14 2014 23:00:28 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
  • kldap
  • kmbox
  • kmime
  • kpimidentities
  • kpimtextedit
  • kresources
  • ktnef
  • kxmlrpcclient
  • microblog

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