Added wxHtmlPrintout::AddFilter so the same filters used for
authorJulian Smart <julian@anthemion.co.uk>
Sun, 6 Jul 2003 17:52:42 +0000 (17:52 +0000)
committerJulian Smart <julian@anthemion.co.uk>
Sun, 6 Jul 2003 17:52:42 +0000 (17:52 +0000)
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
docs/latex/wx/htprint.tex
include/wx/html/htmprint.h
src/html/htmprint.cpp

index d8c86d74e3bcea921ac1fb5f58a8a81523447eca..0a0e0792071d521ae91cae0d9df03373136e8cd6 100644 (file)
@@ -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:
 
index a996c185ad108614a2b5488a1f1af8dd9d8d2469..197a57cd3a99b3178c3b633940537cf88e2ab1f4 100644 (file)
@@ -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}}
index eabe41acf4322d4857936938e893961f267264ea..4cb723c388945aa770d5f0faee37563ba90b2252 100644 (file)
@@ -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)
 };
 
index 121503447e0197766330f8c13d182d869812ae78..6f4912caeefb1e79e6b768651a91ab4beaa8a35b 100644 (file)
@@ -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)