]> git.saurik.com Git - wxWidgets.git/blobdiff - wxPython/src/html.i
Added bakefile for the OGL contrib
[wxWidgets.git] / wxPython / src / html.i
index a79ef162ee0513832837bc0fe0424e1a747f89ab..7c83c30edf0cd4d6e76ed0ba308523abcba5c481 100644 (file)
 %module html
 
 %{
-#include "export.h"
+#include "wxPython.h"
 #include <wx/html/htmlwin.h>
 #include <wx/html/htmprint.h>
 #include <wx/image.h>
 #include <wx/fs_zip.h>
 #include <wx/fs_inet.h>
 #include <wx/wfstream.h>
+#include <wx/filesys.h>
 
 #include "printfw.h"
 %}
 %extern controls.i
 %extern controls2.i
 %extern printfw.i
-
 %extern utils.i
+%extern filesys.i
+%extern streams.i
+
 
 %pragma(python) code = "import wx"
 
 
+//----------------------------------------------------------------------
+
+%{
+    // Put some wx default wxChar* values into wxStrings.
+    static const wxChar* wxHtmlWindowNameStr = wxT("htmlWindow");
+    DECLARE_DEF_STRING(HtmlWindowNameStr);
+
+    static const wxChar* wxHtmlPrintoutTitleStr = wxT("Printout");
+    DECLARE_DEF_STRING(HtmlPrintoutTitleStr);
+
+    static const wxChar* wxHtmlPrintingTitleStr = wxT("Printing");
+    DECLARE_DEF_STRING(HtmlPrintingTitleStr);
+
+    static const wxString wxPyEmptyString(wxT(""));
+%}
+
 //---------------------------------------------------------------------------
 
 enum {
@@ -98,7 +117,7 @@ enum wxHtmlURLType
 
 class wxHtmlLinkInfo : public wxObject {
 public:
-    wxHtmlLinkInfo(const wxString& href, const wxString& target = wxEmptyString);
+    wxHtmlLinkInfo(const wxString& href, const wxString& target = wxPyEmptyString);
     wxString GetHref();
     wxString GetTarget();
     wxMouseEvent* GetEvent();
@@ -142,7 +161,9 @@ public:
     void InitParser(const wxString& source);
     void DoneParser();
     void DoParsing(int begin_pos, int end_pos);
+    void StopParsing();
     // wxObject* GetProduct();
+
     void AddTagHandler(wxHtmlTagHandler *handler);
     wxString* GetSource();
     void PushTagHandler(wxHtmlTagHandler* handler, wxString tags);
@@ -159,21 +180,21 @@ public:
 
 class wxHtmlWinParser : public wxHtmlParser {
 public:
-    wxHtmlWinParser(wxHtmlWindow *wnd = NULL);
+    wxHtmlWinParser(wxPyHtmlWindow *wnd = NULL);
 
     void SetDC(wxDC *dc);
     wxDC* GetDC();
     int GetCharHeight();
     int GetCharWidth();
-    wxHtmlWindow* GetWindow();
-    //void SetFonts(wxString normal_face, wxString fixed_face, int *LIST);
+    wxPyHtmlWindow* GetWindow();
+    // Sets fonts to be used when displaying HTML page. (if size null then default sizes used).
     %addmethods {
-        void SetFonts(wxString normal_face, wxString fixed_face, PyObject* sizes) {
-            int* temp = int_LIST_helper(sizes);
-            if (temp) {
-                self->SetFonts(normal_face, fixed_face, temp);
+        void SetFonts(wxString normal_face, wxString fixed_face, PyObject* sizes=NULL) {
+            int* temp = NULL;
+            if (sizes) temp = int_LIST_helper(sizes);
+            self->SetFonts(normal_face, fixed_face, temp);
+            if (temp)
                 delete [] temp;
-            }
         }
     }
 
@@ -369,7 +390,7 @@ public:
     void DrawInvisible(wxDC& dc, int x, int y);
     const wxHtmlCell* Find(int condition, const void* param);
 
-    bool AdjustPagebreak(int * pagebreak);
+    bool AdjustPagebreak(int* INOUT);
     void SetCanLiveOnPagebreak(bool can);
 
 };
@@ -399,6 +420,7 @@ public:
     %name(SetWidthFloatFromTag)void SetWidthFloat(const wxHtmlTag& tag);
     void SetMinHeight(int h, int align = wxHTML_ALIGN_TOP);
     void SetBackgroundColour(const wxColour& clr);
+    wxColour GetBackgroundColour();
     void SetBorder(const wxColour& clr1, const wxColour& clr2);
     wxHtmlCell* GetFirstCell();
 };
@@ -426,9 +448,75 @@ public:
 };
 
 
-
 //---------------------------------------------------------------------------
+// wxHtmlFilter
 //---------------------------------------------------------------------------
+
+
+%{ // here's the C++ version
+class wxPyHtmlFilter : public wxHtmlFilter {
+    DECLARE_ABSTRACT_CLASS(wxPyHtmlFilter);
+public:
+    wxPyHtmlFilter() : wxHtmlFilter() {}
+
+    // returns TRUE if this filter is able to open&read given file
+    virtual bool CanRead(const wxFSFile& file) const {
+        bool rval = FALSE;
+        bool found;
+        wxPyBeginBlockThreads();
+        if ((found = wxPyCBH_findCallback(m_myInst, "CanRead"))) {
+            PyObject* obj = wxPyMake_wxObject((wxFSFile*)&file);  // cast away const
+            rval = wxPyCBH_callCallback(m_myInst, Py_BuildValue("(O)", obj));
+            Py_DECREF(obj);
+        }
+        wxPyEndBlockThreads();
+        return rval;
+    }
+
+
+    // Reads given file and returns HTML document.
+    // Returns empty string if opening failed
+    virtual wxString ReadFile(const wxFSFile& file) const {
+        wxString rval;
+        bool found;
+        wxPyBeginBlockThreads();
+        if ((found = wxPyCBH_findCallback(m_myInst, "ReadFile"))) {
+            PyObject* obj = wxPyMake_wxObject((wxFSFile*)&file);  // cast away const
+            PyObject* ro;
+            ro = wxPyCBH_callCallbackObj(m_myInst, Py_BuildValue("(O)", obj));
+            Py_DECREF(obj);
+            if (ro) {
+                rval = Py2wxString(ro);
+                Py_DECREF(ro);
+            }
+        }
+        wxPyEndBlockThreads();
+        return rval;
+    }
+
+    PYPRIVATE;
+};
+
+IMPLEMENT_ABSTRACT_CLASS(wxPyHtmlFilter, wxHtmlFilter);
+%}
+
+
+// And now the version seen by SWIG
+
+%name(wxHtmlFilter) class wxPyHtmlFilter : public wxObject {
+public:
+    wxPyHtmlFilter();
+
+    void _setCallbackInfo(PyObject* self, PyObject* _class);
+    %pragma(python) addtomethod = "__init__:self._setCallbackInfo(self, wxHtmlFilter)"
+};
+
+
+// TODO: wxHtmlFilterHTML
+
+
+//---------------------------------------------------------------------------
+// wxHtmlWindow
 //---------------------------------------------------------------------------
 
 %{
@@ -439,7 +527,7 @@ public:
                    const wxPoint& pos = wxDefaultPosition,
                    const wxSize& size = wxDefaultSize,
                    long style = wxHW_SCROLLBAR_AUTO,
-                   const wxString& name = "htmlWindow")
+                   const wxString& name = wxPyHtmlWindowNameStr)
         : wxHtmlWindow(parent, id, pos, size, style, name)  {};
     wxPyHtmlWindow() : wxHtmlWindow() {};
 
