From fa10c70ceb3a08a11302c00c9f0e29941174a21b Mon Sep 17 00:00:00 2001 From: Julian Smart Date: Sun, 6 Jul 2003 17:52:42 +0000 Subject: [PATCH] Added wxHtmlPrintout::AddFilter so the same filters used for viewing HTML can be used for printing it. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@21711 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- docs/changes.txt | 2 ++ docs/latex/wx/htprint.tex | 7 +++++ include/wx/html/htmprint.h | 10 ++++++++ src/html/htmprint.cpp | 64 ++++++++++++++++++++++++++++++++++------------ 4 files changed, 66 insertions(+), 17 deletions(-) diff --git a/docs/changes.txt b/docs/changes.txt index d8c86d7..0a0e079 100644 --- a/docs/changes.txt +++ b/docs/changes.txt @@ -96,6 +96,8 @@ All GUI ports: to allow better rich text support. - implemented wxFlexGridSizer::Show() (Wade Brainerd) - Added m_ prefix to wxColourData and wxFontData members +- Added wxHtmlPrintout::AddFilter so HTML printing can be subject to + custom filters as well as HTML viewing. Unix: diff --git a/docs/latex/wx/htprint.tex b/docs/latex/wx/htprint.tex index a996c18..197a57c 100644 --- a/docs/latex/wx/htprint.tex +++ b/docs/latex/wx/htprint.tex @@ -27,6 +27,13 @@ This class serves as printout class for HTML documents. Constructor. +\membersection{wxHtmlPrintout::AddFilter}\label{wxhtmlprintoutaddfilter} + +\func{static void}{AddFilter}{\param{wxHtmlFilter* }{filter}} + +Adds a filter to the static list of filters for wxHtmlPrintout. See \helpref{wxHtmlFilter}{wxhtmlfilter} for +further information. + \membersection{wxHtmlPrintout::SetFonts}\label{wxhtmlprintoutsetfonts} \func{void}{SetFonts}{\param{wxString }{normal\_face}, \param{wxString }{fixed\_face}, \param{const int }{*sizes = NULL}} diff --git a/include/wx/html/htmprint.h b/include/wx/html/htmprint.h index eabe41a..4cb723c 100644 --- a/include/wx/html/htmprint.h +++ b/include/wx/html/htmprint.h @@ -21,6 +21,7 @@ #include "wx/html/htmlcell.h" #include "wx/html/winpars.h" +#include "wx/html/htmlfilt.h" #include "wx/print.h" #include "wx/printdlg.h" @@ -152,6 +153,12 @@ public: void GetPageInfo(int *minPage, int *maxPage, int *selPageFrom, int *selPageTo); bool OnBeginDocument(int startPage, int endPage); + // Adds input filter + static void AddFilter(wxHtmlFilter *filter); + + // Cleanup + static void CleanUpStatics(); + private: void RenderPage(wxDC *dc, int page); @@ -174,6 +181,9 @@ private: wxHtmlDCRenderer *m_Renderer, *m_RendererHdr; float m_MarginTop, m_MarginBottom, m_MarginLeft, m_MarginRight, m_MarginSpace; + // list of HTML filters + static wxList m_Filters; + DECLARE_NO_COPY_CLASS(wxHtmlPrintout) }; diff --git a/src/html/htmprint.cpp b/src/html/htmprint.cpp index 1215034..6f4912c 100644 --- a/src/html/htmprint.cpp +++ b/src/html/htmprint.cpp @@ -36,6 +36,7 @@ #include "wx/html/htmprint.h" #include "wx/wxhtml.h" #include "wx/wfstream.h" +#include "wx/module.h" //-------------------------------------------------------------------------------- @@ -139,25 +140,12 @@ int wxHtmlDCRenderer::GetTotalHeight() } - - - - - - - - - - - - - - //-------------------------------------------------------------------------------- // wxHtmlPrintout //-------------------------------------------------------------------------------- +wxList wxHtmlPrintout::m_Filters; wxHtmlPrintout::wxHtmlPrintout(const wxString& title) : wxPrintout(title) { @@ -179,7 +167,17 @@ wxHtmlPrintout::~wxHtmlPrintout() delete m_RendererHdr; } +void wxHtmlPrintout::CleanUpStatics() +{ + m_Filters.DeleteContents(TRUE); + m_Filters.Clear(); +} +// Adds input filter +void wxHtmlPrintout::AddFilter(wxHtmlFilter *filter) +{ + m_Filters.Append(filter); +} bool wxHtmlPrintout::OnBeginDocument(int startPage, int endPage) { @@ -291,9 +289,26 @@ void wxHtmlPrintout::SetHtmlFile(const wxString& htmlfile) return; } - wxHtmlFilterHTML filter; - wxString doc = filter.ReadFile(*ff); - + bool done = FALSE; + wxHtmlFilterHTML defaultFilter; + wxString doc; + + wxNode* node = m_Filters.GetFirst(); + while (node) + { + wxHtmlFilter *h = (wxHtmlFilter*) node->GetData(); + if (h->CanRead(*ff)) + { + doc = h->ReadFile(*ff); + done = TRUE; + break; + } + node = node->GetNext(); + } + + if (!done) + doc = defaultFilter.ReadFile(*ff); + SetHtmlText(doc, htmlfile, FALSE); delete ff; } @@ -627,6 +642,21 @@ wxHtmlPrintout *wxHtmlEasyPrinting::CreatePrintout() return p; } +// A module to allow initialization/cleanup +// without calling these functions from app.cpp or from +// the user's application. + +class wxHtmlPrintingModule: public wxModule +{ +DECLARE_DYNAMIC_CLASS(wxHtmlPrintingModule) +public: + wxHtmlPrintingModule() : wxModule() {} + bool OnInit() { return TRUE; } + void OnExit() { wxHtmlPrintout::CleanUpStatics(); } +}; + +IMPLEMENT_DYNAMIC_CLASS(wxHtmlPrintingModule, wxModule) + // This hack forces the linker to always link in m_* files // (wxHTML doesn't work without handlers from these files) -- 2.7.4