X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/4268f79856cbe66b8ad31b86ee183879cede98e3..ff42dd66503f732fcb1d4fac60240a62ec2f7628:/wxPython/src/html.i diff --git a/wxPython/src/html.i b/wxPython/src/html.i index ec23d14d8c..a79ef162ee 100644 --- a/wxPython/src/html.i +++ b/wxPython/src/html.i @@ -73,6 +73,27 @@ enum { }; +enum { + wxHW_SCROLLBAR_NEVER, + wxHW_SCROLLBAR_AUTO, +}; + + +// enums for wxHtmlWindow::OnOpeningURL +enum wxHtmlOpeningStatus +{ + wxHTML_OPEN, + wxHTML_BLOCK, + wxHTML_REDIRECT +}; + +enum wxHtmlURLType +{ + wxHTML_URL_PAGE, + wxHTML_URL_IMAGE, + wxHTML_URL_OTHER +}; + //--------------------------------------------------------------------------- class wxHtmlLinkInfo : public wxObject { @@ -127,6 +148,7 @@ public: void PushTagHandler(wxHtmlTagHandler* handler, wxString tags); void PopTagHandler(); + // virtual wxFSFile *OpenURL(wxHtmlURLType type, const wxString& url) const; // void AddText(const char* txt) = 0; // void AddTag(const wxHtmlTag& tag); @@ -137,13 +159,13 @@ public: class wxHtmlWinParser : public wxHtmlParser { public: - wxHtmlWinParser(wxWindow *wnd); + wxHtmlWinParser(wxHtmlWindow *wnd = NULL); void SetDC(wxDC *dc); wxDC* GetDC(); int GetCharHeight(); int GetCharWidth(); - wxWindow* GetWindow(); + wxHtmlWindow* GetWindow(); //void SetFonts(wxString normal_face, wxString fixed_face, int *LIST); %addmethods { void SetFonts(wxString normal_face, wxString fixed_face, PyObject* sizes) { @@ -421,12 +443,26 @@ public: : wxHtmlWindow(parent, id, pos, size, style, name) {}; wxPyHtmlWindow() : wxHtmlWindow() {}; + bool ScrollToAnchor(const wxString& anchor) { + return wxHtmlWindow::ScrollToAnchor(anchor); + } + + bool HasAnchor(const wxString& anchor) { + const wxHtmlCell *c = m_Cell->Find(wxHTML_COND_ISANCHOR, &anchor); + return c!=NULL; + } + void OnLinkClicked(const wxHtmlLinkInfo& link); void base_OnLinkClicked(const wxHtmlLinkInfo& link); + wxHtmlOpeningStatus OnOpeningURL(wxHtmlURLType type, + const wxString& url, + wxString *redirect) const; + DEC_PYCALLBACK__STRING(OnSetTitle); DEC_PYCALLBACK__CELLINTINT(OnCellMouseHover); DEC_PYCALLBACK__CELLINTINTME(OnCellClicked); +// DEC_PYCALLBACK_BOOL_STRING(OnOpeningURL); PYPRIVATE; }; @@ -434,6 +470,7 @@ 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) { @@ -452,6 +489,40 @@ void wxPyHtmlWindow::base_OnLinkClicked(const wxHtmlLinkInfo& link) { wxHtmlWindow::OnLinkClicked(link); } + +wxHtmlOpeningStatus wxPyHtmlWindow::OnOpeningURL(wxHtmlURLType type, + const wxString& url, + wxString *redirect) const { + bool found; + wxHtmlOpeningStatus rval; + wxPyBeginBlockThreads(); + if ((found = wxPyCBH_findCallback(m_myInst, "OnOpeningURL"))) { + PyObject* ro; + ro = wxPyCBH_callCallbackObj(m_myInst, Py_BuildValue("(is)", type, url.c_str())); + 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); + rval = wxHTML_REDIRECT; + } + else { + PyObject* num = PyNumber_Int(ro); + rval = (wxHtmlOpeningStatus)PyInt_AsLong(num); + Py_DECREF(num); + } + Py_DECREF(ro); + } + wxPyEndBlockThreads(); + if (! found) + rval = wxHtmlWindow::OnOpeningURL(type, url, redirect); + return rval; +} + + %} @@ -511,6 +582,9 @@ public: wxHtmlContainerCell* GetInternalRepresentation(); wxHtmlWinParser* GetParser(); + bool ScrollToAnchor(const wxString& anchor); + bool HasAnchor(const wxString& anchor); + void base_OnLinkClicked(const wxHtmlLinkInfo& link); void base_OnSetTitle(const char* title); void base_OnCellMouseHover(wxHtmlCell *cell, wxCoord x, wxCoord y);