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 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
00042 KMCommand( QWidget *parent = 0 );
00043
00044 KMCommand( QWidget *parent, const QPtrList<KMMsgBase> &msgList );
00045
00046 KMCommand( QWidget *parent, KMMsgBase *msgBase );
00047
00048 KMCommand( QWidget *parent, KMMessage *message );
00049 virtual ~KMCommand();
00050
00055 void keepFolderOpen( KMFolder *folder );
00056
00060 Result result();
00061
00062 public slots:
00063
00064 void start();
00065
00066
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
00077 const QPtrList<KMMessage> retrievedMsgs() const;
00078
00079 KMMessage *retrievedMessage() const;
00080
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
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
00130 KProgressDialog* mProgressDialog;
00131
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
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
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
00670
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
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