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 <kio/job.h>
00010
#include "kmmsgbase.h"
00011
#include <mimelib/string.h>
00012
00013
class QPopupMenu;
00014
class QTextCodec;
00015
class KMainWindow;
00016
class KProgressDialog;
00017
class KMComposeWin;
00018
class KMFilter;
00019
class KMFolder;
00020
class KMFolderImap;
00021
class KMFolderNode;
00022
class KMHeaders;
00023
class KMMainWidget;
00024
class KMMessage;
00025
class KMMsgBase;
00026
class KMReaderWin;
00027
class partNode;
00028
namespace KIO {
class Job; }
00029
00030
typedef QMap<int,KMFolder*> KMMenuToFolder;
00031
typedef QMap<partNode*, KMMessage*> PartNodeMessageMap;
00032
00033
class KMCommand :
public QObject
00034 {
00035 Q_OBJECT
00036
00037
public:
00038
enum Result { Undefined, OK, Canceled, Failed };
00039
00040
00041 KMCommand(
QWidget *parent = 0 );
00042
00043 KMCommand(
QWidget *parent,
const QPtrList<KMMsgBase> &msgList );
00044
00045 KMCommand(
QWidget *parent, KMMsgBase *msgBase );
00046
00047 KMCommand(
QWidget *parent, KMMessage *message );
00048
virtual ~KMCommand();
00049
00054
void keepFolderOpen(
KMFolder *folder );
00055
00059 Result result();
00060
00061
public slots:
00062
00063
void start();
00064
00065
00066
void slotProgress(
unsigned long done,
unsigned long total );
00067
00068 signals:
00069
void messagesTransfered( KMCommand::Result result );
00072
void completed( KMCommand *command );
00073
00074
protected:
00075
00076
const QPtrList<KMMessage> retrievedMsgs() const;
00077
00078 KMMessage *retrievedMessage() const;
00079
00080
QWidget *parentWidget() const;
00081
00082
bool deletesItself() {
return mDeletesItself; }
00088
void setDeletesItself(
bool deletesItself )
00089 { mDeletesItself = deletesItself; }
00090
00091
bool emitsCompletedItself() {
return mEmitsCompletedItself; }
00098
void setEmitsCompletedItself(
bool emitsCompletedItself )
00099 { mEmitsCompletedItself = emitsCompletedItself; }
00100
00104
void setResult( Result result )
00105 { mResult = result; }
00106
00107
private:
00108
00109
virtual Result execute() = 0;
00110
00113
void transferSelectedMsgs();
00114
00115
private slots:
00117
virtual void slotStart();
00118
00119
void slotPostTransfer( KMCommand::Result result );
00121
void slotMsgTransfered(KMMessage* msg);
00123
void slotJobFinished();
00125
void slotTransferCancelled();
00126
00127
private:
00128
00129 KProgressDialog* mProgressDialog;
00130
00131
static int mCountJobs;
00132
int mCountMsgs;
00133 Result mResult;
00134
bool mDeletesItself : 1;
00135
bool mEmitsCompletedItself : 1;
00136
00137
QWidget *mParent;
00138
QPtrList<KMMessage> mRetrievedMsgs;
00139
QPtrList<KMMsgBase> mMsgList;
00140
QValueList<QGuardedPtr<KMFolder> > mFolders;
00141 };
00142
00143
class KMMailtoComposeCommand :
public KMCommand
00144 {
00145 Q_OBJECT
00146
00147
public:
00148 KMMailtoComposeCommand(
const KURL &url, KMMessage *msg=0 );
00149
00150
private:
00151
virtual Result execute();
00152
00153 KURL mUrl;
00154 KMMessage *mMessage;
00155 };
00156
00157
class KMMailtoReplyCommand :
public KMCommand
00158 {
00159 Q_OBJECT
00160
00161
public:
00162 KMMailtoReplyCommand(
QWidget *parent,
const KURL &url,
00163 KMMessage *msg,
const QString &selection );
00164
00165
private:
00166
virtual Result execute();
00167
00168 KURL mUrl;
00169
QString mSelection;
00170 };
00171
00172
class KMMailtoForwardCommand :
public KMCommand
00173 {
00174 Q_OBJECT
00175
00176
public:
00177 KMMailtoForwardCommand(
QWidget *parent,
const KURL &url,
00178 KMMessage *msg );
00179
00180
private:
00181
virtual Result execute();
00182
00183 KURL mUrl;
00184 };
00185
00186
class KMMailtoAddAddrBookCommand :
public KMCommand
00187 {
00188 Q_OBJECT
00189
00190
public:
00191 KMMailtoAddAddrBookCommand(
const KURL &url,
QWidget *parent );
00192
00193
private:
00194
virtual Result execute();
00195
00196 KURL mUrl;
00197 };
00198
00199
class KMAddBookmarksCommand :
public KMCommand
00200 {
00201 Q_OBJECT
00202
00203
public:
00204 KMAddBookmarksCommand(
const KURL &url,
QWidget *parent );
00205
00206
private:
00207
virtual Result execute();
00208
00209 KURL mUrl;
00210 };
00211
00212
00213
class KMMailtoOpenAddrBookCommand :
public KMCommand
00214 {
00215 Q_OBJECT
00216
00217
public:
00218 KMMailtoOpenAddrBookCommand(
const KURL &url,
QWidget *parent );
00219
00220
private:
00221
virtual Result execute();
00222
00223 KURL mUrl;
00224 };
00225
00226
class KMUrlCopyCommand :
public KMCommand
00227 {
00228 Q_OBJECT
00229
00230
public:
00231 KMUrlCopyCommand(
const KURL &url, KMMainWidget *mainWidget = 0 );
00232
00233
private:
00234
virtual Result execute();
00235
00236 KURL mUrl;
00237 KMMainWidget *mMainWidget;
00238 };
00239
00240
class KMUrlOpenCommand :
public KMCommand
00241 {
00242 Q_OBJECT
00243
00244
public:
00245 KMUrlOpenCommand(
const KURL &url, KMReaderWin *readerWin );
00246
00247
private:
00248
virtual Result execute();
00249
00250 KURL mUrl;
00251 KMReaderWin *mReaderWin;
00252 };
00253
00254
class KMUrlSaveCommand :
public KMCommand
00255 {
00256 Q_OBJECT
00257
00258
public:
00259 KMUrlSaveCommand(
const KURL &url,
QWidget *parent );
00260
00261
private slots:
00262
void slotUrlSaveResult( KIO::Job *job );
00263
00264
private:
00265
virtual Result execute();
00266
00267 KURL mUrl;
00268 };
00269
00270
class KMEditMsgCommand :
public KMCommand
00271 {
00272 Q_OBJECT
00273
00274
public:
00275 KMEditMsgCommand(
QWidget *parent, KMMessage *msg );
00276
00277
private:
00278
virtual Result execute();
00279 };
00280
00281
class KMShowMsgSrcCommand
00282 {
00283
public:
00284 KMShowMsgSrcCommand( KMMessage *msg,
bool fixedFont );
00285
00286
void start();
00287
00288
private:
00289
bool mFixedFont;
00290 KMMessage *mMsg;
00291 };
00292
00293
class KMSaveMsgCommand :
public KMCommand
00294 {
00295 Q_OBJECT
00296
00297
public:
00298 KMSaveMsgCommand(
QWidget *parent,
const QPtrList<KMMsgBase> &msgList );
00299 KMSaveMsgCommand(
QWidget *parent, KMMessage * msg );
00300 KURL url();
00301
00302
private:
00303
virtual Result execute();
00304
00305
private slots:
00306
void slotSaveDataReq();
00307
void slotSaveResult(KIO::Job *job);
00309
void slotMessageRetrievedForSaving(KMMessage *msg);
00310
00311
private:
00312
static const int MAX_CHUNK_SIZE = 64*1024;
00313 KURL mUrl;
00314
QValueList<unsigned long> mMsgList;
00315
unsigned int mMsgListIndex;
00316
QByteArray mData;
00317
int mOffset;
00318 size_t mTotalSize;
00319 KIO::TransferJob *mJob;
00320 };
00321
00322
class KMOpenMsgCommand :
public KMCommand
00323 {
00324 Q_OBJECT
00325
00326
public:
00327 KMOpenMsgCommand(
QWidget *parent,
const KURL & url = KURL() );
00328
00329
private:
00330
virtual Result execute();
00331
00332
private slots:
00333
void slotDataArrived( KIO::Job *job,
const QByteArray & data );
00334
void slotResult( KIO::Job *job );
00335
00336
private:
00337
static const int MAX_CHUNK_SIZE = 64*1024;
00338 KURL mUrl;
00339 DwString mMsgString;
00340 KIO::TransferJob *mJob;
00341 };
00342
00343
class KMSaveAttachmentsCommand :
public KMCommand
00344 {
00345 Q_OBJECT
00346
public:
00351 KMSaveAttachmentsCommand(
QWidget *parent, KMMessage *msg );
00356 KMSaveAttachmentsCommand(
QWidget *parent,
const QPtrList<KMMsgBase>& msgs );
00365 KMSaveAttachmentsCommand(
QWidget *parent,
QPtrList<partNode> &attachments,
00366 KMMessage *msg,
bool encoded =
false );
00367
00368
private slots:
00369
void slotSaveAll();
00370
00371
private:
00372
virtual Result execute();
00373 Result saveItem( partNode *node,
const KURL& url );
00374
00375
private:
00376 PartNodeMessageMap mAttachmentMap;
00377
bool mImplicitAttachments;
00378
bool mEncoded;
00379 };
00380
00381
class KMReplyToCommand :
public KMCommand
00382 {
00383 Q_OBJECT
00384
00385
public:
00386 KMReplyToCommand(
QWidget *parent, KMMessage *msg,
00387
const QString &selection = QString::null );
00388
00389
private:
00390
virtual Result execute();
00391
00392
private:
00393
QString mSelection;
00394 };
00395
00396
class KMNoQuoteReplyToCommand :
public KMCommand
00397 {
00398 Q_OBJECT
00399
00400
public:
00401 KMNoQuoteReplyToCommand(
QWidget *parent, KMMessage *msg );
00402
00403
private:
00404
virtual Result execute();
00405 };
00406
00407
class KMReplyListCommand :
public KMCommand
00408 {
00409 Q_OBJECT
00410
00411
public:
00412 KMReplyListCommand(
QWidget *parent, KMMessage *msg,
00413
const QString &selection = QString::null );
00414
00415
private:
00416
virtual Result execute();
00417
00418
private:
00419
QString mSelection;
00420 };
00421
00422
class KMReplyToAllCommand :
public KMCommand
00423 {
00424 Q_OBJECT
00425
00426
public:
00427 KMReplyToAllCommand(
QWidget *parent, KMMessage *msg,
00428
const QString &selection = QString::null );
00429
00430
private:
00431
virtual Result execute();
00432
00433
private:
00434
QString mSelection;
00435 };
00436
00437
class KMReplyAuthorCommand :
public KMCommand
00438 {
00439 Q_OBJECT
00440
00441
public:
00442 KMReplyAuthorCommand(
QWidget *parent, KMMessage *msg,
00443
const QString &selection = QString::null );
00444
00445
private:
00446
virtual Result execute();
00447
00448
private:
00449
QString mSelection;
00450 };
00451
00452
class KMForwardCommand :
public KMCommand
00453 {
00454 Q_OBJECT
00455
00456
public:
00457 KMForwardCommand(
QWidget *parent,
const QPtrList<KMMsgBase> &msgList,
00458 uint identity = 0 );
00459 KMForwardCommand(
QWidget *parent, KMMessage * msg,
00460 uint identity = 0 );
00461
00462
private:
00463
virtual Result execute();
00464
00465
private:
00466 uint mIdentity;
00467 };
00468
00469
class KMForwardAttachedCommand :
public KMCommand
00470 {
00471 Q_OBJECT
00472
00473
public:
00474 KMForwardAttachedCommand(
QWidget *parent,
const QPtrList<KMMsgBase> &msgList,
00475 uint identity = 0, KMComposeWin *win = 0 );
00476 KMForwardAttachedCommand(
QWidget *parent, KMMessage * msg,
00477 uint identity = 0, KMComposeWin *win = 0 );
00478
00479
private:
00480
virtual Result execute();
00481
00482 uint mIdentity;
00483
QGuardedPtr<KMComposeWin> mWin;
00484 };
00485
00486
class KMRedirectCommand :
public KMCommand
00487 {
00488 Q_OBJECT
00489
00490
public:
00491 KMRedirectCommand(
QWidget *parent, KMMessage *msg );
00492
00493
private:
00494
virtual Result execute();
00495 };
00496
00497
class KMBounceCommand :
public KMCommand
00498 {
00499 Q_OBJECT
00500
00501
public:
00502 KMBounceCommand(
QWidget *parent, KMMessage *msg );
00503
00504
private:
00505
virtual Result execute();
00506 };
00507
00508
class KMPrintCommand :
public KMCommand
00509 {
00510 Q_OBJECT
00511
00512
public:
00513 KMPrintCommand(
QWidget *parent, KMMessage *msg,
00514
bool htmlOverride=
false,
const QTextCodec *codec = 0 );
00515
00516
private:
00517
virtual Result execute();
00518
00519
bool mHtmlOverride;
00520
const QTextCodec *mCodec;
00521 };
00522
00523
class KMSetStatusCommand :
public KMCommand
00524 {
00525 Q_OBJECT
00526
00527
public:
00528
00529 KMSetStatusCommand( KMMsgStatus status,
const QValueList<Q_UINT32> &,
00530
bool toggle=
false );
00531
00532
private:
00533
virtual Result execute();
00534
00535 KMMsgStatus mStatus;
00536
QValueList<Q_UINT32> mSerNums;
00537
QValueList<int> mIds;
00538
bool mToggle;
00539 };
00540
00541
class KMFilterCommand :
public KMCommand
00542 {
00543 Q_OBJECT
00544
00545
public:
00546 KMFilterCommand(
const QCString &field,
const QString &value );
00547
00548
private:
00549
virtual Result execute();
00550
00551
QCString mField;
00552
QString mValue;
00553 };
00554
00555
00556
class KMFilterActionCommand :
public KMCommand
00557 {
00558 Q_OBJECT
00559
00560
public:
00561 KMFilterActionCommand(
QWidget *parent,
00562
const QPtrList<KMMsgBase> &msgList,
00563 KMFilter *filter );
00564
00565
private:
00566
virtual Result execute();
00567
00568 KMFilter *mFilter;
00569 };
00570
00571
00572
class KMMetaFilterActionCommand :
public QObject
00573 {
00574 Q_OBJECT
00575
00576
public:
00577 KMMetaFilterActionCommand( KMFilter *filter,
KMHeaders *headers,
00578 KMMainWidget *main );
00579
00580
public slots:
00581
void start();
00582
00583
private:
00584 KMFilter *mFilter;
00585
KMHeaders *mHeaders;
00586 KMMainWidget *mMainWidget;
00587 };
00588
00589
00590
class KMMailingListFilterCommand :
public KMCommand
00591 {
00592 Q_OBJECT
00593
00594
public:
00595 KMMailingListFilterCommand(
QWidget *parent, KMMessage *msg );
00596
00597
private:
00598
virtual Result execute();
00599 };
00600
00601
00609 class KMMenuCommand :
public KMCommand
00610 {
00611 Q_OBJECT
00612
00613
public:
00614
static void folderToPopupMenu(
bool move,
QObject *receiver,
00615 KMMenuToFolder *aMenuToFolder,
QPopupMenu *menu );
00616
00617
static void makeFolderMenu(KMFolderNode* item,
bool move,
00618
QObject *receiver, KMMenuToFolder *aMenuToFolder,
QPopupMenu *menu );
00619 };
00620
00621
class KMCopyCommand :
public KMMenuCommand
00622 {
00623 Q_OBJECT
00624
00625
public:
00626 KMCopyCommand(
KMFolder* destFolder,
00627
const QPtrList<KMMsgBase> &msgList );
00628 KMCopyCommand(
KMFolder* destFolder, KMMessage *msg );
00629
00630
private:
00631
virtual Result execute();
00632
00633
KMFolder *mDestFolder;
00634
QPtrList<KMMsgBase> mMsgList;
00635 };
00636
00637
namespace KPIM {
00638
class ProgressItem;
00639 }
00640
class KMMoveCommand :
public KMMenuCommand
00641 {
00642 Q_OBJECT
00643
00644
public:
00645 KMMoveCommand(
KMFolder* destFolder,
const QPtrList<KMMsgBase> &msgList );
00646 KMMoveCommand(
KMFolder* destFolder, KMMessage * msg );
00647 KMMoveCommand(
KMFolder* destFolder, KMMsgBase * msgBase );
00648
KMFolder* destFolder()
const {
return mDestFolder; }
00649
00650
public slots:
00651
void slotImapFolderCompleted(KMFolderImap *folder,
bool success);
00652
void slotMsgAddedToDestFolder(
KMFolder *folder, Q_UINT32 serNum);
00653
void slotMoveCanceled();
00654
00655
private:
00656
virtual Result execute();
00657
void completeMove( Result result );
00658
00659
KMFolder *mDestFolder;
00660
QPtrList<KMMsgBase> mMsgList;
00661
00662
00663
QValueList<Q_UINT32> mLostBoys;
00664 KPIM::ProgressItem *mProgressItem;
00665 };
00666
00667
class KMDeleteMsgCommand :
public KMMoveCommand
00668 {
00669 Q_OBJECT
00670
00671
public:
00672 KMDeleteMsgCommand(
KMFolder* srcFolder,
const QPtrList<KMMsgBase> &msgList );
00673 KMDeleteMsgCommand(
KMFolder* srcFolder, KMMessage * msg );
00674
00675
private:
00676
static KMFolder * findTrashFolder(
KMFolder * srcFolder );
00677 };
00678
00679
class KMUrlClickedCommand :
public KMCommand
00680 {
00681 Q_OBJECT
00682
00683
public:
00684 KMUrlClickedCommand(
const KURL &url, uint identity,
00685 KMReaderWin *readerWin,
bool mHtmlPref, KMMainWidget *mainWidget = 0 );
00686
00687
private:
00688
virtual Result execute();
00689
00690 KURL mUrl;
00691 uint mIdentity;
00692 KMReaderWin *mReaderWin;
00693
bool mHtmlPref;
00694 KMMainWidget *mMainWidget;
00695 };
00696
00697
class KMLoadPartsCommand :
public KMCommand
00698 {
00699 Q_OBJECT
00700
00701
public:
00702 KMLoadPartsCommand(
QPtrList<partNode>& parts, KMMessage* msg );
00703 KMLoadPartsCommand( partNode* node, KMMessage* msg );
00704 KMLoadPartsCommand( PartNodeMessageMap& partMap );
00705
00706
public slots:
00707
void slotPartRetrieved( KMMessage* msg,
QString partSpecifier );
00708
00709 signals:
00710
void partsRetrieved();
00711
00712
private:
00713
00714
virtual void slotStart();
00715
00716
virtual Result execute();
00717
00718
int mNeedsRetrieval;
00719 PartNodeMessageMap mPartMap;
00720 };
00721
00722
class KMResendMessageCommand :
public KMCommand
00723 {
00724 Q_OBJECT
00725
00726
public:
00727 KMResendMessageCommand(
QWidget *parent, KMMessage *msg=0 );
00728
00729
private:
00730
virtual Result execute();
00731 };
00732
00733
class KMMailingListCommand :
public KMCommand
00734 {
00735 Q_OBJECT
00736
public:
00737 KMMailingListCommand(
QWidget *parent,
KMFolder *parent );
00738
private:
00739
virtual Result execute();
00740
private slots:
00741
void commandCompleted( KMCommand *command );
00742
protected:
00743
virtual KURL::List urls() const =0;
00744 protected:
00745
KMFolder *mFolder;
00746 };
00747
00748 class KMMailingListPostCommand : public KMMailingListCommand
00749 {
00750 Q_OBJECT
00751
public:
00752 KMMailingListPostCommand(
QWidget *parent,
KMFolder *parent );
00753
protected:
00754
virtual KURL::List urls() const;
00755 };
00756
00757 class KMMailingListSubscribeCommand : public KMMailingListCommand
00758 {
00759 Q_OBJECT
00760
public:
00761 KMMailingListSubscribeCommand(
QWidget *parent,
KMFolder *parent );
00762
protected:
00763
virtual KURL::List urls() const;
00764 };
00765
00766 class KMMailingListUnsubscribeCommand : public KMMailingListCommand
00767 {
00768 Q_OBJECT
00769
public:
00770 KMMailingListUnsubscribeCommand(
QWidget *parent,
KMFolder *parent );
00771
protected:
00772
virtual KURL::List urls() const;
00773 };
00774
00775 class KMMailingListArchivesCommand : public KMMailingListCommand
00776 {
00777 Q_OBJECT
00778
public:
00779 KMMailingListArchivesCommand(
QWidget *parent,
KMFolder *parent );
00780
protected:
00781
virtual KURL::List urls() const;
00782 };
00783
00784 class KMMailingListHelpCommand : public KMMailingListCommand
00785 {
00786 Q_OBJECT
00787
public:
00788 KMMailingListHelpCommand(
QWidget *parent,
KMFolder *parent );
00789
protected:
00790
virtual KURL::List urls() const;
00791 };
00792
00793 class KMIMChatCommand : public KMCommand
00794 {
00795 Q_OBJECT
00796
00797
public:
00798 KMIMChatCommand(
const KURL &url, KMMessage *msg=0 );
00799
00800
private:
00807
virtual Result execute();
00808
00809 KURL mUrl;
00810 KMMessage *mMessage;
00811 };
00812
00813
00814
#endif