kmail

kmcommands.h

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