00001 #ifndef KMCommands_h
00002 #define KMCommands_h
00003
00004 #include <qguardedptr.h>
00005 #include <qptrlist.h>
00006 #include <qvaluelist.h>
00007 #include <kio/job.h>
00008 #include "kmmsgbase.h"
00009
00010 class QPopupMenu;
00011 class QTextCodec;
00012 class KMainWindow;
00013 class KProgressDialog;
00014 class KMComposeWin;
00015 class KMFilter;
00016 class KMFolder;
00017 class KMFolderImap;
00018 class KMFolderNode;
00019 class KMHeaders;
00020 class KMMainWidget;
00021 class KMMessage;
00022 class KMMsgBase;
00023 class KMReaderWin;
00024 class partNode;
00025 namespace KIO { class Job; }
00026
00027 typedef QMap<int,KMFolder*> KMMenuToFolder;
00028
00029 class KMCommand : public QObject
00030 {
00031 Q_OBJECT
00032
00033 public:
00034
00035 KMCommand( QWidget *parent = 0 );
00036
00037 KMCommand( QWidget *parent, const QPtrList<KMMsgBase> &msgList );
00038
00039 KMCommand( QWidget *parent, KMMsgBase *msgBase );
00040
00041 KMCommand( QWidget *parent, KMMessage *message );
00042 virtual ~KMCommand();
00043
00044 bool deletesItself () { return mDeletesItself; }
00045 void setDeletesItself( bool deletesItself )
00046 { mDeletesItself = deletesItself; }
00047
00048
00049 public slots:
00050
00051 void start();
00052
00053 protected:
00054
00055 const QPtrList<KMMessage> retrievedMsgs() const;
00056
00057 KMMessage *retrievedMessage() const;
00058
00059 private:
00060
00061 virtual void execute() = 0;
00062
00063 void preTransfer();
00064
00067 void transferSelectedMsgs();
00068
00069 private slots:
00070 void slotPostTransfer(bool);
00072 void slotMsgTransfered(KMMessage* msg);
00074 void slotJobFinished();
00076 void slotTransferCancelled();
00077 signals:
00078 void messagesTransfered(bool);
00081 void completed( bool success);
00082
00083 private:
00084
00085 KProgressDialog* mProgressDialog;
00086
00087 static int mCountJobs;
00088 int mCountMsgs;
00089 bool mDeletesItself;
00090
00091 QWidget *mParent;
00092 QPtrList<KMMessage> mRetrievedMsgs;
00093 QPtrList<KMMsgBase> mMsgList;
00094 QValueList<QGuardedPtr<KMFolder> > mFolders;
00095 };
00096
00097 class KMMailtoComposeCommand : public KMCommand
00098 {
00099 Q_OBJECT
00100
00101 public:
00102 KMMailtoComposeCommand( const KURL &url, KMMessage *msg=0 );
00103
00104 private:
00105 virtual void execute();
00106
00107 KURL mUrl;
00108 KMMessage *mMessage;
00109 };
00110
00111 class KMMailtoReplyCommand : public KMCommand
00112 {
00113 Q_OBJECT
00114
00115 public:
00116 KMMailtoReplyCommand( QWidget *parent, const KURL &url,
00117 KMMessage *msg, const QString &selection );
00118
00119 private:
00120 virtual void execute();
00121
00122 KURL mUrl;
00123 QString mSelection;
00124 };
00125
00126 class KMMailtoForwardCommand : public KMCommand
00127 {
00128 Q_OBJECT
00129
00130 public:
00131 KMMailtoForwardCommand( QWidget *parent, const KURL &url,
00132 KMMessage *msg );
00133
00134 private:
00135 virtual void execute();
00136
00137 KURL mUrl;
00138 };
00139
00140 class KMMailtoAddAddrBookCommand : public KMCommand
00141 {
00142 Q_OBJECT
00143
00144 public:
00145 KMMailtoAddAddrBookCommand( const KURL &url, QWidget *parent );
00146
00147 private:
00148 virtual void execute();
00149
00150 KURL mUrl;
00151 QWidget *mParent;
00152 };
00153
00154 class KMAddBookmarksCommand : public KMCommand
00155 {
00156 Q_OBJECT
00157
00158 public:
00159 KMAddBookmarksCommand( const KURL &url, QWidget *parent );
00160
00161 private:
00162 virtual void execute();
00163
00164 KURL mUrl;
00165 QWidget *mParent;
00166 };
00167
00168
00169 class KMMailtoOpenAddrBookCommand : public KMCommand
00170 {
00171 Q_OBJECT
00172
00173 public:
00174 KMMailtoOpenAddrBookCommand( const KURL &url, QWidget *parent );
00175
00176 private:
00177 virtual void execute();
00178
00179 KURL mUrl;
00180 QWidget *mParent;
00181 };
00182
00183 class KMUrlCopyCommand : public KMCommand
00184 {
00185 Q_OBJECT
00186
00187 public:
00188 KMUrlCopyCommand( const KURL &url, KMMainWidget *mainWidget = 0 );
00189
00190 private:
00191 virtual void execute();
00192
00193 KURL mUrl;
00194 KMMainWidget *mMainWidget;
00195 };
00196
00197 class KMUrlOpenCommand : public KMCommand
00198 {
00199 Q_OBJECT
00200
00201 public:
00202 KMUrlOpenCommand( const KURL &url, KMReaderWin *readerWin );
00203
00204 private:
00205 virtual void execute();
00206
00207 KURL mUrl;
00208 KMReaderWin *mReaderWin;
00209 };
00210
00211 class KMUrlSaveCommand : public KMCommand
00212 {
00213 Q_OBJECT
00214
00215 public:
00216 KMUrlSaveCommand( const KURL &url, QWidget *parent );
00217
00218 private slots:
00219 void slotUrlSaveResult( KIO::Job *job );
00220
00221 private:
00222 virtual void execute();
00223
00224 KURL mUrl;
00225 QWidget *mParent;
00226 };
00227
00228 class KMEditMsgCommand : public KMCommand
00229 {
00230 Q_OBJECT
00231
00232 public:
00233 KMEditMsgCommand( QWidget *parent, KMMessage *msg );
00234
00235 private:
00236 virtual void execute();
00237 };
00238
00239 class KMShowMsgSrcCommand : public KMCommand
00240 {
00241 Q_OBJECT
00242
00243 public:
00244 KMShowMsgSrcCommand( QWidget *parent, KMMessage *msg,
00245 bool fixedFont );
00246 virtual void execute();
00247
00248 private:
00249 bool mFixedFont;
00250 };
00251
00252 class KMSaveMsgCommand : public KMCommand
00253 {
00254 Q_OBJECT
00255
00256 public:
00257 KMSaveMsgCommand( QWidget *parent, const QPtrList<KMMsgBase> &msgList );
00258 KMSaveMsgCommand( QWidget *parent, KMMessage * msg );
00259 KURL url();
00260
00261 private:
00262 virtual void execute();
00263
00264 private slots:
00265 void slotSaveDataReq();
00266 void slotSaveResult(KIO::Job *job);
00268 void slotMessageRetrievedForSaving(KMMessage *msg);
00269
00270 private:
00271 static const int MAX_CHUNK_SIZE = 64*1024;
00272 KURL mUrl;
00273 QValueList<unsigned long> mMsgList;
00274 unsigned int mMsgListIndex;
00275 QByteArray mData;
00276 int mOffset;
00277 size_t mTotalSize;
00278 KIO::TransferJob *mJob;
00279 };
00280
00281 class KMSaveAttachmentsCommand : public KMCommand
00282 {
00283 Q_OBJECT
00284 public:
00285 KMSaveAttachmentsCommand( QWidget *parent, KMMessage *msg );
00286 KMSaveAttachmentsCommand( QWidget *parent, const QPtrList<KMMsgBase>& msgs );
00287 KMSaveAttachmentsCommand( QWidget *parent, QPtrList<partNode> &attachments,
00288 KMMessage *msg, bool encoded = false );
00289
00290 protected slots:
00291 void slotSaveAll();
00292
00293 private:
00294 virtual void execute();
00295 private:
00296 void parse( partNode *rootNode );
00297 void saveAll( const QPtrList<partNode>& attachments );
00298 void saveItem( partNode *node, const QString& filename );
00299 private:
00300 QWidget *mParent;
00301 QPtrList<partNode> mAttachments;
00302 bool mEncoded;
00303 bool mMessageComplete;
00304 };
00305
00306 class KMReplyToCommand : public KMCommand
00307 {
00308 Q_OBJECT
00309
00310 public:
00311 KMReplyToCommand( QWidget *parent, KMMessage *msg,
00312 const QString &selection = QString::null );
00313
00314 private:
00315 virtual void execute();
00316
00317 private:
00318 QString mSelection;
00319 };
00320
00321 class KMNoQuoteReplyToCommand : public KMCommand
00322 {
00323 Q_OBJECT
00324
00325 public:
00326 KMNoQuoteReplyToCommand( QWidget *parent, KMMessage *msg );
00327
00328 private:
00329 virtual void execute();
00330 };
00331
00332 class KMReplyListCommand : public KMCommand
00333 {
00334 Q_OBJECT
00335
00336 public:
00337 KMReplyListCommand( QWidget *parent, KMMessage *msg,
00338 const QString &selection = QString::null );
00339
00340 private:
00341 virtual void execute();
00342
00343 private:
00344 QString mSelection;
00345 };
00346
00347 class KMReplyToAllCommand : public KMCommand
00348 {
00349 Q_OBJECT
00350
00351 public:
00352 KMReplyToAllCommand( QWidget *parent, KMMessage *msg,
00353 const QString &selection = QString::null );
00354
00355 private:
00356 virtual void execute();
00357
00358 private:
00359 QString mSelection;
00360 };
00361
00362 class KMReplyAuthorCommand : public KMCommand
00363 {
00364 Q_OBJECT
00365
00366 public:
00367 KMReplyAuthorCommand( QWidget *parent, KMMessage *msg,
00368 const QString &selection = QString::null );
00369
00370 private:
00371 virtual void execute();
00372
00373 private:
00374 QString mSelection;
00375 };
00376
00377 class KMForwardCommand : public KMCommand
00378 {
00379 Q_OBJECT
00380
00381 public:
00382 KMForwardCommand( QWidget *parent, const QPtrList<KMMsgBase> &msgList,
00383 uint identity = 0 );
00384 KMForwardCommand( QWidget *parent, KMMessage * msg,
00385 uint identity = 0 );
00386
00387 private:
00388 virtual void execute();
00389
00390 private:
00391 QWidget *mParent;
00392 uint mIdentity;
00393 };
00394
00395 class KMForwardAttachedCommand : public KMCommand
00396 {
00397 Q_OBJECT
00398
00399 public:
00400 KMForwardAttachedCommand( QWidget *parent, const QPtrList<KMMsgBase> &msgList,
00401 uint identity = 0, KMComposeWin *win = 0 );
00402 KMForwardAttachedCommand( QWidget *parent, KMMessage * msg,
00403 uint identity = 0, KMComposeWin *win = 0 );
00404
00405 private:
00406 virtual void execute();
00407
00408 uint mIdentity;
00409 QGuardedPtr<KMComposeWin> mWin;
00410 };
00411
00412 class KMRedirectCommand : public KMCommand
00413 {
00414 Q_OBJECT
00415
00416 public:
00417 KMRedirectCommand( QWidget *parent, KMMessage *msg );
00418
00419 private:
00420 virtual void execute();
00421 };
00422
00423 class KMBounceCommand : public KMCommand
00424 {
00425 Q_OBJECT
00426
00427 public:
00428 KMBounceCommand( QWidget *parent, KMMessage *msg );
00429
00430 private:
00431 virtual void execute();
00432 };
00433
00434 class KMPrintCommand : public KMCommand
00435 {
00436 Q_OBJECT
00437
00438 public:
00439 KMPrintCommand( QWidget *parent, KMMessage *msg, bool htmlOverride=false );
00440
00441 private:
00442 virtual void execute();
00443
00444 bool mHtmlOverride;
00445 };
00446
00447 class KMSetStatusCommand : public KMCommand
00448 {
00449 Q_OBJECT
00450
00451 public:
00452
00453 KMSetStatusCommand( KMMsgStatus status, const QValueList<Q_UINT32> &,
00454 bool toggle=false );
00455
00456 private:
00457 virtual void execute();
00458
00459 KMMsgStatus mStatus;
00460 QValueList<Q_UINT32> mSerNums;
00461 QValueList<int> mIds;
00462 bool mToggle;
00463 };
00464
00465 class KMFilterCommand : public KMCommand
00466 {
00467 Q_OBJECT
00468
00469 public:
00470 KMFilterCommand( const QCString &field, const QString &value );
00471
00472 private:
00473 virtual void execute();
00474
00475 QCString mField;
00476 QString mValue;
00477 };
00478
00479
00480 class KMFilterActionCommand : public KMCommand
00481 {
00482 Q_OBJECT
00483
00484 public:
00485 KMFilterActionCommand( QWidget *parent,
00486 const QPtrList<KMMsgBase> &msgList,
00487 KMFilter *filter );
00488
00489 private:
00490 virtual void execute();
00491
00492 KMFilter *mFilter;
00493 };
00494
00495
00496 class KMMetaFilterActionCommand : public QObject
00497 {
00498 Q_OBJECT
00499
00500 public:
00501 KMMetaFilterActionCommand( KMFilter *filter, KMHeaders *headers,
00502 KMMainWidget *main );
00503
00504 public slots:
00505 void start();
00506
00507 private:
00508 KMFilter *mFilter;
00509 KMHeaders *mHeaders;
00510 KMMainWidget *mMainWidget;
00511 };
00512
00513
00514 class KMMailingListFilterCommand : public KMCommand
00515 {
00516 Q_OBJECT
00517
00518 public:
00519 KMMailingListFilterCommand( QWidget *parent, KMMessage *msg );
00520
00521 private:
00522 virtual void execute();
00523 };
00524
00525
00533 class KMMenuCommand : public KMCommand
00534 {
00535 Q_OBJECT
00536
00537 public:
00538 static QPopupMenu* folderToPopupMenu(bool move, QObject *receiver,
00539 KMMenuToFolder *aMenuToFolder, QPopupMenu *menu );
00540
00541 static QPopupMenu* makeFolderMenu(KMFolderNode* item, bool move,
00542 QObject *receiver, KMMenuToFolder *aMenuToFolder, QPopupMenu *menu );
00543 };
00544
00545 class KMCopyCommand : public KMMenuCommand
00546 {
00547 Q_OBJECT
00548
00549 public:
00550 KMCopyCommand( KMFolder* destFolder,
00551 const QPtrList<KMMsgBase> &msgList );
00552 KMCopyCommand( KMFolder* destFolder, KMMessage *msg );
00553
00554 private:
00555 virtual void execute();
00556
00557 KMFolder *mDestFolder;
00558 QPtrList<KMMsgBase> mMsgList;
00559 };
00560
00561 class KMMoveCommand : public KMMenuCommand
00562 {
00563 Q_OBJECT
00564
00565 public:
00566 KMMoveCommand( KMFolder* destFolder, const QPtrList<KMMsgBase> &msgList );
00567 KMMoveCommand( KMFolder* destFolder, KMMessage * msg );
00568 KMMoveCommand( KMFolder* destFolder, KMMsgBase * msgBase );
00569
00570 public slots:
00571 void slotImapFolderCompleted(KMFolderImap *folder, bool success);
00572 void slotMsgAddedToDestFolder(KMFolder *folder, Q_UINT32 serNum);
00573
00574 private:
00575 virtual void execute();
00576
00577 KMFolder *mDestFolder;
00578 QPtrList<KMMsgBase> mMsgList;
00579
00580
00581 QValueList<Q_UINT32> mLostBoys;
00582 };
00583
00584 class KMDeleteMsgCommand : public KMMoveCommand
00585 {
00586 Q_OBJECT
00587
00588 public:
00589 KMDeleteMsgCommand( KMFolder* srcFolder, const QPtrList<KMMsgBase> &msgList );
00590 KMDeleteMsgCommand( KMFolder* srcFolder, KMMessage * msg );
00591
00592 private:
00593 static KMFolder * findTrashFolder( KMFolder * srcFolder );
00594 };
00595
00596 class KMUrlClickedCommand : public KMCommand
00597 {
00598 Q_OBJECT
00599
00600 public:
00601 KMUrlClickedCommand( const KURL &url, uint identity,
00602 KMReaderWin *readerWin, bool mHtmlPref, KMMainWidget *mainWidget = 0 );
00603
00604 private:
00605 virtual void execute();
00606
00607 KURL mUrl;
00608 uint mIdentity;
00609 KMReaderWin *mReaderWin;
00610 bool mHtmlPref;
00611 KMMainWidget *mMainWidget;
00612 };
00613
00614 class KMLoadPartsCommand : public KMCommand
00615 {
00616 Q_OBJECT
00617
00618 public:
00619 KMLoadPartsCommand( QPtrList<partNode>& parts, KMMessage* msg );
00620 KMLoadPartsCommand( partNode* node, KMMessage* msg );
00621
00622 public slots:
00623
00624 void start();
00625 void slotPartRetrieved( KMMessage* msg, QString partSpecifier );
00626
00627 signals:
00628 void partsRetrieved();
00629
00630 private:
00631 virtual void execute();
00632
00633 QPtrList<partNode> mParts;
00634 int mNeedsRetrieval;
00635 KMMessage *mMsg;
00636 };
00637
00638 #endif