00001
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"
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
00051 KMCommand( QWidget *parent = 0 );
00052
00053 KMCommand( QWidget *parent, const QPtrList<KMMsgBase> &msgList );
00054
00055 KMCommand( QWidget *parent, KMMsgBase *msgBase );
00056
00057 KMCommand( QWidget *parent, KMMessage *message );
00058 virtual ~KMCommand();
00059
00064 void keepFolderOpen( KMFolder *folder );
00065
00069 Result result();
00070
00071 public slots:
00072
00073 void start();
00074
00075
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
00086 const QPtrList<KMMessage> retrievedMsgs() const;
00087
00088 KMMessage *retrievedMessage() const;
00089
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
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
00139 KProgressDialog* mProgressDialog;
00140
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
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
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
00704
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
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