You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
291 lines
9.3 KiB
291 lines
9.3 KiB
/* -*- mode: C++; c-file-style: "gnu" -*- |
|
This file is part of KMail, the KDE mail client. |
|
Copyright (c) 1997 Markus Wuebben <markus.wuebben@kde.org> |
|
|
|
This program is free software; you can redistribute it and/or modify |
|
it under the terms of the GNU General Public License as published by |
|
the Free Software Foundation; either version 2 of the License, or |
|
(at your option) any later version. |
|
|
|
This program is distributed in the hope that it will be useful, |
|
but WITHOUT ANY WARRANTY; without even the implied warranty of |
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|
GNU General Public License for more details. |
|
|
|
You should have received a copy of the GNU General Public License along |
|
with this program; if not, write to the Free Software Foundation, Inc., |
|
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. |
|
*/ |
|
|
|
#ifndef KMREADERWIN_H |
|
#define KMREADERWIN_H |
|
|
|
#include <QWidget> |
|
#include <QTimer> |
|
#include <QStringList> |
|
#include <QCloseEvent> |
|
#include <QEvent> |
|
#include <QList> |
|
#include <QResizeEvent> |
|
#include <kurl.h> |
|
#include <kservice.h> |
|
#include <messagecore/messagestatus.h> |
|
#include <kvbox.h> |
|
using KPIM::MessageStatus; |
|
#include "interfaces/observer.h" |
|
#include <map> |
|
#include <messageviewer/viewer.h> |
|
#include <messageviewer/interfaces/bodypart.h> |
|
class QString; |
|
|
|
|
|
class KActionCollection; |
|
class KAction; |
|
class KToggleAction; |
|
class KToggleAction; |
|
class KWebView; |
|
class KUrl; |
|
namespace MessageViewer { |
|
namespace Interface { |
|
class BodyPartMemento; |
|
} |
|
class HeaderStrategy; |
|
class HeaderStyle; |
|
class Viewer; |
|
class CSSHelper; |
|
class AttachmentStrategy; |
|
} |
|
|
|
namespace KParts { |
|
struct BrowserArguments; |
|
} |
|
|
|
namespace Akonadi { |
|
class Item; |
|
} |
|
|
|
/** |
|
This class implements a "reader window", that is a window |
|
used for reading or viewing messages. |
|
*/ |
|
|
|
class KMReaderWin: public QWidget { |
|
Q_OBJECT |
|
|
|
public: |
|
KMReaderWin( QWidget *parent, QWidget *mainWindow, |
|
KActionCollection *actionCollection, Qt::WindowFlags f = 0 ); |
|
virtual ~KMReaderWin(); |
|
|
|
/** Read settings from app's config file. */ |
|
void readConfig(); |
|
|
|
const MessageViewer::HeaderStyle * headerStyle() const; |
|
|
|
/** Set the header style and strategy. We only want them to be set |
|
together. */ |
|
void setHeaderStyleAndStrategy( const MessageViewer::HeaderStyle * style, |
|
const MessageViewer::HeaderStrategy * strategy ); |
|
/** Getthe message header strategy. */ |
|
const MessageViewer::HeaderStrategy * headerStrategy() const; |
|
|
|
/** Get/set the message attachment strategy. */ |
|
const MessageViewer::AttachmentStrategy * attachmentStrategy() const; |
|
|
|
void setAttachmentStrategy( const MessageViewer::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; |
|
/** Set the override character encoding. */ |
|
void setOverrideEncoding( const QString & encoding ); |
|
virtual void setPrinting(bool enable ); |
|
|
|
void setMessage( const Akonadi::Item& item, MessageViewer::Viewer::UpdateMode updateMode = MessageViewer::Viewer::Delayed); |
|
|
|
|
|
/** Instead of settings a message to be shown sets a message part |
|
to be shown */ |
|
void setMsgPart( KMime::Content* aMsgPart, bool aHTML, |
|
const QString& aFileName, const QString& pname ); |
|
|
|
|
|
/** 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); |
|
|
|
void update(bool force = false); |
|
|
|
/** Saves the relative position of the scroll view. Call this before calling update() |
|
if you want to preserve the current view. */ |
|
void saveRelativePosition(); |
|
|
|
/** Return selected text */ |
|
QString copyText() const; |
|
|
|
/** Override default html mail setting */ |
|
bool htmlOverride() const; |
|
void setHtmlOverride( bool override ); |
|
|
|
/** Override default load external references setting */ |
|
bool htmlLoadExtOverride() const; |
|
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(); |
|
|
|
bool isFixedFont() const; |
|
void setUseFixedFont( bool useFixedFont ); |
|
MessageViewer::Viewer *viewer() { return mViewer; } |
|
// Action to reply to a message |
|
// but action( "some_name" ) some name could be used instead. |
|
KToggleAction *toggleFixFontAction(); |
|
KAction *mailToComposeAction() { return mMailToComposeAction; } |
|
KAction *mailToReplyAction() { return mMailToReplyAction; } |
|
KAction *mailToForwardAction() { return mMailToForwardAction; } |
|
KAction *addAddrBookAction() { return mAddAddrBookAction; } |
|
KAction *openAddrBookAction() { return mOpenAddrBookAction; } |
|
KAction *copyAction(); |
|
KAction *selectAllAction(); |
|
KAction *copyURLAction(); |
|
KAction *urlOpenAction(); |
|
KAction *urlSaveAsAction() { return mUrlSaveAsAction; } |
|
KAction *addBookmarksAction() { return mAddBookmarksAction;} |
|
KAction *toggleMimePartTreeAction(); |
|
|
|
void setUpdateAttachment( bool update = true ) { mAtmUpdate = update; } |
|
/** Access to the KWebKitView used for the viewer. Use with |
|
care! */ |
|
KWebView * htmlPart() const; |
|
|
|
Akonadi::Item message() const; |
|
/** 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 whether the message should be decryted. */ |
|
bool decryptMessage() const; |
|
|
|
/** Enforce message decryption. */ |
|
void setDecryptMessageOverwrite( bool overwrite = true ); |
|
|
|
/** Show signature details. */ |
|
bool showSignatureDetails() const; |
|
|
|
/** Show signature details. */ |
|
void setShowSignatureDetails( bool showDetails = true ); |
|
|
|
MessageViewer::CSSHelper* cssHelper() const; |
|
|
|
/* show or hide the list that points to the attachments */ |
|
bool showAttachmentQuicklist() const; |
|
|
|
/* show or hide the list that points to the attachments */ |
|
void setShowAttachmentQuicklist( bool showAttachmentQuicklist = true ); |
|
/** Return weather to show or hide the full list of "To" addresses */ |
|
bool showFullToAddressList() const; |
|
|
|
/** Show or hide the full list of "To" addresses */ |
|
void setShowFullToAddressList( bool showFullToAddressList = true ); |
|
|
|
/** Return weather to show or hide the full list of "To" addresses */ |
|
bool showFullCcAddressList() const; |
|
|
|
/** Show or hide the full list of "To" addresses */ |
|
void setShowFullCcAddressList( bool showFullCcAddressList = true ); |
|
|
|
private: |
|
|
|
signals: |
|
/** Emitted after parsing of a message to have it stored |
|
in unencrypted state in it's folder. */ |
|
void replaceMsgByUnencryptedVersion(); |
|
|
|
/** Pgp displays a password dialog */ |
|
void noDrag(void); |
|
|
|
public slots: |
|
/** Force update even if message is the same */ |
|
void clearCache(); |
|
|
|
/** The user selected "Find" from the menu. */ |
|
void slotFind(); |
|
/** Copy the selected text to the clipboard */ |
|
void slotCopySelectedText(); |
|
/** Operations on mailto: URLs. */ |
|
void slotMailtoReply(); |
|
void slotMailtoCompose(); |
|
void slotMailtoForward(); |
|
void slotMailtoAddAddrBook(); |
|
void slotMailtoOpenAddrBook(); |
|
/** Save the page to a file */ |
|
void slotUrlSave(); |
|
void slotAddBookmarks(); |
|
void slotTouchMessage(); |
|
void slotUrlClicked( const Akonadi::Item &, const KUrl& ); |
|
void slotRequestConfigSync(); |
|
void slotShowReader( KMime::Content* , bool, const QString&, const QString&, const QString &); |
|
protected: |
|
|
|
KUrl urlClicked() const; |
|
private: |
|
void createActions(); |
|
private: |
|
Akonadi::Item mMessage; |
|
|
|
// See setOriginalMsg() for an explaination for those two. |
|
QTimer mDelayedMarkTimer; |
|
bool mNoMDNsWhenEncrypted; |
|
unsigned long mLastSerNum; |
|
QStringList mTempFiles; |
|
QStringList mTempDirs; |
|
QString mIdOfLastViewedMessage; |
|
QWidget *mMainWindow; |
|
KActionCollection *mActionCollection; |
|
|
|
KAction *mMailToComposeAction, *mMailToReplyAction, *mMailToForwardAction, |
|
*mAddAddrBookAction, *mOpenAddrBookAction, *mUrlSaveAsAction, *mAddBookmarksAction, *mSelectAllAction; |
|
|
|
MessageViewer::Viewer *mViewer; |
|
|
|
/** Used only to be able to connect and disconnect finished() signal |
|
in printMsg() and slotPrintMsg() since mHtmlWriter points only to abstract non-QObject class. */ |
|
std::map<QByteArray, MessageViewer::Interface::BodyPartMemento*> mBodyPartMementoMap; |
|
// an attachment should be updated |
|
bool mAtmUpdate; |
|
int mChoice; |
|
unsigned long mWaitingForSerNum; |
|
|
|
bool mShowFullToAddressList; |
|
bool mShowFullCcAddressList; |
|
}; |
|
|
|
|
|
#endif |
|
|
|
|