kmail Library API Documentation

kmcommands.h

00001 // -*- mode: C++; c-file-style: "gnu" -*-
00002 
00003 #ifndef KMCommands_h
00004 #define KMCommands_h
00005 
00006 #include <qguardedptr.h>
00007 #include <qptrlist.h>
00008 #include <qvaluelist.h>
00009 #include <qvaluevector.h>
00010 #include <kio/job.h>
00011 #include "kmmsgbase.h" // for KMMsgStatus
00012 #include <mimelib/string.h>
00013 
00014 class QPopupMenu;
00015 class QTextCodec;
00016 class KMainWindow;
00017 class KProgressDialog;
00018 class KMComposeWin;
00019 class KMFilter;
00020 class KMFolder;
00021 class KMFolderImap;
00022 class KMFolderNode;
00023 class KMHeaders;
00024 class KMMainWidget;
00025 class KMMessage;
00026 class KMMsgBase;
00027 class KMReaderWin;
00028 class partNode;
00029 namespace KIO { class Job; }
00030 
00031 typedef QMap<int,KMFolder*> KMMenuToFolder;
00032 typedef QMap<partNode*, KMMessage*> PartNodeMessageMap;
00033 
00034 class KMCommand : public QObject
00035 {
00036   Q_OBJECT
00037 
00038 public:
00039   enum Result { Undefined, OK, Canceled, Failed };
00040 
00041   // Trival constructor, don't retrieve any messages
00042   KMCommand( QWidget *parent = 0 );
00043   // Retrieve all messages in msgList when start is called.
00044   KMCommand( QWidget *parent, const QPtrList<KMMsgBase> &msgList );
00045   // Retrieve the single message msgBase when start is called.
00046   KMCommand( QWidget *parent, KMMsgBase *msgBase );
00047   // Retrieve the single message msgBase when start is called.
00048   KMCommand( QWidget *parent, KMMessage *message );
00049   virtual ~KMCommand();
00050 
00055   void keepFolderOpen( KMFolder *folder );
00056 
00060   Result result();
00061 
00062 public slots:
00063   // Retrieve messages then calls execute
00064   void start();
00065 
00066   // advance the progressbar, emitted by the folderjob
00067   void slotProgress( unsigned long done, unsigned long total );
00068 
00069 signals:
00070   void messagesTransfered( KMCommand::Result result );
00073   void completed( KMCommand *command );
00074 
00075 protected:
00076   // Returns list of messages retrieved
00077   const QPtrList<KMMessage> retrievedMsgs() const;
00078   // Returns the single message retrieved
00079   KMMessage *retrievedMessage() const;
00080   // Returns the parent widget
00081   QWidget *parentWidget() const;
00082 
00083   bool deletesItself() { return mDeletesItself; }
00089   void setDeletesItself( bool deletesItself )
00090   { mDeletesItself = deletesItself; }
00091 
00092   bool emitsCompletedItself() { return mEmitsCompletedItself; }
00099   void setEmitsCompletedItself( bool emitsCompletedItself )
00100   { mEmitsCompletedItself = emitsCompletedItself; }
00101 
00105   void setResult( Result result )
00106   { mResult = result; }
00107 
00108 private:
00109   // execute should be implemented by derived classes
00110   virtual Result execute() = 0;
00111 
00114   void transferSelectedMsgs();
00115 
00116 private slots:
00118   virtual void slotStart();
00119 
00120   void slotPostTransfer( KMCommand::Result result );
00122   void slotMsgTransfered(KMMessage* msg);
00124   void slotJobFinished();
00126   void slotTransferCancelled();
00127 
00128 private:
00129   // ProgressDialog for transferring messages
00130   KProgressDialog* mProgressDialog;
00131   //Currently only one async command allowed at a time
00132   static int mCountJobs;
00133   int mCountMsgs;
00134   Result mResult;
00135   bool mDeletesItself : 1;
00136   bool mEmitsCompletedItself : 1;
00137 
00138   QWidget *mParent;
00139   QPtrList<KMMessage> mRetrievedMsgs;
00140   QPtrList<KMMsgBase> mMsgList;
00141   QValueList<QGuardedPtr<KMFolder> > mFolders;
00142 };
00143 
00144 class KMMailtoComposeCommand : public KMCommand
00145 {
00146   Q_OBJECT
00147 
00148 public:
00149   KMMailtoComposeCommand( const KURL &url, KMMessage *msg=0 );
00150 
00151 private:
00152   virtual Result execute();
00153 
00154   KURL mUrl;
00155   KMMessage *mMessage;
00156 };
00157 
00158 class KMMailtoReplyCommand : public KMCommand
00159 {
00160   Q_OBJECT
00161 
00162 public:
00163   KMMailtoReplyCommand( QWidget *parent, const KURL &url,
00164             KMMessage *msg, const QString &selection );
00165 
00166 private:
00167   virtual Result execute();
00168 
00169   KURL mUrl;
00170   QString mSelection;
00171 };
00172 
00173 class KMMailtoForwardCommand : public KMCommand
00174 {
00175   Q_OBJECT
00176 
00177 public:
00178   KMMailtoForwardCommand( QWidget *parent, const KURL &url,
00179               KMMessage *msg );
00180 
00181 private:
00182   virtual Result execute();
00183 
00184   KURL mUrl;
00185 };
00186 
00187 class KMMailtoAddAddrBookCommand : public KMCommand
00188 {
00189   Q_OBJECT
00190 
00191 public:
00192   KMMailtoAddAddrBookCommand( const KURL &url, QWidget *parent );
00193 
00194 private:
00195   virtual Result execute();
00196 
00197   KURL mUrl;
00198 };
00199 
00200 class KMAddBookmarksCommand : public KMCommand
00201 {
00202   Q_OBJECT
00203 
00204 public:
00205   KMAddBookmarksCommand( const KURL &url, QWidget *parent );
00206 
00207 private:
00208   virtual Result execute();
00209 
00210   KURL mUrl;
00211 };
00212 
00213 
00214 class KMMailtoOpenAddrBookCommand : public KMCommand
00215 {
00216   Q_OBJECT
00217 
00218 public:
00219   KMMailtoOpenAddrBookCommand( const KURL &url, QWidget *parent );
00220 
00221 private:
00222   virtual Result execute();
00223 
00224   KURL mUrl;
00225 };
00226 
00227 class KMUrlCopyCommand : public KMCommand
00228 {
00229   Q_OBJECT
00230 
00231 public:
00232   KMUrlCopyCommand( const KURL &url, KMMainWidget *mainWidget = 0 );
00233 
00234 private:
00235   virtual Result execute();
00236 
00237   KURL mUrl;
00238   KMMainWidget *mMainWidget;
00239 };
00240 
00241 class KMUrlOpenCommand : public KMCommand
00242 {
00243   Q_OBJECT
00244 
00245 public:
00246   KMUrlOpenCommand( const KURL &url, KMReaderWin *readerWin );
00247 
00248 private:
00249   virtual Result execute();
00250 
00251   KURL mUrl;
00252   KMReaderWin *mReaderWin;
00253 };
00254 
00255 class KMUrlSaveCommand : public KMCommand
00256 {
00257   Q_OBJECT
00258 
00259 public:
00260   KMUrlSaveCommand( const KURL &url, QWidget *parent );
00261 
00262 private slots:
00263   void slotUrlSaveResult( KIO::Job *job );
00264 
00265 private:
00266   virtual Result execute();
00267 
00268   KURL mUrl;
00269 };
00270 
00271 class KMEditMsgCommand : public KMCommand
00272 {
00273   Q_OBJECT
00274 
00275 public:
00276   KMEditMsgCommand( QWidget *parent, KMMessage *msg );
00277 
00278 private:
00279   virtual Result execute();
00280 };
00281 
00282 class KMShowMsgSrcCommand
00283 {
00284 public:
00285   KMShowMsgSrcCommand( KMMessage *msg, bool fixedFont );
00286                
00287   void start();
00288 
00289 private:
00290   bool mFixedFont;
00291   KMMessage *mMsg;
00292 };
00293 
00294 class KMSaveMsgCommand : public KMCommand
00295 {
00296   Q_OBJECT
00297 
00298 public:
00299   KMSaveMsgCommand( QWidget *parent, const QPtrList<KMMsgBase> &msgList );
00300   KMSaveMsgCommand( QWidget *parent, KMMessage * msg );
00301   KURL url();
00302 
00303 private:
00304   virtual Result execute();
00305 
00306 private slots:
00307   void slotSaveDataReq();
00308   void slotSaveResult(KIO::Job *job);
00310   void slotMessageRetrievedForSaving(KMMessage *msg);
00311 
00312 private:
00313   static const int MAX_CHUNK_SIZE = 64*1024;
00314   KURL mUrl;
00315   QValueList<unsigned long> mMsgList;
00316   unsigned int mMsgListIndex;
00317   QByteArray mData;
00318   int mOffset;
00319   size_t mTotalSize;
00320   KIO::TransferJob *mJob;
00321 };
00322 
00323 class KMOpenMsgCommand : public KMCommand
00324 {
00325   Q_OBJECT
00326 
00327 public:
00328   KMOpenMsgCommand( QWidget *parent, const KURL & url = KURL() );
00329 
00330 private:
00331   virtual Result execute();
00332 
00333 private slots:
00334   void slotDataArrived( KIO::Job *job, const QByteArray & data );
00335   void slotResult( KIO::Job *job );
00336 
00337 private:
00338   static const int MAX_CHUNK_SIZE = 64*1024;
00339   KURL mUrl;
00340   DwString mMsgString;
00341   KIO::TransferJob *mJob;
00342 };
00343 
00344 class KMSaveAttachmentsCommand : public KMCommand
00345 {
00346   Q_OBJECT
00347 public:
00352   KMSaveAttachmentsCommand( QWidget *parent, KMMessage *msg  );
00357   KMSaveAttachmentsCommand( QWidget *parent, const QPtrList<KMMsgBase>& msgs );
00366   KMSaveAttachmentsCommand( QWidget *parent, QPtrList<partNode> &attachments,
00367                             KMMessage *msg, bool encoded = false  );
00368 
00369 private slots:
00370   void slotSaveAll();
00371 
00372 private:
00373   virtual Result execute();
00374   Result saveItem( partNode *node, const KURL& url );
00375 
00376 private:
00377   PartNodeMessageMap mAttachmentMap;
00378   bool mImplicitAttachments;
00379   bool mEncoded;
00380 };
00381 
00382 class KMReplyToCommand : public KMCommand
00383 {
00384   Q_OBJECT
00385 
00386 public:
00387   KMReplyToCommand( QWidget *parent, KMMessage *msg,
00388                     const QString &selection = QString::null );
00389 
00390 private:
00391   virtual Result execute();
00392 
00393 private:
00394   QString mSelection;
00395 };
00396 
00397 class KMNoQuoteReplyToCommand : public KMCommand
00398 {
00399   Q_OBJECT
00400 
00401 public:
00402   KMNoQuoteReplyToCommand( QWidget *parent, KMMessage *msg );
00403 
00404 private:
00405   virtual Result execute();
00406 };
00407 
00408 class KMReplyListCommand : public KMCommand
00409 {
00410   Q_OBJECT
00411 
00412 public:
00413   KMReplyListCommand( QWidget *parent, KMMessage *msg,
00414               const QString &selection = QString::null );
00415 
00416 private:
00417   virtual Result execute();
00418 
00419 private:
00420   QString mSelection;
00421 };
00422 
00423 class KMReplyToAllCommand : public KMCommand
00424 {
00425   Q_OBJECT
00426 
00427 public:
00428   KMReplyToAllCommand( QWidget *parent, KMMessage *msg,
00429                const QString &selection = QString::null );
00430 
00431 private:
00432   virtual Result execute();
00433 
00434 private:
00435   QString mSelection;
00436 };
00437 
00438 class KMReplyAuthorCommand : public KMCommand
00439 {
00440   Q_OBJECT
00441 
00442 public:
00443   KMReplyAuthorCommand( QWidget *parent, KMMessage *msg,
00444                         const QString &selection = QString::null );
00445 
00446 private:
00447   virtual Result execute();
00448 
00449 private:
00450   QString mSelection;
00451 };
00452 
00453 class KMForwardCommand : public KMCommand
00454 {
00455   Q_OBJECT
00456 
00457 public:
00458   KMForwardCommand( QWidget *parent, const QPtrList<KMMsgBase> &msgList,
00459                     uint identity = 0 );
00460   KMForwardCommand( QWidget *parent, KMMessage * msg,
00461                     uint identity = 0 );
00462 
00463 private:
00464   virtual Result execute();
00465 
00466 private:
00467   uint mIdentity;
00468 };
00469 
00470 class KMForwardAttachedCommand : public KMCommand
00471 {
00472   Q_OBJECT
00473 
00474 public:
00475   KMForwardAttachedCommand( QWidget *parent, const QPtrList<KMMsgBase> &msgList,
00476                 uint identity = 0, KMComposeWin *win = 0 );
00477   KMForwardAttachedCommand( QWidget *parent, KMMessage * msg,
00478                 uint identity = 0, KMComposeWin *win = 0 );
00479 
00480 private:
00481   virtual Result execute();
00482 
00483   uint mIdentity;
00484   QGuardedPtr<KMComposeWin> mWin;
00485 };
00486 
00487 class KMRedirectCommand : public KMCommand
00488 {
00489   Q_OBJECT
00490 
00491 public:
00492   KMRedirectCommand( QWidget *parent, KMMessage *msg );
00493 
00494 private:
00495   virtual Result execute();
00496 };
00497 
00498 class KMBounceCommand : public KMCommand
00499 {
00500   Q_OBJECT
00501 
00502 public:
00503   KMBounceCommand( QWidget *parent, KMMessage *msg );
00504 
00505 private:
00506   virtual Result execute();
00507 };
00508 
00509 class KMPrintCommand : public KMCommand
00510 {
00511   Q_OBJECT
00512 
00513 public:
00514   KMPrintCommand( QWidget *parent, KMMessage *msg, 
00515                   bool htmlOverride=false, const QTextCodec *codec = 0 );
00516 
00517 private:
00518   virtual Result execute();
00519 
00520   bool mHtmlOverride;
00521   const QTextCodec *mCodec;
00522 };
00523 
00524 class KMSetStatusCommand : public KMCommand
00525 {
00526   Q_OBJECT
00527 
00528 public:
00529   // Serial numbers
00530   KMSetStatusCommand( KMMsgStatus status, const QValueList<Q_UINT32> &,
00531                       bool toggle=false );
00532 
00533 private:
00534   virtual Result execute();
00535 
00536   KMMsgStatus mStatus;
00537   QValueList<Q_UINT32> mSerNums;
00538   QValueList<int> mIds;
00539   bool mToggle;
00540 };
00541 
00542 class KMFilterCommand : public KMCommand
00543 {
00544   Q_OBJECT
00545 
00546 public:
00547   KMFilterCommand( const QCString &field, const QString &value );
00548 
00549 private:
00550   virtual Result execute();
00551 
00552   QCString mField;
00553   QString mValue;
00554 };
00555 
00556 
00557 class KMFilterActionCommand : public KMCommand
00558 {
00559   Q_OBJECT
00560 
00561 public:
00562   KMFilterActionCommand( QWidget *parent,
00563              const QPtrList<KMMsgBase> &msgList,
00564              KMFilter *filter );
00565 
00566 private:
00567   virtual Result execute();
00568 
00569   KMFilter *mFilter;
00570 };
00571 
00572 
00573 class KMMetaFilterActionCommand : public QObject
00574 {
00575   Q_OBJECT
00576 
00577 public:
00578   KMMetaFilterActionCommand( KMFilter *filter, KMHeaders *headers,
00579                  KMMainWidget *main );
00580 
00581 public slots:
00582   void start();
00583 
00584 private:
00585   KMFilter *mFilter;
00586   KMHeaders *mHeaders;
00587   KMMainWidget *mMainWidget;
00588 };
00589 
00590 
00591 class KMMailingListFilterCommand : public KMCommand
00592 {
00593   Q_OBJECT
00594 
00595 public:
00596   KMMailingListFilterCommand( QWidget *parent, KMMessage *msg );
00597 
00598 private:
00599   virtual Result execute();
00600 };
00601 
00602 
00610 class KMMenuCommand : public KMCommand
00611 {
00612   Q_OBJECT
00613 
00614 public:
00615   static void folderToPopupMenu(bool move, QObject *receiver,
00616     KMMenuToFolder *aMenuToFolder, QPopupMenu *menu );
00617 
00618   static void makeFolderMenu(KMFolderNode* item, bool move,
00619     QObject *receiver, KMMenuToFolder *aMenuToFolder, QPopupMenu *menu );
00620 };
00621 
00622 class KMCopyCommand : public KMMenuCommand
00623 {
00624   Q_OBJECT
00625 
00626 public:
00627   KMCopyCommand( KMFolder* destFolder,
00628          const QPtrList<KMMsgBase> &msgList );
00629   KMCopyCommand( KMFolder* destFolder, KMMessage *msg );
00630 
00631 private:
00632   virtual Result execute();
00633 
00634   KMFolder *mDestFolder;
00635   QPtrList<KMMsgBase> mMsgList;
00636 };
00637 
00638 namespace KPIM {
00639   class ProgressItem;
00640 }
00641 class KMMoveCommand : public KMMenuCommand
00642 {
00643   Q_OBJECT
00644 
00645 public:
00646   KMMoveCommand( KMFolder* destFolder, const QPtrList<KMMsgBase> &msgList );
00647   KMMoveCommand( KMFolder* destFolder, KMMessage * msg );
00648   KMMoveCommand( KMFolder* destFolder, KMMsgBase * msgBase );
00649   KMFolder* destFolder() const { return mDestFolder; }
00650 
00651 public slots:
00652   void slotImapFolderCompleted(KMFolderImap *folder, bool success);
00653   void slotMsgAddedToDestFolder(KMFolder *folder, Q_UINT32 serNum);
00654   void slotMoveCanceled();
00655 
00656 protected:
00657   // Needed for KMDeleteCommand for "move to trash"
00658   KMMoveCommand( Q_UINT32 sernum );
00659   void setDestFolder( KMFolder* folder ) { mDestFolder = folder; }
00660   void addMsg( KMMsgBase *msg ) { mMsgList.append( msg ); }
00661   QValueVector<KMFolder*> mOpenedFolders;
00662 
00663 private:
00664   virtual Result execute();
00665   void completeMove( Result result );
00666 
00667   KMFolder *mDestFolder;
00668   QPtrList<KMMsgBase> mMsgList;
00669   // List of serial numbers that have to be transferred to a host.
00670   // Ticked off as they come in via msgAdded signals.
00671   QValueList<Q_UINT32> mLostBoys;
00672   KPIM::ProgressItem *mProgressItem;
00673 };
00674 
00675 class KMDeleteMsgCommand : public KMMoveCommand
00676 {
00677   Q_OBJECT
00678 
00679 public:
00680   KMDeleteMsgCommand( KMFolder* srcFolder, const QPtrList<KMMsgBase> &msgList );
00681   KMDeleteMsgCommand( KMFolder* srcFolder, KMMessage * msg );
00682   KMDeleteMsgCommand( Q_UINT32 sernum );
00683 
00684 private:
00685   static KMFolder * findTrashFolder( KMFolder * srcFolder );
00686 
00687 };
00688 
00689 class KMUrlClickedCommand : public KMCommand
00690 {
00691   Q_OBJECT
00692 
00693 public:
00694   KMUrlClickedCommand( const KURL &url, uint identity,
00695     KMReaderWin *readerWin, bool mHtmlPref, KMMainWidget *mainWidget = 0 );
00696 
00697 private:
00698   virtual Result execute();
00699 
00700   KURL mUrl;
00701   uint mIdentity;
00702   KMReaderWin *mReaderWin;
00703   bool mHtmlPref;
00704   KMMainWidget *mMainWidget;
00705 };
00706 
00707 class KMLoadPartsCommand : public KMCommand
00708 {
00709   Q_OBJECT
00710 
00711 public:
00712   KMLoadPartsCommand( QPtrList<partNode>& parts, KMMessage* msg );
00713   KMLoadPartsCommand( partNode* node, KMMessage* msg );
00714   KMLoadPartsCommand( PartNodeMessageMap& partMap );
00715 
00716 public slots:
00717   void slotPartRetrieved( KMMessage* msg, QString partSpecifier );
00718 
00719 signals:
00720   void partsRetrieved();
00721 
00722 private:
00723   // Retrieve parts then calls execute
00724   virtual void slotStart();
00725 
00726   virtual Result execute();
00727 
00728   int mNeedsRetrieval;
00729   PartNodeMessageMap mPartMap;
00730 };
00731 
00732 class KMResendMessageCommand : public KMCommand
00733 {
00734   Q_OBJECT
00735 
00736 public:
00737   KMResendMessageCommand( QWidget *parent, KMMessage *msg=0 );
00738 
00739 private:
00740   virtual Result execute();
00741 };
00742 
00743 class KMMailingListCommand : public KMCommand
00744 {
00745   Q_OBJECT
00746 public:
00747   KMMailingListCommand( QWidget *parent, KMFolder *parent );
00748 private:
00749   virtual Result execute();
00750 private slots:
00751   void commandCompleted( KMCommand *command );
00752 protected:
00753   virtual KURL::List urls() const =0;
00754 protected:
00755   KMFolder *mFolder;
00756 };
00757 
00758 class KMMailingListPostCommand : public KMMailingListCommand
00759 {
00760   Q_OBJECT
00761 public:
00762   KMMailingListPostCommand( QWidget *parent, KMFolder *parent );
00763 protected:
00764   virtual KURL::List urls() const;
00765 };
00766 
00767 class KMMailingListSubscribeCommand : public KMMailingListCommand
00768 {
00769   Q_OBJECT
00770 public:
00771   KMMailingListSubscribeCommand( QWidget *parent, KMFolder *parent );
00772 protected:
00773   virtual KURL::List urls() const;
00774 };
00775 
00776 class KMMailingListUnsubscribeCommand : public KMMailingListCommand
00777 {
00778   Q_OBJECT
00779 public:
00780   KMMailingListUnsubscribeCommand( QWidget *parent, KMFolder *parent );
00781 protected:
00782   virtual KURL::List urls() const;
00783 };
00784 
00785 class KMMailingListArchivesCommand : public KMMailingListCommand
00786 {
00787   Q_OBJECT
00788 public:
00789   KMMailingListArchivesCommand( QWidget *parent, KMFolder *parent );
00790 protected:
00791   virtual KURL::List urls() const;
00792 };
00793 
00794 class KMMailingListHelpCommand : public KMMailingListCommand
00795 {
00796   Q_OBJECT
00797 public:
00798   KMMailingListHelpCommand( QWidget *parent, KMFolder *parent );
00799 protected:
00800   virtual KURL::List urls() const;
00801 };
00802 
00803 class KMIMChatCommand : public KMCommand
00804 {
00805   Q_OBJECT
00806 
00807 public:
00808   KMIMChatCommand( const KURL &url, KMMessage *msg=0 );
00809 
00810 private:
00817   virtual Result execute();
00818 
00819   KURL mUrl;
00820   KMMessage *mMessage;
00821 };
00822 
00823 
00824 #endif /*KMCommands_h*/
KDE Logo
This file is part of the documentation for kmail Library Version 3.3.2.
Documentation copyright © 1996-2004 the KDE developers.
Generated on Wed Mar 23 22:43:43 2005 by doxygen 1.3.9.1 written by Dimitri van Heesch, © 1997-2003