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