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