@@ -462,7 +550,6 @@ public:
     DEC_PYCALLBACK__STRING(OnSetTitle);
     DEC_PYCALLBACK__CELLINTINT(OnCellMouseHover);
     DEC_PYCALLBACK__CELLINTINTME(OnCellClicked);
-//     DEC_PYCALLBACK_BOOL_STRING(OnOpeningURL);
     PYPRIVATE;
 };
 
@@ -470,14 +557,13 @@ IMPLEMENT_ABSTRACT_CLASS( wxPyHtmlWindow, wxHtmlWindow );
 IMP_PYCALLBACK__STRING(wxPyHtmlWindow, wxHtmlWindow, OnSetTitle);
 IMP_PYCALLBACK__CELLINTINT(wxPyHtmlWindow, wxHtmlWindow, OnCellMouseHover);
 IMP_PYCALLBACK__CELLINTINTME(wxPyHtmlWindow, wxHtmlWindow, OnCellClicked);
-// IMP_PYCALLBACK_BOOL_STRING(wxPyHtmlWindow, wxHtmlWindow, OnOpeningURL);
 
 
 void wxPyHtmlWindow::OnLinkClicked(const wxHtmlLinkInfo& link) {
     bool found;
     wxPyBeginBlockThreads();
     if ((found = wxPyCBH_findCallback(m_myInst, "OnLinkClicked"))) {
-        PyObject* obj = wxPyConstructObject((void*)&link, "wxHtmlLinkInfo", 0);
+        PyObject* obj = wxPyConstructObject((void*)&link, wxT("wxHtmlLinkInfo"), 0);
         wxPyCBH_callCallback(m_myInst, Py_BuildValue("(O)", obj));
         Py_DECREF(obj);
     }
@@ -498,15 +584,15 @@ wxHtmlOpeningStatus wxPyHtmlWindow::OnOpeningURL(wxHtmlURLType type,
     wxPyBeginBlockThreads();
     if ((found = wxPyCBH_findCallback(m_myInst, "OnOpeningURL"))) {
         PyObject* ro;
-        ro = wxPyCBH_callCallbackObj(m_myInst, Py_BuildValue("(is)", type, url.c_str()));
+        PyObject* s = wx2PyString(url);
+        ro = wxPyCBH_callCallbackObj(m_myInst, Py_BuildValue("(iO)", type, s));
+        Py_DECREF(s);
         if (PyString_Check(ro)
 #if PYTHON_API_VERSION >= 1009
             || PyUnicode_Check(ro)
 #endif
             ) {
-            PyObject* str = PyObject_Str(ro);
-            *redirect = PyString_AsString(str);
-            Py_DECREF(str);
+            *redirect = Py2wxString(ro);
             rval = wxHTML_REDIRECT;
         }
         else {
@@ -532,15 +618,15 @@ public:
     wxPyHtmlWindow(wxWindow *parent, int id = -1,
                  wxPoint& pos = wxDefaultPosition,
                  wxSize& size = wxDefaultSize,
-                 int flags=wxHW_SCROLLBAR_AUTO,
-                 char* name = "htmlWindow");
+                 int style=wxHW_SCROLLBAR_AUTO,
+                 const wxString& name = wxPyHtmlWindowNameStr);
     %name(wxPreHtmlWindow)wxPyHtmlWindow();
 
     bool Create(wxWindow *parent, int id = -1,
                 wxPoint& pos = wxDefaultPosition,
                 wxSize& size = wxDefaultSize,
-                int flags=wxHW_SCROLLBAR_AUTO,
-                char* name = "htmlWindow");
+                int style=wxHW_SCROLLBAR_AUTO,
+                const wxString& name = wxPyHtmlWindowNameStr);
 
 
     void _setCallbackInfo(PyObject* self, PyObject* _class);
@@ -548,57 +634,100 @@ public:
     %pragma(python) addtomethod = "__init__:self._setOORInfo(self)"
     %pragma(python) addtomethod = "wxPreHtmlWindow:val._setOORInfo(val)"
 
+    // Set HTML page and display it. !! source is HTML document itself,
+    // it is NOT address/filename of HTML document. If you want to
+    // specify document location, use LoadPage() istead
+    // Return value : FALSE if an error occured, TRUE otherwise
     bool SetPage(const wxString& source);
+
+    // Load HTML page from given location. Location can be either
+    // a) /usr/wxGTK2/docs/html/wx.htm
+    // b) http://www.somewhere.uk/document.htm
+    // c) ftp://ftp.somesite.cz/pub/something.htm
+    // In case there is no prefix (http:,ftp:), the method
+    // will try to find it itself (1. local file, then http or ftp)
+    // After the page is loaded, the method calls SetPage() to display it.
+    // Note : you can also use path relative to previously loaded page
+    // Return value : same as SetPage
     bool LoadPage(const wxString& location);
+
+    // Loads HTML page from file
+    bool LoadFile(const wxString& filename);
+
+    // Append to current page
     bool AppendToPage(const wxString& source);
+
+     // Returns full location of opened page
     wxString GetOpenedPage();
+
+    // Returns anchor within opened page
     wxString GetOpenedAnchor();
+
+    // Returns <TITLE> of opened page or empty string otherwise
     wxString GetOpenedPageTitle();
 
-    void SetRelatedFrame(wxFrame* frame, const char* format);
+    // Sets frame in which page title will  be displayed. Format is format of
+    // frame title, e.g. "HtmlHelp : %s". It must contain exactly one %s
+    void SetRelatedFrame(wxFrame* frame, const wxString& format);
     wxFrame* GetRelatedFrame();
+
+    // After(!) calling SetRelatedFrame, this sets statusbar slot where messages
+    // will be displayed. Default is -1 = no messages.
     void SetRelatedStatusBar(int bar);
 
-    //void SetFonts(wxString normal_face, wxString fixed_face, int *LIST);
+    // Sets fonts to be used when displaying HTML page.
     %addmethods {
-        void SetFonts(wxString normal_face, wxString fixed_face, PyObject* sizes) {
-            int* temp = int_LIST_helper(sizes);
-            if (temp) {
-                self->SetFonts(normal_face, fixed_face, temp);
+        void SetFonts(wxString normal_face, wxString fixed_face, PyObject* sizes=NULL) {
+            int* temp = NULL;
+            if (sizes) temp = int_LIST_helper(sizes);
+            self->SetFonts(normal_face, fixed_face, temp);
+            if (temp)
                 delete [] temp;
-            }
         }
     }
 
     void SetTitle(const wxString& title);
+
+    // Sets space between text and window borders.
     void SetBorders(int b);
-    void ReadCustomization(wxConfigBase *cfg, wxString path = wxEmptyString);
-    void WriteCustomization(wxConfigBase *cfg, wxString path = wxEmptyString);
+
+    // Saves custom settings into cfg config. it will use the path 'path'
+    // if given, otherwise it will save info into currently selected path.
+    // saved values : things set by SetFonts, SetBorders.
+    void ReadCustomization(wxConfigBase *cfg, wxString path = wxPyEmptyString);
+    void WriteCustomization(wxConfigBase *cfg, wxString path = wxPyEmptyString);
+
+    // Goes to previous/next page (in browsing history)
+    // Returns TRUE if successful, FALSE otherwise
     bool HistoryBack();
     bool HistoryForward();
     bool HistoryCanBack();
     bool HistoryCanForward();
+
+    // Resets History
     void HistoryClear();
+
+    // Returns pointer to conteiners/cells structure.
     wxHtmlContainerCell* GetInternalRepresentation();
+
+    // Returns a pointer to the parser.
     wxHtmlWinParser* GetParser();
 
     bool ScrollToAnchor(const wxString& anchor);
     bool HasAnchor(const wxString& anchor);
 
+    //Adds input filter
+    static void AddFilter(wxPyHtmlFilter *filter);
+
+
     void base_OnLinkClicked(const wxHtmlLinkInfo& link);
-    void base_OnSetTitle(const char* title);
+    void base_OnSetTitle(const wxString& title);
     void base_OnCellMouseHover(wxHtmlCell *cell, wxCoord x, wxCoord y);
     void base_OnCellClicked(wxHtmlCell *cell,
                             wxCoord x, wxCoord y,
                             const wxMouseEvent& event);
 };
 
-// Static methods are mapped to stand-alone functions
-%inline %{
-    void wxHtmlWindow_AddFilter(wxHtmlFilter *filter) {
-        wxHtmlWindow::AddFilter(filter);
-    }
-%}
 
 
 //---------------------------------------------------------------------------
@@ -613,8 +742,18 @@ public:
     void SetDC(wxDC *dc, int maxwidth);
     void SetSize(int width, int height);
     void SetHtmlText(const wxString& html,
-                     const wxString& basepath = wxEmptyString,
+                     const wxString& basepath = wxPyEmptyString,
                      bool isdir = TRUE);
+    // Sets fonts to be used when displaying HTML page. (if size null then default sizes used).
+    %addmethods {
+        void SetFonts(wxString normal_face, wxString fixed_face, PyObject* sizes=NULL) {
+            int* temp = NULL;
+            if (sizes) temp = int_LIST_helper(sizes);
+            self->SetFonts(normal_face, fixed_face, temp);
+            if (temp)
+                delete [] temp;
+        }
+    }
     int Render(int x, int y, int from = 0, int dont_render = FALSE);
     int GetTotalHeight();
                 // returns total height of the html document
@@ -630,15 +769,25 @@ enum {
 
 class wxHtmlPrintout : public wxPyPrintout {
 public:
-    wxHtmlPrintout(const char* title = "Printout");
+    wxHtmlPrintout(const wxString& title = wxPyHtmlPrintoutTitleStr);
     //~wxHtmlPrintout();   wxPrintPreview object takes ownership...
 
     void SetHtmlText(const wxString& html,
-                     const wxString &basepath = wxEmptyString,
+                     const wxString &basepath = wxPyEmptyString,
                      bool isdir = TRUE);
     void SetHtmlFile(const wxString &htmlfile);
     void SetHeader(const wxString& header, int pg = wxPAGE_ALL);
     void SetFooter(const wxString& footer, int pg = wxPAGE_ALL);
+    // Sets fonts to be used when displaying HTML page. (if size null then default sizes used).
+    %addmethods {
+        void SetFonts(wxString normal_face, wxString fixed_face, PyObject* sizes=NULL) {
+            int* temp = NULL;
+            if (sizes) temp = int_LIST_helper(sizes);
+            self->SetFonts(normal_face, fixed_face, temp);
+            if (temp)
+                delete [] temp;
+        }
+    }
     void SetMargins(float top = 25.2, float bottom = 25.2,
                     float left = 25.2, float right = 25.2,
                     float spaces = 5);
@@ -648,19 +797,29 @@ public:
 
 class wxHtmlEasyPrinting : public wxObject {
 public:
-    wxHtmlEasyPrinting(const char* name = "Printing",
+    wxHtmlEasyPrinting(const wxString& name = wxPyHtmlPrintingTitleStr,
                        wxFrame *parent_frame = NULL);
     ~wxHtmlEasyPrinting();
 
     void PreviewFile(const wxString &htmlfile);
-    void PreviewText(const wxString &htmltext, const wxString& basepath = wxEmptyString);
+    void PreviewText(const wxString &htmltext, const wxString& basepath = wxPyEmptyString);
     void PrintFile(const wxString &htmlfile);
-    void PrintText(const wxString &htmltext, const wxString& basepath = wxEmptyString);
+    void PrintText(const wxString &htmltext, const wxString& basepath = wxPyEmptyString);
     void PrinterSetup();
     void PageSetup();
     void SetHeader(const wxString& header, int pg = wxPAGE_ALL);
     void SetFooter(const wxString& footer, int pg = wxPAGE_ALL);
 
+    %addmethods {
+        void SetFonts(wxString normal_face, wxString fixed_face, PyObject* sizes=NULL) {
+            int* temp = NULL;
+            if (sizes) temp = int_LIST_helper(sizes);
+            self->SetFonts(normal_face, fixed_face, temp);
+            if (temp)
+                delete [] temp;
+        }
+    }
+
     wxPrintData *GetPrintData() {return m_PrintData;}
     wxPageSetupDialogData *GetPageSetupData() {return m_PageSetupData;}
 
@@ -686,6 +845,7 @@ public:
     wxPyPtrTypeMap_Add("wxHtmlTagHandler", "wxPyHtmlTagHandler");
     wxPyPtrTypeMap_Add("wxHtmlWinTagHandler", "wxPyHtmlWinTagHandler");
     wxPyPtrTypeMap_Add("wxHtmlWindow", "wxPyHtmlWindow");
+    wxPyPtrTypeMap_Add("wxHtmlFilter", "wxPyHtmlFilter");
 %}
 
 //----------------------------------------------------------------------