• Skip to content
  • Skip to link menu
  • KDE API Reference
  • kdepimlibs-4.11.3 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"
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:651
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:670
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:675
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:619
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:646
Akonadi::StandardCalendarActionManager::~StandardCalendarActionManager
~StandardCalendarActionManager()
Destroys the standard calendar action manager.
Definition: standardcalendaractionmanager.cpp:520
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:525
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:550
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:514
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:632
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:539
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:665
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-2013 The KDE developers.
Generated on Tue Nov 26 2013 09:03:19 by doxygen 1.8.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.11.3 API Reference

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