00001
00002
00003
00004
00005 #ifndef KMREADERWIN_H
00006 #define KMREADERWIN_H
00007
00008 #include <tqwidget.h>
00009 #include <tqtimer.h>
00010 #include <tqstringlist.h>
00011 #include <kurl.h>
00012 #include <kservice.h>
00013 #include "kmmsgbase.h"
00014 #include "kmmimeparttree.h"
00015 #include "interfaces/observer.h"
00016
00017 #include <map>
00018
00019 class TQFrame;
00020 class TQSplitter;
00021 class TQHBox;
00022 class TQListViewItem;
00023 class TQScrollBar;
00024 class TQString;
00025 class TQTabDialog;
00026 class TQTextCodec;
00027
00028 class DwHeaders;
00029 class DwMediaType;
00030
00031 class KActionCollection;
00032 class KAction;
00033 class KActionMenu;
00034 class KSelectAction;
00035 class KRadioAction;
00036 class KToggleAction;
00037 class KConfigBase;
00038 class KHTMLPart;
00039 class KURL;
00040
00041 class KMFolder;
00042 class KMMessage;
00043 class KMMessagePart;
00044 namespace KMail {
00045 namespace Interface {
00046 class Observable;
00047 class BodyPartMemento;
00048 }
00049 class PartMetaData;
00050 class ObjectTreeParser;
00051 class AttachmentStrategy;
00052 class HeaderStrategy;
00053 class HeaderStyle;
00054 class HtmlWriter;
00055 class KHtmlPartHtmlWriter;
00056 class ISubject;
00057 class HtmlStatusBar;
00058 class FolderJob;
00059 class CSSHelper;
00060 }
00061
00062 class partNode;
00063
00064
00065 class NewByteArray;
00066
00067 namespace KParts {
00068 struct URLArgs;
00069 }
00070
00076 class KMReaderWin: public TQWidget, public KMail::Interface::Observer {
00077 Q_OBJECT
00078 TQ_OBJECT
00079
00080 friend void KMMimePartTree::itemClicked( TQListViewItem* item );
00081 friend void KMMimePartTree::itemRightClicked( TQListViewItem* item, const TQPoint & );
00082 friend void KMMimePartTree::slotSaveAs();
00083 friend void KMMimePartTree::startDrag();
00084
00085 friend class KMail::ObjectTreeParser;
00086 friend class KMail::KHtmlPartHtmlWriter;
00087
00088 public:
00089 KMReaderWin( TQWidget *parent,
00090 TQWidget *mainWindow,
00091 KActionCollection *actionCollection,
00092 const char *name=0,
00093 int f=0 );
00094 virtual ~KMReaderWin();
00095
00100 void update( KMail::Interface::Observable * );
00101
00103 void readConfig();
00104
00106 void writeConfig( bool withSync=true ) const;
00107
00108 const KMail::HeaderStyle * headerStyle() const {
00109 return mHeaderStyle;
00110 }
00113 void setHeaderStyleAndStrategy( const KMail::HeaderStyle * style,
00114 const KMail::HeaderStrategy * strategy );
00115
00117 const KMail::HeaderStrategy * headerStrategy() const {
00118 return mHeaderStrategy;
00119 }
00120
00122 const KMail::AttachmentStrategy * attachmentStrategy() const {
00123 return mAttachmentStrategy;
00124 }
00125 void setAttachmentStrategy( const KMail::AttachmentStrategy * strategy );
00126
00130 TQString overrideEncoding() const { return mOverrideEncoding; }
00131
00133 void setOverrideEncoding( const TQString & encoding );
00134
00135 void setPrintFont( const TQFont& font );
00136
00139 const TQTextCodec * overrideCodec() const;
00140
00142 virtual void setPrinting(bool enable) { mPrinting = enable; }
00143
00146 virtual void setMsg( KMMessage* msg, bool force = false, bool updateOnly = false );
00147
00159 void setOriginalMsg( unsigned long serNumOfOriginalMessage, int nodeIdOffset );
00160
00163 void setMsgPart( KMMessagePart* aMsgPart, bool aHTML,
00164 const TQString& aFileName, const TQString& pname );
00165
00166 void setMsgPart( partNode * node );
00167
00170 void showHideMimeTree( bool isPlainTextTopLevel );
00171
00176 void setIdOfLastViewedMessage( const TQString & msgId )
00177 { mIdOfLastViewedMessage = msgId; }
00178
00180 void clear(bool force = false) { setMsg(0, force); }
00181
00184 void saveRelativePosition();
00185
00187 void update(bool force = false);
00188
00190 virtual void printMsg(void);
00191
00193 TQString copyText();
00194
00196 bool autoDelete(void) const { return mAutoDelete; }
00197 void setAutoDelete(bool f) { mAutoDelete=f; }
00198
00200 bool htmlOverride() const { return mHtmlOverride; }
00201 void setHtmlOverride( bool override );
00202
00204 bool htmlLoadExtOverride() const { return mHtmlLoadExtOverride; }
00205 void setHtmlLoadExtOverride( bool override );
00206
00208 bool htmlMail();
00209
00211 bool htmlLoadExternal();
00212
00214 static TQString newFeaturesMD5();
00215
00217 void displaySplashPage( const TQString &info );
00218
00220 void displayAboutPage();
00221
00223 void displayBusyPage();
00225 void displayOfflinePage();
00226
00228 void enableMsgDisplay();
00229
00235 void atmViewMsg( KMMessagePart* msgPart, int nodeId );
00236
00237 bool atBottom() const;
00238
00239 bool isFixedFont() { return mUseFixedFont; }
00240 void setUseFixedFont( bool useFixedFont ) { mUseFixedFont = useFixedFont; }
00241
00243 KMail::HtmlWriter * htmlWriter() { return mHtmlWriter; }
00244
00245
00246
00247 KToggleAction *toggleFixFontAction() { return mToggleFixFontAction; }
00248 KAction *mailToComposeAction() { return mMailToComposeAction; }
00249 KAction *mailToReplyAction() { return mMailToReplyAction; }
00250 KAction *mailToForwardAction() { return mMailToForwardAction; }
00251 KAction *addAddrBookAction() { return mAddAddrBookAction; }
00252 KAction *openAddrBookAction() { return mOpenAddrBookAction; }
00253 KAction *copyAction() { return mCopyAction; }
00254 KAction *selectAllAction() { return mSelectAllAction; }
00255 KAction *copyURLAction() { return mCopyURLAction; }
00256 KAction *urlOpenAction() { return mUrlOpenAction; }
00257 KAction *urlSaveAsAction() { return mUrlSaveAsAction; }
00258 KAction *addBookmarksAction() { return mAddBookmarksAction;}
00259 KAction *startImChatAction() { return mStartIMChatAction; }
00260
00261
00262
00263
00264 void objectTreeToDecryptedMsg( partNode* node,
00265 NewByteArray& resultingData,
00266 KMMessage& theMessage,
00267 bool weAreReplacingTheRootNode = false,
00268 int recCount = 0 );
00269
00271 partNode* partNodeFromUrl(const KURL &url);
00272
00273 partNode * partNodeForId( int id );
00274
00275 KURL tempFileUrlFromPartNode( const partNode * node );
00276
00278 static int msgPartFromUrl(const KURL &url);
00279
00280 void setUpdateAttachment( bool update = true ) { mAtmUpdate = update; }
00281
00284 KHTMLPart * htmlPart() const { return mViewer; }
00285
00287 KMMessage* message(KMFolder** folder=0) const;
00288
00289 void openAttachment( int id, const TQString & name );
00290 void saveAttachment( const KURL &tempFileName );
00291
00292 void emitUrlClicked( const KURL & url, int button ) {
00293 emit urlClicked( url, button );
00294 }
00295
00296 void emitPopupMenu( const KURL & url, const TQPoint & p ) {
00297 if ( message() )
00298 emit popupMenu( *message(), url, p );
00299 }
00300
00301 void showAttachmentPopup( int id, const TQString & name, const TQPoint & p );
00302
00305 void setWaitingForSerNum( unsigned long serNum ) { mWaitingForSerNum = serNum; }
00306
00307 TQWidget* mainWindow() { return mMainWindow; }
00308
00310 bool decryptMessage() const;
00311
00313 void setDecryptMessageOverwrite( bool overwrite = true ) { mDecrytMessageOverwrite = overwrite; }
00314
00316 bool showSignatureDetails() const { return mShowSignatureDetails; }
00317
00319 void setShowSignatureDetails( bool showDetails = true ) { mShowSignatureDetails = showDetails; }
00320
00321
00322 bool showAttachmentQuicklist() const { return mShowAttachmentQuicklist; }
00323
00324
00325 void setShowAttachmentQuicklist( bool showAttachmentQuicklist = true ) { mShowAttachmentQuicklist = showAttachmentQuicklist; }
00326
00327
00328
00329 bool showRawToltecMail() const { return mShowRawToltecMail; }
00330 void setShowRawToltecMail( bool showRawToltecMail ) { mShowRawToltecMail = showRawToltecMail; }
00331
00332
00333 KMail::Interface::BodyPartMemento * bodyPartMemento( const partNode * node, const TQCString & which ) const;
00334
00335
00336
00337
00338 void setBodyPartMemento( const partNode * node, const TQCString & which, KMail::Interface::BodyPartMemento * memento );
00339
00341 void scrollToAttachment( const partNode *node );
00342
00343 private:
00344
00345
00346 void clearBodyPartMementos();
00347
00348 signals:
00351 void replaceMsgByUnencryptedVersion();
00352
00354 void popupMenu(KMMessage &msg, const KURL &url, const TQPoint& mousePos);
00355
00357 void urlClicked(const KURL &url, int button);
00358
00360 void noDrag(void);
00361
00362 public slots:
00363
00365 void selectAll();
00366
00368 void clearCache();
00369
00371 void updateReaderWin();
00372
00374 void slotScrollUp();
00375 void slotScrollDown();
00376 void slotScrollPrior();
00377 void slotScrollNext();
00378 void slotJumpDown();
00379 void slotDocumentChanged();
00380 void slotDocumentDone();
00381 void slotTextSelected(bool);
00382
00384 void slotUrlOpen(const KURL &url, const KParts::URLArgs &args);
00385
00387 void slotUrlOn(const TQString &url);
00388
00390 void slotUrlPopup(const TQString &, const TQPoint& mousePos);
00391
00393 void slotFind();
00395 void slotFindNext();
00396
00398 void slotToggleFixedFont();
00399
00401 void slotCopySelectedText();
00402
00403 void slotUrlClicked();
00404
00406 void slotMailtoReply();
00407 void slotMailtoCompose();
00408 void slotMailtoForward();
00409 void slotMailtoAddAddrBook();
00410 void slotMailtoOpenAddrBook();
00413 void slotUrlCopy();
00414 void slotUrlOpen( const KURL &url = KURL() );
00416 void slotUrlSave();
00417 void slotAddBookmarks();
00418 void slotSaveMsg();
00419 void slotSaveAttachments();
00420
00421 void slotMessageArrived( KMMessage *msg );
00423 void slotIMChat();
00424 void contactStatusChanged( const TQString &uid);
00425
00426 void slotLevelQuote( int l );
00427 void slotTouchMessage();
00428
00436 void fillCommandInfo( partNode *node, KMMessage **msg, int *nodeId );
00437
00438 void slotDeleteAttachment( partNode* node );
00439 void slotEditAttachment( partNode* node );
00440
00441 KMail::CSSHelper* cssHelper();
00442
00443 protected slots:
00444 void slotCycleHeaderStyles();
00445 void slotBriefHeaders();
00446 void slotFancyHeaders();
00447 void slotEnterpriseHeaders();
00448 void slotStandardHeaders();
00449 void slotLongHeaders();
00450 void slotAllHeaders();
00451
00452 void slotCycleAttachmentStrategy();
00453 void slotIconicAttachments();
00454 void slotSmartAttachments();
00455 void slotInlineAttachments();
00456 void slotHideAttachments();
00457 void slotHeaderOnlyAttachments();
00458
00460 void slotAtmView( int id, const TQString& name );
00461 void slotDelayedResize();
00462 void slotHandleAttachment( int );
00463
00467 void disconnectMsgAdded();
00468 void msgAdded( TQListViewItem *item );
00469
00470 protected:
00473 void styleChange( TQStyle& oldStyle );
00474
00477 void setStyleDependantFrameWidth();
00478
00480 virtual bool event(TQEvent *e);
00481
00483 int pointsToPixel(int pointSize) const;
00484
00487 void displayMessage();
00488
00490 virtual void parseMsg( KMMessage* msg );
00491
00494 TQString writeMsgHeader(KMMessage* aMsg, partNode *vCardNode = 0, bool topLevel=false );
00495
00499 TQString writeMessagePartToTempFile( KMMessagePart* msgPart, int partNumber );
00500
00506 TQString createTempDir( const TQString ¶m = TQString() );
00507
00509 void showVCard(KMMessagePart *msgPart);
00510
00512 virtual void initHtmlWidget(void);
00513
00515 virtual void closeEvent(TQCloseEvent *);
00516 virtual void resizeEvent(TQResizeEvent *);
00517
00519 virtual void removeTempFiles();
00520
00522 bool eventFilter( TQObject *obj, TQEvent *ev );
00523
00524 private slots:
00525 void slotSetEncoding();
00526 void injectAttachments();
00527
00528 private:
00529 void adjustLayout();
00530 void createWidgets();
00531 void createActions( KActionCollection * ac );
00532 void saveSplitterSizes( KConfigBase & c ) const;
00533
00534 KRadioAction * actionForHeaderStyle( const KMail::HeaderStyle *,
00535 const KMail::HeaderStrategy * );
00536 KRadioAction * actionForAttachmentStrategy( const KMail::AttachmentStrategy * );
00538 void readGlobalOverrideCodec();
00539
00540 TQString renderAttachments( partNode *node, const TQColor &bgColor );
00541
00542 private:
00543 bool mHtmlMail, mHtmlLoadExternal, mHtmlOverride, mHtmlLoadExtOverride;
00544 int mAtmCurrent;
00545 TQString mAtmCurrentName;
00546 KMMessage *mMessage;
00547
00548
00549 unsigned long mSerNumOfOriginalMessage;
00550 int mNodeIdOffset;
00551
00552
00553 TQSplitter * mSplitter;
00554 TQHBox *mBox;
00555 KMail::HtmlStatusBar *mColorBar;
00556 KMMimePartTree* mMimePartTree;
00557 KHTMLPart *mViewer;
00558
00559 const KMail::AttachmentStrategy * mAttachmentStrategy;
00560 const KMail::HeaderStrategy * mHeaderStrategy;
00561 const KMail::HeaderStyle * mHeaderStyle;
00562 bool mAutoDelete;
00564 TQString mSaveAttachDir;
00565 static const int delay;
00566 TQTimer mUpdateReaderWinTimer;
00567 TQTimer mResizeTimer;
00568 TQTimer mDelayedMarkTimer;
00569 TQString mOverrideEncoding;
00570 TQString mOldGlobalOverrideEncoding;
00571 bool mMsgDisplay;
00572 bool mNoMDNsWhenEncrypted;
00573 unsigned long mLastSerNum;
00574
00575 KMail::CSSHelper * mCSSHelper;
00576 bool mUseFixedFont;
00577 bool mPrinting;
00578 bool mShowColorbar;
00579
00580 TQStringList mTempFiles;
00581 TQStringList mTempDirs;
00582 int mMimeTreeMode;
00583 bool mMimeTreeAtBottom;
00584 TQValueList<int> mSplitterSizes;
00585 partNode* mRootNode;
00586 TQString mIdOfLastViewedMessage;
00587 TQWidget *mMainWindow;
00588 KActionCollection *mActionCollection;
00589 KAction *mMailToComposeAction, *mMailToReplyAction, *mMailToForwardAction,
00590 *mAddAddrBookAction, *mOpenAddrBookAction, *mCopyAction, *mCopyURLAction,
00591 *mUrlOpenAction, *mUrlSaveAsAction, *mAddBookmarksAction, *mStartIMChatAction, *mSelectAllAction;
00592 KToggleAction *mHeaderOnlyAttachmentsAction;
00593 KSelectAction *mSelectEncodingAction;
00594 KToggleAction *mToggleFixFontAction;
00595
00596 KURL mHoveredUrl;
00597 KURL mClickedUrl;
00598 TQPoint mLastClickPosition;
00599 TQString mLastClickImagePath;
00600 bool mCanStartDrag;
00601
00602 KMail::HtmlWriter * mHtmlWriter;
00603 std::map<TQCString,KMail::Interface::BodyPartMemento*> mBodyPartMementoMap;
00604
00605 bool mAtmUpdate;
00606 int mChoice;
00607 unsigned long mWaitingForSerNum;
00608 float mSavedRelativePosition;
00609 int mLevelQuote;
00610 bool mDecrytMessageOverwrite;
00611 bool mShowSignatureDetails;
00612 bool mShowAttachmentQuicklist;
00613 bool mShowRawToltecMail;
00614 bool mExternalWindow;
00615 };
00616
00617
00618 #endif
00619