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

akonadi

  • 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 
290  static bool hasWritableCollection(const QModelIndex &index, const QString &mimeType)
291  {
292  const Akonadi::Collection collection =
293  index.data(Akonadi::EntityTreeModel::CollectionRole).value<Akonadi::Collection>();
294  if (collection.isValid()) {
295  if (collection.contentMimeTypes().contains(mimeType) &&
296  (collection.rights() & Akonadi::Collection::CanCreateItem)) {
297  return true;
298  }
299  }
300 
301  const QAbstractItemModel *model = index.model();
302  if (!model) {
303  return false;
304  }
305 
306  for (int row = 0; row < model->rowCount(index); ++row) {
307  if (hasWritableCollection(model->index(row, 0, index), mimeType)) {
308  return true;
309  }
310  }
311 
312  return false;
313  }
314 
315  bool hasWritableCollection(const QString &mimeType) const
316  {
317  if (!mCollectionSelectionModel) {
318  return false;
319  }
320 
321  const QAbstractItemModel *collectionModel = mCollectionSelectionModel->model();
322  for (int row = 0; row < collectionModel->rowCount(); ++row) {
323  if (hasWritableCollection(collectionModel->index(row, 0, QModelIndex()), mimeType)) {
324  return true;
325  }
326  }
327 
328  return false;
329  }
330 
331  void updateActions()
332  {
333  if (!mItemSelectionModel) {
334  return;
335  }
336 
337  // update action labels
338  const int itemCount = mItemSelectionModel->selectedRows().count();
339  if (itemCount == 1) {
340  const QModelIndex index = mItemSelectionModel->selectedRows().first();
341  if (index.isValid()) {
342  const QString mimeType = index.data(EntityTreeModel::MimeTypeRole).toString();
343  if (mimeType == KCalCore::Event::eventMimeType()) {
344  if (mGenericManager->action(Akonadi::StandardActionManager::CopyItems)) {
345  mGenericManager->setActionText(Akonadi::StandardActionManager::CopyItems,
346  ki18np("Copy Event", "Copy %1 Events"));
347  }
348  if (mGenericManager->action(Akonadi::StandardActionManager::CopyItemToMenu)) {
349  mGenericManager->action(Akonadi::StandardActionManager::CopyItemToMenu)->setText(i18n("Copy Event To"));
350  }
351  if (mGenericManager->action(Akonadi::StandardActionManager::CopyItemToDialog)) {
352  mGenericManager->action(Akonadi::StandardActionManager::CopyItemToDialog)->setText(i18n("Copy Event To"));
353  }
354  if (mGenericManager->action(Akonadi::StandardActionManager::DeleteItems)) {
355  mGenericManager->setActionText(Akonadi::StandardActionManager::DeleteItems,
356  ki18np("Delete Event", "Delete %1 Events"));
357  }
358  if (mGenericManager->action(Akonadi::StandardActionManager::CutItems)) {
359  mGenericManager->setActionText(Akonadi::StandardActionManager::CutItems,
360  ki18np("Cut Event", "Cut %1 Events"));
361  }
362  if (mGenericManager->action(Akonadi::StandardActionManager::MoveItemToMenu)) {
363  mGenericManager->action(Akonadi::StandardActionManager::MoveItemToMenu)->setText(i18n("Move Event To"));
364  }
365  if (mGenericManager->action(Akonadi::StandardActionManager::MoveItemToDialog)) {
366  mGenericManager->action(Akonadi::StandardActionManager::MoveItemToDialog)->setText(i18n("Move Event To"));
367  }
368  if (mActions.contains(StandardCalendarActionManager::EditIncidence)) {
369  mActions.value(StandardCalendarActionManager::EditIncidence)->setText(i18n("Edit Event..."));
370  }
371  } else if (mimeType == KCalCore::Todo::todoMimeType()) {
372  if (mGenericManager->action(Akonadi::StandardActionManager::CopyItems)) {
373  mGenericManager->setActionText(Akonadi::StandardActionManager::CopyItems,
374  ki18np("Copy To-do", "Copy %1 To-dos"));
375  }
376  if (mGenericManager->action(Akonadi::StandardActionManager::CopyItemToMenu)) {
377  mGenericManager->action(Akonadi::StandardActionManager::CopyItemToMenu)->setText(i18n("Copy To-do To"));
378  }
379  if (mGenericManager->action(Akonadi::StandardActionManager::CopyItemToDialog)) {
380  mGenericManager->action(Akonadi::StandardActionManager::CopyItemToDialog)->setText(i18n("Copy To-do To"));
381  }
382  if (mGenericManager->action(Akonadi::StandardActionManager::DeleteItems)) {
383  mGenericManager->setActionText(Akonadi::StandardActionManager::DeleteItems,
384  ki18np("Delete To-do", "Delete %1 To-dos"));
385  }
386  if (mGenericManager->action(Akonadi::StandardActionManager::CutItems)) {
387  mGenericManager->setActionText(Akonadi::StandardActionManager::CutItems,
388  ki18np("Cut To-do", "Cut %1 To-dos"));
389  }
390  if (mGenericManager->action(Akonadi::StandardActionManager::MoveItemToMenu)) {
391  mGenericManager->action(Akonadi::StandardActionManager::MoveItemToMenu)->setText(i18n("Move To-do To"));
392  }
393  if (mGenericManager->action(Akonadi::StandardActionManager::MoveItemToDialog)) {
394  mGenericManager->action(Akonadi::StandardActionManager::MoveItemToDialog)->setText(i18n("Move To-do To"));
395  }
396  if (mActions.contains(StandardCalendarActionManager::EditIncidence)) {
397  mActions.value(StandardCalendarActionManager::EditIncidence)->setText(i18n("Edit To-do..."));
398  }
399  } else if (mimeType == KCalCore::Journal::journalMimeType()) {
400  if (mGenericManager->action(Akonadi::StandardActionManager::CopyItems)) {
401  mGenericManager->setActionText(Akonadi::StandardActionManager::CopyItems,
402  ki18np("Copy Journal", "Copy %1 Journals"));
403  }
404  if (mGenericManager->action(Akonadi::StandardActionManager::CopyItemToMenu)) {
405  mGenericManager->action(Akonadi::StandardActionManager::CopyItemToMenu)->setText(i18n("Copy Journal To"));
406  }
407  if (mGenericManager->action(Akonadi::StandardActionManager::CopyItemToDialog)) {
408  mGenericManager->action(Akonadi::StandardActionManager::CopyItemToDialog)->setText(i18n("Copy Journal To"));
409  }
410  if (mGenericManager->action(Akonadi::StandardActionManager::DeleteItems)) {
411  mGenericManager->setActionText(Akonadi::StandardActionManager::DeleteItems,
412  ki18np("Delete Journal", "Delete %1 Journals"));
413  }
414  if (mGenericManager->action(Akonadi::StandardActionManager::CutItems)) {
415  mGenericManager->setActionText(Akonadi::StandardActionManager::CutItems,
416  ki18np("Cut Journal", "Cut %1 Journals"));
417  }
418  if (mGenericManager->action(Akonadi::StandardActionManager::MoveItemToMenu)) {
419  mGenericManager->action(Akonadi::StandardActionManager::MoveItemToMenu)->setText(i18n("Move Journal To"));
420  }
421  if (mGenericManager->action(Akonadi::StandardActionManager::MoveItemToDialog)) {
422  mGenericManager->action(Akonadi::StandardActionManager::MoveItemToDialog)->setText(i18n("Move Journal To"));
423  }
424  if (mActions.contains(StandardCalendarActionManager::EditIncidence)) {
425  mActions.value(StandardCalendarActionManager::EditIncidence)->setText(i18n("Edit Journal..."));
426  }
427  }
428  }
429  }
430 
431  // update action states
432  if (mActions.contains(StandardCalendarActionManager::CreateEvent)) {
433  mActions[ StandardCalendarActionManager::CreateEvent ]->setEnabled(hasWritableCollection(KCalCore::Event::eventMimeType()));
434  }
435  if (mActions.contains(StandardCalendarActionManager::CreateTodo)) {
436  mActions[ StandardCalendarActionManager::CreateTodo ]->setEnabled(hasWritableCollection(KCalCore::Todo::todoMimeType()));
437  }
438  if (mActions.contains(StandardCalendarActionManager::CreateJournal)) {
439  mActions[ StandardCalendarActionManager::CreateJournal ]->setEnabled(hasWritableCollection(KCalCore::Journal::journalMimeType()));
440  }
441 
442  if (mActions.contains(StandardCalendarActionManager::EditIncidence)) {
443  bool canEditItem = true;
444 
445  // only one selected item can be edited
446  canEditItem = canEditItem && (itemCount == 1);
447 
448  // check whether parent collection allows changing the item
449  const QModelIndexList rows = mItemSelectionModel->selectedRows();
450  if (rows.count() == 1) {
451  const QModelIndex index = rows.first();
452  const Collection parentCollection = index.data(EntityTreeModel::ParentCollectionRole).value<Collection>();
453  if (parentCollection.isValid()) {
454  canEditItem = canEditItem && (parentCollection.rights() & Collection::CanChangeItem);
455  }
456  }
457 
458  mActions.value(StandardCalendarActionManager::EditIncidence)->setEnabled(canEditItem);
459  }
460 
461  if (mActions.contains(StandardCalendarActionManager::CreateSubTodo)) {
462  mActions[ StandardCalendarActionManager::CreateSubTodo ]->setEnabled(false);
463  }
464 
465  if (itemCount == 1) {
466  const Akonadi::Item item = mGenericManager->selectedItems().first();
467 
468  if (item.isValid() && item.hasPayload<KCalCore::Todo::Ptr>()) {
469  if (mActions.contains(StandardCalendarActionManager::CreateSubTodo)) {
470  mActions[ StandardCalendarActionManager::CreateSubTodo ]->setEnabled(hasWritableCollection(KCalCore::Todo::todoMimeType()));
471  }
472  }
473  }
474 
475  emit mParent->actionStateUpdated();
476  }
477 
478  void slotCreateEvent()
479  {
480  // dummy as long as there are no editors available in kdepimlibs/
481  }
482 
483  void slotCreateTodo()
484  {
485  // dummy as long as there are no editors available in kdepimlibs/
486  }
487 
488  void slotCreateSubTodo()
489  {
490  // dummy as long as there are no editors available in kdepimlibs/
491  }
492 
493  void slotCreateJournal()
494  {
495  // dummy as long as there are no editors available in kdepimlibs/
496  }
497 
498  void slotEditIncidence()
499  {
500  // dummy as long as there are no editors available in kdepimlibs/
501  }
502 
503  KActionCollection *mActionCollection;
504  QWidget *mParentWidget;
505  StandardActionManager *mGenericManager;
506  QItemSelectionModel *mCollectionSelectionModel;
507  QItemSelectionModel *mItemSelectionModel;
508  QHash<StandardCalendarActionManager::Type, KAction*> mActions;
509  QSet<StandardCalendarActionManager::Type> mInterceptedActions;
510  StandardCalendarActionManager *mParent;
511 };
512 
513 
514 Akonadi::StandardCalendarActionManager::StandardCalendarActionManager(KActionCollection *actionCollection, QWidget *parent)
515  : QObject(parent),
516  d(new Private(actionCollection, parent, this))
517 {
518 }
519 
520 StandardCalendarActionManager::~StandardCalendarActionManager()
521 {
522  delete d;
523 }
524 
525 void StandardCalendarActionManager::setCollectionSelectionModel(QItemSelectionModel *selectionModel)
526 {
527  d->mCollectionSelectionModel = selectionModel;
528  d->mGenericManager->setCollectionSelectionModel(selectionModel);
529 
530  connect(selectionModel->model(), SIGNAL(rowsInserted(QModelIndex,int,int)),
531  SLOT(updateActions()));
532  connect(selectionModel->model(), SIGNAL(rowsRemoved(QModelIndex,int,int)),
533  SLOT(updateActions()));
534  connect(selectionModel, SIGNAL(selectionChanged(QItemSelection,QItemSelection)),
535  SLOT(updateActions()));
536  d->updateActions();
537 }
538 
539 void StandardCalendarActionManager::setItemSelectionModel(QItemSelectionModel *selectionModel)
540 {
541  d->mItemSelectionModel = selectionModel;
542  d->mGenericManager->setItemSelectionModel(selectionModel);
543 
544  connect(selectionModel, SIGNAL(selectionChanged(QItemSelection,QItemSelection)),
545  SLOT(updateActions()));
546 
547  d->updateActions();
548 }
549 
550 KAction* StandardCalendarActionManager::createAction(StandardCalendarActionManager::Type type)
551 {
552  if (d->mActions.contains(type)) {
553  return d->mActions.value(type);
554  }
555 
556  KAction *action = 0;
557  switch (type) {
558  case CreateEvent:
559  action = new KAction(d->mParentWidget);
560  action->setIcon(KIcon(QLatin1String("appointment-new")));
561  action->setText(i18n("New E&vent..."));
562  action->setWhatsThis(i18n("Create a new event"));
563  d->mActions.insert(CreateEvent, action);
564  d->mActionCollection->addAction(QString::fromLatin1("akonadi_event_create"), action);
565  connect(action, SIGNAL(triggered(bool)), this, SLOT(slotCreateEvent()));
566  break;
567  case CreateTodo:
568  action = new KAction(d->mParentWidget);
569  action->setIcon(KIcon(QLatin1String("task-new")));
570  action->setText(i18n("New &To-do..."));
571  action->setWhatsThis(i18n("Create a new To-do"));
572  d->mActions.insert(CreateTodo, action);
573  d->mActionCollection->addAction(QString::fromLatin1("akonadi_todo_create"), action);
574  connect(action, SIGNAL(triggered(bool)), this, SLOT(slotCreateTodo()));
575  break;
576  case CreateSubTodo:
577  action = new KAction(d->mParentWidget);
578  action->setIcon(KIcon(QLatin1String("new_subtodo")));
579  action->setText(i18n("New Su&b-to-do..."));
580  action->setWhatsThis(i18n("Create a new Sub-to-do"));
581  d->mActions.insert(CreateSubTodo, action);
582  d->mActionCollection->addAction(QString::fromLatin1("akonadi_subtodo_create"), action);
583  connect(action, SIGNAL(triggered(bool)), this, SLOT(slotCreateSubTodo()));
584  break;
585  case CreateJournal:
586  action = new KAction(d->mParentWidget);
587  action->setIcon(KIcon(QLatin1String("journal-new")));
588  action->setText(i18n("New &Journal..."));
589  action->setWhatsThis(i18n("Create a new Journal"));
590  d->mActions.insert(CreateJournal, action);
591  d->mActionCollection->addAction(QString::fromLatin1("akonadi_journal_create"), action);
592  connect(action, SIGNAL(triggered(bool)), this, SLOT(slotCreateJournal()));
593  break;
594  case EditIncidence:
595  action = new KAction(d->mParentWidget);
596  action->setText(i18n("&Edit..."));
597  action->setWhatsThis(i18n("Edit the selected incidence."));
598  d->mActions.insert(EditIncidence, action);
599  d->mActionCollection->addAction(QString::fromLatin1("akonadi_incidence_edit"), action);
600  connect(action, SIGNAL(triggered(bool)), this, SLOT(slotEditIncidence()));
601  break;
602  default:
603  Q_ASSERT(false); // should never happen
604  break;
605  }
606 
607  return action;
608 }
609 
610 KAction* StandardCalendarActionManager::createAction(StandardActionManager::Type type)
611 {
612  KAction *act = d->mGenericManager->action(type);
613  if (!act)
614  act = d->mGenericManager->createAction(type);
615  d->updateGenericAction(type);
616  return act;
617 }
618 
619 void StandardCalendarActionManager::createAllActions()
620 {
621  createAction(CreateEvent);
622  createAction(CreateTodo);
623  createAction(CreateSubTodo);
624  createAction(CreateJournal);
625  createAction(EditIncidence);
626 
627  d->mGenericManager->createAllActions();
628  d->updateGenericAllActions();
629  d->updateActions();
630 }
631 
632 KAction* StandardCalendarActionManager::action(StandardCalendarActionManager::Type type) const
633 {
634  if (d->mActions.contains(type)) {
635  return d->mActions.value(type);
636  }
637 
638  return 0;
639 }
640 
641 KAction* StandardCalendarActionManager::action(StandardActionManager::Type type) const
642 {
643  return d->mGenericManager->action(type);
644 }
645 
646 void StandardCalendarActionManager::setActionText(StandardActionManager::Type type, const KLocalizedString &text)
647 {
648  d->mGenericManager->setActionText(type, text);
649 }
650 
651 void StandardCalendarActionManager::interceptAction(StandardCalendarActionManager::Type type, bool intercept)
652 {
653  if (intercept) {
654  d->mInterceptedActions.insert(type);
655  } else {
656  d->mInterceptedActions.remove(type);
657  }
658 }
659 
660 void StandardCalendarActionManager::interceptAction(StandardActionManager::Type type, bool intercept)
661 {
662  d->mGenericManager->interceptAction(type, intercept);
663 }
664 
665 Akonadi::Collection::List StandardCalendarActionManager::selectedCollections() const
666 {
667  return d->mGenericManager->selectedCollections();
668 }
669 
670 Akonadi::Item::List StandardCalendarActionManager::selectedItems() const
671 {
672  return d->mGenericManager->selectedItems();
673 }
674 
675 void StandardCalendarActionManager::setContextText(StandardActionManager::Type type, StandardActionManager::TextContext context, const QString &text)
676 {
677  d->mGenericManager->setContextText(type, context, text);
678 }
679 
680 void StandardCalendarActionManager::setContextText(StandardActionManager::Type type, StandardActionManager::TextContext context, const KLocalizedString &text)
681 {
682  d->mGenericManager->setContextText(type, context, text);
683 }
684 
685 void StandardCalendarActionManager::setCollectionPropertiesPageNames(const QStringList &names)
686 {
687  d->mGenericManager->setCollectionPropertiesPageNames(names);
688 }
689 
690 #include "moc_standardcalendaractionmanager.cpp"
This file is part of the KDE documentation.
Documentation copyright © 1996-2014 The KDE developers.
Generated on Fri Jan 17 2014 22:12:30 by doxygen 1.8.3.1 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.

akonadi

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

kdepimlibs-4.11.5 API Reference

Skip menu "kdepimlibs-4.11.5 API Reference"
  • akonadi
  •   contact
  •   kmime
  •   socialutils
  • kabc
  • kalarmcal
  • kblog
  • kcal
  • kcalcore
  • kcalutils
  • kholidays
  • kimap
  • kioslave
  •   imap4
  •   mbox
  •   nntp
  • kldap
  • kmbox
  • kmime
  • kontactinterface
  • kpimidentities
  • kpimtextedit
  • kpimutils
  • kresources
  • ktnef
  • kxmlrpcclient
  • mailtransport
  • microblog
  • qgpgme
  • syndication
  •   atom
  •   rdf
  •   rss2
Report problems with this website to our bug tracking system.
Contact the specific authors with questions and comments about the page contents.

KDE® and the K Desktop Environment® logo are registered trademarks of KDE e.V. | Legal