• Skip to content
  • Skip to link menu
KDE 4.6 API Reference
  • KDE API Reference
  • KDE-PIM Libraries
  • KDE Home
  • Contact Us
 

akonadi

standardmailactionmanager.cpp
00001 /*
00002     This file is part of Akonadi Contact.
00003 
00004     Copyright (c) 2009 - 2010 Tobias Koenig <tokoe@kde.org>
00005     Copyright (c) 2010 Klarälvdalens Datakonsult AB, a KDAB Group company, info@kdab.com
00006     Copyright (c) 2010 Andras Mantia <andras@kdab.com>
00007 
00008     This library is free software; you can redistribute it and/or modify it
00009     under the terms of the GNU Library General Public License as published by
00010     the Free Software Foundation; either version 2 of the License, or (at your
00011     option) any later version.
00012 
00013     This library is distributed in the hope that it will be useful, but WITHOUT
00014     ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
00015     FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Library General Public
00016     License for more details.
00017 
00018     You should have received a copy of the GNU Library General Public License
00019     along with this library; see the file COPYING.LIB.  If not, write to the
00020     Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
00021     02110-1301, USA.
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   //to catch item modifications, listen to the model's dataChanged signal as well
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 ); // should never happen
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"

akonadi

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

KDE-PIM Libraries

Skip menu "KDE-PIM Libraries"
  • akonadi
  •   contact
  •   kmime
  • kabc
  • kblog
  • kcal
  • kcalcore
  • kcalutils
  • kholidays
  • kimap
  • kioslave
  •   imap4
  •   mbox
  •   nntp
  • kldap
  • kmbox
  • kmime
  • kontactinterface
  • kpimidentities
  • kpimtextedit
  •   richtextbuilders
  • kpimutils
  • kresources
  • ktnef
  • kxmlrpcclient
  • mailtransport
  • microblog
  • qgpgme
  • syndication
  •   atom
  •   rdf
  •   rss2
Generated for KDE-PIM Libraries by doxygen 1.7.4
This website is maintained by Adriaan de Groot and Allen Winter.
KDE® and the K Desktop Environment® logo are registered trademarks of KDE e.V. | Legal