00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024 #include "standardmailactionmanager.h"
00025
00026 #include "emptytrashcommand_p.h"
00027 #include "markascommand_p.h"
00028 #include "movetotrashcommand_p.h"
00029 #include "removeduplicatescommand_p.h"
00030
00031 #include "akonadi/agentfilterproxymodel.h"
00032 #include "akonadi/agentinstance.h"
00033 #include "akonadi/agentinstancecreatejob.h"
00034 #include "akonadi/agentmanager.h"
00035 #include "akonadi/agenttypedialog.h"
00036 #include "akonadi/collectionstatistics.h"
00037 #include "akonadi/entitytreemodel.h"
00038 #include "akonadi/kmime/messagestatus.h"
00039 #include "akonadi/mimetypechecker.h"
00040 #include "akonadi/subscriptiondialog_p.h"
00041
00042 #include <kaction.h>
00043 #include <kactioncollection.h>
00044 #include <klocale.h>
00045 #include <kmessagebox.h>
00046 #include <kmime/kmime_message.h>
00047
00048 #include <QtCore/QPointer>
00049 #include <QtGui/QItemSelectionModel>
00050
00051 using namespace Akonadi;
00052
00053 class StandardMailActionManager::Private
00054 {
00055 public:
00056 Private( KActionCollection *actionCollection, QWidget *parentWidget, StandardMailActionManager *parent )
00057 : mActionCollection( actionCollection ),
00058 mParentWidget( parentWidget ),
00059 mCollectionSelectionModel( 0 ),
00060 mItemSelectionModel( 0 ),
00061 mParent( parent )
00062 {
00063 mGenericManager = new StandardActionManager( actionCollection, parentWidget );
00064
00065 mParent->connect( mGenericManager, SIGNAL( actionStateUpdated() ),
00066 mParent, SIGNAL( actionStateUpdated() ) );
00067
00068 mGenericManager->createAllActions();
00069
00070 mGenericManager->action( Akonadi::StandardActionManager::CreateCollection )->setText(
00071 i18n( "Add Folder..." ) );
00072 mGenericManager->action( Akonadi::StandardActionManager::CreateCollection )->setWhatsThis(
00073 i18n( "Add a new folder to the currently selected account." ) );
00074
00075 mGenericManager->setActionText( Akonadi::StandardActionManager::CopyCollections,
00076 ki18np( "Copy Folder", "Copy %1 Folders" ) );
00077 mGenericManager->action( Akonadi::StandardActionManager::CopyCollections )->setWhatsThis(
00078 i18n( "Copy the selected folders to the clipboard." ) );
00079
00080 mGenericManager->setActionText( Akonadi::StandardActionManager::DeleteCollections,
00081 ki18np( "Delete Folder", "Delete %1 Folders" ) );
00082 mGenericManager->action( Akonadi::StandardActionManager::DeleteCollections )->setWhatsThis(
00083 i18n( "Delete the selected folders from the account." ) );
00084
00085 mGenericManager->setActionText( Akonadi::StandardActionManager::SynchronizeCollections,
00086 ki18np( "Update Folder", "Update Folders" ) );
00087
00088 mGenericManager->action( Akonadi::StandardActionManager::SynchronizeCollections )->setWhatsThis(
00089 i18n( "Update the content of the selected folders." ) );
00090
00091 mGenericManager->setActionText( Akonadi::StandardActionManager::CutCollections,
00092 ki18np( "Cut Folder", "Cut %1 Folders" ) );
00093 mGenericManager->action( Akonadi::StandardActionManager::CutCollections )->setWhatsThis(
00094 i18n( "Cut the selected folders from the account." ) );
00095
00096 mGenericManager->action( Akonadi::StandardActionManager::CollectionProperties )->setText(
00097 i18n( "Folder Properties..." ) );
00098 mGenericManager->action( Akonadi::StandardActionManager::CollectionProperties)->setWhatsThis(
00099 i18n( "Open a dialog to edit the properties of the selected folder." ) );
00100
00101 mGenericManager->setActionText( Akonadi::StandardActionManager::CopyItems,
00102 ki18np( "Copy Email", "Copy %1 Emails" ) );
00103 mGenericManager->action( Akonadi::StandardActionManager::CopyItems )->setWhatsThis(
00104 i18n( "Copy the selected emails to the clipboard." ) );
00105
00106 mGenericManager->setActionText( Akonadi::StandardActionManager::DeleteItems,
00107 ki18np( "Delete Email", "Delete %1 Emails" ) );
00108 mGenericManager->action( Akonadi::StandardActionManager::DeleteItems )->setWhatsThis(
00109 i18n( "Delete the selected emails from the folder." ) );
00110
00111 mGenericManager->setActionText( Akonadi::StandardActionManager::CutItems,
00112 ki18np( "Cut Email", "Cut %1 Emails" ) );
00113 mGenericManager->action( Akonadi::StandardActionManager::CutItems )->setWhatsThis(
00114 i18n( "Cut the selected emails from the folder." ) );
00115
00116 mGenericManager->action( Akonadi::StandardActionManager::CreateResource )->setText(
00117 i18n( "Add &Account..." ) );
00118 mGenericManager->action( Akonadi::StandardActionManager::CreateResource )->setWhatsThis(
00119 i18n( "Add a new account<p>"
00120 "You will be presented with a dialog where you can select "
00121 "the type of the account that shall be added.</p>" ) );
00122
00123 mGenericManager->setActionText( Akonadi::StandardActionManager::DeleteResources,
00124 ki18np( "&Delete Account", "&Delete %1 Accounts" ) );
00125 mGenericManager->action( Akonadi::StandardActionManager::DeleteResources )->setWhatsThis(
00126 i18n( "Delete the selected accounts<p>"
00127 "The currently selected accounts will be deleted, "
00128 "along with all the emails they contain.</p>" ) );
00129
00130 mGenericManager->action( Akonadi::StandardActionManager::ResourceProperties )->setText(
00131 i18n( "Account Properties..." ) );
00132 mGenericManager->action( Akonadi::StandardActionManager::ResourceProperties )->setWhatsThis(
00133 i18n( "Open a dialog to edit properties of the selected account." ) );
00134
00135 mGenericManager->setActionText( Akonadi::StandardActionManager::SynchronizeResources,
00136 ki18np( "Update Account", "Update %1 Accounts" ) );
00137 mGenericManager->action( Akonadi::StandardActionManager::SynchronizeResources )->setWhatsThis(
00138 i18n( "Updates the content of all folders of the selected accounts." ) );
00139
00140 mGenericManager->setActionText( Akonadi::StandardActionManager::SynchronizeCollectionsRecursive,
00141 ki18np( "Update folder and its subfolders", "Update folders and their subfolders" ) );
00142
00143 mGenericManager->action( Akonadi::StandardActionManager::SynchronizeCollectionsRecursive )->setWhatsThis(
00144 i18n( "Update the content of the selected folders and their subfolders." ) );
00145
00146 mGenericManager->setContextText(
00147 StandardActionManager::CreateCollection, StandardActionManager::DialogTitle,
00148 i18nc( "@title:window", "New Folder" ) );
00149
00150 mGenericManager->setContextText(
00151 StandardActionManager::CreateCollection, StandardActionManager::ErrorMessageText,
00152 i18n( "Could not create folder: %1" ) );
00153
00154 mGenericManager->setContextText(
00155 StandardActionManager::CreateCollection, StandardActionManager::ErrorMessageTitle,
00156 i18n( "Folder creation failed" ) );
00157
00158 mGenericManager->setContextText(
00159 StandardActionManager::DeleteCollections, StandardActionManager::MessageBoxText,
00160 ki18np( "Do you really want to delete this folder and all its sub-folders?",
00161 "Do you really want to delete %1 folders and all their sub-folders?" ) );
00162
00163 mGenericManager->setContextText(
00164 StandardActionManager::DeleteCollections, StandardActionManager::MessageBoxTitle,
00165 ki18ncp( "@title:window", "Delete folder?", "Delete folders?" ) );
00166
00167 mGenericManager->setContextText(
00168 StandardActionManager::DeleteCollections, StandardActionManager::ErrorMessageText,
00169 i18n( "Could not delete folder: %1" ) );
00170
00171 mGenericManager->setContextText(
00172 StandardActionManager::DeleteCollections, StandardActionManager::ErrorMessageTitle,
00173 i18n( "Folder deletion failed" ) );
00174
00175 mGenericManager->setContextText(
00176 StandardActionManager::CollectionProperties, StandardActionManager::DialogTitle,
00177 i18nc( "@title:window", "Properties of Folder %1" ) );
00178
00179 mGenericManager->setContextText(
00180 StandardActionManager::DeleteItems, StandardActionManager::MessageBoxText,
00181 ki18np( "Do you really want to delete the selected email?",
00182 "Do you really want to delete %1 emails?" ) );
00183
00184 mGenericManager->setContextText(
00185 StandardActionManager::DeleteItems, StandardActionManager::MessageBoxTitle,
00186 ki18ncp( "@title:window", "Delete Email?", "Delete Emails?" ) );
00187
00188 mGenericManager->setContextText(
00189 StandardActionManager::DeleteItems, StandardActionManager::ErrorMessageText,
00190 i18n( "Could not delete email: %1" ) );
00191
00192 mGenericManager->setContextText(
00193 StandardActionManager::DeleteItems, StandardActionManager::ErrorMessageTitle,
00194 i18n( "Email deletion failed" ) );
00195
00196 mGenericManager->setContextText(
00197 StandardActionManager::CreateResource, StandardActionManager::DialogTitle,
00198 i18nc( "@title:window", "Add Account" ) );
00199
00200 mGenericManager->setContextText(
00201 StandardActionManager::CreateResource, StandardActionManager::ErrorMessageText,
00202 i18n( "Could not create account: %1" ) );
00203
00204 mGenericManager->setContextText(
00205 StandardActionManager::CreateResource, StandardActionManager::ErrorMessageTitle,
00206 i18n( "Account creation failed" ) );
00207
00208 mGenericManager->setContextText(
00209 StandardActionManager::DeleteResources, StandardActionManager::MessageBoxText,
00210 ki18np( "Do you really want to delete this account?",
00211 "Do you really want to delete %1 accounts?" ) );
00212
00213 mGenericManager->setContextText(
00214 StandardActionManager::DeleteResources, StandardActionManager::MessageBoxTitle,
00215 ki18ncp( "@title:window", "Delete Account?", "Delete Accounts?" ) );
00216
00217 mGenericManager->setContextText(
00218 StandardActionManager::Paste, StandardActionManager::ErrorMessageText,
00219 i18n( "Could not paste email: %1" ) );
00220
00221 mGenericManager->setContextText(
00222 StandardActionManager::Paste, StandardActionManager::ErrorMessageTitle,
00223 i18n( "Paste failed" ) );
00224
00225 mGenericManager->setMimeTypeFilter( QStringList() << KMime::Message::mimeType() );
00226 mGenericManager->setCapabilityFilter( QStringList() << QLatin1String( "Resource" ) );
00227 mGenericManager->interceptAction( Akonadi::StandardActionManager::ManageLocalSubscriptions );
00228 connect( mGenericManager->action( StandardActionManager::ManageLocalSubscriptions ), SIGNAL( triggered( bool ) ),
00229 mParent, SLOT( slotMailLocalSubscription() ) );
00230 }
00231
00232 ~Private()
00233 {
00234 delete mGenericManager;
00235 }
00236
00237 void updateActions()
00238 {
00239 const Akonadi::Item::List selectedItems = mGenericManager->selectedItems();
00240 const Akonadi::Collection::List selectedCollections = mGenericManager->selectedCollections();
00241
00242 bool itemIsSelected = !selectedItems.isEmpty();
00243 bool collectionIsSelected = !selectedCollections.isEmpty();
00244
00245 if ( itemIsSelected ) {
00246 bool allMarkedAsImportant = true;
00247 bool allMarkedAsRead = true;
00248 bool allMarkedAsActionItem = true;
00249
00250 foreach ( const Akonadi::Item &item, selectedItems ) {
00251 Akonadi::MessageStatus status;
00252 status.setStatusFromFlags( item.flags() );
00253 if ( !status.isImportant() )
00254 allMarkedAsImportant = false;
00255 if ( !status.isRead() )
00256 allMarkedAsRead= false;
00257 if ( !status.isToAct() )
00258 allMarkedAsActionItem = false;
00259 }
00260
00261 QAction *action = mActions.value( Akonadi::StandardMailActionManager::MarkMailAsRead );
00262 if ( action ) {
00263 updateMarkAction( action, allMarkedAsRead );
00264 if ( allMarkedAsRead )
00265 action->setText( i18n( "&Mark Mail as Unread" ) );
00266 else
00267 action->setText( i18n( "&Mark Mail as Read" ) );
00268 action->setEnabled( true );
00269 }
00270
00271 action = mActions.value( Akonadi::StandardMailActionManager::MarkMailAsImportant );
00272 if ( action ) {
00273 updateMarkAction( action, allMarkedAsImportant );
00274 if ( allMarkedAsImportant )
00275 action->setText( i18n( "Remove Important Mark" ) );
00276 else
00277 action->setText( i18n( "&Mark Mail as Important" ) );
00278 action->setEnabled( true );
00279 }
00280
00281 action = mActions.value( Akonadi::StandardMailActionManager::MarkMailAsActionItem );
00282 if ( action ) {
00283 updateMarkAction( action, allMarkedAsActionItem );
00284 if ( allMarkedAsActionItem )
00285 action->setText( i18n( "Remove Action Item Mark" ) );
00286 else
00287 action->setText( i18n( "&Mark Mail as Action Item" ) );
00288 action->setEnabled( true );
00289 }
00290 } else {
00291 QAction *action = mActions.value( Akonadi::StandardMailActionManager::MarkMailAsRead );
00292 if ( action )
00293 action->setEnabled( false );
00294
00295 action = mActions.value( Akonadi::StandardMailActionManager::MarkMailAsImportant );
00296 if ( action )
00297 action->setEnabled( false );
00298
00299 action = mActions.value( Akonadi::StandardMailActionManager::MarkMailAsActionItem );
00300 if ( action )
00301 action->setEnabled( false );
00302 }
00303
00304 bool enableMarkAllAsRead = false;
00305 bool enableMarkAllAsUnread = false;
00306 if ( collectionIsSelected ) {
00307 const Collection collection = selectedCollections.first();
00308 if ( collection.isValid() ) {
00309 const Akonadi::CollectionStatistics stats = collection.statistics();
00310 enableMarkAllAsRead = (stats.unreadCount() > 0);
00311 enableMarkAllAsUnread = (stats.count() != stats.unreadCount());
00312 }
00313 }
00314
00315 if ( mActions.contains( Akonadi::StandardMailActionManager::MoveToTrash ) )
00316 mActions.value( Akonadi::StandardMailActionManager::MoveToTrash )->setEnabled( itemIsSelected );
00317
00318 QAction *action = mActions.value( Akonadi::StandardMailActionManager::MarkAllMailAsRead );
00319 if ( action )
00320 action->setEnabled( enableMarkAllAsRead );
00321
00322 action = mActions.value( Akonadi::StandardMailActionManager::MarkAllMailAsUnread );
00323 if ( action )
00324 action->setEnabled( enableMarkAllAsUnread );
00325
00326 emit mParent->actionStateUpdated();
00327 }
00328
00329 void updateMarkAction( QAction* action, bool allMarked )
00330 {
00331 QByteArray data = action->data().toByteArray();
00332 if ( allMarked ) {
00333 if ( !data.startsWith( '!' ) )
00334 data.prepend( '!' );
00335 } else {
00336 if ( data.startsWith( '!' ) )
00337 data = data.mid( 1 );
00338 }
00339 action->setData( data );
00340 }
00341
00342 void slotMarkAs()
00343 {
00344 const QAction *action = qobject_cast<QAction*>( mParent->sender() );
00345 Q_ASSERT( action );
00346
00347 const Akonadi::Item::List items = mGenericManager->selectedItems();
00348 if ( items.isEmpty() )
00349 return;
00350
00351 QByteArray typeStr = action->data().toByteArray();
00352 kDebug() << "Mark mail as: " << typeStr;
00353
00354 bool invert = false;
00355 if ( typeStr.startsWith( '!' ) ) {
00356 invert = true;
00357 typeStr = typeStr.mid( 1 );
00358 }
00359
00360 Akonadi::MessageStatus targetStatus;
00361 targetStatus.setStatusFromStr( QLatin1String( typeStr ) );
00362
00363 StandardMailActionManager::Type type = MarkMailAsRead;
00364 if ( typeStr == "U" ) {
00365 type = MarkMailAsUnread;
00366 targetStatus.setRead( true );
00367 invert = true;
00368 } else if ( typeStr == "K" )
00369 type = MarkMailAsActionItem;
00370 else if ( typeStr == "G" )
00371 type = MarkMailAsImportant;
00372
00373 if ( mInterceptedActions.contains( type ) )
00374 return;
00375
00376 MarkAsCommand *command = new MarkAsCommand( targetStatus, items, invert, mParent );
00377 command->execute();
00378 }
00379
00380 void slotMarkAllAs()
00381 {
00382 const QAction *action = qobject_cast<QAction*>( mParent->sender() );
00383 Q_ASSERT( action );
00384
00385 QByteArray typeStr = action->data().toByteArray();
00386 kDebug() << "Mark all as: " << typeStr;
00387
00388 const Akonadi::Collection::List collections = mGenericManager->selectedCollections();
00389 if ( collections.isEmpty() )
00390 return;
00391
00392 Akonadi::MessageStatus targetStatus;
00393 targetStatus.setStatusFromStr( QLatin1String( typeStr ) );
00394
00395 bool invert = false;
00396 if ( typeStr.startsWith( '!' ) ) {
00397 invert = true;
00398 typeStr = typeStr.mid( 1 );
00399 }
00400
00401 StandardMailActionManager::Type type = MarkAllMailAsRead;
00402 if ( typeStr == "U" ) {
00403 type = MarkAllMailAsUnread;
00404 targetStatus.setRead( true );
00405 invert = true;
00406 } else if ( typeStr == "K" )
00407 type = MarkAllMailAsActionItem;
00408 else if ( typeStr == "G" )
00409 type = MarkAllMailAsImportant;
00410
00411 if ( mInterceptedActions.contains( type ) )
00412 return;
00413
00414 MarkAsCommand *command = new MarkAsCommand( targetStatus, collections, invert, mParent );
00415 command->execute();
00416 }
00417
00418 void slotMoveToTrash()
00419 {
00420 if ( mInterceptedActions.contains( StandardMailActionManager::MoveToTrash ) )
00421 return;
00422
00423 if ( mCollectionSelectionModel->selection().indexes().isEmpty() )
00424 return;
00425
00426 const Item::List items = mGenericManager->selectedItems();
00427 if ( items.isEmpty() )
00428 return;
00429
00430 MoveToTrashCommand *command = new MoveToTrashCommand( mCollectionSelectionModel->model(), items, mParent );
00431 command->execute();
00432 }
00433
00434 void slotMoveAllToTrash()
00435 {
00436 if ( mInterceptedActions.contains( StandardMailActionManager::MoveAllToTrash ) )
00437 return;
00438
00439 if ( mCollectionSelectionModel->selection().indexes().isEmpty() )
00440 return;
00441
00442 const Collection::List collections = mGenericManager->selectedCollections();
00443 if ( collections.isEmpty() )
00444 return;
00445
00446 MoveToTrashCommand *command = new MoveToTrashCommand( mCollectionSelectionModel->model(), collections, mParent );
00447 command->execute();
00448 }
00449
00450 void slotRemoveDuplicates()
00451 {
00452 if ( mInterceptedActions.contains( StandardMailActionManager::RemoveDuplicates ) )
00453 return;
00454
00455 const Collection::List collections = mGenericManager->selectedCollections();
00456 if ( collections.isEmpty() )
00457 return;
00458
00459 RemoveDuplicatesCommand *command = new RemoveDuplicatesCommand( mCollectionSelectionModel->model(), collections, mParent );
00460 command->execute();
00461 }
00462
00463 void slotEmptyAllTrash()
00464 {
00465 if ( mInterceptedActions.contains( StandardMailActionManager::EmptyAllTrash ) )
00466 return;
00467
00468 EmptyTrashCommand *command = new EmptyTrashCommand( const_cast<QAbstractItemModel*>( mCollectionSelectionModel->model() ), mParent );
00469 command->execute();
00470 }
00471
00472 void slotEmptyTrash()
00473 {
00474 if ( mInterceptedActions.contains( StandardMailActionManager::EmptyTrash ) )
00475 return;
00476
00477 if ( mCollectionSelectionModel->selection().indexes().isEmpty() )
00478 return;
00479
00480 const Collection::List collections = mGenericManager->selectedCollections();
00481 if ( collections.count() != 1 )
00482 return;
00483
00484 EmptyTrashCommand *command = new EmptyTrashCommand( collections.first(), mParent );
00485 command->execute();
00486 }
00487
00488 void slotMailLocalSubscription()
00489 {
00490 #ifndef Q_OS_WINCE
00491 SubscriptionDialog* dlg = new SubscriptionDialog( KMime::Message::mimeType(), mParentWidget );
00492 dlg->show();
00493 #endif
00494 }
00495
00496 KActionCollection *mActionCollection;
00497 QWidget *mParentWidget;
00498 StandardActionManager *mGenericManager;
00499 QItemSelectionModel *mCollectionSelectionModel;
00500 QItemSelectionModel *mItemSelectionModel;
00501 QHash<StandardMailActionManager::Type, KAction*> mActions;
00502 QSet<StandardMailActionManager::Type> mInterceptedActions;
00503 StandardMailActionManager *mParent;
00504 };
00505
00506
00507 StandardMailActionManager::StandardMailActionManager( KActionCollection *actionCollection, QWidget *parent )
00508 : QObject( parent ), d( new Private( actionCollection, parent, this ) )
00509 {
00510 }
00511
00512 StandardMailActionManager::~StandardMailActionManager()
00513 {
00514 delete d;
00515 }
00516
00517 void StandardMailActionManager::setCollectionSelectionModel( QItemSelectionModel *selectionModel )
00518 {
00519 d->mCollectionSelectionModel = selectionModel;
00520 d->mGenericManager->setCollectionSelectionModel( selectionModel );
00521
00522 connect( selectionModel->model(), SIGNAL( rowsInserted( const QModelIndex&, int, int ) ),
00523 SLOT( updateActions() ) );
00524 connect( selectionModel->model(), SIGNAL( rowsRemoved( const QModelIndex&, int, int ) ),
00525 SLOT( updateActions() ) );
00526 connect( selectionModel, SIGNAL( selectionChanged( const QItemSelection&, const QItemSelection& ) ),
00527 SLOT( updateActions() ) );
00528
00529 d->updateActions();
00530 }
00531
00532 void StandardMailActionManager::setItemSelectionModel( QItemSelectionModel* selectionModel )
00533 {
00534 d->mItemSelectionModel = selectionModel;
00535 d->mGenericManager->setItemSelectionModel( selectionModel );
00536
00537 connect( selectionModel, SIGNAL( selectionChanged( const QItemSelection&, const QItemSelection& ) ),
00538 SLOT( updateActions() ) );
00539
00540
00541 connect( selectionModel->model(), SIGNAL( dataChanged( const QModelIndex&, const QModelIndex& ) ),
00542 SLOT( updateActions() ) );
00543
00544 d->updateActions();
00545 }
00546
00547 KAction* StandardMailActionManager::createAction( Type type )
00548 {
00549 if ( d->mActions.contains( type ) )
00550 return d->mActions.value( type );
00551
00552 KAction *action = 0;
00553
00554 switch ( type ) {
00555 case MarkMailAsRead:
00556 action = new KAction( d->mParentWidget );
00557 action->setIcon( KIcon( QLatin1String( "mail-mark-read" ) ) );
00558 action->setText( i18n( "&Mark Mail as Read" ) );
00559 action->setIconText( i18n( "Mark as Read" ) );
00560 action->setWhatsThis( i18n( "Mark selected messages as read" ) );
00561 d->mActions.insert( MarkMailAsRead, action );
00562 d->mActionCollection->addAction( QString::fromLatin1( "akonadi_mark_as_read" ), action );
00563 action->setData( QByteArray( "R" ) );
00564 connect( action, SIGNAL( triggered( bool ) ), this, SLOT( slotMarkAs() ) );
00565 break;
00566 case MarkMailAsUnread:
00567 action = new KAction( d->mParentWidget );
00568 action->setText( i18n( "&Mark Mail as Unread" ) );
00569 action->setIconText( i18n( "Mark as Unread" ) );
00570 action->setIcon( KIcon( QLatin1String( "mail-mark-unread" ) ) );
00571 d->mActions.insert( MarkMailAsUnread, action );
00572 d->mActionCollection->addAction( QString::fromLatin1( "akonadi_mark_as_unread" ), action );
00573 action->setData( QByteArray( "U" ) );
00574 connect( action, SIGNAL( triggered( bool ) ), this, SLOT( slotMarkAs() ) );
00575 break;
00576 case MarkMailAsImportant:
00577 action = new KAction( d->mParentWidget );
00578 action->setIcon( KIcon( QLatin1String( "mail-mark-important" ) ) );
00579 action->setText( i18n( "&Mark Mail as Important" ) );
00580 action->setIconText( i18n( "Mark as Important" ) );
00581 d->mActions.insert( MarkMailAsImportant, action );
00582 d->mActionCollection->addAction( QString::fromLatin1( "akonadi_mark_as_important" ), action );
00583 action->setData( QByteArray( "G" ) );
00584 connect( action, SIGNAL( triggered( bool ) ), this, SLOT( slotMarkAs() ) );
00585 break;
00586 case MarkMailAsActionItem:
00587 action = new KAction( d->mParentWidget );
00588 action->setText( i18n( "&Mark Mail as Action Item" ) );
00589 action->setIconText( i18n( "Mark as Action Item" ) );
00590 action->setIcon( KIcon( QLatin1String( "mail-mark-task" ) ) );
00591 d->mActions.insert( MarkMailAsActionItem, action );
00592 d->mActionCollection->addAction( QString::fromLatin1( "akonadi_mark_as_action_item" ), action );
00593 action->setData( QByteArray( "K" ) );
00594 connect( action, SIGNAL( triggered( bool ) ), this, SLOT( slotMarkAs() ) );
00595 break;
00596 case MarkAllMailAsRead:
00597 action = new KAction( d->mParentWidget );
00598 action->setIcon( KIcon( QLatin1String( "mail-mark-read" ) ) );
00599 action->setText( i18n( "Mark &All Mails as Read" ) );
00600 action->setIconText( i18n( "Mark All as Read" ) );
00601 d->mActions.insert( MarkAllMailAsRead, action );
00602 d->mActionCollection->addAction( QString::fromLatin1( "akonadi_mark_all_as_read" ), action );
00603 action->setData( QByteArray( "R" ) );
00604 connect( action, SIGNAL( triggered( bool ) ), this, SLOT( slotMarkAllAs() ) );
00605 break;
00606 case MarkAllMailAsUnread:
00607 action = new KAction( d->mParentWidget );
00608 action->setText( i18n( "Mark &All Mails as Unread" ) );
00609 action->setIconText( i18n( "Mark All as Unread" ) );
00610 action->setIcon( KIcon( QLatin1String( "mail-mark-unread" ) ) );
00611 d->mActions.insert( MarkAllMailAsUnread, action );
00612 d->mActionCollection->addAction( QString::fromLatin1( "akonadi_mark_all_as_unread" ), action );
00613 action->setShortcut( Qt::CTRL+Qt::Key_U );
00614 action->setData( QByteArray( "U" ) );
00615 connect( action, SIGNAL( triggered( bool ) ), this, SLOT( slotMarkAllAs() ) );
00616 break;
00617 case MarkAllMailAsImportant:
00618 action = new KAction( d->mParentWidget );
00619 action->setText( i18n( "Mark &All Mails as Important" ) );
00620 action->setIconText( i18n( "Mark All as Important" ) );
00621 action->setIcon( KIcon( QLatin1String( "mail-mark-important" ) ) );
00622 d->mActions.insert( MarkAllMailAsImportant, action );
00623 d->mActionCollection->addAction( QString::fromLatin1( "akonadi_mark_all_as_important" ), action );
00624 action->setData( QByteArray( "G" ) );
00625 connect( action, SIGNAL( triggered( bool ) ), this, SLOT( slotMarkAllAs() ) );
00626 break;
00627 case MarkAllMailAsActionItem:
00628 action = new KAction( d->mParentWidget );
00629 action->setText( i18n( "Mark &All Mails as Action Item" ) );
00630 action->setIconText( i18n( "Mark All as Action Item" ) );
00631 action->setIcon( KIcon( QLatin1String( "mail-mark-task" ) ) );
00632 d->mActions.insert( MarkAllMailAsActionItem, action );
00633 d->mActionCollection->addAction( QString::fromLatin1( "akonadi_mark_all_as_action_item" ), action );
00634 action->setData( QByteArray("K") );
00635 connect( action, SIGNAL( triggered( bool ) ), this, SLOT( slotMarkAllAs() ) );
00636 break;
00637 case MoveToTrash:
00638 action = new KAction( d->mParentWidget );
00639 action->setIcon( KIcon( QLatin1String( "user-trash" ) ) );
00640 action->setText( i18n( "Move to &Trash" ) );
00641 action->setShortcut( QKeySequence( Qt::Key_Delete ) );
00642 action->setWhatsThis( i18n( "Move message to trashcan" ) );
00643 d->mActions.insert( MoveToTrash, action );
00644 d->mActionCollection->addAction( QString::fromLatin1( "akonadi_move_to_trash" ), action );
00645 connect( action, SIGNAL( triggered( bool ) ), this, SLOT( slotMoveToTrash() ) );
00646 break;
00647 case MoveAllToTrash:
00648 action = new KAction( d->mParentWidget );
00649 action->setIcon( KIcon( QLatin1String( "user-trash" ) ) );
00650 action->setText( i18n( "Move All to &Trash" ) );
00651 d->mActions.insert( MoveAllToTrash, action );
00652 d->mActionCollection->addAction( QString::fromLatin1( "akonadi_move_all_to_trash" ), action );
00653 connect( action, SIGNAL( triggered( bool ) ), this, SLOT( slotMoveAllToTrash() ) );
00654 break;
00655 case RemoveDuplicates:
00656 action = new KAction( d->mParentWidget );
00657 action->setText( i18n( "Remove &Duplicate Mails" ) );
00658 action->setShortcut( QKeySequence( Qt::CTRL + Qt::Key_Asterisk ) );
00659 d->mActions.insert( RemoveDuplicates, action );
00660 d->mActionCollection->addAction( QString::fromLatin1( "akonadi_remove_duplicates" ), action );
00661 connect( action, SIGNAL( triggered( bool ) ), this, SLOT( slotRemoveDuplicates() ) );
00662 break;
00663 case EmptyAllTrash:
00664 action = new KAction( d->mParentWidget );
00665 action->setText( i18n( "Empty All &Trash Folders" ) );
00666 d->mActions.insert( EmptyAllTrash, action );
00667 d->mActionCollection->addAction( QString::fromLatin1( "akonadi_empty_all_trash" ), action );
00668 connect( action, SIGNAL( triggered( bool ) ), this, SLOT( slotEmptyAllTrash() ) );
00669 break;
00670 case EmptyTrash:
00671 action = new KAction( d->mParentWidget );
00672 action->setText( i18n( "E&mpty Trash" ) );
00673 d->mActions.insert( EmptyTrash, action );
00674 d->mActionCollection->addAction( QString::fromLatin1( "akonadi_empty_trash" ), action );
00675 connect( action, SIGNAL( triggered( bool ) ), this, SLOT( slotEmptyTrash() ) );
00676 break;
00677 default:
00678 Q_ASSERT( false );
00679 break;
00680 }
00681
00682 return action;
00683 }
00684
00685 KAction* StandardMailActionManager::createAction( StandardActionManager::Type type )
00686 {
00687 return d->mGenericManager->createAction( type );
00688 }
00689
00690 void StandardMailActionManager::createAllActions()
00691 {
00692 createAction( MarkMailAsRead );
00693 createAction( MarkMailAsUnread );
00694 createAction( MarkMailAsImportant );
00695 createAction( MarkMailAsActionItem );
00696 createAction( MarkAllMailAsRead );
00697 createAction( MarkAllMailAsUnread );
00698 createAction( MarkAllMailAsImportant );
00699 createAction( MarkAllMailAsActionItem );
00700 createAction( MoveToTrash );
00701 createAction( MoveAllToTrash );
00702 createAction( RemoveDuplicates );
00703 createAction( EmptyAllTrash );
00704 createAction( EmptyTrash );
00705
00706 d->mGenericManager->createAllActions();
00707
00708 d->updateActions();
00709 }
00710
00711 KAction* StandardMailActionManager::action( Type type ) const
00712 {
00713 if ( d->mActions.contains( type ) )
00714 return d->mActions.value( type );
00715
00716 return 0;
00717 }
00718
00719 KAction* StandardMailActionManager::action( StandardActionManager::Type type ) const
00720 {
00721 return d->mGenericManager->action( type );
00722 }
00723
00724 void StandardMailActionManager::setActionText( StandardActionManager::Type type, const KLocalizedString &text )
00725 {
00726 d->mGenericManager->setActionText( type, text );
00727 }
00728
00729 void StandardMailActionManager::interceptAction( Type type, bool intercept )
00730 {
00731 if ( intercept )
00732 d->mInterceptedActions.insert( type );
00733 else
00734 d->mInterceptedActions.remove( type );
00735 }
00736
00737 void StandardMailActionManager::interceptAction( StandardActionManager::Type type, bool intercept )
00738 {
00739 d->mGenericManager->interceptAction( type, intercept );
00740 }
00741
00742 Akonadi::Collection::List StandardMailActionManager::selectedCollections() const
00743 {
00744 return d->mGenericManager->selectedCollections();
00745 }
00746
00747 Akonadi::Item::List StandardMailActionManager::selectedItems() const
00748 {
00749 return d->mGenericManager->selectedItems();
00750 }
00751
00752 void StandardMailActionManager::setFavoriteCollectionsModel( FavoriteCollectionsModel *favoritesModel )
00753 {
00754 d->mGenericManager->setFavoriteCollectionsModel( favoritesModel );
00755 }
00756
00757 void StandardMailActionManager::setFavoriteSelectionModel( QItemSelectionModel *selectionModel )
00758 {
00759 d->mGenericManager->setFavoriteSelectionModel( selectionModel );
00760 }
00761
00762 void StandardMailActionManager::setCollectionPropertiesPageNames( const QStringList &names )
00763 {
00764 d->mGenericManager->setCollectionPropertiesPageNames( names );
00765 }
00766
00767 #include "standardmailactionmanager.moc"