• Skip to content
  • Skip to link menu
  • KDE API Reference
  • kdepimlibs-4.14.10 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
38using namespace Akonadi;
39
40class StandardCalendarActionManager::Private
41{
42public:
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
517Akonadi::StandardCalendarActionManager::StandardCalendarActionManager(KActionCollection *actionCollection, QWidget *parent)
518 : QObject(parent),
519 d(new Private(actionCollection, parent, this))
520{
521}
522
523StandardCalendarActionManager::~StandardCalendarActionManager()
524{
525 delete d;
526}
527
528void 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
542void 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
553KAction* 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
613KAction* 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
622void 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
635KAction* 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
644KAction* StandardCalendarActionManager::action(StandardActionManager::Type type) const
645{
646 return d->mGenericManager->action(type);
647}
648
649void StandardCalendarActionManager::setActionText(StandardActionManager::Type type, const KLocalizedString &text)
650{
651 d->mGenericManager->setActionText(type, text);
652}
653
654void 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
663void StandardCalendarActionManager::interceptAction(StandardActionManager::Type type, bool intercept)
664{
665 d->mGenericManager->interceptAction(type, intercept);
666}
667
668Akonadi::Collection::List StandardCalendarActionManager::selectedCollections() const
669{
670 return d->mGenericManager->selectedCollections();
671}
672
673Akonadi::Item::List StandardCalendarActionManager::selectedItems() const
674{
675 return d->mGenericManager->selectedItems();
676}
677
678void StandardCalendarActionManager::setContextText(StandardActionManager::Type type, StandardActionManager::TextContext context, const QString &text)
679{
680 d->mGenericManager->setContextText(type, context, text);
681}
682
683void StandardCalendarActionManager::setContextText(StandardActionManager::Type type, StandardActionManager::TextContext context, const KLocalizedString &text)
684{
685 d->mGenericManager->setContextText(type, context, text);
686}
687
688void StandardCalendarActionManager::setCollectionPropertiesPageNames(const QStringList &names)
689{
690 d->mGenericManager->setCollectionPropertiesPageNames(names);
691}
692
693#include "moc_standardcalendaractionmanager.cpp"
Akonadi::Collection
Represents a collection of PIM items.
Definition: collection.h:76
Akonadi::Collection::rights
Rights rights() const
Returns the rights the user has on the collection.
Definition: collection.cpp:99
Akonadi::Collection::List
QList< Collection > List
Describes a list of collections.
Definition: collection.h:81
Akonadi::Collection::setEnabled
void setEnabled(bool enabled)
Sets the collection's enabled state.
Definition: collection.cpp:273
Akonadi::Collection::CanCreateItem
@ CanCreateItem
Can create new items in this collection.
Definition: collection.h:89
Akonadi::Collection::CanChangeItem
@ CanChangeItem
Can change items in this collection.
Definition: collection.h:88
Akonadi::EntityTreeModel::ParentCollectionRole
@ ParentCollectionRole
The parent collection of the entity.
Definition: entitytreemodel.h:341
Akonadi::EntityTreeModel::CollectionRole
@ CollectionRole
The collection.
Definition: entitytreemodel.h:336
Akonadi::EntityTreeModel::MimeTypeRole
@ MimeTypeRole
The mimetype of the entity.
Definition: entitytreemodel.h:333
Akonadi::Entity::isValid
bool isValid() const
Returns whether the entity is valid.
Definition: entity.cpp:97
Akonadi::StandardActionManager
Manages generic actions for collection and item views.
Definition: standardactionmanager.h:127
Akonadi::StandardActionManager::Type
Type
Describes the supported actions.
Definition: standardactionmanager.h:133
Akonadi::StandardActionManager::CreateResource
@ CreateResource
Creates a new resource.
Definition: standardactionmanager.h:152
Akonadi::StandardActionManager::CreateCollection
@ CreateCollection
Creates an collection.
Definition: standardactionmanager.h:134
Akonadi::StandardActionManager::MoveToTrashRestoreItem
@ MoveToTrashRestoreItem
Move Item to Trash or Restore it from Trash, needs EntityDeletedAttribute.
Definition: standardactionmanager.h:168
Akonadi::StandardActionManager::SynchronizeResources
@ SynchronizeResources
Synchronizes the selected resources.
Definition: standardactionmanager.h:155
Akonadi::StandardActionManager::RemoveFromFavoriteCollections
@ RemoveFromFavoriteCollections
Remove the collection from the favorite collections model.
Definition: standardactionmanager.h:144
Akonadi::StandardActionManager::DeleteItems
@ DeleteItems
Deletes the selected items.
Definition: standardactionmanager.h:141
Akonadi::StandardActionManager::CopyCollectionToDialog
@ CopyCollectionToDialog
Copy a collection into another collection, select the target in a dialog.
Definition: standardactionmanager.h:157
Akonadi::StandardActionManager::SynchronizeCollections
@ SynchronizeCollections
Synchronizes collections.
Definition: standardactionmanager.h:137
Akonadi::StandardActionManager::MoveCollectionToDialog
@ MoveCollectionToDialog
Move a collection into another collection, select the target in a dialog.
Definition: standardactionmanager.h:158
Akonadi::StandardActionManager::CopyItemToMenu
@ CopyItemToMenu
Menu allowing to quickly copy an item into a collection.
Definition: standardactionmanager.h:147
Akonadi::StandardActionManager::RenameFavoriteCollection
@ RenameFavoriteCollection
Rename the collection of the favorite collections model.
Definition: standardactionmanager.h:145
Akonadi::StandardActionManager::SynchronizeFavoriteCollections
@ SynchronizeFavoriteCollections
Synchronize favorite collections.
Definition: standardactionmanager.h:170
Akonadi::StandardActionManager::ResourceProperties
@ ResourceProperties
Provides the resource properties.
Definition: standardactionmanager.h:154
Akonadi::StandardActionManager::CutItems
@ CutItems
Cuts the selected items.
Definition: standardactionmanager.h:150
Akonadi::StandardActionManager::DeleteCollections
@ DeleteCollections
Deletes the selected collections.
Definition: standardactionmanager.h:136
Akonadi::StandardActionManager::MoveToTrashRestoreCollection
@ MoveToTrashRestoreCollection
Move Collection to Trash or Restore it from Trash, needs EntityDeletedAttribute.
Definition: standardactionmanager.h:166
Akonadi::StandardActionManager::ToggleWorkOffline
@ ToggleWorkOffline
Toggles the work offline state of all resources.
Definition: standardactionmanager.h:156
Akonadi::StandardActionManager::ManageLocalSubscriptions
@ ManageLocalSubscriptions
Manages local subscriptions.
Definition: standardactionmanager.h:142
Akonadi::StandardActionManager::CutCollections
@ CutCollections
Cuts the selected collections.
Definition: standardactionmanager.h:151
Akonadi::StandardActionManager::CopyCollectionToMenu
@ CopyCollectionToMenu
Menu allowing to quickly copy a collection into another collection.
Definition: standardactionmanager.h:146
Akonadi::StandardActionManager::MoveItemToMenu
@ MoveItemToMenu
Menu allowing to move item into a collection.
Definition: standardactionmanager.h:148
Akonadi::StandardActionManager::AddToFavoriteCollections
@ AddToFavoriteCollections
Add the collection to the favorite collections model.
Definition: standardactionmanager.h:143
Akonadi::StandardActionManager::SynchronizeCollectionsRecursive
@ SynchronizeCollectionsRecursive
Synchronizes collections in a recursive way.
Definition: standardactionmanager.h:161
Akonadi::StandardActionManager::MoveItemsToTrash
@ MoveItemsToTrash
Moves the selected items to trash and marks them as deleted, needs EntityDeletedAttribute.
Definition: standardactionmanager.h:163
Akonadi::StandardActionManager::CopyCollections
@ CopyCollections
Copies the selected collections.
Definition: standardactionmanager.h:135
Akonadi::StandardActionManager::Paste
@ Paste
Paste collections or items.
Definition: standardactionmanager.h:140
Akonadi::StandardActionManager::CollectionProperties
@ CollectionProperties
Provides collection properties.
Definition: standardactionmanager.h:138
Akonadi::StandardActionManager::MoveToTrashRestoreCollectionAlternative
@ MoveToTrashRestoreCollectionAlternative
Helper type for MoveToTrashRestoreCollection, do not create directly. Use this to override texts of t...
Definition: standardactionmanager.h:167
Akonadi::StandardActionManager::DeleteResources
@ DeleteResources
Deletes the selected resources.
Definition: standardactionmanager.h:153
Akonadi::StandardActionManager::RestoreItemsFromTrash
@ RestoreItemsFromTrash
Restores the selected items from trash, needs EntityDeletedAttribute.
Definition: standardactionmanager.h:165
Akonadi::StandardActionManager::MoveToTrashRestoreItemAlternative
@ MoveToTrashRestoreItemAlternative
Helper type for MoveToTrashRestoreItem, do not create directly. Use this to override texts of the res...
Definition: standardactionmanager.h:169
Akonadi::StandardActionManager::RestoreCollectionsFromTrash
@ RestoreCollectionsFromTrash
Restores the selected collection from trash, needs EntityDeletedAttribute.
Definition: standardactionmanager.h:164
Akonadi::StandardActionManager::CopyItems
@ CopyItems
Copies the selected items.
Definition: standardactionmanager.h:139
Akonadi::StandardActionManager::MoveCollectionToMenu
@ MoveCollectionToMenu
Menu allowing to move a collection into another collection.
Definition: standardactionmanager.h:149
Akonadi::StandardActionManager::MoveItemToDialog
@ MoveItemToDialog
Move an item into a collection, select the target in a dialog.
Definition: standardactionmanager.h:160
Akonadi::StandardActionManager::CopyItemToDialog
@ CopyItemToDialog
Copy an item into a collection, select the target in a dialog.
Definition: standardactionmanager.h:159
Akonadi::StandardActionManager::MoveCollectionsToTrash
@ MoveCollectionsToTrash
Moves the selected collection to trash and marks it as deleted, needs EntityDeletedAttribute.
Definition: standardactionmanager.h:162
Akonadi::StandardActionManager::TextContext
TextContext
Describes the text context that can be customized.
Definition: standardactionmanager.h:177
Akonadi::StandardActionManager::MessageBoxText
@ MessageBoxText
The text of a message box.
Definition: standardactionmanager.h:181
Akonadi::StandardActionManager::ErrorMessageText
@ ErrorMessageText
The text of an error message.
Definition: standardactionmanager.h:184
Akonadi::StandardActionManager::MessageBoxTitle
@ MessageBoxTitle
The window title of a message box.
Definition: standardactionmanager.h:180
Akonadi::StandardActionManager::DialogTitle
@ DialogTitle
The window title of a dialog.
Definition: standardactionmanager.h:178
Akonadi::StandardActionManager::ErrorMessageTitle
@ ErrorMessageTitle
The window title of an error message.
Definition: standardactionmanager.h:183
Akonadi::StandardCalendarActionManager
Manages calendar specific actions for collection and item views.
Definition: standardcalendaractionmanager.h:50
Akonadi::StandardCalendarActionManager::createAllActions
void createAllActions()
Convenience method to create all standard actions.
Definition: standardcalendaractionmanager.cpp:622
Akonadi::StandardCalendarActionManager::actionStateUpdated
void actionStateUpdated()
This signal is emitted whenever the action state has been updated.
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::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::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::StandardCalendarActionManager::~StandardCalendarActionManager
~StandardCalendarActionManager()
Destroys the standard calendar action manager.
Definition: standardcalendaractionmanager.cpp:523
Akonadi::StandardCalendarActionManager::StandardCalendarActionManager
StandardCalendarActionManager(KActionCollection *actionCollection, QWidget *parent=0)
Creates a new standard calendar action manager.
Definition: standardcalendaractionmanager.cpp:517
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
Akonadi::StandardCalendarActionManager::selectedCollections
Akonadi::Collection::List selectedCollections() const
Returns the list of collections that are currently selected.
Definition: standardcalendaractionmanager.cpp:668
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::selectedItems
Akonadi::Item::List selectedItems() const
Returns the list of items that are currently selected.
Definition: standardcalendaractionmanager.cpp:673
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::StandardCalendarActionManager::Type
Type
Describes the supported actions.
Definition: standardcalendaractionmanager.h:56
Akonadi::StandardCalendarActionManager::CreateTodo
@ CreateTodo
Creates a new todo.
Definition: standardcalendaractionmanager.h:58
Akonadi::StandardCalendarActionManager::CreateEvent
@ CreateEvent
Creates a new event.
Definition: standardcalendaractionmanager.h:57
Akonadi::StandardCalendarActionManager::CreateJournal
@ CreateJournal
Creates a new journal.
Definition: standardcalendaractionmanager.h:60
Akonadi::StandardCalendarActionManager::EditIncidence
@ EditIncidence
Edit currently selected event/todo/journal.
Definition: standardcalendaractionmanager.h:61
Akonadi::StandardCalendarActionManager::CreateSubTodo
@ CreateSubTodo
Creates a new sub-todo.
Definition: standardcalendaractionmanager.h:59
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
Akonadi
FreeBusyManager::Singleton.
Definition: actionstatemanager_p.h:28
This file is part of the KDE documentation.
Documentation copyright © 1996-2022 The KDE developers.
Generated on Thu Jul 21 2022 00:00:00 by doxygen 1.9.5 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.

akonadi

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

kdepimlibs-4.14.10 API Reference

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