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

akonadi

  • sources
  • kde-4.12
  • kdepimlibs
  • akonadi
  • contact
standardcontactactionmanager.cpp
1 /*
2  This file is part of Akonadi Contact.
3 
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 "standardcontactactionmanager.h"
23 
24 #include "contacteditordialog.h"
25 #include "contactgroupeditordialog.h"
26 
27 #include <akonadi/entitytreemodel.h>
28 #include <akonadi/mimetypechecker.h>
29 #include <kabc/addressee.h>
30 #include <kabc/contactgroup.h>
31 #include <kicon.h>
32 #include <kaction.h>
33 #include <kactioncollection.h>
34 #include <klocalizedstring.h>
35 #include <kmessagebox.h>
36 
37 #include <QtCore/QPointer>
38 #include <QItemSelectionModel>
39 
40 using namespace Akonadi;
41 
42 class StandardContactActionManager::Private
43 {
44  public:
45  Private( KActionCollection *actionCollection, QWidget *parentWidget, StandardContactActionManager *parent )
46  : mActionCollection( actionCollection ), mParentWidget( parentWidget ),
47  mCollectionSelectionModel( 0 ), mItemSelectionModel( 0 ), mParent( parent )
48  {
49  mGenericManager = new StandardActionManager( actionCollection, parentWidget );
50  mParent->connect( mGenericManager, SIGNAL(actionStateUpdated()),
51  mParent, SIGNAL(actionStateUpdated()) );
52 
53  mGenericManager->setMimeTypeFilter(
54  QStringList() << KABC::Addressee::mimeType() << KABC::ContactGroup::mimeType() );
55 
56  mGenericManager->setCapabilityFilter( QStringList() << QLatin1String( "Resource" ) );
57  }
58 
59  ~Private()
60  {
61  delete mGenericManager;
62  }
63 
64  void updateGenericAllActions()
65  {
66  updateGenericAction(StandardActionManager::CreateCollection);
67  updateGenericAction(StandardActionManager::CopyCollections);
68  updateGenericAction(StandardActionManager::DeleteCollections);
69  updateGenericAction(StandardActionManager::SynchronizeCollections);
70  updateGenericAction(StandardActionManager::CollectionProperties);
71  updateGenericAction(StandardActionManager::CopyItems);
72  updateGenericAction(StandardActionManager::Paste);
73  updateGenericAction(StandardActionManager::DeleteItems);
74  updateGenericAction(StandardActionManager::ManageLocalSubscriptions);
75  updateGenericAction(StandardActionManager::AddToFavoriteCollections);
76  updateGenericAction(StandardActionManager::RemoveFromFavoriteCollections);
77  updateGenericAction(StandardActionManager::RenameFavoriteCollection);
78  updateGenericAction(StandardActionManager::CopyCollectionToMenu);
79  updateGenericAction(StandardActionManager::CopyItemToMenu);
80  updateGenericAction(StandardActionManager::MoveItemToMenu);
81  updateGenericAction(StandardActionManager::MoveCollectionToMenu);
82  updateGenericAction(StandardActionManager::CutItems);
83  updateGenericAction(StandardActionManager::CutCollections);
84  updateGenericAction(StandardActionManager::CreateResource);
85  updateGenericAction(StandardActionManager::DeleteResources);
86  updateGenericAction(StandardActionManager::ResourceProperties);
87  updateGenericAction(StandardActionManager::SynchronizeResources);
88  updateGenericAction(StandardActionManager::ToggleWorkOffline);
89  updateGenericAction(StandardActionManager::CopyCollectionToDialog);
90  updateGenericAction(StandardActionManager::MoveCollectionToDialog);
91  updateGenericAction(StandardActionManager::CopyItemToDialog);
92  updateGenericAction(StandardActionManager::MoveItemToDialog);
93  updateGenericAction(StandardActionManager::SynchronizeCollectionsRecursive);
94  updateGenericAction(StandardActionManager::MoveCollectionsToTrash);
95  updateGenericAction(StandardActionManager::MoveItemsToTrash);
96  updateGenericAction(StandardActionManager::RestoreCollectionsFromTrash);
97  updateGenericAction(StandardActionManager::RestoreItemsFromTrash);
98  updateGenericAction(StandardActionManager::MoveToTrashRestoreCollection);
99  updateGenericAction(StandardActionManager::MoveToTrashRestoreCollectionAlternative);
100  updateGenericAction(StandardActionManager::MoveToTrashRestoreItem);
101  updateGenericAction(StandardActionManager::MoveToTrashRestoreItemAlternative);
102  updateGenericAction(StandardActionManager::SynchronizeFavoriteCollections);
103 
104  }
105 
106  void updateGenericAction(StandardActionManager::Type type)
107  {
108  switch(type) {
109  case Akonadi::StandardActionManager::CreateCollection:
110  mGenericManager->action( Akonadi::StandardActionManager::CreateCollection )->setText(
111  i18n( "Add Address Book Folder..." ) );
112 
113  mGenericManager->action( Akonadi::StandardActionManager::CreateCollection )->setWhatsThis(
114  i18n( "Add a new address book folder to the currently selected address book folder." ) );
115  mGenericManager->setContextText(
116  StandardActionManager::CreateCollection, StandardActionManager::DialogTitle,
117  i18nc( "@title:window", "New Address Book Folder" ) );
118 
119  mGenericManager->setContextText(
120  StandardActionManager::CreateCollection, StandardActionManager::ErrorMessageText,
121  ki18n( "Could not create address book folder: %1" ) );
122 
123  mGenericManager->setContextText(
124  StandardActionManager::CreateCollection, StandardActionManager::ErrorMessageTitle,
125  i18n( "Address book folder creation failed" ) );
126 
127  break;
128  case Akonadi::StandardActionManager::CopyCollections:
129  mGenericManager->setActionText( Akonadi::StandardActionManager::CopyCollections,
130  ki18np( "Copy Address Book Folder",
131  "Copy %1 Address Book Folders" ) );
132  mGenericManager->action( Akonadi::StandardActionManager::CopyCollections )->setWhatsThis(
133  i18n( "Copy the selected address book folders to the clipboard." ) );
134  break;
135  case Akonadi::StandardActionManager::DeleteCollections:
136  mGenericManager->setActionText( Akonadi::StandardActionManager::DeleteCollections,
137  ki18np( "Delete Address Book Folder",
138  "Delete %1 Address Book Folders" ) );
139  mGenericManager->action( Akonadi::StandardActionManager::DeleteCollections )->setWhatsThis(
140  i18n( "Delete the selected address book folders from the address book." ) );
141 
142  mGenericManager->setContextText(
143  StandardActionManager::DeleteCollections, StandardActionManager::MessageBoxText,
144  ki18np( "Do you really want to delete this address book folder and all its sub-folders?",
145  "Do you really want to delete %1 address book folders and all their sub-folders?" ) );
146  mGenericManager->setContextText(
147  StandardActionManager::DeleteCollections, StandardActionManager::MessageBoxTitle,
148  ki18ncp( "@title:window", "Delete address book folder?", "Delete address book folders?" ) );
149 
150  mGenericManager->setContextText(
151  StandardActionManager::DeleteCollections, StandardActionManager::ErrorMessageText,
152  ki18n( "Could not delete address book folder: %1" ) );
153 
154  mGenericManager->setContextText(
155  StandardActionManager::DeleteCollections, StandardActionManager::ErrorMessageTitle,
156  i18n( "Address book folder deletion failed" ) );
157  break;
158  case Akonadi::StandardActionManager::SynchronizeCollections:
159  mGenericManager->setActionText( Akonadi::StandardActionManager::SynchronizeCollections,
160  ki18np( "Update Address Book Folder",
161  "Update %1 Address Book Folders" ) );
162  mGenericManager->action( Akonadi::StandardActionManager::SynchronizeCollections )->setWhatsThis(
163  i18n( "Update the content of the selected address book folders." ) );
164  break;
165  case Akonadi::StandardActionManager::CutCollections:
166  mGenericManager->setActionText( Akonadi::StandardActionManager::CutCollections,
167  ki18np( "Cut Address Book Folder",
168  "Cut %1 Address Book Folders" ) );
169  mGenericManager->action( Akonadi::StandardActionManager::CutCollections )->setWhatsThis(
170  i18n( "Cut the selected address book folders from the address book." ) );
171  break;
172  case Akonadi::StandardActionManager::CollectionProperties:
173  mGenericManager->action( Akonadi::StandardActionManager::CollectionProperties )->setText(
174  i18n( "Folder Properties..." ) );
175  mGenericManager->action( Akonadi::StandardActionManager::CollectionProperties )->setWhatsThis(
176  i18n( "Open a dialog to edit the properties of the selected address book folder." ) );
177  mGenericManager->setContextText(
178  StandardActionManager::CollectionProperties, StandardActionManager::DialogTitle,
179  ki18nc( "@title:window", "Properties of Address Book Folder %1" ) );
180  break;
181  case Akonadi::StandardActionManager::CopyItems:
182  mGenericManager->setActionText( Akonadi::StandardActionManager::CopyItems,
183  ki18np( "Copy Contact", "Copy %1 Contacts" ) );
184  mGenericManager->action( Akonadi::StandardActionManager::CopyItems )->setWhatsThis(
185  i18n( "Copy the selected contacts to the clipboard." ) );
186  break;
187  case Akonadi::StandardActionManager::DeleteItems:
188  mGenericManager->setActionText( Akonadi::StandardActionManager::DeleteItems,
189  ki18np( "Delete Contact", "Delete %1 Contacts" ) );
190  mGenericManager->action( Akonadi::StandardActionManager::DeleteItems )->setWhatsThis(
191  i18n( "Delete the selected contacts from the address book." ) );
192  mGenericManager->setContextText(
193  StandardActionManager::DeleteItems, StandardActionManager::MessageBoxText,
194  ki18np( "Do you really want to delete the selected contact?",
195  "Do you really want to delete %1 contacts?" ) );
196 
197  mGenericManager->setContextText(
198  StandardActionManager::DeleteItems, StandardActionManager::MessageBoxTitle,
199  ki18ncp( "@title:window", "Delete Contact?", "Delete Contacts?" ) );
200 
201  mGenericManager->setContextText(
202  StandardActionManager::DeleteItems, StandardActionManager::ErrorMessageText,
203  ki18n( "Could not delete contact: %1" ) );
204 
205  mGenericManager->setContextText(
206  StandardActionManager::DeleteItems, StandardActionManager::ErrorMessageTitle,
207  i18n( "Contact deletion failed" ) );
208  break;
209  case Akonadi::StandardActionManager::CutItems:
210  mGenericManager->setActionText( Akonadi::StandardActionManager::CutItems,
211  ki18np( "Cut Contact", "Cut %1 Contacts" ) );
212  mGenericManager->action( Akonadi::StandardActionManager::CutItems )->setWhatsThis(
213  i18n( "Cut the selected contacts from the address book." ) );
214  break;
215  case Akonadi::StandardActionManager::CreateResource:
216  mGenericManager->action( Akonadi::StandardActionManager::CreateResource )->setText(
217  i18n( "Add &Address Book..." ) );
218  mGenericManager->action( Akonadi::StandardActionManager::CreateResource )->setWhatsThis(
219  i18n( "Add a new address book<p>"
220  "You will be presented with a dialog where you can select "
221  "the type of the address book that shall be added.</p>" ) );
222  mGenericManager->setContextText(
223  StandardActionManager::CreateResource, StandardActionManager::DialogTitle,
224  i18nc( "@title:window", "Add Address Book" ) );
225 
226  mGenericManager->setContextText(
227  StandardActionManager::CreateResource, StandardActionManager::ErrorMessageText,
228  ki18n( "Could not create address book: %1" ) );
229 
230  mGenericManager->setContextText(
231  StandardActionManager::CreateResource, StandardActionManager::ErrorMessageTitle,
232  i18n( "Address book creation failed" ) );
233  break;
234  case Akonadi::StandardActionManager::DeleteResources:
235 
236  mGenericManager->setActionText( Akonadi::StandardActionManager::DeleteResources,
237  ki18np( "&Delete Address Book",
238  "&Delete %1 Address Books" ) );
239  mGenericManager->action( Akonadi::StandardActionManager::DeleteResources )->setWhatsThis(
240  i18n( "Delete the selected address books<p>"
241  "The currently selected address books will be deleted, "
242  "along with all the contacts and contact groups they contain.</p>" ) );
243  mGenericManager->setContextText(
244  StandardActionManager::DeleteResources, StandardActionManager::MessageBoxText,
245  ki18np( "Do you really want to delete this address book?",
246  "Do you really want to delete %1 address books?" ) );
247 
248  mGenericManager->setContextText(
249  StandardActionManager::DeleteResources, StandardActionManager::MessageBoxTitle,
250  ki18ncp( "@title:window", "Delete Address Book?", "Delete Address Books?" ) );
251 
252  break;
253  case Akonadi::StandardActionManager::ResourceProperties:
254 
255  mGenericManager->action( Akonadi::StandardActionManager::ResourceProperties )->setText(
256  i18n( "Address Book Properties..." ) );
257  mGenericManager->action( Akonadi::StandardActionManager::ResourceProperties )->setWhatsThis(
258  i18n( "Open a dialog to edit properties of the selected address book." ) );
259  break;
260  case Akonadi::StandardActionManager::SynchronizeResources:
261  mGenericManager->setActionText( Akonadi::StandardActionManager::SynchronizeResources,
262  ki18np( "Update Address Book",
263  "Update %1 Address Books" ) );
264 
265  mGenericManager->action( Akonadi::StandardActionManager::SynchronizeResources )->setWhatsThis
266  ( i18n( "Updates the content of all folders of the selected address books." ) );
267 
268  break;
269  case StandardActionManager::Paste:
270  mGenericManager->setContextText(
271  StandardActionManager::Paste, StandardActionManager::ErrorMessageText,
272  ki18n( "Could not paste contact: %1" ) );
273 
274  mGenericManager->setContextText(
275  StandardActionManager::Paste, StandardActionManager::ErrorMessageTitle,
276  i18n( "Paste failed" ) );
277  break;
278  default:
279  break;
280  }
281 
282  }
283 
284  static bool hasWritableCollection( const QModelIndex &index, const QString &mimeType )
285  {
286  const Akonadi::Collection collection =
287  index.data( Akonadi::EntityTreeModel::CollectionRole ).value<Akonadi::Collection>();
288  if ( collection.isValid() ) {
289  if ( collection.contentMimeTypes().contains( mimeType ) &&
290  ( collection.rights() & Akonadi::Collection::CanCreateItem ) ) {
291  return true;
292  }
293  }
294 
295  const QAbstractItemModel *model = index.model();
296  if ( !model ) {
297  return false;
298  }
299 
300  for ( int row = 0; row < model->rowCount( index ); ++row ) {
301  if ( hasWritableCollection( model->index( row, 0, index ), mimeType ) ) {
302  return true;
303  }
304  }
305 
306  return false;
307  }
308 
309  bool hasWritableCollection( const QString &mimeType ) const
310  {
311  if ( !mCollectionSelectionModel ) {
312  return false;
313  }
314 
315  const QAbstractItemModel *collectionModel = mCollectionSelectionModel->model();
316  for ( int row = 0; row < collectionModel->rowCount(); ++row ) {
317  if ( hasWritableCollection( collectionModel->index( row, 0, QModelIndex() ), mimeType ) ) {
318  return true;
319  }
320  }
321 
322  return false;
323  }
324 
325  void updateActions()
326  {
327  int itemCount = 0;
328  if ( mItemSelectionModel ) {
329  itemCount = mItemSelectionModel->selectedRows().count();
330  if ( itemCount == 1 ) {
331  const QModelIndex index = mItemSelectionModel->selectedRows().first();
332  if ( index.isValid() ) {
333  const QString mimeType = index.data( EntityTreeModel::MimeTypeRole ).toString();
334  if ( mimeType == KABC::Addressee::mimeType() ) {
335  if (mGenericManager->action( Akonadi::StandardActionManager::CopyItems )) {
336  mGenericManager->setActionText( Akonadi::StandardActionManager::CopyItems,
337  ki18np( "Copy Contact", "Copy %1 Contacts" ) );
338  }
339  if (mGenericManager->action( Akonadi::StandardActionManager::CopyItemToMenu )) {
340  mGenericManager->action( Akonadi::StandardActionManager::CopyItemToMenu )->setText( i18n( "Copy Contact To" ) );
341  }
342  if (mGenericManager->action( Akonadi::StandardActionManager::CopyItemToDialog)) {
343  mGenericManager->action( Akonadi::StandardActionManager::CopyItemToDialog )->setText( i18n( "Copy Contact To" ) );
344  }
345  if (mGenericManager->action( Akonadi::StandardActionManager::DeleteItems)) {
346  mGenericManager->setActionText( Akonadi::StandardActionManager::DeleteItems,
347  ki18np( "Delete Contact", "Delete %1 Contacts" ) );
348  }
349  if (mGenericManager->action( Akonadi::StandardActionManager::CutItems)) {
350  mGenericManager->setActionText( Akonadi::StandardActionManager::CutItems,
351  ki18np( "Cut Contact", "Cut %1 Contacts" ) );
352  }
353  if (mGenericManager->action( Akonadi::StandardActionManager::MoveItemToMenu)) {
354  mGenericManager->action( Akonadi::StandardActionManager::MoveItemToMenu )->setText( i18n( "Move Contact To" ) );
355  }
356  if (mGenericManager->action( Akonadi::StandardActionManager::MoveItemToDialog )) {
357  mGenericManager->action( Akonadi::StandardActionManager::MoveItemToDialog )->setText( i18n( "Move Contact To" ) );
358  }
359  if ( mActions.contains( StandardContactActionManager::EditItem ) ) {
360  mActions.value( StandardContactActionManager::EditItem )->setText( i18n( "Edit Contact..." ) );
361  }
362  } else if ( mimeType == KABC::ContactGroup::mimeType() ) {
363  if (mGenericManager->action( Akonadi::StandardActionManager::CopyItems )) {
364  mGenericManager->setActionText( Akonadi::StandardActionManager::CopyItems,
365  ki18np( "Copy Group", "Copy %1 Groups" ) );
366  }
367  if (mGenericManager->action( Akonadi::StandardActionManager::CopyItemToMenu)) {
368  mGenericManager->action( Akonadi::StandardActionManager::CopyItemToMenu )->setText( i18n( "Copy Group To" ) );
369  }
370  if (mGenericManager->action( Akonadi::StandardActionManager::CopyItemToDialog )) {
371  mGenericManager->action( Akonadi::StandardActionManager::CopyItemToDialog )->setText( i18n( "Copy Group To" ) );
372  }
373  if (mGenericManager->action( Akonadi::StandardActionManager::DeleteItems)) {
374  mGenericManager->setActionText( Akonadi::StandardActionManager::DeleteItems,
375  ki18np( "Delete Group", "Delete %1 Groups" ) );
376  }
377  if (mGenericManager->action( Akonadi::StandardActionManager::CutItems)) {
378  mGenericManager->setActionText( Akonadi::StandardActionManager::CutItems,
379  ki18np( "Cut Group", "Cut %1 Groups" ) );
380  }
381  if (mGenericManager->action( Akonadi::StandardActionManager::MoveItemToMenu )) {
382  mGenericManager->action( Akonadi::StandardActionManager::MoveItemToMenu )->setText( i18n( "Move Group To" ) );
383  }
384  if (mGenericManager->action( Akonadi::StandardActionManager::MoveItemToDialog )) {
385  mGenericManager->action( Akonadi::StandardActionManager::MoveItemToDialog )->setText( i18n( "Move Group To" ) );
386  }
387  if ( mActions.contains( StandardContactActionManager::EditItem ) ) {
388  mActions.value( StandardContactActionManager::EditItem )->setText( i18n( "Edit Group..." ) );
389  }
390  }
391  }
392  }
393  }
394 
395  if ( mActions.contains( StandardContactActionManager::CreateContact ) ) {
396  mActions[ StandardContactActionManager::CreateContact ]->setEnabled( hasWritableCollection( KABC::Addressee::mimeType() ) );
397  }
398  if ( mActions.contains( StandardContactActionManager::CreateContactGroup ) ) {
399  mActions[ StandardContactActionManager::CreateContactGroup ]->setEnabled( hasWritableCollection( KABC::ContactGroup::mimeType() ) );
400  }
401 
402  if ( mActions.contains( StandardContactActionManager::EditItem ) ) {
403  bool canEditItem = true;
404 
405  // only one selected item can be edited
406  canEditItem = canEditItem && ( itemCount == 1 );
407 
408  // check whether parent collection allows changing the item
409  const QModelIndexList rows = mItemSelectionModel->selectedRows();
410  if ( rows.count() == 1 ) {
411  const QModelIndex index = rows.first();
412  const Collection parentCollection = index.data( EntityTreeModel::ParentCollectionRole ).value<Collection>();
413  if ( parentCollection.isValid() ) {
414  canEditItem = canEditItem && ( parentCollection.rights() & Collection::CanChangeItem );
415  }
416  }
417 
418  mActions.value( StandardContactActionManager::EditItem )->setEnabled( canEditItem );
419  }
420 
421  emit mParent->actionStateUpdated();
422  }
423 
424  Collection selectedCollection() const
425  {
426  if ( !mCollectionSelectionModel ) {
427  return Collection();
428  }
429 
430  if ( mCollectionSelectionModel->selectedIndexes().isEmpty() ) {
431  return Collection();
432  }
433 
434  const QModelIndex index = mCollectionSelectionModel->selectedIndexes().first();
435  if ( !index.isValid() ) {
436  return Collection();
437  }
438 
439  return index.data( EntityTreeModel::CollectionRole ).value<Collection>();
440  }
441 
442  void slotCreateContact()
443  {
444  if ( mInterceptedActions.contains( StandardContactActionManager::CreateContact ) ) {
445  return;
446  }
447 
448  QPointer<Akonadi::ContactEditorDialog> dlg =
449  new Akonadi::ContactEditorDialog(
450  Akonadi::ContactEditorDialog::CreateMode, mParentWidget );
451  dlg->setDefaultAddressBook( selectedCollection() );
452  dlg->exec();
453  delete dlg;
454  }
455 
456  void slotCreateContactGroup()
457  {
458  if ( mInterceptedActions.contains( StandardContactActionManager::CreateContactGroup ) ) {
459  return;
460  }
461 
462  QPointer<Akonadi::ContactGroupEditorDialog> dlg =
463  new Akonadi::ContactGroupEditorDialog(
464  Akonadi::ContactGroupEditorDialog::CreateMode, mParentWidget );
465  dlg->setDefaultAddressBook( selectedCollection() );
466  dlg->exec();
467  delete dlg;
468  }
469 
470  void slotEditItem()
471  {
472  if ( mInterceptedActions.contains( StandardContactActionManager::EditItem ) ) {
473  return;
474  }
475 
476  if ( !mItemSelectionModel ) {
477  return;
478  }
479 
480  if ( mItemSelectionModel->selectedIndexes().isEmpty() ) {
481  return;
482  }
483 
484  const QModelIndex index = mItemSelectionModel->selectedIndexes().first();
485  if ( !index.isValid() ) {
486  return;
487  }
488 
489  const Item item = index.data( EntityTreeModel::ItemRole ).value<Item>();
490  if ( !item.isValid() ) {
491  return;
492  }
493 
494  if ( Akonadi::MimeTypeChecker::isWantedItem( item, KABC::Addressee::mimeType() ) ) {
495  QPointer<Akonadi::ContactEditorDialog> dlg =
496  new Akonadi::ContactEditorDialog(
497  Akonadi::ContactEditorDialog::EditMode, mParentWidget );
498  connect( dlg, SIGNAL(error(QString)),
499  mParent, SLOT(slotContactEditorError(QString)) );
500  dlg->setContact( item );
501  dlg->exec();
502  delete dlg;
503  } else if ( Akonadi::MimeTypeChecker::isWantedItem( item, KABC::ContactGroup::mimeType() ) ) {
504  QPointer<Akonadi::ContactGroupEditorDialog> dlg =
505  new Akonadi::ContactGroupEditorDialog(
506  Akonadi::ContactGroupEditorDialog::EditMode, mParentWidget );
507  dlg->setContactGroup( item );
508  dlg->exec();
509  delete dlg;
510  }
511  }
512 
513  void slotContactEditorError(const QString& error)
514  {
515  KMessageBox::error(mParentWidget, i18n("Contact cannot be stored: %1", error), i18n("Failed to store contact"));
516  }
517 
518  KActionCollection *mActionCollection;
519  QWidget *mParentWidget;
520  StandardActionManager *mGenericManager;
521  QItemSelectionModel *mCollectionSelectionModel;
522  QItemSelectionModel *mItemSelectionModel;
523  QHash<StandardContactActionManager::Type, KAction*> mActions;
524  QSet<StandardContactActionManager::Type> mInterceptedActions;
525  StandardContactActionManager *mParent;
526 };
527 
528 StandardContactActionManager::StandardContactActionManager( KActionCollection *actionCollection, QWidget *parent )
529  : QObject( parent ), d( new Private( actionCollection, parent, this ) )
530 {
531 }
532 
533 StandardContactActionManager::~StandardContactActionManager()
534 {
535  delete d;
536 }
537 
538 void StandardContactActionManager::setCollectionSelectionModel( QItemSelectionModel *selectionModel )
539 {
540  d->mCollectionSelectionModel = selectionModel;
541  d->mGenericManager->setCollectionSelectionModel( selectionModel );
542 
543  connect( selectionModel->model(), SIGNAL(rowsInserted(QModelIndex,int,int)),
544  SLOT(updateActions()) );
545  connect( selectionModel->model(), SIGNAL(rowsRemoved(QModelIndex,int,int)),
546  SLOT(updateActions()) );
547  connect( selectionModel, SIGNAL(selectionChanged(QItemSelection,QItemSelection)),
548  SLOT(updateActions()) );
549 
550  d->updateActions();
551 }
552 
553 void StandardContactActionManager::setItemSelectionModel( QItemSelectionModel* selectionModel )
554 {
555  d->mItemSelectionModel = selectionModel;
556  d->mGenericManager->setItemSelectionModel( selectionModel );
557 
558  connect( selectionModel, SIGNAL(selectionChanged(QItemSelection,QItemSelection)),
559  SLOT(updateActions()) );
560 
561  d->updateActions();
562 }
563 
564 KAction* StandardContactActionManager::createAction( Type type )
565 {
566  if ( d->mActions.contains( type ) ) {
567  return d->mActions.value( type );
568  }
569 
570  KAction *action = 0;
571 
572  switch ( type ) {
573  case CreateContact:
574  action = new KAction( d->mParentWidget );
575  action->setIcon( KIcon( QLatin1String( "contact-new" ) ) );
576  action->setText( i18n( "New &Contact..." ) );
577  action->setShortcut( QKeySequence( Qt::CTRL + Qt::Key_N ) );
578  action->setWhatsThis( i18n( "Create a new contact<p>You will be presented with a dialog where you can add data about a person, including addresses and phone numbers.</p>" ) );
579  d->mActions.insert( CreateContact, action );
580  d->mActionCollection->addAction( QString::fromLatin1( "akonadi_contact_create" ), action );
581  connect( action, SIGNAL(triggered(bool)), this, SLOT(slotCreateContact()) );
582  break;
583  case CreateContactGroup:
584  action = new KAction( d->mParentWidget );
585  action->setIcon( KIcon( QLatin1String( "user-group-new" ) ) );
586  action->setText( i18n( "New &Group..." ) );
587  action->setShortcut( QKeySequence( Qt::CTRL + Qt::Key_G ) );
588  action->setWhatsThis( i18n( "Create a new group<p>You will be presented with a dialog where you can add a new group of contacts.</p>" ) );
589  d->mActions.insert( CreateContactGroup, action );
590  d->mActionCollection->addAction( QString::fromLatin1( "akonadi_contact_group_create" ), action );
591  connect( action, SIGNAL(triggered(bool)), this, SLOT(slotCreateContactGroup()) );
592  break;
593  case EditItem:
594  action = new KAction( d->mParentWidget );
595  action->setIcon( KIcon( QLatin1String( "document-edit" ) ) );
596  action->setText( i18n( "Edit Contact..." ) );
597  action->setWhatsThis( i18n( "Edit the selected contact<p>You will be presented with a dialog where you can edit the data stored about a person, including addresses and phone numbers.</p>" ) );
598  action->setEnabled( false );
599  d->mActions.insert( EditItem, action );
600  d->mActionCollection->addAction( QString::fromLatin1( "akonadi_contact_item_edit" ), action );
601  connect( action, SIGNAL(triggered(bool)), this, SLOT(slotEditItem()) );
602  break;
603  default:
604  Q_ASSERT( false ); // should never happen
605  break;
606  }
607 
608  return action;
609 }
610 
611 KAction* StandardContactActionManager::createAction( StandardActionManager::Type type )
612 {
613  KAction *act = d->mGenericManager->action(type);
614  if (!act )
615  act = d->mGenericManager->createAction( type );
616  d->updateGenericAction(type);
617  return act;
618 }
619 
620 void StandardContactActionManager::createAllActions()
621 {
622  createAction( CreateContact );
623  createAction( CreateContactGroup );
624  createAction( EditItem );
625 
626  d->mGenericManager->createAllActions();
627  d->updateGenericAllActions();
628 
629  d->updateActions();
630 }
631 
632 KAction* StandardContactActionManager::action( 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* StandardContactActionManager::action( StandardActionManager::Type type ) const
642 {
643  return d->mGenericManager->action( type );
644 }
645 
646 void StandardContactActionManager::setActionText( StandardActionManager::Type type, const KLocalizedString &text )
647 {
648  d->mGenericManager->setActionText( type, text );
649 }
650 
651 void StandardContactActionManager::interceptAction( 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 StandardContactActionManager::interceptAction( StandardActionManager::Type type, bool intercept )
661 {
662  d->mGenericManager->interceptAction( type, intercept );
663 }
664 
665 Akonadi::Collection::List StandardContactActionManager::selectedCollections() const
666 {
667  return d->mGenericManager->selectedCollections();
668 }
669 
670 Akonadi::Item::List StandardContactActionManager::selectedItems() const
671 {
672  return d->mGenericManager->selectedItems();
673 }
674 
675 void StandardContactActionManager::setCollectionPropertiesPageNames( const QStringList &names )
676 {
677  d->mGenericManager->setCollectionPropertiesPageNames( names );
678 }
679 #include "moc_standardcontactactionmanager.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::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::StandardContactActionManager::CreateContact
Creates a new contact.
Definition: standardcontactactionmanager.h:55
Akonadi::ContactEditorDialog
A dialog for creating or editing a contact in Akonadi.
Definition: contacteditordialog.h:77
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::StandardContactActionManager::setCollectionSelectionModel
void setCollectionSelectionModel(QItemSelectionModel *selectionModel)
Sets the collection selection model based on which the collection related actions should operate...
Definition: standardcontactactionmanager.cpp:538
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::StandardContactActionManager::StandardContactActionManager
StandardContactActionManager(KActionCollection *actionCollection, QWidget *parent=0)
Creates a new standard contact action manager.
Definition: standardcontactactionmanager.cpp:528
Akonadi::StandardActionManager::CopyCollectionToDialog
Copy a collection into another collection, select the target in a dialog.
Definition: standardactionmanager.h:157
Akonadi::StandardContactActionManager::CreateContactGroup
Creates a new contact group.
Definition: standardcontactactionmanager.h:56
Akonadi::Collection
Represents a collection of PIM items.
Definition: collection.h:75
Akonadi::ContactEditorDialog::EditMode
Edits an existing contact.
Definition: contacteditordialog.h:87
Akonadi::StandardActionManager::ResourceProperties
Provides the resource properties.
Definition: standardactionmanager.h:154
Akonadi::StandardActionManager::CutItems
Cuts the selected items.
Definition: standardactionmanager.h:150
Akonadi::StandardContactActionManager::createAllActions
void createAllActions()
Convenience method to create all standard actions.
Definition: standardcontactactionmanager.cpp:620
Akonadi::StandardContactActionManager::~StandardContactActionManager
~StandardContactActionManager()
Destroys the standard contact action manager.
Definition: standardcontactactionmanager.cpp:533
Akonadi::Collection::CanChangeItem
Can change items in this collection.
Definition: collection.h:88
Akonadi::StandardContactActionManager::setCollectionPropertiesPageNames
void setCollectionPropertiesPageNames(const QStringList &names)
Definition: standardcontactactionmanager.cpp:675
Akonadi::StandardActionManager::RestoreItemsFromTrash
Restores the selected items from trash, needs EntityDeletedAttribute.
Definition: standardactionmanager.h:165
Akonadi::StandardContactActionManager::action
KAction * action(Type type) const
Returns the action of the given type, 0 if it has not been created (yet).
Definition: standardcontactactionmanager.cpp:632
Akonadi::StandardActionManager::ToggleWorkOffline
Toggles the work offline state of all resources.
Definition: standardactionmanager.h:156
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::StandardContactActionManager::selectedItems
Akonadi::Item::List selectedItems() const
Returns the list of items that are currently selected.
Definition: standardcontactactionmanager.cpp:670
Akonadi::StandardContactActionManager::EditItem
Edits the selected contact resp. contact group.
Definition: standardcontactactionmanager.h:57
Akonadi::StandardActionManager::CollectionProperties
Provides collection properties.
Definition: standardactionmanager.h:138
Akonadi::StandardContactActionManager::actionStateUpdated
void actionStateUpdated()
This signal is emitted whenever the action state has been updated.
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::StandardActionManager::AddToFavoriteCollections
Add the collection to the favorite collections model.
Definition: standardactionmanager.h:143
Akonadi::StandardContactActionManager::createAction
KAction * createAction(Type type)
Creates the action of the given type and adds it to the action collection specified in the constructo...
Definition: standardcontactactionmanager.cpp:564
Akonadi::StandardActionManager::MessageBoxTitle
The window title of a message box.
Definition: standardactionmanager.h:180
Akonadi::Collection::CanCreateItem
Can create new items in this collection.
Definition: collection.h:89
Akonadi::StandardActionManager::SynchronizeCollectionsRecursive
Synchronizes collections in a recursive way.
Definition: standardactionmanager.h:161
Akonadi::StandardActionManager::CopyCollectionToMenu
Menu allowing to quickly copy a collection into another collection.
Definition: standardactionmanager.h:146
Akonadi::StandardContactActionManager::selectedCollections
Akonadi::Collection::List selectedCollections() const
Returns the list of collections that are currently selected.
Definition: standardcontactactionmanager.cpp:665
Akonadi::EntityTreeModel::CollectionRole
The collection.
Definition: entitytreemodel.h:335
Akonadi::EntityTreeModel::ParentCollectionRole
The parent collection of the entity.
Definition: entitytreemodel.h:340
Akonadi::ContactGroupEditorDialog
A dialog for creating or editing a contact group in Akonadi.
Definition: contactgroupeditordialog.h:75
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::StandardActionManager::DialogTitle
The window title of a dialog.
Definition: standardactionmanager.h:178
Akonadi::StandardContactActionManager::setItemSelectionModel
void setItemSelectionModel(QItemSelectionModel *selectionModel)
Sets the item selection model based on which the item related actions should operate.
Definition: standardcontactactionmanager.cpp:553
Akonadi::StandardActionManager::CopyItemToMenu
Menu allowing to quickly copy an item into a collection.
Definition: standardactionmanager.h:147
Akonadi::StandardContactActionManager
Manages contact specific actions for collection and item views.
Definition: standardcontactactionmanager.h:46
Akonadi::StandardActionManager::SynchronizeResources
Synchronizes the selected resources.
Definition: standardactionmanager.h:155
Akonadi::StandardActionManager::DeleteResources
Deletes the selected resources.
Definition: standardactionmanager.h:153
Akonadi::ContactEditorDialog::CreateMode
Creates a new contact.
Definition: contacteditordialog.h:86
Akonadi::ContactGroupEditorDialog::EditMode
Edits an existing contact group.
Definition: contactgroupeditordialog.h:85
Akonadi::EntityTreeModel::MimeTypeRole
The mimetype of the entity.
Definition: entitytreemodel.h:332
Akonadi::EntityTreeModel::ItemRole
The Item.
Definition: entitytreemodel.h:331
Akonadi::StandardActionManager::CopyCollections
Copies the selected collections.
Definition: standardactionmanager.h:135
Akonadi::MimeTypeChecker::isWantedItem
bool isWantedItem(const Item &item) const
Checks whether a given item has one of the wanted MIME types.
Definition: mimetypechecker.cpp:71
Akonadi::ContactGroupEditorDialog::CreateMode
Creates a new contact group.
Definition: contactgroupeditordialog.h:84
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::StandardContactActionManager::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: standardcontactactionmanager.cpp:651
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::StandardContactActionManager::Type
Type
Describes the supported actions.
Definition: standardcontactactionmanager.h:54
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::StandardContactActionManager::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: standardcontactactionmanager.cpp:646
Akonadi::StandardActionManager::DeleteItems
Deletes the selected items.
Definition: standardactionmanager.h:141
Akonadi::StandardActionManager::DeleteCollections
Deletes the selected collections.
Definition: standardactionmanager.h:136
Akonadi::StandardActionManager::MoveCollectionToMenu
Menu allowing to move a collection into another collection.
Definition: standardactionmanager.h:149
Akonadi::StandardActionManager::RenameFavoriteCollection
Rename the collection of the favorite collections model.
Definition: standardactionmanager.h:145
Akonadi::StandardActionManager::SynchronizeFavoriteCollections
Synchronize favorite collections.
Definition: standardactionmanager.h:170
This file is part of the KDE documentation.
Documentation copyright © 1996-2014 The KDE developers.
Generated on Tue Oct 14 2014 23:00:28 by doxygen 1.8.7 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.

akonadi

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

kdepimlibs API Reference

Skip menu "kdepimlibs API Reference"
  • akonadi
  •   contact
  •   kmime
  •   socialutils
  • kabc
  • kalarmcal
  • kblog
  • kcal
  • kcalcore
  • kcalutils
  • kholidays
  • kimap
  • kldap
  • kmbox
  • kmime
  • kpimidentities
  • kpimtextedit
  • kresources
  • ktnef
  • kxmlrpcclient
  • microblog

Search



Report problems with this website to our bug tracking system.
Contact the specific authors with questions and comments about the page contents.

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