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   QByteArray mData;
00346   int mOffset;
00347   size_t mTotalSize;
00348   KIO::TransferJob *mJob;
00349 };
00350 
00351 class KMOpenMsgCommand : public KMCommand
00352 {
00353   Q_OBJECT
00354 
00355 public:
00356   KMOpenMsgCommand( QWidget *parent, const KURL & url = KURL(),
00357                     const QString & encoding = QString() );
00358 
00359 private:
00360   virtual Result execute();
00361 
00362 private slots:
00363   void slotDataArrived( KIO::Job *job, const QByteArray & data );
00364   void slotResult( KIO::Job *job );
00365 
00366 private:
00367   static const int MAX_CHUNK_SIZE = 64*1024;
00368   KURL mUrl;
00369   DwString mMsgString;
00370   KIO::TransferJob *mJob;
00371   const QString mEncoding;
00372 };
00373 
00374 class KMSaveAttachmentsCommand : public KMCommand
00375 {
00376   Q_OBJECT
00377 public:
00382   KMSaveAttachmentsCommand( QWidget *parent, KMMessage *msg  );
00387   KMSaveAttachmentsCommand( QWidget *parent, const QPtrList<KMMsgBase>& msgs );
00396   KMSaveAttachmentsCommand( QWidget *parent, QPtrList<partNode> &attachments,
00397                             KMMessage *msg, bool encoded = false  );
00398 
00399 private slots:
00400   void slotSaveAll();
00401 
00402 private:
00403   virtual Result execute();
00404   Result saveItem( partNode *node, const KURL& url );
00405 
00406 private:
00407   PartNodeMessageMap mAttachmentMap;
00408   bool mImplicitAttachments;
00409   bool mEncoded;
00410 };
00411 
00412 class KMReplyToCommand : public KMCommand
00413 {
00414   Q_OBJECT
00415 
00416 public:
00417   KMReplyToCommand( QWidget *parent, KMMessage *msg,
00418                     const QString &selection = QString::null );
00419 
00420 private:
00421   virtual Result execute();
00422 
00423 private:
00424   QString mSelection;
00425 };
00426 
00427 class KMNoQuoteReplyToCommand : public KMCommand
00428 {
00429   Q_OBJECT
00430 
00431 public:
00432   KMNoQuoteReplyToCommand( QWidget *parent, KMMessage *msg );
00433 
00434 private:
00435   virtual Result execute();
00436 };
00437 
00438 class KMReplyListCommand : public KMCommand
00439 {
00440   Q_OBJECT
00441 
00442 public:
00443   KMReplyListCommand( 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 KMReplyToAllCommand : public KMCommand
00454 {
00455   Q_OBJECT
00456 
00457 public:
00458   KMReplyToAllCommand( QWidget *parent, KMMessage *msg,
00459                const QString &selection = QString::null );
00460 
00461 private:
00462   virtual Result execute();
00463 
00464 private:
00465   QString mSelection;
00466 };
00467 
00468 class KMReplyAuthorCommand : public KMCommand
00469 {
00470   Q_OBJECT
00471 
00472 public:
00473   KMReplyAuthorCommand( QWidget *parent, KMMessage *msg,
00474                         const QString &selection = QString::null );
00475 
00476 private:
00477   virtual Result execute();
00478 
00479 private:
00480   QString mSelection;
00481 };
00482 
00483 class KMForwardCommand : public KMCommand
00484 {
00485   Q_OBJECT
00486 
00487 public:
00488   KMForwardCommand( QWidget *parent, const QPtrList<KMMsgBase> &msgList,
00489                     uint identity = 0 );
00490   KMForwardCommand( QWidget *parent, KMMessage * msg,
00491                     uint identity = 0 );
00492 
00493 private:
00494   virtual Result execute();
00495 
00496 private:
00497   uint mIdentity;
00498 };
00499 
00500 class KMForwardAttachedCommand : public KMCommand
00501 {
00502   Q_OBJECT
00503 
00504 public:
00505   KMForwardAttachedCommand( QWidget *parent, const QPtrList<KMMsgBase> &msgList,
00506                 uint identity = 0, KMComposeWin *win = 0 );
00507   KMForwardAttachedCommand( QWidget *parent, KMMessage * msg,
00508                 uint identity = 0, KMComposeWin *win = 0 );
00509 
00510 private:
00511   virtual Result execute();
00512 
00513   uint mIdentity;
00514   QGuardedPtr<KMComposeWin> mWin;
00515 };
00516 
00517 class KMRedirectCommand : public KMCommand
00518 {
00519   Q_OBJECT
00520 
00521 public:
00522   KMRedirectCommand( QWidget *parent, KMMessage *msg );
00523 
00524 private:
00525   virtual Result execute();
00526 };
00527 
00528 class KMBounceCommand : public KMCommand
00529 {
00530   Q_OBJECT
00531 
00532 public:
00533   KMBounceCommand( QWidget *parent, KMMessage *msg );
00534 
00535 private:
00536   virtual Result execute();
00537 };
00538 
00539 class KMPrintCommand : public KMCommand
00540 {
00541   Q_OBJECT
00542 
00543 public:
00544   KMPrintCommand( QWidget *parent, KMMessage *msg,
00545                   bool htmlOverride=false,
00546                   const QString & encoding = QString(),
00547                   const KMail::HeaderStyle * style = 0,
00548                   const KMail::HeaderStrategy * strategy = 0 );
00549 
00550 private:
00551   virtual Result execute();
00552 
00553   bool mHtmlOverride;
00554   QString mEncoding;
00555   const KMail::HeaderStyle * mStyle;
00556   const KMail::HeaderStrategy * mStrategy;
00557 };
00558 
00559 class KMSetStatusCommand : public KMCommand
00560 {
00561   Q_OBJECT
00562 
00563 public:
00564   // Serial numbers
00565   KMSetStatusCommand( KMMsgStatus status, const QValueList<Q_UINT32> &,
00566                       bool toggle=false );
00567 
00568 private:
00569   virtual Result execute();
00570 
00571   KMMsgStatus mStatus;
00572   QValueList<Q_UINT32> mSerNums;
00573   QValueList<int> mIds;
00574   bool mToggle;
00575 };
00576 
00577 class KMFilterCommand : public KMCommand
00578 {
00579   Q_OBJECT
00580 
00581 public:
00582   KMFilterCommand( const QCString &field, const QString &value );
00583 
00584 private:
00585   virtual Result execute();
00586 
00587   QCString mField;
00588   QString mValue;
00589 };
00590 
00591 
00592 class KMFilterActionCommand : public KMCommand
00593 {
00594   Q_OBJECT
00595 
00596 public:
00597   KMFilterActionCommand( QWidget *parent,
00598              const QPtrList<KMMsgBase> &msgList,
00599              KMFilter *filter );
00600 
00601 private:
00602   virtual Result execute();
00603 
00604   KMFilter *mFilter;
00605 };
00606 
00607 
00608 class KMMetaFilterActionCommand : public QObject
00609 {
00610   Q_OBJECT
00611 
00612 public:
00613   KMMetaFilterActionCommand( KMFilter *filter, KMHeaders *headers,
00614                  KMMainWidget *main );
00615 
00616 public slots:
00617   void start();
00618 
00619 private:
00620   KMFilter *mFilter;
00621   KMHeaders *mHeaders;
00622   KMMainWidget *mMainWidget;
00623 };
00624 
00625 
00626 class KMMailingListFilterCommand : public KMCommand
00627 {
00628   Q_OBJECT
00629 
00630 public:
00631   KMMailingListFilterCommand( QWidget *parent, KMMessage *msg );
00632 
00633 private:
00634   virtual Result execute();
00635 };
00636 
00637 
00645 class KMMenuCommand : public KMCommand
00646 {
00647   Q_OBJECT
00648 
00649 public:
00650   static void folderToPopupMenu(bool move, QObject *receiver,
00651     KMMenuToFolder *aMenuToFolder, QPopupMenu *menu );
00652 
00653   static void makeFolderMenu(KMFolderNode* item, bool move,
00654     QObject *receiver, KMMenuToFolder *aMenuToFolder, QPopupMenu *menu );
00655 };
00656 
00657 class KMCopyCommand : public KMMenuCommand
00658 {
00659   Q_OBJECT
00660 
00661 public:
00662   KMCopyCommand( KMFolder* destFolder,
00663          const QPtrList<KMMsgBase> &msgList );
00664   KMCopyCommand( KMFolder* destFolder, KMMessage *msg );
00665 
00666 private:
00667   virtual Result execute();
00668 
00669   KMFolder *mDestFolder;
00670   QPtrList<KMMsgBase> mMsgList;
00671 };
00672 
00673 namespace KPIM {
00674   class ProgressItem;
00675 }
00676 class KMMoveCommand : public KMMenuCommand
00677 {
00678   Q_OBJECT
00679 
00680 public:
00681   KMMoveCommand( KMFolder* destFolder, const QPtrList<KMMsgBase> &msgList );
00682   KMMoveCommand( KMFolder* destFolder, KMMessage * msg );
00683   KMMoveCommand( KMFolder* destFolder, KMMsgBase * msgBase );
00684   KMFolder* destFolder() const { return mDestFolder; }
00685 
00686 public slots:
00687   void slotImapFolderCompleted(KMFolderImap *folder, bool success);
00688   void slotMsgAddedToDestFolder(KMFolder *folder, Q_UINT32 serNum);
00689   void slotMoveCanceled();
00690 
00691 protected:
00692   // Needed for KMDeleteCommand for "move to trash"
00693   KMMoveCommand( Q_UINT32 sernum );
00694   void setDestFolder( KMFolder* folder ) { mDestFolder = folder; }
00695   void addMsg( KMMsgBase *msg ) { mMsgList.append( msg ); }
00696   QValueVector<KMFolder*> mOpenedFolders;
00697 
00698 private:
00699   virtual Result execute();
00700   void completeMove( Result result );
00701   KMFolder *mDestFolder;
00702   QPtrList<KMMsgBase> mMsgList;
00703   // List of serial numbers that have to be transferred to a host.
00704   // Ticked off as they come in via msgAdded signals.
00705   QValueList<Q_UINT32> mLostBoys;
00706   KPIM::ProgressItem *mProgressItem;
00707 };
00708 
00709 class KMDeleteMsgCommand : public KMMoveCommand
00710 {
00711   Q_OBJECT
00712 
00713 public:
00714   KMDeleteMsgCommand( KMFolder* srcFolder, const QPtrList<KMMsgBase> &msgList );
00715   KMDeleteMsgCommand( KMFolder* srcFolder, KMMessage * msg );
00716   KMDeleteMsgCommand( Q_UINT32 sernum );
00717 
00718 private:
00719   static KMFolder * findTrashFolder( KMFolder * srcFolder );
00720 
00721 };
00722 
00723 class KMUrlClickedCommand : public KMCommand
00724 {
00725   Q_OBJECT
00726 
00727 public:
00728   KMUrlClickedCommand( const KURL &url, uint identity,
00729     KMReaderWin *readerWin, bool mHtmlPref, KMMainWidget *mainWidget = 0 );
00730 
00731 private:
00732   virtual Result execute();
00733 
00734   KURL mUrl;
00735   uint mIdentity;
00736   KMReaderWin *mReaderWin;
00737   bool mHtmlPref;
00738   KMMainWidget *mMainWidget;
00739 };
00740 
00741 class KMLoadPartsCommand : public KMCommand
00742 {
00743   Q_OBJECT
00744 
00745 public:
00746   KMLoadPartsCommand( QPtrList<partNode>& parts, KMMessage* msg );
00747   KMLoadPartsCommand( partNode* node, KMMessage* msg );
00748   KMLoadPartsCommand( PartNodeMessageMap& partMap );
00749 
00750 public slots:
00751   void slotPartRetrieved( KMMessage* msg, QString partSpecifier );
00752 
00753 signals:
00754   void partsRetrieved();
00755 
00756 private:
00757   // Retrieve parts then calls execute
00758   virtual void slotStart();
00759 
00760   virtual Result execute();
00761 
00762   int mNeedsRetrieval;
00763   PartNodeMessageMap mPartMap;
00764 };
00765 
00766 class KMResendMessageCommand : public KMCommand
00767 {
00768   Q_OBJECT
00769 
00770 public:
00771   KMResendMessageCommand( QWidget *parent, KMMessage *msg=0 );
00772 
00773 private:
00774   virtual Result execute();
00775 };
00776 
00777 class KMMailingListCommand : public KMCommand
00778 {
00779   Q_OBJECT
00780 public:
00781   KMMailingListCommand( QWidget *parent, KMFolder *parent );
00782 private:
00783   virtual Result execute();
00784 private slots:
00785   void commandCompleted( KMCommand *command );
00786 protected:
00787   virtual KURL::List urls() const =0;
00788 protected:
00789   KMFolder *mFolder;
00790 };
00791 
00792 class KMMailingListPostCommand : public KMMailingListCommand
00793 {
00794   Q_OBJECT
00795 public:
00796   KMMailingListPostCommand( QWidget *parent, KMFolder *parent );
00797 protected:
00798   virtual KURL::List urls() const;
00799 };
00800 
00801 class KMMailingListSubscribeCommand : public KMMailingListCommand
00802 {
00803   Q_OBJECT
00804 public:
00805   KMMailingListSubscribeCommand( QWidget *parent, KMFolder *parent );
00806 protected:
00807   virtual KURL::List urls() const;
00808 };
00809 
00810 class KMMailingListUnsubscribeCommand : public KMMailingListCommand
00811 {
00812   Q_OBJECT
00813 public:
00814   KMMailingListUnsubscribeCommand( QWidget *parent, KMFolder *parent );
00815 protected:
00816   virtual KURL::List urls() const;
00817 };
00818 
00819 class KMMailingListArchivesCommand : public KMMailingListCommand
00820 {
00821   Q_OBJECT
00822 public:
00823   KMMailingListArchivesCommand( QWidget *parent, KMFolder *parent );
00824 protected:
00825   virtual KURL::List urls() const;
00826 };
00827 
00828 class KMMailingListHelpCommand : public KMMailingListCommand
00829 {
00830   Q_OBJECT
00831 public:
00832   KMMailingListHelpCommand( QWidget *parent, KMFolder *parent );
00833 protected:
00834   virtual KURL::List urls() const;
00835 };
00836 
00837 class KMIMChatCommand : public KMCommand
00838 {
00839   Q_OBJECT
00840 
00841 public:
00842   KMIMChatCommand( const KURL &url, KMMessage *msg=0 );
00843 
00844 private:
00851   virtual Result execute();
00852 
00853   KURL mUrl;
00854   KMMessage *mMessage;
00855 };
00856 
00857 
00858 #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 Thu May 3 20:22:58 2007 by doxygen 1.4.2 written by Dimitri van Heesch, © 1997-2003