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

akonadi

  • 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 
155  mGenericManager->setContextText(
156  StandardActionManager::DeleteCollections, StandardActionManager::ErrorMessageTitle,
157  i18n( "Address book folder deletion failed" ) );
158  break;
159  case Akonadi::StandardActionManager::SynchronizeCollections:
160  mGenericManager->setActionText( Akonadi::StandardActionManager::SynchronizeCollections,
161  ki18np( "Update Address Book Folder",
162  "Update %1 Address Book Folders" ) );
163  mGenericManager->action( Akonadi::StandardActionManager::SynchronizeCollections )->setWhatsThis(
164  i18n( "Update the content of the selected address book folders." ) );
165  break;
166  case Akonadi::StandardActionManager::CutCollections:
167  mGenericManager->setActionText( Akonadi::StandardActionManager::CutCollections,
168  ki18np( "Cut Address Book Folder",
169  "Cut %1 Address Book Folders" ) );
170  mGenericManager->action( Akonadi::StandardActionManager::CutCollections )->setWhatsThis(
171  i18n( "Cut the selected address book folders from the address book." ) );
172  break;
173  case Akonadi::StandardActionManager::CollectionProperties:
174  mGenericManager->action( Akonadi::StandardActionManager::CollectionProperties )->setText(
175  i18n( "Folder Properties..." ) );
176  mGenericManager->action( Akonadi::StandardActionManager::CollectionProperties )->setWhatsThis(
177  i18n( "Open a dialog to edit the properties of the selected address book folder." ) );
178  mGenericManager->setContextText(
179  StandardActionManager::CollectionProperties, StandardActionManager::DialogTitle,
180  ki18nc( "@title:window", "Properties of Address Book Folder %1" ) );
181  break;
182  case Akonadi::StandardActionManager::CopyItems:
183  mGenericManager->setActionText( Akonadi::StandardActionManager::CopyItems,
184  ki18np( "Copy Contact", "Copy %1 Contacts" ) );
185  mGenericManager->action( Akonadi::StandardActionManager::CopyItems )->setWhatsThis(
186  i18n( "Copy the selected contacts to the clipboard." ) );
187  break;
188  case Akonadi::StandardActionManager::DeleteItems:
189  mGenericManager->setActionText( Akonadi::StandardActionManager::DeleteItems,
190  ki18np( "Delete Contact", "Delete %1 Contacts" ) );
191  mGenericManager->action( Akonadi::StandardActionManager::DeleteItems )->setWhatsThis(
192  i18n( "Delete the selected contacts from the address book." ) );
193  mGenericManager->setContextText(
194  StandardActionManager::DeleteItems, StandardActionManager::MessageBoxText,
195  ki18np( "Do you really want to delete the selected contact?",
196  "Do you really want to delete %1 contacts?" ) );
197 
198  mGenericManager->setContextText(
199  StandardActionManager::DeleteItems, StandardActionManager::MessageBoxTitle,
200  ki18ncp( "@title:window", "Delete Contact?", "Delete Contacts?" ) );
201 
202  mGenericManager->setContextText(
203  StandardActionManager::DeleteItems, StandardActionManager::ErrorMessageText,
204  ki18n( "Could not delete contact: %1" ) );
205 
206  mGenericManager->setContextText(
207  StandardActionManager::DeleteItems, StandardActionManager::ErrorMessageTitle,
208  i18n( "Contact deletion failed" ) );
209  break;
210  case Akonadi::StandardActionManager::CutItems:
211  mGenericManager->setActionText( Akonadi::StandardActionManager::CutItems,
212  ki18np( "Cut Contact", "Cut %1 Contacts" ) );
213  mGenericManager->action( Akonadi::StandardActionManager::CutItems )->setWhatsThis(
214  i18n( "Cut the selected contacts from the address book." ) );
215  break;
216  case Akonadi::StandardActionManager::CreateResource:
217  mGenericManager->action( Akonadi::StandardActionManager::CreateResource )->setText(
218  i18n( "Add &Address Book..." ) );
219  mGenericManager->action( Akonadi::StandardActionManager::CreateResource )->setWhatsThis(
220  i18n( "Add a new address book<p>"
221  "You will be presented with a dialog where you can select "
222  "the type of the address book that shall be added.</p>" ) );
223  mGenericManager->setContextText(
224  StandardActionManager::CreateResource, StandardActionManager::DialogTitle,
225  i18nc( "@title:window", "Add Address Book" ) );
226 
227  mGenericManager->setContextText(
228  StandardActionManager::CreateResource, StandardActionManager::ErrorMessageText,
229  ki18n( "Could not create address book: %1" ) );
230 
231  mGenericManager->setContextText(
232  StandardActionManager::CreateResource, StandardActionManager::ErrorMessageTitle,
233  i18n( "Address book creation failed" ) );
234  break;
235  case Akonadi::StandardActionManager::DeleteResources:
236 
237  mGenericManager->setActionText( Akonadi::StandardActionManager::DeleteResources,
238  ki18np( "&Delete Address Book",
239  "&Delete %1 Address Books" ) );
240  mGenericManager->action( Akonadi::StandardActionManager::DeleteResources )->setWhatsThis(
241  i18n( "Delete the selected address books<p>"
242  "The currently selected address books will be deleted, "
243  "along with all the contacts and contact groups they contain.</p>" ) );
244  mGenericManager->setContextText(
245  StandardActionManager::DeleteResources, StandardActionManager::MessageBoxText,
246  ki18np( "Do you really want to delete this address book?",
247  "Do you really want to delete %1 address books?" ) );
248 
249  mGenericManager->setContextText(
250  StandardActionManager::DeleteResources, StandardActionManager::MessageBoxTitle,
251  ki18ncp( "@title:window", "Delete Address Book?", "Delete Address Books?" ) );
252 
253  break;
254  case Akonadi::StandardActionManager::ResourceProperties:
255 
256  mGenericManager->action( Akonadi::StandardActionManager::ResourceProperties )->setText(
257  i18n( "Address Book Properties..." ) );
258  mGenericManager->action( Akonadi::StandardActionManager::ResourceProperties )->setWhatsThis(
259  i18n( "Open a dialog to edit properties of the selected address book." ) );
260  break;
261  case Akonadi::StandardActionManager::SynchronizeResources:
262  mGenericManager->setActionText( Akonadi::StandardActionManager::SynchronizeResources,
263  ki18np( "Update Address Book",
264  "Update %1 Address Books" ) );
265 
266  mGenericManager->action( Akonadi::StandardActionManager::SynchronizeResources )->setWhatsThis
267  ( i18n( "Updates the content of all folders of the selected address books." ) );
268 
269  break;
270  case StandardActionManager::Paste:
271  mGenericManager->setContextText(
272  StandardActionManager::Paste, StandardActionManager::ErrorMessageText,
273  ki18n( "Could not paste contact: %1" ) );
274 
275  mGenericManager->setContextText(
276  StandardActionManager::Paste, StandardActionManager::ErrorMessageTitle,
277  i18n( "Paste failed" ) );
278  break;
279  default:
280  break;
281  }
282 
283  }
284 
285  static bool hasWritableCollection( const QModelIndex &index, const QString &mimeType )
286  {
287  const Akonadi::Collection collection =
288  index.data( Akonadi::EntityTreeModel::CollectionRole ).value<Akonadi::Collection>();
289  if ( collection.isValid() ) {
290  if ( collection.contentMimeTypes().contains( mimeType ) &&
291  ( collection.rights() & Akonadi::Collection::CanCreateItem ) ) {
292  return true;
293  }
294  }
295 
296  const QAbstractItemModel *model = index.model();
297  if ( !model ) {
298  return false;
299  }
300 
301  for ( int row = 0; row < model->rowCount( index ); ++row ) {
302  if ( hasWritableCollection( model->index( row, 0, index ), mimeType ) ) {
303  return true;
304  }
305  }
306 
307  return false;
308  }
309 
310  bool hasWritableCollection( const QString &mimeType ) const
311  {
312  if ( !mCollectionSelectionModel ) {
313  return false;
314  }
315 
316  const QAbstractItemModel *collectionModel = mCollectionSelectionModel->model();
317  for ( int row = 0; row < collectionModel->rowCount(); ++row ) {
318  if ( hasWritableCollection( collectionModel->index( row, 0, QModelIndex() ), mimeType ) ) {
319  return true;
320  }
321  }
322 
323  return false;
324  }
325 
326  void updateActions()
327  {
328  int itemCount = 0;
329  if ( mItemSelectionModel ) {
330  itemCount = mItemSelectionModel->selectedRows().count();
331  if ( itemCount == 1 ) {
332  const QModelIndex index = mItemSelectionModel->selectedRows().first();
333  if ( index.isValid() ) {
334  const QString mimeType = index.data( EntityTreeModel::MimeTypeRole ).toString();
335  if ( mimeType == KABC::Addressee::mimeType() ) {
336  if(mGenericManager->action( Akonadi::StandardActionManager::CopyItemToMenu )) {
337  mGenericManager->setActionText( Akonadi::StandardActionManager::CopyItems,
338  ki18np( "Copy Contact", "Copy %1 Contacts" ) );
339  mGenericManager->action( Akonadi::StandardActionManager::CopyItemToMenu )->setText( i18n( "Copy Contact To" ) );
340  }
341  if(mGenericManager->action( Akonadi::StandardActionManager::CopyItemToDialog)) {
342  mGenericManager->action( Akonadi::StandardActionManager::CopyItemToDialog )->setText( i18n( "Copy Contact To" ) );
343  }
344  if(mGenericManager->action( Akonadi::StandardActionManager::DeleteItems)) {
345  mGenericManager->setActionText( Akonadi::StandardActionManager::DeleteItems,
346  ki18np( "Delete Contact", "Delete %1 Contacts" ) );
347  }
348  if(mGenericManager->action( Akonadi::StandardActionManager::CutItems)) {
349  mGenericManager->setActionText( Akonadi::StandardActionManager::CutItems,
350  ki18np( "Cut Contact", "Cut %1 Contacts" ) );
351  }
352  if(mGenericManager->action( Akonadi::StandardActionManager::MoveItemToMenu)) {
353  mGenericManager->action( Akonadi::StandardActionManager::MoveItemToMenu )->setText( i18n( "Move Contact To" ) );
354  }
355  if(mGenericManager->action( Akonadi::StandardActionManager::MoveItemToDialog )) {
356  mGenericManager->action( Akonadi::StandardActionManager::MoveItemToDialog )->setText( i18n( "Move Contact To" ) );
357  }
358  } else if ( mimeType == KABC::ContactGroup::mimeType() ) {
359  if(mGenericManager->action( Akonadi::StandardActionManager::CopyItems )) {
360  mGenericManager->setActionText( Akonadi::StandardActionManager::CopyItems,
361  ki18np( "Copy Group", "Copy %1 Groups" ) );
362  }
363  if(mGenericManager->action( Akonadi::StandardActionManager::CopyItemToMenu)) {
364  mGenericManager->action( Akonadi::StandardActionManager::CopyItemToMenu )->setText( i18n( "Copy Group To" ) );
365  }
366  if(mGenericManager->action( Akonadi::StandardActionManager::CopyItemToDialog )) {
367  mGenericManager->action( Akonadi::StandardActionManager::CopyItemToDialog )->setText( i18n( "Copy Group To" ) );
368  }
369  if(mGenericManager->action( Akonadi::StandardActionManager::DeleteItems)) {
370  mGenericManager->setActionText( Akonadi::StandardActionManager::DeleteItems,
371  ki18np( "Delete Group", "Delete %1 Groups" ) );
372  }
373  if(mGenericManager->action( Akonadi::StandardActionManager::CutItems)) {
374  mGenericManager->setActionText( Akonadi::StandardActionManager::CutItems,
375  ki18np( "Cut Group", "Cut %1 Groups" ) );
376  }
377  if(mGenericManager->action( Akonadi::StandardActionManager::MoveItemToMenu )) {
378  mGenericManager->action( Akonadi::StandardActionManager::MoveItemToMenu )->setText( i18n( "Move Group To" ) );
379  }
380  if(mGenericManager->action( Akonadi::StandardActionManager::MoveItemToDialog )) {
381  mGenericManager->action( Akonadi::StandardActionManager::MoveItemToDialog )->setText( i18n( "Move Group To" ) );
382  }
383  if ( mActions.contains( StandardContactActionManager::EditItem ) ) {
384  mActions.value( StandardContactActionManager::EditItem )->setText( i18n( "Edit Group..." ) );
385  }
386  }
387  }
388  }
389  }
390 
391  if ( mActions.contains( StandardContactActionManager::CreateContact ) ) {
392  mActions[ StandardContactActionManager::CreateContact ]->setEnabled( hasWritableCollection( KABC::Addressee::mimeType() ) );
393  }
394  if ( mActions.contains( StandardContactActionManager::CreateContactGroup ) ) {
395  mActions[ StandardContactActionManager::CreateContactGroup ]->setEnabled( hasWritableCollection( KABC::ContactGroup::mimeType() ) );
396  }
397 
398  if ( mActions.contains( StandardContactActionManager::EditItem ) ) {
399  bool canEditItem = true;
400 
401  // only one selected item can be edited
402  canEditItem = canEditItem && ( itemCount == 1 );
403 
404  // check whether parent collection allows changing the item
405  const QModelIndexList rows = mItemSelectionModel->selectedRows();
406  if ( rows.count() == 1 ) {
407  const QModelIndex index = rows.first();
408  const Collection parentCollection = index.data( EntityTreeModel::ParentCollectionRole ).value<Collection>();
409  if ( parentCollection.isValid() ) {
410  canEditItem = canEditItem && ( parentCollection.rights() & Collection::CanChangeItem );
411  }
412  }
413 
414  mActions.value( StandardContactActionManager::EditItem )->setEnabled( canEditItem );
415  }
416 
417  emit mParent->actionStateUpdated();
418  }
419 
420  Collection selectedCollection() const
421  {
422  if ( !mCollectionSelectionModel ) {
423  return Collection();
424  }
425 
426  if ( mCollectionSelectionModel->selectedIndexes().isEmpty() ) {
427  return Collection();
428  }
429 
430  const QModelIndex index = mCollectionSelectionModel->selectedIndexes().first();
431  if ( !index.isValid() ) {
432  return Collection();
433  }
434 
435  return index.data( EntityTreeModel::CollectionRole ).value<Collection>();
436  }
437 
438  void slotCreateContact()
439  {
440  if ( mInterceptedActions.contains( StandardContactActionManager::CreateContact ) ) {
441  return;
442  }
443 
444  QPointer<Akonadi::ContactEditorDialog> dlg =
445  new Akonadi::ContactEditorDialog(
446  Akonadi::ContactEditorDialog::CreateMode, mParentWidget );
447  dlg->setDefaultAddressBook( selectedCollection() );
448  dlg->exec();
449  delete dlg;
450  }
451 
452  void slotCreateContactGroup()
453  {
454  if ( mInterceptedActions.contains( StandardContactActionManager::CreateContactGroup ) ) {
455  return;
456  }
457 
458  QPointer<Akonadi::ContactGroupEditorDialog> dlg =
459  new Akonadi::ContactGroupEditorDialog(
460  Akonadi::ContactGroupEditorDialog::CreateMode, mParentWidget );
461  dlg->setDefaultAddressBook( selectedCollection() );
462  dlg->exec();
463  delete dlg;
464  }
465 
466  void slotEditItem()
467  {
468  if ( mInterceptedActions.contains( StandardContactActionManager::EditItem ) ) {
469  return;
470  }
471 
472  if ( !mItemSelectionModel ) {
473  return;
474  }
475 
476  if ( mItemSelectionModel->selectedIndexes().isEmpty() ) {
477  return;
478  }
479 
480  const QModelIndex index = mItemSelectionModel->selectedIndexes().first();
481  if ( !index.isValid() ) {
482  return;
483  }
484 
485  const Item item = index.data( EntityTreeModel::ItemRole ).value<Item>();
486  if ( !item.isValid() ) {
487  return;
488  }
489 
490  if ( Akonadi::MimeTypeChecker::isWantedItem( item, KABC::Addressee::mimeType() ) ) {
491  QPointer<Akonadi::ContactEditorDialog> dlg =
492  new Akonadi::ContactEditorDialog(
493  Akonadi::ContactEditorDialog::EditMode, mParentWidget );
494  connect( dlg, SIGNAL(error(QString)),
495  mParent, SLOT(slotContactEditorError(QString)) );
496  dlg->setContact( item );
497  dlg->exec();
498  delete dlg;
499  } else if ( Akonadi::MimeTypeChecker::isWantedItem( item, KABC::ContactGroup::mimeType() ) ) {
500  QPointer<Akonadi::ContactGroupEditorDialog> dlg =
501  new Akonadi::ContactGroupEditorDialog(
502  Akonadi::ContactGroupEditorDialog::EditMode, mParentWidget );
503  dlg->setContactGroup( item );
504  dlg->exec();
505  delete dlg;
506  }
507  }
508 
509  void slotContactEditorError(const QString& error)
510  {
511  KMessageBox::error(mParentWidget, i18n("Contact cannot be stored: %1", error), i18n("Failed to store contact"));
512  }
513 
514  KActionCollection *mActionCollection;
515  QWidget *mParentWidget;
516  StandardActionManager *mGenericManager;
517  QItemSelectionModel *mCollectionSelectionModel;
518  QItemSelectionModel *mItemSelectionModel;
519  QHash<StandardContactActionManager::Type, KAction*> mActions;
520  QSet<StandardContactActionManager::Type> mInterceptedActions;
521  StandardContactActionManager *mParent;
522 };
523 
524 StandardContactActionManager::StandardContactActionManager( KActionCollection *actionCollection, QWidget *parent )
525  : QObject( parent ), d( new Private( actionCollection, parent, this ) )
526 {
527 }
528 
529 StandardContactActionManager::~StandardContactActionManager()
530 {
531  delete d;
532 }
533 
534 void StandardContactActionManager::setCollectionSelectionModel( QItemSelectionModel *selectionModel )
535 {
536  d->mCollectionSelectionModel = selectionModel;
537  d->mGenericManager->setCollectionSelectionModel( selectionModel );
538 
539  connect( selectionModel->model(), SIGNAL(rowsInserted(QModelIndex,int,int)),
540  SLOT(updateActions()) );
541  connect( selectionModel->model(), SIGNAL(rowsRemoved(QModelIndex,int,int)),
542  SLOT(updateActions()) );
543  connect( selectionModel, SIGNAL(selectionChanged(QItemSelection,QItemSelection)),
544  SLOT(updateActions()) );
545 
546  d->updateActions();
547 }
548 
549 void StandardContactActionManager::setItemSelectionModel( QItemSelectionModel* selectionModel )
550 {
551  d->mItemSelectionModel = selectionModel;
552  d->mGenericManager->setItemSelectionModel( selectionModel );
553 
554  connect( selectionModel, SIGNAL(selectionChanged(QItemSelection,QItemSelection)),
555  SLOT(updateActions()) );
556 
557  d->updateActions();
558 }
559 
560 KAction* StandardContactActionManager::createAction( Type type )
561 {
562  if ( d->mActions.contains( type ) ) {
563  return d->mActions.value( type );
564  }
565 
566  KAction *action = 0;
567 
568  switch ( type ) {
569  case CreateContact:
570  action = new KAction( d->mParentWidget );
571  action->setIcon( KIcon( QLatin1String( "contact-new" ) ) );
572  action->setText( i18n( "New &Contact..." ) );
573  action->setShortcut( QKeySequence( Qt::CTRL + Qt::Key_N ) );
574  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>" ) );
575  d->mActions.insert( CreateContact, action );
576  d->mActionCollection->addAction( QString::fromLatin1( "akonadi_contact_create" ), action );
577  connect( action, SIGNAL(triggered(bool)), this, SLOT(slotCreateContact()) );
578  break;
579  case CreateContactGroup:
580  action = new KAction( d->mParentWidget );
581  action->setIcon( KIcon( QLatin1String( "user-group-new" ) ) );
582  action->setText( i18n( "New &Group..." ) );
583  action->setShortcut( QKeySequence( Qt::CTRL + Qt::Key_G ) );
584  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>" ) );
585  d->mActions.insert( CreateContactGroup, action );
586  d->mActionCollection->addAction( QString::fromLatin1( "akonadi_contact_group_create" ), action );
587  connect( action, SIGNAL(triggered(bool)), this, SLOT(slotCreateContactGroup()) );
588  break;
589  case EditItem:
590  action = new KAction( d->mParentWidget );
591  action->setIcon( KIcon( QLatin1String( "document-edit" ) ) );
592  action->setText( i18n( "Edit Contact..." ) );
593  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>" ) );
594  action->setEnabled( false );
595  d->mActions.insert( EditItem, action );
596  d->mActionCollection->addAction( QString::fromLatin1( "akonadi_contact_item_edit" ), action );
597  connect( action, SIGNAL(triggered(bool)), this, SLOT(slotEditItem()) );
598  break;
599  default:
600  Q_ASSERT( false ); // should never happen
601  break;
602  }
603 
604  return action;
605 }
606 
607 KAction* StandardContactActionManager::createAction( StandardActionManager::Type type )
608 {
609  KAction *act = d->mGenericManager->action(type);
610  if(!act )
611  act = d->mGenericManager->createAction( type );
612  d->updateGenericAction(type);
613  return act;
614 }
615 
616 void StandardContactActionManager::createAllActions()
617 {
618  createAction( CreateContact );
619  createAction( CreateContactGroup );
620  createAction( EditItem );
621 
622  d->mGenericManager->createAllActions();
623  d->updateGenericAllActions();
624 
625  d->updateActions();
626 }
627 
628 KAction* StandardContactActionManager::action( Type type ) const
629 {
630  if ( d->mActions.contains( type ) ) {
631  return d->mActions.value( type );
632  }
633 
634  return 0;
635 }
636 
637 KAction* StandardContactActionManager::action( StandardActionManager::Type type ) const
638 {
639  return d->mGenericManager->action( type );
640 }
641 
642 void StandardContactActionManager::setActionText( StandardActionManager::Type type, const KLocalizedString &text )
643 {
644  d->mGenericManager->setActionText( type, text );
645 }
646 
647 void StandardContactActionManager::interceptAction( Type type, bool intercept )
648 {
649  if ( intercept ) {
650  d->mInterceptedActions.insert( type );
651  } else {
652  d->mInterceptedActions.remove( type );
653  }
654 }
655 
656 void StandardContactActionManager::interceptAction( StandardActionManager::Type type, bool intercept )
657 {
658  d->mGenericManager->interceptAction( type, intercept );
659 }
660 
661 Akonadi::Collection::List StandardContactActionManager::selectedCollections() const
662 {
663  return d->mGenericManager->selectedCollections();
664 }
665 
666 Akonadi::Item::List StandardContactActionManager::selectedItems() const
667 {
668  return d->mGenericManager->selectedItems();
669 }
670 
671 
672 void StandardContactActionManager::setCollectionPropertiesPageNames( const QStringList &names )
673 {
674  d->mGenericManager->setCollectionPropertiesPageNames( names );
675 }
676 #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:534
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:524
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:616
Akonadi::StandardContactActionManager::~StandardContactActionManager
~StandardContactActionManager()
Destroys the standard contact action manager.
Definition: standardcontactactionmanager.cpp:529
Akonadi::Collection::CanChangeItem
Can change items in this collection.
Definition: collection.h:88
Akonadi::StandardContactActionManager::setCollectionPropertiesPageNames
void setCollectionPropertiesPageNames(const QStringList &names)
Definition: standardcontactactionmanager.cpp:672
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:628
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:666
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:560
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:661
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:549
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:647
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:642
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