summaryrefslogtreecommitdiffstats
path: root/akregator/src/articleviewer.h
diff options
context:
space:
mode:
Diffstat (limited to 'akregator/src/articleviewer.h')
-rw-r--r--akregator/src/articleviewer.h154
1 files changed, 154 insertions, 0 deletions
diff --git a/akregator/src/articleviewer.h b/akregator/src/articleviewer.h
new file mode 100644
index 000000000..a9eb65b65
--- /dev/null
+++ b/akregator/src/articleviewer.h
@@ -0,0 +1,154 @@
+/*
+ This file is part of Akregator.
+
+ Copyright (C) 2004 Sashmit Bhaduri <smt@vfemail.net>
+ 2005 Frank Osterfeld <frank.osterfeld at kdemail.net>
+
+ 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.
+
+ As a special exception, permission is given to link this program
+ with any edition of Qt, and distribute the resulting executable,
+ without including the source code for Qt in the source distribution.
+*/
+
+#ifndef ARTICLEVIEWER_H
+#define ARTICLEVIEWER_H
+
+#include <klocale.h>
+
+#include <qcolor.h>
+#include <qfont.h>
+
+#include "article.h"
+#include "articlefilter.h"
+#include "viewer.h"
+
+class QKeyEvent;
+
+namespace Akregator
+{
+ class Feed;
+ class Folder;
+ class TreeNode;
+
+ /** This HTML viewer is used to display articles.
+ Use the high-level interface provided by the public slots whereever possible (and extend them when necessary instead of using low-level methods).*/
+ class ArticleViewer : public Viewer
+ {
+ Q_OBJECT
+ public:
+ /** Constructor */
+ ArticleViewer(QWidget* parent, const char* name);
+ virtual ~ArticleViewer();
+
+ virtual bool openURL(const KURL &url);
+
+ /** Repaints the view. */
+ void reload();
+
+ void displayAboutPage();
+
+ public slots:
+
+ // Commandment: We are your interfaces.
+ // You shall not use strange interfaces before us.
+
+ /** Show single article (normal view)
+ @param article the article to render */
+ void slotShowArticle(const Article& article);
+
+ /** Shows the articles of the tree node @c node (combined view). Changes in the node will update the view automatically.
+ @param node The node to observe */
+ void slotShowNode(TreeNode* node);
+
+ /** Set filters @c textFilter and @c statusFilter which will be used if the viewer is in combined view mode
+ @param textFilter text filter
+ @param statusFilter status filter */
+ void slotSetFilter(const Akregator::Filters::ArticleMatcher& textFilter, const Akregator::Filters::ArticleMatcher& statusFilter);
+
+ /** Update view if combined view mode is set. Has to be called when the displayed node gets modified. */
+ void slotUpdateCombinedView();
+
+ /** Clears the canvas and disconnects from the currently observed node (if in combined view mode). */
+ void slotClear();
+
+ void slotShowSummary(TreeNode *node);
+
+ virtual void slotPaletteOrFontChanged();
+
+ protected slots:
+
+ void slotArticlesUpdated(TreeNode* node, const QValueList<Article>& list);
+ void slotArticlesAdded(TreeNode* node, const QValueList<Article>& list);
+ void slotArticlesRemoved(TreeNode* node, const QValueList<Article>& list);
+
+ protected:
+
+ virtual void keyPressEvent(QKeyEvent* e);
+ virtual void urlSelected (const QString &url, int button, int state, const QString &_target, KParts::URLArgs args);
+
+ public: // compat with KDE-3.x assertions, remove for KDE 4
+ // private:
+
+ friend class ShowNodeSummaryVisitor;
+ class ShowSummaryVisitor;
+ ShowSummaryVisitor* m_showSummaryVisitor;
+
+ /** renders @c body. Use this method whereever possible.
+ @param body html to render, without header and footer */
+ void renderContent(const QString& body);
+
+ /** Takes an article and renders it as HTML with settings for normal view and widescreen view
+ @param feed article's feed (used for feed icon atm) -- article.feed() would do. better use a (No)Icon flag. -fo
+ @param article The article to render
+ @return the rendered article as HTML */
+ QString formatArticleNormalMode(Feed* feed, const Article& article);
+
+ /** Takes an article and renders it as HTML with settings for combined view
+ @param feed article's feed (used for feed icon atm) -- article.feed() would do. better use a (No)Icon flag. -fo
+ @param article The article to render
+ @return the rendered article as HTML */
+ QString formatArticleCombinedMode(Feed* feed, const Article& article);
+
+ /** Resets the canvas and adds writes the HTML header to it.
+ */
+ void beginWriting();
+
+ /** Finishes writing to the canvas and completes the HTML (by adding closing tags) */
+ void endWriting();
+
+ /** generates the CSS used for rendering in single article mode (normal and wide screen view) */
+ void generateNormalModeCSS();
+ /** generates the CSS for combined view mode */
+ void generateCombinedModeCSS();
+ void connectToNode(TreeNode* node);
+ void disconnectFromNode(TreeNode* node);
+
+ QString m_normalModeCSS;
+ QString m_combinedModeCSS;
+ QString m_htmlFooter;
+ QString m_currentText;
+ KURL m_imageDir;
+ TreeNode* m_node;
+ Article m_article;
+ KURL m_link;
+ Akregator::Filters::ArticleMatcher m_textFilter;
+ Akregator::Filters::ArticleMatcher m_statusFilter;
+ enum ViewMode { NormalView, CombinedView, SummaryView };
+ ViewMode m_viewMode;
+ };
+}
+
+#endif // ARTICLEVIEWER_H