%module html
%{
-#include "export.h"
+#include "wxPython.h"
#include <wx/html/htmlwin.h>
#include <wx/html/htmprint.h>
#include <wx/image.h>
%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 {
};
+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 {
public:
- wxHtmlLinkInfo(const wxString& href, const wxString& target = wxEmptyString);
+ wxHtmlLinkInfo(const wxString& href, const wxString& target = wxPyEmptyString);
wxString GetHref();
wxString GetTarget();
wxMouseEvent* GetEvent();
void PushTagHandler(wxHtmlTagHandler* handler, wxString tags);
void PopTagHandler();
- // Returns TRUE if the parser is allowed to open given URL (may be forbidden
- // for security reasons)
- virtual bool CanOpenURL(const wxString& url) const { return TRUE; }
+ // virtual wxFSFile *OpenURL(wxHtmlURLType type, const wxString& url) const;
// void AddText(const char* txt) = 0;
// void AddTag(const wxHtmlTag& tag);
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) {
: 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);
+// DEC_PYCALLBACK_BOOL_STRING(OnOpeningURL);
PYPRIVATE;
};
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);
+// IMP_PYCALLBACK_BOOL_STRING(wxPyHtmlWindow, wxHtmlWindow, OnOpeningURL);
void wxPyHtmlWindow::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;
+ 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
+ ) {
+ *redirect = Py2wxString(ro);
+ 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;
+}
+
+
%}
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);
wxString GetOpenedAnchor();
wxString GetOpenedPageTitle();
- void SetRelatedFrame(wxFrame* frame, const char* format);
+ void SetRelatedFrame(wxFrame* frame, const wxString& format);
wxFrame* GetRelatedFrame();
void SetRelatedStatusBar(int bar);
void SetTitle(const wxString& title);
void SetBorders(int b);
- void ReadCustomization(wxConfigBase *cfg, wxString path = wxEmptyString);
- void WriteCustomization(wxConfigBase *cfg, wxString path = wxEmptyString);
+ void ReadCustomization(wxConfigBase *cfg, wxString path = wxPyEmptyString);
+ void WriteCustomization(wxConfigBase *cfg, wxString path = wxPyEmptyString);
bool HistoryBack();
bool HistoryForward();
bool HistoryCanBack();
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_OnSetTitle(const wxString& title);
void base_OnCellMouseHover(wxHtmlCell *cell, wxCoord x, wxCoord y);
void base_OnCellClicked(wxHtmlCell *cell,
wxCoord x, wxCoord y,
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);
int Render(int x, int y, int from = 0, int dont_render = FALSE);
int GetTotalHeight();
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);
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);