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 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
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
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
00705
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
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