kmail

kmcommands.h

00001 // -*- mode: C++; c-file-style: "gnu" -*-
00002 
00003 #ifndef KMCommands_h
00004 #define KMCommands_h
00005 
00006 #include <qdatetime.h>
00007 #include <qguardedptr.h>
00008 #include <qptrlist.h>
00009 #include <qvaluelist.h>
00010 #include <qvaluevector.h>
00011 #include <qtimer.h>
00012 #include <qfont.h>
00013 #include <kio/job.h>
00014 #include "kmmsgbase.h" // for KMMsgStatus
00015 #include <mimelib/string.h>
00016 #include <kdepimmacros.h>
00017 #include <kservice.h>
00018 #include <ktempfile.h>
00019 
00020 class QPopupMenu;
00021 class KMainWindow;
00022 class KAction;
00023 class KProgressDialog;
00024 class KProcess;
00025 class KMFilter;
00026 class KMFolder;
00027 class KMFolderImap;
00028 class KMFolderNode;
00029 class KMHeaders;
00030 class KMMainWidget;
00031 class KMMessage;
00032 class KMMsgBase;
00033 class KMReaderWin;
00034 class partNode;
00035 class DwBodyPart;
00036 class DwEntity;
00037 namespace KIO { class Job; }
00038 namespace KMail {
00039   class Composer;
00040   class FolderJob;
00041   class EditorWatcher;
00042   class HeaderStyle;
00043   class HeaderStrategy;
00044 }
00045 namespace GpgME { class Error; }
00046 namespace Kleo { class SpecialJob; }
00047 
00048 typedef QMap<int,KMFolder*> KMMenuToFolder;
00049 typedef QMap<partNode*, KMMessage*> PartNodeMessageMap;
00050 
00051 class KDE_EXPORT KMCommand : public QObject
00052 {
00053   Q_OBJECT
00054     friend class LaterDeleterWithCommandCompletion;
00055 
00056 public:
00057   enum Result { Undefined, OK, Canceled, Failed };
00058 
00059   // Trival constructor, don't retrieve any messages
00060   KMCommand( QWidget *parent = 0 );
00061   // Retrieve all messages in msgList when start is called.
00062   KMCommand( QWidget *parent, const QPtrList<KMMsgBase> &msgList );
00063   // Retrieve the single message msgBase when start is called.
00064   KMCommand( QWidget *parent, KMMsgBase *msgBase );
00065   // Retrieve the single message msgBase when start is called.
00066   KMCommand( QWidget *parent, KMMessage *message );
00067   virtual ~KMCommand();
00068 
00073   void keepFolderOpen( KMFolder *folder );
00074 
00078   Result result();
00079 
00080 public slots:
00081   // Retrieve messages then calls execute
00082   void start();
00083 
00084   // advance the progressbar, emitted by the folderjob
00085   void slotProgress( unsigned long done, unsigned long total );
00086 
00087 signals:
00088   void messagesTransfered( KMCommand::Result result );
00091   void completed( KMCommand *command );
00092 
00093 protected:
00094   // Returns list of messages retrieved
00095   const QPtrList<KMMessage> retrievedMsgs() const;
00096   // Returns the single message retrieved
00097   KMMessage *retrievedMessage() const;
00098   // Returns the parent widget
00099   QWidget *parentWidget() const;
00100 
00101   bool deletesItself() { return mDeletesItself; }
00107   void setDeletesItself( bool deletesItself )
00108   { mDeletesItself = deletesItself; }
00109 
00110   bool emitsCompletedItself() { return mEmitsCompletedItself; }
00117   void setEmitsCompletedItself( bool emitsCompletedItself )
00118   { mEmitsCompletedItself = emitsCompletedItself; }
00119 
00123   void setResult( Result result )
00124   { mResult = result; }
00125 
00126 private:
00127   // execute should be implemented by derived classes
00128   virtual Result execute() = 0;
00129 
00132   void transferSelectedMsgs();
00133 
00134 private slots:
00136   virtual void slotStart();
00137 
00138   void slotPostTransfer( KMCommand::Result result );
00140   void slotMsgTransfered(KMMessage* msg);
00142   void slotJobFinished();
00144   void slotTransferCancelled();
00145 
00146 private:
00147   // ProgressDialog for transferring messages
00148   KProgressDialog* mProgressDialog;
00149   //Currently only one async command allowed at a time
00150   static int mCountJobs;
00151   int mCountMsgs;
00152   Result mResult;
00153   bool mDeletesItself : 1;
00154   bool mEmitsCompletedItself : 1;
00155 
00156   QWidget *mParent;
00157   QPtrList<KMMessage> mRetrievedMsgs;
00158   QPtrList<KMMsgBase> mMsgList;
00159   QValueList<QGuardedPtr<KMFolder> > mFolders;
00160 };
00161 
00162 class KDE_EXPORT KMMailtoComposeCommand : public KMCommand
00163 {
00164   Q_OBJECT
00165 
00166 public:
00167   KMMailtoComposeCommand( const KURL &url, KMMessage *msg=0 );
00168 
00169 private:
00170   virtual Result execute();
00171 
00172   KURL mUrl;
00173   KMMessage *mMessage;
00174 };
00175 
00176 class KDE_EXPORT KMMailtoReplyCommand : public KMCommand
00177 {
00178   Q_OBJECT
00179 
00180 public:
00181   KMMailtoReplyCommand( QWidget *parent, const KURL &url,
00182             KMMessage *msg, const QString &selection );
00183 
00184 private:
00185   virtual Result execute();
00186 
00187   KURL mUrl;
00188   QString mSelection;
00189 };
00190 
00191 class KDE_EXPORT KMMailtoForwardCommand : public KMCommand
00192 {
00193   Q_OBJECT
00194 
00195 public:
00196   KMMailtoForwardCommand( QWidget *parent, const KURL &url,
00197               KMMessage *msg );
00198 
00199 private:
00200   virtual Result execute();
00201 
00202   KURL mUrl;
00203 };
00204 
00205 class KDE_EXPORT KMMailtoAddAddrBookCommand : public KMCommand
00206 {
00207   Q_OBJECT
00208 
00209 public:
00210   KMMailtoAddAddrBookCommand( const KURL &url, QWidget *parent );
00211 
00212 private:
00213   virtual Result execute();
00214 
00215   KURL mUrl;
00216 };
00217 
00218 class KDE_EXPORT KMAddBookmarksCommand : public KMCommand
00219 {
00220   Q_OBJECT
00221 
00222 public:
00223   KMAddBookmarksCommand( const KURL &url, QWidget *parent );
00224 
00225 private:
00226   virtual Result execute();
00227 
00228   KURL mUrl;
00229 };
00230 
00231 
00232 class KDE_EXPORT KMMailtoOpenAddrBookCommand : public KMCommand
00233 {
00234   Q_OBJECT
00235 
00236 public:
00237   KMMailtoOpenAddrBookCommand( const KURL &url, QWidget *parent );
00238 
00239 private:
00240   virtual Result execute();
00241 
00242   KURL mUrl;
00243 };
00244 
00245 class KDE_EXPORT KMUrlCopyCommand : public KMCommand
00246 {
00247   Q_OBJECT
00248 
00249 public:
00250   KMUrlCopyCommand( const KURL &url, KMMainWidget *mainWidget = 0 );
00251 
00252 private:
00253   virtual Result execute();
00254 
00255   KURL mUrl;
00256   KMMainWidget *mMainWidget;
00257 };
00258 
00259 class KDE_EXPORT KMUrlOpenCommand : public KMCommand
00260 {
00261   Q_OBJECT
00262 
00263 public:
00264   KMUrlOpenCommand( const KURL &url, KMReaderWin *readerWin );
00265 
00266 private:
00267   virtual Result execute();
00268 
00269   KURL mUrl;
00270   KMReaderWin *mReaderWin;
00271 };
00272 
00273 class KDE_EXPORT KMUrlSaveCommand : public KMCommand
00274 {
00275   Q_OBJECT
00276 
00277 public:
00278   KMUrlSaveCommand( const KURL &url, QWidget *parent );
00279 
00280 private slots:
00281   void slotUrlSaveResult( KIO::Job *job );
00282 
00283 private:
00284   virtual Result execute();
00285 
00286   KURL mUrl;
00287 };
00288 
00289 class KDE_EXPORT KMEditMsgCommand : public KMCommand
00290 {
00291   Q_OBJECT
00292 
00293 public:
00294   KMEditMsgCommand( QWidget *parent, KMMessage *msg );
00295 
00296 private:
00297   virtual Result execute();
00298 };
00299 
00300 class KDE_EXPORT KMUseTemplateCommand : public KMCommand
00301 {
00302   Q_OBJECT
00303 
00304 public:
00305   KMUseTemplateCommand( QWidget *parent, KMMessage *msg );
00306 
00307 private:
00308   virtual Result execute();
00309 };
00310 
00311 class KDE_EXPORT KMShowMsgSrcCommand : public KMCommand
00312 {
00313   Q_OBJECT
00314 
00315 public:
00316   KMShowMsgSrcCommand( QWidget *parent, KMMessage *msg,
00317                bool fixedFont );
00318   virtual Result execute();
00319 
00320 private:
00321   bool mFixedFont;
00322   bool mMsgWasComplete;
00323 };
00324 
00325 class KDE_EXPORT KMSaveMsgCommand : public KMCommand
00326 {
00327   Q_OBJECT
00328 
00329 public:
00330   KMSaveMsgCommand( QWidget *parent, const QPtrList<KMMsgBase> &msgList );
00331   KMSaveMsgCommand( QWidget *parent, KMMessage * msg );
00332   KURL url();
00333 
00334 private:
00335   virtual Result execute();
00336 
00337 private slots:
00338   void slotSaveDataReq();
00339   void slotSaveResult(KIO::Job *job);
00341   void slotMessageRetrievedForSaving(KMMessage *msg);
00342 
00343 private:
00344   static const int MAX_CHUNK_SIZE = 64*1024;
00345   KURL mUrl;
00346   QValueList<unsigned long> mMsgList;
00347   unsigned int mMsgListIndex;
00348   KMMessage *mStandAloneMessage;
00349   QByteArray mData;
00350   int mOffset;
00351   size_t mTotalSize;
00352   KIO::TransferJob *mJob;
00353 };
00354 
00355 class KDE_EXPORT KMOpenMsgCommand : public KMCommand
00356 {
00357   Q_OBJECT
00358 
00359 public:
00360   KMOpenMsgCommand( QWidget *parent, const KURL & url = KURL(),
00361                     const QString & encoding = QString() );
00362 
00363 private:
00364   virtual Result execute();
00365 
00366 private slots:
00367   void slotDataArrived( KIO::Job *job, const QByteArray & data );
00368   void slotResult( KIO::Job *job );
00369 
00370 private:
00371   static const int MAX_CHUNK_SIZE = 64*1024;
00372   KURL mUrl;
00373   DwString mMsgString;
00374   KIO::TransferJob *mJob;
00375   const QString mEncoding;
00376 };
00377 
00378 class KDE_EXPORT KMSaveAttachmentsCommand : public KMCommand
00379 {
00380   Q_OBJECT
00381 public:
00386   KMSaveAttachmentsCommand( QWidget *parent, KMMessage *msg  );
00391   KMSaveAttachmentsCommand( QWidget *parent, const QPtrList<KMMsgBase>& msgs );
00400   KMSaveAttachmentsCommand( QWidget *parent, QPtrList<partNode> &attachments,
00401                             KMMessage *msg, bool encoded = false  );
00402 
00403 private slots:
00404   void slotSaveAll();
00405 
00406 private:
00407   virtual Result execute();
00408   Result saveItem( partNode *node, const KURL& url );
00409 
00410 private:
00411   PartNodeMessageMap mAttachmentMap;
00412   bool mImplicitAttachments;
00413   bool mEncoded;
00414 };
00415 
00416 class KDE_EXPORT KMReplyToCommand : public KMCommand
00417 {
00418   Q_OBJECT
00419 
00420 public:
00421   KMReplyToCommand( QWidget *parent, KMMessage *msg,
00422                     const QString &selection = QString::null );
00423 
00424 private:
00425   virtual Result execute();
00426 
00427 private:
00428   QString mSelection;
00429 };
00430 
00431 class KDE_EXPORT KMNoQuoteReplyToCommand : public KMCommand
00432 {
00433   Q_OBJECT
00434 
00435 public:
00436   KMNoQuoteReplyToCommand( QWidget *parent, KMMessage *msg );
00437 
00438 private:
00439   virtual Result execute();
00440 };
00441 
00442 class KMReplyListCommand : public KMCommand
00443 {
00444   Q_OBJECT
00445 
00446 public:
00447   KMReplyListCommand( QWidget *parent, KMMessage *msg,
00448               const QString &selection = QString::null );
00449 
00450 private:
00451   virtual Result execute();
00452 
00453 private:
00454   QString mSelection;
00455 };
00456 
00457 class KDE_EXPORT KMReplyToAllCommand : public KMCommand
00458 {
00459   Q_OBJECT
00460 
00461 public:
00462   KMReplyToAllCommand( QWidget *parent, KMMessage *msg,
00463                const QString &selection = QString::null );
00464 
00465 private:
00466   virtual Result execute();
00467 
00468 private:
00469   QString mSelection;
00470 };
00471 
00472 class KDE_EXPORT KMReplyAuthorCommand : public KMCommand
00473 {
00474   Q_OBJECT
00475 
00476 public:
00477   KMReplyAuthorCommand( QWidget *parent, KMMessage *msg,
00478                         const QString &selection = QString::null );
00479 
00480 private:
00481   virtual Result execute();
00482 
00483 private:
00484   QString mSelection;
00485 };
00486 
00487 class KDE_EXPORT KMForwardInlineCommand : public KMCommand
00488 {
00489   Q_OBJECT
00490 
00491 public:
00492   KMForwardInlineCommand( QWidget *parent, const QPtrList<KMMsgBase> &msgList,
00493                           uint identity = 0 );
00494   KMForwardInlineCommand( QWidget *parent, KMMessage * msg,
00495                           uint identity = 0 );
00496 
00497 private:
00498   virtual Result execute();
00499 
00500 private:
00501   uint mIdentity;
00502 };
00503 
00504 class KDE_EXPORT KMForwardAttachedCommand : public KMCommand
00505 {
00506   Q_OBJECT
00507 
00508 public:
00509   KMForwardAttachedCommand( QWidget *parent, const QPtrList<KMMsgBase> &msgList,
00510                 uint identity = 0, KMail::Composer *win = 0 );
00511   KMForwardAttachedCommand( QWidget *parent, KMMessage * msg,
00512                 uint identity = 0, KMail::Composer *win = 0 );
00513 
00514 private:
00515   virtual Result execute();
00516 
00517   uint mIdentity;
00518   QGuardedPtr<KMail::Composer> mWin;
00519 };
00520 
00521 class KDE_EXPORT KMForwardDigestCommand : public KMCommand
00522 {
00523   Q_OBJECT
00524 
00525 public:
00526   KMForwardDigestCommand( QWidget *parent, const QPtrList<KMMsgBase> &msgList,
00527                 uint identity = 0, KMail::Composer *win = 0 );
00528   KMForwardDigestCommand( QWidget *parent, KMMessage * msg,
00529                 uint identity = 0, KMail::Composer *win = 0 );
00530 
00531 private:
00532   virtual Result execute();
00533 
00534   uint mIdentity;
00535   QGuardedPtr<KMail::Composer> mWin;
00536 };
00537 
00538 class KDE_EXPORT KMRedirectCommand : public KMCommand
00539 {
00540   Q_OBJECT
00541 
00542 public:
00543   KMRedirectCommand( QWidget *parent, KMMessage *msg );
00544 
00545 private:
00546   virtual Result execute();
00547 };
00548 
00549 class KDE_EXPORT KMCustomReplyToCommand : public KMCommand
00550 {
00551   Q_OBJECT
00552 
00553 public:
00554   KMCustomReplyToCommand( QWidget *parent, KMMessage *msg,
00555                           const QString &selection,
00556                           const QString &tmpl );
00557 
00558 private:
00559   virtual Result execute();
00560 
00561 private:
00562   QString mSelection;
00563   QString mTemplate;
00564 };
00565 
00566 class KDE_EXPORT KMCustomReplyAllToCommand : public KMCommand
00567 {
00568   Q_OBJECT
00569 
00570 public:
00571   KMCustomReplyAllToCommand( QWidget *parent, KMMessage *msg,
00572                           const QString &selection,
00573                           const QString &tmpl );
00574 
00575 private:
00576   virtual Result execute();
00577 
00578 private:
00579   QString mSelection;
00580   QString mTemplate;
00581 };
00582 
00583 class KDE_EXPORT KMCustomForwardCommand : public KMCommand
00584 {
00585   Q_OBJECT
00586 
00587 public:
00588   KMCustomForwardCommand( QWidget *parent, const QPtrList<KMMsgBase> &msgList,
00589                           uint identity, const QString &tmpl );
00590   KMCustomForwardCommand( QWidget *parent, KMMessage * msg,
00591                           uint identity, const QString &tmpl );
00592 
00593 private:
00594   virtual Result execute();
00595 
00596   uint mIdentity;
00597   QString mTemplate;
00598 };
00599 
00600 class KDE_EXPORT KMPrintCommand : public KMCommand
00601 {
00602   Q_OBJECT
00603 
00604 public:
00605   KMPrintCommand( QWidget *parent, KMMessage *msg,
00606                   const KMail::HeaderStyle *headerStyle = 0,
00607                   const KMail::HeaderStrategy *headerStrategy = 0,
00608                   bool htmlOverride = false,
00609                   bool htmlLoadExtOverride = false,
00610                   bool useFixedFont = false,
00611                   const QString & encoding = QString() );
00612 
00613   void setOverrideFont( const QFont& );
00614 
00615 private:
00616   virtual Result execute();
00617 
00618   const KMail::HeaderStyle *mHeaderStyle;
00619   const KMail::HeaderStrategy *mHeaderStrategy;
00620   bool mHtmlOverride;
00621   bool mHtmlLoadExtOverride;
00622   bool mUseFixedFont;
00623   QFont mOverrideFont;
00624   QString mEncoding;
00625 };
00626 
00627 class KDE_EXPORT KMSetStatusCommand : public KMCommand
00628 {
00629   Q_OBJECT
00630 
00631 public:
00632   // Serial numbers
00633   KMSetStatusCommand( KMMsgStatus status, const QValueList<Q_UINT32> &,
00634                       bool toggle=false );
00635 
00636 private:
00637   virtual Result execute();
00638 
00639   KMMsgStatus mStatus;
00640   QValueList<Q_UINT32> mSerNums;
00641   QValueList<int> mIds;
00642   bool mToggle;
00643 };
00644 
00645 class KDE_EXPORT KMFilterCommand : public KMCommand
00646 {
00647   Q_OBJECT
00648 
00649 public:
00650   KMFilterCommand( const QCString &field, const QString &value );
00651 
00652 private:
00653   virtual Result execute();
00654 
00655   QCString mField;
00656   QString mValue;
00657 };
00658 
00659 
00660 class KDE_EXPORT KMFilterActionCommand : public KMCommand
00661 {
00662   Q_OBJECT
00663 
00664 public:
00665   KMFilterActionCommand( QWidget *parent,
00666              const QPtrList<KMMsgBase> &msgList,
00667              KMFilter *filter );
00668 
00669 private:
00670   virtual Result execute();
00671   QValueList<Q_UINT32> serNumList;
00672   KMFilter *mFilter;
00673 };
00674 
00675 
00676 class KDE_EXPORT KMMetaFilterActionCommand : public QObject
00677 {
00678   Q_OBJECT
00679 
00680 public:
00681   KMMetaFilterActionCommand( KMFilter *filter, KMHeaders *headers,
00682                  KMMainWidget *main );
00683 
00684 public slots:
00685   void start();
00686 
00687 private:
00688   KMFilter *mFilter;
00689   KMHeaders *mHeaders;
00690   KMMainWidget *mMainWidget;
00691 };
00692 
00693 class KDE_EXPORT FolderShortcutCommand : public QObject
00694 {
00695   Q_OBJECT
00696 
00697 public:
00698   FolderShortcutCommand( KMMainWidget* mainwidget, KMFolder *folder );
00699   ~FolderShortcutCommand();
00700 
00701 public slots:
00702   void start();
00706   void setAction( KAction* );
00707 
00708 private:
00709   KMMainWidget *mMainWidget;
00710   KMFolder *mFolder;
00711   KAction *mAction;
00712 };
00713 
00714 
00715 class KDE_EXPORT KMMailingListFilterCommand : public KMCommand
00716 {
00717   Q_OBJECT
00718 
00719 public:
00720   KMMailingListFilterCommand( QWidget *parent, KMMessage *msg );
00721 
00722 private:
00723   virtual Result execute();
00724 };
00725 
00726 
00734 class KDE_EXPORT KMMenuCommand : public KMCommand
00735 {
00736   Q_OBJECT
00737 
00738 public:
00739   static void folderToPopupMenu(bool move, QObject *receiver,
00740     KMMenuToFolder *aMenuToFolder, QPopupMenu *menu );
00741 
00742   static void makeFolderMenu(KMFolderNode* item, bool move,
00743     QObject *receiver, KMMenuToFolder *aMenuToFolder, QPopupMenu *menu );
00744 };
00745 
00746 class KDE_EXPORT KMCopyCommand : public KMMenuCommand
00747 {
00748   Q_OBJECT
00749 
00750 public:
00751   KMCopyCommand( KMFolder* destFolder,
00752          const QPtrList<KMMsgBase> &msgList );
00753   KMCopyCommand( KMFolder* destFolder, KMMessage *msg );
00754 
00755 protected slots:
00756   void slotJobFinished( KMail::FolderJob *job );
00757 
00758   void slotFolderComplete( KMFolderImap*, bool success );
00759 
00760 private:
00761   virtual Result execute();
00762 
00763   KMFolder *mDestFolder;
00764   QPtrList<KMMsgBase> mMsgList;
00765   QValueList<KMail::FolderJob*> mPendingJobs;
00766 };
00767 
00768 namespace KPIM {
00769   class ProgressItem;
00770 }
00771 class KDE_EXPORT KMMoveCommand : public KMMenuCommand
00772 {
00773   Q_OBJECT
00774 
00775 public:
00776   KMMoveCommand( KMFolder* destFolder, const QPtrList<KMMsgBase> &msgList );
00777   KMMoveCommand( KMFolder* destFolder, KMMessage * msg );
00778   KMMoveCommand( KMFolder* destFolder, KMMsgBase * msgBase );
00779   KMFolder* destFolder() const { return mDestFolder; }
00780 
00781 public slots:
00782   void slotImapFolderCompleted(KMFolderImap *folder, bool success);
00783   void slotMsgAddedToDestFolder(KMFolder *folder, Q_UINT32 serNum);
00784   void slotMoveCanceled();
00785 
00786 protected:
00787   // Needed for KMDeleteCommand for "move to trash"
00788   KMMoveCommand( Q_UINT32 sernum );
00789   void setDestFolder( KMFolder* folder ) { mDestFolder = folder; }
00790   void addMsg( KMMsgBase *msg ) { mSerNumList.append( msg->getMsgSerNum() ); }
00791   QValueVector<KMFolder*> mOpenedFolders;
00792 
00793 private:
00794   virtual Result execute();
00795   void completeMove( Result result );
00796 
00797   KMFolder *mDestFolder;
00798   QValueList<Q_UINT32> mSerNumList;
00799   // List of serial numbers that have to be transferred to a host.
00800   // Ticked off as they come in via msgAdded signals.
00801   QValueList<Q_UINT32> mLostBoys;
00802   KPIM::ProgressItem *mProgressItem;
00803   bool mCompleteWithAddedMsg;
00804 };
00805 
00806 class KDE_EXPORT KMDeleteMsgCommand : public KMMoveCommand
00807 {
00808   Q_OBJECT
00809 
00810 public:
00811   KMDeleteMsgCommand( KMFolder* srcFolder, const QPtrList<KMMsgBase> &msgList );
00812   KMDeleteMsgCommand( KMFolder* srcFolder, KMMessage * msg );
00813   KMDeleteMsgCommand( Q_UINT32 sernum );
00814 
00815 private:
00816   static KMFolder * findTrashFolder( KMFolder * srcFolder );
00817 
00818 };
00819 
00820 class KDE_EXPORT KMUrlClickedCommand : public KMCommand
00821 {
00822   Q_OBJECT
00823 
00824 public:
00825   KMUrlClickedCommand( const KURL &url, uint identity,
00826     KMReaderWin *readerWin, bool mHtmlPref, KMMainWidget *mainWidget = 0 );
00827 
00828 private:
00829   virtual Result execute();
00830 
00831   KURL mUrl;
00832   uint mIdentity;
00833   KMReaderWin *mReaderWin;
00834   bool mHtmlPref;
00835   KMMainWidget *mMainWidget;
00836 };
00837 
00838 class KDE_EXPORT KMLoadPartsCommand : public KMCommand
00839 {
00840   Q_OBJECT
00841 
00842 public:
00843   KMLoadPartsCommand( QPtrList<partNode>& parts, KMMessage* msg );
00844   KMLoadPartsCommand( partNode* node, KMMessage* msg );
00845   KMLoadPartsCommand( PartNodeMessageMap& partMap );
00846 
00847 public slots:
00848   void slotPartRetrieved( KMMessage* msg, QString partSpecifier );
00849 
00850 signals:
00851   void partsRetrieved();
00852 
00853 private:
00854   // Retrieve parts then calls execute
00855   virtual void slotStart();
00856 
00857   virtual Result execute();
00858 
00859   int mNeedsRetrieval;
00860   PartNodeMessageMap mPartMap;
00861 };
00862 
00863 class KDE_EXPORT KMResendMessageCommand : public KMCommand
00864 {
00865   Q_OBJECT
00866 
00867 public:
00868   KMResendMessageCommand( QWidget *parent, KMMessage *msg=0 );
00869 
00870 private:
00871   virtual Result execute();
00872 };
00873 
00874 class KDE_EXPORT KMMailingListCommand : public KMCommand
00875 {
00876   Q_OBJECT
00877 public:
00878   KMMailingListCommand( QWidget *parent, KMFolder *folder );
00879 private:
00880   virtual Result execute();
00881 private slots:
00882   void commandCompleted( KMCommand *command );
00883 protected:
00884   virtual KURL::List urls() const =0;
00885 protected:
00886   KMFolder *mFolder;
00887 };
00888 
00889 class KDE_EXPORT KMMailingListPostCommand : public KMMailingListCommand
00890 {
00891   Q_OBJECT
00892 public:
00893   KMMailingListPostCommand( QWidget *parent, KMFolder *folder );
00894 protected:
00895   virtual KURL::List urls() const;
00896 };
00897 
00898 class KDE_EXPORT KMMailingListSubscribeCommand : public KMMailingListCommand
00899 {
00900   Q_OBJECT
00901 public:
00902   KMMailingListSubscribeCommand( QWidget *parent, KMFolder *folder );
00903 protected:
00904   virtual KURL::List urls() const;
00905 };
00906 
00907 class KDE_EXPORT KMMailingListUnsubscribeCommand : public KMMailingListCommand
00908 {
00909   Q_OBJECT
00910 public:
00911   KMMailingListUnsubscribeCommand( QWidget *parent, KMFolder *folder );
00912 protected:
00913   virtual KURL::List urls() const;
00914 };
00915 
00916 class KDE_EXPORT KMMailingListArchivesCommand : public KMMailingListCommand
00917 {
00918   Q_OBJECT
00919 public:
00920   KMMailingListArchivesCommand( QWidget *parent, KMFolder *folder );
00921 protected:
00922   virtual KURL::List urls() const;
00923 };
00924 
00925 class KDE_EXPORT KMMailingListHelpCommand : public KMMailingListCommand
00926 {
00927   Q_OBJECT
00928 public:
00929   KMMailingListHelpCommand( QWidget *parent, KMFolder *folder );
00930 protected:
00931   virtual KURL::List urls() const;
00932 };
00933 
00934 class KDE_EXPORT KMIMChatCommand : public KMCommand
00935 {
00936   Q_OBJECT
00937 
00938 public:
00939   KMIMChatCommand( const KURL &url, KMMessage *msg=0 );
00940 
00941 private:
00948   virtual Result execute();
00949 
00950   KURL mUrl;
00951   KMMessage *mMessage;
00952 };
00953 
00954 class KDE_EXPORT KMHandleAttachmentCommand : public KMCommand
00955 {
00956   Q_OBJECT
00957 
00958 public:
00960   enum AttachmentAction
00961   {
00962     Open = 1,
00963     OpenWith = 2,
00964     View = 3,
00965     Save = 4,
00966     Properties = 5,
00967     ChiasmusEncrypt = 6
00968   };
00978   KMHandleAttachmentCommand( partNode* node, KMMessage* msg, int atmId,
00979       const QString& atmName, AttachmentAction action, KService::Ptr offer, QWidget* parent );
00980 
00981 
00982 signals:
00983   void showAttachment( int id, const QString& name );
00984 
00985 private:
00986   virtual Result execute();
00987 
00988   QString createAtmFileLink() const;
00989 
00991   KService::Ptr getServiceOffer();
00992 
00994   void atmOpen();
00995 
00997   void atmOpenWith();
00998 
01003   void atmView();
01004 
01006   void atmSave();
01007 
01009   void atmProperties();
01010 
01012   void atmEncryptWithChiasmus();
01013 
01014 private slots:
01016   virtual void slotStart();
01017 
01022   void slotPartComplete();
01023 
01024   void slotAtmDecryptWithChiasmusResult( const GpgME::Error &, const QVariant & );
01025   void slotAtmDecryptWithChiasmusUploadResult( KIO::Job * );
01026 
01027 private:
01028   partNode* mNode;
01029   KMMessage* mMsg;
01030   int mAtmId;
01031   QString mAtmName;
01032   AttachmentAction mAction;
01033   KService::Ptr mOffer;
01034   Kleo::SpecialJob *mJob;
01035 
01036 };
01037 
01038 
01040 class KDE_EXPORT AttachmentModifyCommand : public KMCommand
01041 {
01042   Q_OBJECT
01043   public:
01044     AttachmentModifyCommand( partNode *node, KMMessage *msg, QWidget *parent );
01045     AttachmentModifyCommand( int nodeId, KMMessage *msg, QWidget *parent );
01046     ~AttachmentModifyCommand();
01047 
01048   protected:
01049     void storeChangedMessage( KMMessage* msg );
01050     virtual Result doAttachmentModify() = 0;
01051 
01052   protected:
01053     int mPartIndex;
01054     Q_UINT32 mSernum;
01055 
01056   private:
01057     Result execute();
01058 
01059   private slots:
01060     void messageStoreResult( KMFolderImap* folder, bool success );
01061     void messageDeleteResult( KMCommand *cmd );
01062 
01063   private:
01064     QGuardedPtr<KMFolder> mFolder;
01065 };
01066 
01067 class KDE_EXPORT KMDeleteAttachmentCommand : public AttachmentModifyCommand
01068 {
01069   Q_OBJECT
01070   public:
01071     KMDeleteAttachmentCommand( partNode *node, KMMessage *msg, QWidget *parent );
01072     KMDeleteAttachmentCommand( int nodeId, KMMessage *msg, QWidget *parent );
01073     ~KMDeleteAttachmentCommand();
01074 
01075   protected:
01076     Result doAttachmentModify();
01077 };
01078 
01079 
01080 class KDE_EXPORT KMEditAttachmentCommand : public AttachmentModifyCommand
01081 {
01082   Q_OBJECT
01083   public:
01084     KMEditAttachmentCommand( partNode *node, KMMessage *msg, QWidget *parent );
01085     KMEditAttachmentCommand( int nodeId, KMMessage *msg, QWidget *parent );
01086     ~KMEditAttachmentCommand();
01087 
01088   protected:
01089     Result doAttachmentModify();
01090 
01091   private slots:
01092     void editDone( KMail::EditorWatcher *watcher );
01093 
01094   private:
01095     KTempFile mTempFile;
01096 };
01097 
01098 class KDE_EXPORT CreateTodoCommand : public KMCommand
01099 {
01100   Q_OBJECT
01101   public:
01102     CreateTodoCommand( QWidget *parent, KMMessage *msg );
01103 
01104   private:
01105     Result execute();
01106 };
01107 
01108 #endif /*KMCommands_h*/
KDE Home | KDE Accessibility Home | Description of Access Keys