diff --git a/messageviewer/src/messagepartthemes/default/defaultrenderer.cpp b/messageviewer/src/messagepartthemes/default/defaultrenderer.cpp --- a/messageviewer/src/messagepartthemes/default/defaultrenderer.cpp +++ b/messageviewer/src/messagepartthemes/default/defaultrenderer.cpp @@ -866,7 +866,7 @@ return false; const auto plugin = registry.at(0); - return plugin->render(this, msgPart, htmlWriter); + return plugin->render(msgPart, htmlWriter, this); } QString DefaultRendererPrivate::renderFactory(const MessagePart::Ptr &msgPart, HtmlWriter *_htmlWriter) diff --git a/messageviewer/src/messagepartthemes/default/defaultrenderer_p.h b/messageviewer/src/messagepartthemes/default/defaultrenderer_p.h --- a/messageviewer/src/messagepartthemes/default/defaultrenderer_p.h +++ b/messageviewer/src/messagepartthemes/default/defaultrenderer_p.h @@ -20,6 +20,7 @@ #define __MESSAGEVIEWER_DEFAULTRENDERER_P_H__ #include "defaultrenderer.h" +#include "messagepartrendererbase.h" #include @@ -35,14 +36,14 @@ } namespace MimeTreeParser { -class DefaultRendererPrivate +class DefaultRendererPrivate : public MessageViewer::RenderContext { public: DefaultRendererPrivate(const MessagePart::Ptr &msgPart, CSSHelperBase *cssHelper, HtmlWriter *writer, const MessagePartRendererFactory *rendererFactory); ~DefaultRendererPrivate(); QString alignText(); - CSSHelperBase *cssHelper() const; + CSSHelperBase *cssHelper() const override; Interface::ObjectTreeSource *source() const; @@ -58,7 +59,7 @@ void render(const EncryptedMessagePart::Ptr &mp, HtmlWriter *htmlWriter); void render(const AlternativeMessagePart::Ptr &mp, HtmlWriter *htmlWriter); void render(const CertMessagePart::Ptr &mp, HtmlWriter *htmlWriter); - bool renderWithFactory(const QString &className, const MessagePart::Ptr &msgPart, HtmlWriter *writer); + bool renderWithFactory(const QString &className, const MessagePart::Ptr &msgPart, HtmlWriter *writer) override; QString renderFactory(const MessagePart::Ptr &msgPart, HtmlWriter *htmlWriter); QString mHtml; diff --git a/messageviewer/src/messagepartthemes/default/messagepartrenderbase.cpp b/messageviewer/src/messagepartthemes/default/messagepartrenderbase.cpp --- a/messageviewer/src/messagepartthemes/default/messagepartrenderbase.cpp +++ b/messageviewer/src/messagepartthemes/default/messagepartrenderbase.cpp @@ -29,10 +29,21 @@ #include "messagepartrendererbase.h" +#include + +using namespace MessageViewer; + +RenderContext::~RenderContext() = default; + MessagePartRendererBase::MessagePartRendererBase() { } MessagePartRendererBase::~MessagePartRendererBase() { } + +QString MessagePartRendererBase::alignText() const +{ + return QApplication::isRightToLeft() ? QStringLiteral("rtl") : QStringLiteral("ltr"); +} diff --git a/messageviewer/src/messagepartthemes/default/messagepartrendererbase.h b/messageviewer/src/messagepartthemes/default/messagepartrendererbase.h --- a/messageviewer/src/messagepartthemes/default/messagepartrendererbase.h +++ b/messageviewer/src/messagepartthemes/default/messagepartrendererbase.h @@ -38,18 +38,33 @@ #include namespace MimeTreeParser { -class DefaultRendererPrivate; class HtmlWriter; class MessagePart; typedef QSharedPointer MessagePartPtr; } +namespace MessageViewer { + +class CSSHelperBase; + +class RenderContext +{ +public: + virtual ~RenderContext(); + + virtual CSSHelperBase* cssHelper() const = 0; + virtual bool renderWithFactory(const QString &className, const MimeTreeParser::MessagePartPtr &msgPart, MimeTreeParser::HtmlWriter *writer) = 0; +}; + class MessagePartRendererBase { public: MessagePartRendererBase(); virtual ~MessagePartRendererBase(); - virtual bool render(MimeTreeParser::DefaultRendererPrivate *, const MimeTreeParser::MessagePartPtr &, MimeTreeParser::HtmlWriter *htmlWriter) + virtual bool render(const MimeTreeParser::MessagePartPtr &, MimeTreeParser::HtmlWriter *htmlWriter, RenderContext *context) const = 0; + + QString alignText() const; }; +} #endif diff --git a/messageviewer/src/messagepartthemes/default/messagepartrendererfactory.h b/messageviewer/src/messagepartthemes/default/messagepartrendererfactory.h --- a/messageviewer/src/messagepartthemes/default/messagepartrendererfactory.h +++ b/messageviewer/src/messagepartthemes/default/messagepartrendererfactory.h @@ -39,9 +39,9 @@ #include class QString; -class MessagePartRendererBase; namespace MessageViewer { +class MessagePartRendererBase; class MessagePartRendererFactoryPrivate; class MESSAGEVIEWER_EXPORT MessagePartRendererFactory diff --git a/messageviewer/src/messagepartthemes/default/messagepartrendererfactory_p.h b/messageviewer/src/messagepartthemes/default/messagepartrendererfactory_p.h --- a/messageviewer/src/messagepartthemes/default/messagepartrendererfactory_p.h +++ b/messageviewer/src/messagepartthemes/default/messagepartrendererfactory_p.h @@ -32,10 +32,10 @@ #include -class MessagePartRendererBase; namespace MessageViewer { +class MessagePartRendererBase; typedef QMap > TypeRegistry; class MessagePartRendererFactoryPrivate diff --git a/messageviewer/src/messagepartthemes/default/plugins/attachmentmessagepartrenderer.h b/messageviewer/src/messagepartthemes/default/plugins/attachmentmessagepartrenderer.h --- a/messageviewer/src/messagepartthemes/default/plugins/attachmentmessagepartrenderer.h +++ b/messageviewer/src/messagepartthemes/default/plugins/attachmentmessagepartrenderer.h @@ -22,14 +22,16 @@ #include "../messagepartrendererbase.h" -#include +namespace MessageViewer { class AttachmentMessagePartRenderer : public MessagePartRendererBase { public: AttachmentMessagePartRenderer(); virtual ~AttachmentMessagePartRenderer(); - bool render(MimeTreeParser::DefaultRendererPrivate *drp, const MimeTreeParser::MessagePartPtr &msgPart, MimeTreeParser::HtmlWriter *htmlWriter) const override; + bool render(const MimeTreeParser::MessagePartPtr &msgPart, MimeTreeParser::HtmlWriter *htmlWriter, RenderContext *context) const override; }; +} + #endif diff --git a/messageviewer/src/messagepartthemes/default/plugins/attachmentmessagepartrenderer.cpp b/messageviewer/src/messagepartthemes/default/plugins/attachmentmessagepartrenderer.cpp --- a/messageviewer/src/messagepartthemes/default/plugins/attachmentmessagepartrenderer.cpp +++ b/messageviewer/src/messagepartthemes/default/plugins/attachmentmessagepartrenderer.cpp @@ -33,15 +33,17 @@ #include #include +using namespace MessageViewer; + AttachmentMessagePartRenderer::AttachmentMessagePartRenderer() { } AttachmentMessagePartRenderer::~AttachmentMessagePartRenderer() { } -bool AttachmentMessagePartRenderer::render(MimeTreeParser::DefaultRendererPrivate* drp, const MimeTreeParser::MessagePartPtr& msgPart, MimeTreeParser::HtmlWriter* htmlWriter) const +bool AttachmentMessagePartRenderer::render(const MimeTreeParser::MessagePartPtr& msgPart, MimeTreeParser::HtmlWriter* htmlWriter, RenderContext *context) const { auto mp = msgPart.dynamicCast(); if (!mp) { @@ -58,7 +60,7 @@ const auto tmpAsIcon = mp->asIcon(); if (tmpAsIcon == MimeTreeParser::NoIcon) { - return drp->renderWithFactory(QStringLiteral("MimeTreeParser::TextMessagePart"), mp, htmlWriter); + return context->renderWithFactory(QStringLiteral("MimeTreeParser::TextMessagePart"), mp, htmlWriter); } Grantlee::Template t = MessageViewer::MessagePartRendererManager::self()->loadByName(QStringLiteral( @@ -75,7 +77,7 @@ asUnicodeString(), true)); block.setProperty("link", nodeHelper->asHREF(node, QStringLiteral("body"))); block.setProperty("showLink", mp->showLink()); - block.setProperty("dir", drp->alignText()); + block.setProperty("dir", alignText()); block.setProperty("iconSize", MessageViewer::MessagePartRendererManager::self()->iconCurrentSize()); block.setProperty("inline", (tmpAsIcon == MimeTreeParser::IconInline)); diff --git a/messageviewer/src/messagepartthemes/default/plugins/messagepartrenderer.h b/messageviewer/src/messagepartthemes/default/plugins/messagepartrenderer.h --- a/messageviewer/src/messagepartthemes/default/plugins/messagepartrenderer.h +++ b/messageviewer/src/messagepartthemes/default/plugins/messagepartrenderer.h @@ -24,12 +24,16 @@ #include +namespace MessageViewer { + class MessagePartRenderer : public MessagePartRendererBase { public: MessagePartRenderer(); virtual ~MessagePartRenderer(); - bool render(MimeTreeParser::DefaultRendererPrivate *drp, const MimeTreeParser::MessagePartPtr &msgPart, MimeTreeParser::HtmlWriter *htmlWriter) const override; + bool render(const MimeTreeParser::MessagePartPtr &msgPart, MimeTreeParser::HtmlWriter *htmlWriter, RenderContext *context) const override; }; +} + #endif diff --git a/messageviewer/src/messagepartthemes/default/plugins/messagepartrenderer.cpp b/messageviewer/src/messagepartthemes/default/plugins/messagepartrenderer.cpp --- a/messageviewer/src/messagepartthemes/default/plugins/messagepartrenderer.cpp +++ b/messageviewer/src/messagepartthemes/default/plugins/messagepartrenderer.cpp @@ -26,22 +26,24 @@ #include +using namespace MessageViewer; + MessagePartRenderer::MessagePartRenderer() { } MessagePartRenderer::~MessagePartRenderer() { } -bool MessagePartRenderer::render(MimeTreeParser::DefaultRendererPrivate *drp, const MimeTreeParser::MessagePartPtr &msgPart, MimeTreeParser::HtmlWriter *htmlWriter) const +bool MessagePartRenderer::render(const MimeTreeParser::MessagePartPtr &msgPart, MimeTreeParser::HtmlWriter *htmlWriter, RenderContext *context) const { MimeTreeParser::AttachmentMarkBlock block(nullptr, msgPart->attachmentContent()); if (msgPart->isAttachment()) { htmlWriter->write(block.enter()); } - htmlWriter->write(quotedHTML(msgPart->text(), msgPart->source(), drp->cssHelper())); + htmlWriter->write(quotedHTML(msgPart->text(), msgPart->source(), context->cssHelper())); htmlWriter->write(block.exit()); return true; } diff --git a/messageviewer/src/messagepartthemes/default/plugins/textmessagepartrenderer.h b/messageviewer/src/messagepartthemes/default/plugins/textmessagepartrenderer.h --- a/messageviewer/src/messagepartthemes/default/plugins/textmessagepartrenderer.h +++ b/messageviewer/src/messagepartthemes/default/plugins/textmessagepartrenderer.h @@ -22,14 +22,16 @@ #include "../messagepartrendererbase.h" -#include +namespace MessageViewer { class TextMessagePartRenderer : public MessagePartRendererBase { public: TextMessagePartRenderer(); virtual ~TextMessagePartRenderer(); - bool render(MimeTreeParser::DefaultRendererPrivate* drp, const MimeTreeParser::MessagePartPtr& msgPart, MimeTreeParser::HtmlWriter *htmlWriter) const override; + bool render(const MimeTreeParser::MessagePartPtr& msgPart, MimeTreeParser::HtmlWriter *htmlWriter, RenderContext *context) const override; }; +} + #endif diff --git a/messageviewer/src/messagepartthemes/default/plugins/textmessagepartrenderer.cpp b/messageviewer/src/messagepartthemes/default/plugins/textmessagepartrenderer.cpp --- a/messageviewer/src/messagepartthemes/default/plugins/textmessagepartrenderer.cpp +++ b/messageviewer/src/messagepartthemes/default/plugins/textmessagepartrenderer.cpp @@ -31,7 +31,7 @@ #include #include -#include +using namespace MessageViewer; TextMessagePartRenderer::TextMessagePartRenderer() { @@ -41,13 +41,9 @@ { } -static QString alignText() -{ - return QApplication::isRightToLeft() ? QStringLiteral("rtl") : QStringLiteral("ltr"); -} - -bool TextMessagePartRenderer::render(MimeTreeParser::DefaultRendererPrivate* drp, const MimeTreeParser::MessagePartPtr& msgPart, MimeTreeParser::HtmlWriter* htmlWriter) const +bool TextMessagePartRenderer::render(const MimeTreeParser::MessagePartPtr& msgPart, MimeTreeParser::HtmlWriter* htmlWriter, RenderContext *context) const { + Q_UNUSED(context); auto mp = msgPart.dynamicCast(); if (!mp) return false; diff --git a/mimetreeparser/src/viewer/messagepart.h b/mimetreeparser/src/viewer/messagepart.h --- a/mimetreeparser/src/viewer/messagepart.h +++ b/mimetreeparser/src/viewer/messagepart.h @@ -37,8 +37,10 @@ #include class QTextCodec; +namespace MessageViewer { class TextMessagePartRenderer; class AttachmentMessagePartRenderer; +} namespace GpgME { class ImportResult; @@ -207,8 +209,8 @@ bool mDecryptMessage; bool mIsHidden; - friend class ::TextMessagePartRenderer; - friend class ::AttachmentMessagePartRenderer; + friend class MessageViewer::TextMessagePartRenderer; + friend class MessageViewer::AttachmentMessagePartRenderer; friend class ObjectTreeParser; };