From 460c52653ab0dcca6f19a4f492ed2c5e4e963ab0 Mon Sep 17 00:00:00 2001 From: toma Date: Wed, 25 Nov 2009 17:56:58 +0000 Subject: Copy the KDE 3.5 branch to branches/trinity for new KDE 3.5 features. BUG:215923 git-svn-id: svn://anonsvn.kde.org/home/kde/branches/trinity/kdepim@1054174 283d02a7-25f6-0310-bc7c-ecb5cbfe19da --- kmail/kmreaderwin.h | 546 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 546 insertions(+) create mode 100644 kmail/kmreaderwin.h (limited to 'kmail/kmreaderwin.h') diff --git a/kmail/kmreaderwin.h b/kmail/kmreaderwin.h new file mode 100644 index 00000000..2942d77c --- /dev/null +++ b/kmail/kmreaderwin.h @@ -0,0 +1,546 @@ +// -*- mode: C++; c-file-style: "gnu" -*- +// Header for kmreaderwin the kmail reader +// written by Markus Wuebben + +#ifndef KMREADERWIN_H +#define KMREADERWIN_H + +#include +#include +#include +#include +#include +#include "kmmsgbase.h" +#include "kmmimeparttree.h" // Needed for friend declaration. +#include "interfaces/observer.h" + +class QFrame; +class QSplitter; +class QHBox; +class QListViewItem; +class QScrollBar; +class QString; +class QTabDialog; +class QTextCodec; + +class DwHeaders; +class DwMediaType; + +class KActionCollection; +class KAction; +class KActionMenu; +class KSelectAction; +class KRadioAction; +class KToggleAction; +class KConfigBase; +class KHTMLPart; +class KURL; + +class KMFolder; +class KMMessage; +class KMMessagePart; +namespace KMail { + namespace Interface { + class Observable; + } + class PartMetaData; + class ObjectTreeParser; + class AttachmentStrategy; + class HeaderStrategy; + class HeaderStyle; + class HtmlWriter; + class KHtmlPartHtmlWriter; + class ISubject; + class HtmlStatusBar; + class FolderJob; + class CSSHelper; +} + +class partNode; // might be removed when KMime is used instead of mimelib + // (khz, 29.11.2001) + +class NewByteArray; // providing operator+ on a QByteArray (khz, 21.06.2002) + +namespace KParts { + struct URLArgs; +} + +/** + This class implements a "reader window", that is a window + used for reading or viewing messages. +*/ + +class KMReaderWin: public QWidget, public KMail::Interface::Observer { + Q_OBJECT + + friend void KMMimePartTree::itemClicked( QListViewItem* item ); + friend void KMMimePartTree::itemRightClicked( QListViewItem* item, const QPoint & ); + friend void KMMimePartTree::slotSaveAs(); + friend void KMMimePartTree::startDrag(); + + friend class KMail::ObjectTreeParser; + friend class KMail::KHtmlPartHtmlWriter; + +public: + KMReaderWin( QWidget *parent, + QWidget *mainWindow, + KActionCollection *actionCollection, + const char *name=0, + int f=0 ); + virtual ~KMReaderWin(); + + /** + \reimp from Interface::Observer + Updates the current message + */ + void update( KMail::Interface::Observable * ); + + /** Read settings from app's config file. */ + void readConfig(); + + /** Write settings to app's config file. Calls sync() if withSync is TRUE. */ + void writeConfig( bool withSync=true ) const; + + const KMail::HeaderStyle * headerStyle() const { + return mHeaderStyle; + } + /** Set the header style and strategy. We only want them to be set + together. */ + void setHeaderStyleAndStrategy( const KMail::HeaderStyle * style, + const KMail::HeaderStrategy * strategy ); + + /** Getthe message header strategy. */ + const KMail::HeaderStrategy * headerStrategy() const { + return mHeaderStrategy; + } + + /** Get/set the message attachment strategy. */ + const KMail::AttachmentStrategy * attachmentStrategy() const { + return mAttachmentStrategy; + } + void setAttachmentStrategy( const KMail::AttachmentStrategy * strategy ); + + /** Get selected override character encoding. + @return The encoding selected by the user or an empty string if auto-detection + is selected. */ + QString overrideEncoding() const { return mOverrideEncoding; } + + /** Set the override character encoding. */ + void setOverrideEncoding( const QString & encoding ); + + void setPrintFont( const QFont& font ); + + /** Get codec corresponding to the currently selected override character encoding. + @return The override codec or 0 if auto-detection is selected. */ + const QTextCodec * overrideCodec() const; + + /** Set printing mode */ + virtual void setPrinting(bool enable) { mPrinting = enable; } + + /** Set the message that shall be shown. If msg is 0, an empty page is + displayed. */ + virtual void setMsg(KMMessage* msg, bool force = false); + + /** Instead of settings a message to be shown sets a message part + to be shown */ + void setMsgPart( KMMessagePart* aMsgPart, bool aHTML, + const QString& aFileName, const QString& pname ); + + void setMsgPart( partNode * node ); + + /** Show or hide the Mime Tree Viewer if configuration + is set to smart mode. */ + void showHideMimeTree( bool isPlainTextTopLevel ); + + /** Store message id of last viewed message, + normally no need to call this function directly, + since correct value is set automatically in + parseMsg(KMMessage* aMsg, bool onlyProcessHeaders). */ + void setIdOfLastViewedMessage( const QString & msgId ) + { mIdOfLastViewedMessage = msgId; } + + /** Clear the reader and discard the current message. */ + void clear(bool force = false) { setMsg(0, force); } + + /** Saves the relative position of the scroll view. Call this before calling update() + if you want to preserve the current view. */ + void saveRelativePosition(); + + /** Re-parse the current message. */ + void update(bool force = false); + + /** Print current message. */ + virtual void printMsg(void); + + /** Return selected text */ + QString copyText(); + + /** Get/set auto-delete msg flag. */ + bool autoDelete(void) const { return mAutoDelete; } + void setAutoDelete(bool f) { mAutoDelete=f; } + + /** Override default html mail setting */ + bool htmlOverride() const { return mHtmlOverride; } + void setHtmlOverride( bool override ); + + /** Override default load external references setting */ + bool htmlLoadExtOverride() const { return mHtmlLoadExtOverride; } + void setHtmlLoadExtOverride( bool override ); + + /** Is html mail to be supported? Takes into account override */ + bool htmlMail(); + + /** Is loading ext. references to be supported? Takes into account override */ + bool htmlLoadExternal(); + + /** Returns the MD5 hash for the list of new features */ + static QString newFeaturesMD5(); + + /** Display a generic HTML splash page instead of a message */ + void displaySplashPage( const QString &info ); + + /** Display the about page instead of a message */ + void displayAboutPage(); + + /** Display the 'please wait' page instead of a message */ + void displayBusyPage(); + /** Display the 'we are currently in offline mode' page instead of a message */ + void displayOfflinePage(); + + /** Enable the displaying of messages again after an URL was displayed */ + void enableMsgDisplay(); + + /** View message part of type message/RFC822 in extra viewer window. */ + void atmViewMsg(KMMessagePart* msgPart); + + bool atBottom() const; + + bool isFixedFont() { return mUseFixedFont; } + void setUseFixedFont( bool useFixedFont ) { mUseFixedFont = useFixedFont; } + + /** Return the HtmlWriter connected to the KHTMLPart we use */ + KMail::HtmlWriter * htmlWriter() { return mHtmlWriter; } + + // Action to reply to a message + // but action( "some_name" ) some name could be used instead. + KToggleAction *toggleFixFontAction() { return mToggleFixFontAction; } + KAction *mailToComposeAction() { return mMailToComposeAction; } + KAction *mailToReplyAction() { return mMailToReplyAction; } + KAction *mailToForwardAction() { return mMailToForwardAction; } + KAction *addAddrBookAction() { return mAddAddrBookAction; } + KAction *openAddrBookAction() { return mOpenAddrBookAction; } + KAction *copyAction() { return mCopyAction; } + KAction *selectAllAction() { return mSelectAllAction; } + KAction *copyURLAction() { return mCopyURLAction; } + KAction *urlOpenAction() { return mUrlOpenAction; } + KAction *urlSaveAsAction() { return mUrlSaveAsAction; } + KAction *addBookmarksAction() { return mAddBookmarksAction;} + KAction *startImChatAction() { return mStartIMChatAction; } + // This function returns the complete data that were in this + // message parts - *after* all encryption has been removed that + // could be removed. + // - This is used to store the message in decrypted form. + void objectTreeToDecryptedMsg( partNode* node, + NewByteArray& resultingData, + KMMessage& theMessage, + bool weAreReplacingTheRootNode = false, + int recCount = 0 ); + + /** Returns message part from given URL or null if invalid. */ + partNode* partNodeFromUrl(const KURL &url); + + partNode * partNodeForId( int id ); + + KURL tempFileUrlFromPartNode( const partNode * node ); + + /** Returns id of message part from given URL or -1 if invalid. */ + static int msgPartFromUrl(const KURL &url); + + void setUpdateAttachment( bool update = true ) { mAtmUpdate = update; } + + /** Access to the KHTMLPart used for the viewer. Use with + care! */ + KHTMLPart * htmlPart() const { return mViewer; } + + /** Returns the current message or 0 if none. */ + KMMessage* message(KMFolder** folder=0) const; + + void openAttachment( int id, const QString & name ); + + void emitUrlClicked( const KURL & url, int button ) { + emit urlClicked( url, button ); + } + + void emitPopupMenu( const KURL & url, const QPoint & p ) { + if ( message() ) + emit popupMenu( *message(), url, p ); + } + + void showAttachmentPopup( int id, const QString & name, const QPoint & p ); + + /** Set the serial number of the message this reader window is currently + * waiting for. Used to discard updates for already deselected messages. */ + void setWaitingForSerNum( unsigned long serNum ) { mWaitingForSerNum = serNum; } + + QWidget* mainWindow() { return mMainWindow; } + + /** Returns wether the message should be decryted. */ + bool decryptMessage() const; + + /** Enforce message decryption. */ + void setDecryptMessageOverwrite( bool overwrite = true ) { mDecrytMessageOverwrite = overwrite; } + + /** Show signature details. */ + bool showSignatureDetails() const { return mShowSignatureDetails; } + + /** Show signature details. */ + void setShowSignatureDetails( bool showDetails = true ) { mShowSignatureDetails = showDetails; } + + /* show or hide the list that points to the attachments */ + bool showAttachmentQuicklist() const { return mShowAttachmentQuicklist; } + + /* show or hide the list that points to the attachments */ + void setShowAttachmentQuicklist( bool showAttachmentQuicklist = true ) { mShowAttachmentQuicklist = showAttachmentQuicklist; } + +signals: + /** Emitted after parsing of a message to have it stored + in unencrypted state in it's folder. */ + void replaceMsgByUnencryptedVersion(); + + /** The user presses the right mouse button. 'url' may be 0. */ + void popupMenu(KMMessage &msg, const KURL &url, const QPoint& mousePos); + + /** The user has clicked onto an URL that is no attachment. */ + void urlClicked(const KURL &url, int button); + + /** Pgp displays a password dialog */ + void noDrag(void); + +public slots: + + /** Select message body. */ + void selectAll(); + + /** Force update even if message is the same */ + void clearCache(); + + /** Refresh the reader window */ + void updateReaderWin(); + + /** HTML Widget scrollbar and layout handling. */ + void slotScrollUp(); + void slotScrollDown(); + void slotScrollPrior(); + void slotScrollNext(); + void slotJumpDown(); + void slotDocumentChanged(); + void slotDocumentDone(); + void slotTextSelected(bool); + + /** An URL has been activate with a click. */ + void slotUrlOpen(const KURL &url, const KParts::URLArgs &args); + + /** The mouse has moved on or off an URL. */ + void slotUrlOn(const QString &url); + + /** The user presses the right mouse button on an URL. */ + void slotUrlPopup(const QString &, const QPoint& mousePos); + + /** The user selected "Find" from the menu. */ + void slotFind(); + /** The user selected "Find Next" from the menu. */ + void slotFindNext(); + + /** The user toggled the "Fixed Font" flag from the view menu. */ + void slotToggleFixedFont(); + + /** Copy the selected text to the clipboard */ + void slotCopySelectedText(); + + void slotUrlClicked(); + + /** Operations on mailto: URLs. */ + void slotMailtoReply(); + void slotMailtoCompose(); + void slotMailtoForward(); + void slotMailtoAddAddrBook(); + void slotMailtoOpenAddrBook(); + /** Copy URL in mUrlCurrent to clipboard. Removes "mailto:" at + beginning of URL before copying. */ + void slotUrlCopy(); + void slotUrlOpen( const KURL &url = KURL() ); + /** Save the page to a file */ + void slotUrlSave(); + void slotAddBookmarks(); + void slotSaveMsg(); + void slotSaveAttachments(); + + void slotMessageArrived( KMMessage *msg ); + /** start IM Chat with addressee */ + void slotIMChat(); + void contactStatusChanged( const QString &uid); + + void slotLevelQuote( int l ); + void slotTouchMessage(); + + void slotDeleteAttachment( partNode* node ); + void slotEditAttachment( partNode* node ); + + KMail::CSSHelper* cssHelper(); + +protected slots: + void slotCycleHeaderStyles(); + void slotBriefHeaders(); + void slotFancyHeaders(); + void slotEnterpriseHeaders(); + void slotStandardHeaders(); + void slotLongHeaders(); + void slotAllHeaders(); + + void slotCycleAttachmentStrategy(); + void slotIconicAttachments(); + void slotSmartAttachments(); + void slotInlineAttachments(); + void slotHideAttachments(); + + /** Some attachment operations. */ + void slotAtmView( int id, const QString& name ); + void slotDelayedResize(); + void slotHandleAttachment( int ); + +protected: + /** reimplemented in order to update the frame width in case of a changed + GUI style */ + void styleChange( QStyle& oldStyle ); + + /** Set the width of the frame to a reasonable value for the current GUI + style */ + void setStyleDependantFrameWidth(); + + /** Watch for palette changes */ + virtual bool event(QEvent *e); + + /** Calculate the pixel size */ + int pointsToPixel(int pointSize) const; + + /** Feeds the HTML viewer with the contents of the given message. + HTML begin/end parts are written around the message. */ + void displayMessage(); + + /** Parse given message and add it's contents to the reader window. */ + virtual void parseMsg( KMMessage* msg ); + + /** Creates a nice mail header depending on the current selected + header style. */ + QString writeMsgHeader(KMMessage* aMsg, bool hasVCard=false, bool topLevel=false); + + /** Writes the given message part to a temporary file and returns the + name of this file or QString::null if writing failed. + */ + QString writeMessagePartToTempFile( KMMessagePart* msgPart, int partNumber ); + + /** + Creates a temporary dir for saving attachments, etc. + Will be automatically deleted when another message is viewed. + @param param Optional part of the directory name. + */ + QString createTempDir( const QString ¶m = QString() ); + + /** show window containing infos about a vCard. */ + void showVCard(KMMessagePart *msgPart); + + /** HTML initialization. */ + virtual void initHtmlWidget(void); + + /** Some necessary event handling. */ + virtual void closeEvent(QCloseEvent *); + virtual void resizeEvent(QResizeEvent *); + + /** Cleanup the attachment temp files */ + virtual void removeTempFiles(); + + /** Event filter */ + bool eventFilter( QObject *obj, QEvent *ev ); + +private slots: + void slotSetEncoding(); + void injectAttachments(); + +private: + void adjustLayout(); + void createWidgets(); + void createActions( KActionCollection * ac ); + void saveSplitterSizes( KConfigBase & c ) const; + + KRadioAction * actionForHeaderStyle( const KMail::HeaderStyle *, + const KMail::HeaderStrategy * ); + KRadioAction * actionForAttachmentStrategy( const KMail::AttachmentStrategy * ); + /** Read override codec from configuration */ + void readGlobalOverrideCodec(); + + QString renderAttachments( partNode *node, const QColor &bgColor ); + +private: + bool mHtmlMail, mHtmlLoadExternal, mHtmlOverride, mHtmlLoadExtOverride; + int mAtmCurrent; + QString mAtmCurrentName; + KMMessage *mMessage; + // widgets: + QSplitter * mSplitter; + QHBox *mBox; + KMail::HtmlStatusBar *mColorBar; + KMMimePartTree* mMimePartTree; + KHTMLPart *mViewer; + + const KMail::AttachmentStrategy * mAttachmentStrategy; + const KMail::HeaderStrategy * mHeaderStrategy; + const KMail::HeaderStyle * mHeaderStyle; + bool mAutoDelete; + /** where did the user save the attachment last time */ + QString mSaveAttachDir; + static const int delay; + QTimer mUpdateReaderWinTimer; + QTimer mResizeTimer; + QTimer mDelayedMarkTimer; + QString mOverrideEncoding; + QString mOldGlobalOverrideEncoding; // used to detect changes of the global override character encoding + bool mMsgDisplay; + bool mNoMDNsWhenEncrypted; + unsigned long mLastSerNum; + KMMsgStatus mLastStatus; + + KMail::CSSHelper * mCSSHelper; + bool mUseFixedFont; + bool mPrinting; + bool mShowColorbar; + //bool mShowCompleteMessage; + QStringList mTempFiles; + QStringList mTempDirs; + int mMimeTreeMode; + bool mMimeTreeAtBottom; + QValueList mSplitterSizes; + partNode* mRootNode; + QString mIdOfLastViewedMessage; + QWidget *mMainWindow; + KActionCollection *mActionCollection; + KAction *mMailToComposeAction, *mMailToReplyAction, *mMailToForwardAction, + *mAddAddrBookAction, *mOpenAddrBookAction, *mCopyAction, *mCopyURLAction, + *mUrlOpenAction, *mUrlSaveAsAction, *mAddBookmarksAction, *mStartIMChatAction, *mSelectAllAction; + KSelectAction *mSelectEncodingAction; + KToggleAction *mToggleFixFontAction; + KURL mUrlClicked; + KMail::HtmlWriter * mHtmlWriter; + // an attachment should be updated + bool mAtmUpdate; + int mChoice; + unsigned long mWaitingForSerNum; + float mSavedRelativePosition; + int mLevelQuote; + bool mDecrytMessageOverwrite; + bool mShowSignatureDetails; + bool mShowAttachmentQuicklist; +}; + + +#endif + -- cgit v1.2.3