};
+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 {
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);
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) {
void SetFontFixed(int x);
int GetAlign();
void SetAlign(int a);
- const wxColour& GetLinkColor();
+ wxColour GetLinkColor();
void SetLinkColor(const wxColour& clr);
- const wxColour& GetActualColor();
+ wxColour GetActualColor();
void SetActualColor(const wxColour& clr);
void SetLink(const wxString& link);
wxFont* CreateCurrentFont();
public:
wxPyHtmlTagHandler();
- void _setSelf(PyObject* self, PyObject* _class);
- %pragma(python) addtomethod = "__init__:self._setSelf(self, wxHtmlTagHandler)"
+ void _setCallbackInfo(PyObject* self, PyObject* _class);
+ %pragma(python) addtomethod = "__init__:self._setCallbackInfo(self, wxHtmlTagHandler)"
void SetParser(wxHtmlParser *parser);
wxHtmlParser* GetParser();
public:
wxPyHtmlWinTagHandler();
- void _setSelf(PyObject* self, PyObject* _class);
- %pragma(python) addtomethod = "__init__:self._setSelf(self, wxHtmlWinTagHandler)"
+ void _setCallbackInfo(PyObject* self, PyObject* _class);
+ %pragma(python) addtomethod = "__init__:self._setCallbackInfo(self, wxHtmlWinTagHandler)"
void SetParser(wxHtmlParser *parser);
wxHtmlWinParser* GetParser();
}
void OnExit() {
- bool doSave = wxPyRestoreThread();
+ wxPyBeginBlockThreads();
Py_DECREF(m_tagHandlerClass);
m_tagHandlerClass = NULL;
for (size_t x=0; x < m_objArray.GetCount(); x++) {
PyObject* obj = (PyObject*)m_objArray.Item(x);
Py_DECREF(obj);
}
- wxPySaveThread(doSave);
+ wxPyEndBlockThreads();
};
void FillHandlersTable(wxHtmlWinParser *parser) {
// Wave our magic wand... (if it works it's a miracle! ;-)
// First, make a new instance of the tag handler
- bool doSave = wxPyRestoreThread();
+ wxPyBeginBlockThreads();
PyObject* arg = Py_BuildValue("()");
PyObject* obj = PyInstance_New(m_tagHandlerClass, arg, NULL);
Py_DECREF(arg);
- wxPySaveThread(doSave);
+ wxPyEndBlockThreads();
// now figure out where it's C++ object is...
wxPyHtmlWinTagHandler* thPtr;
long style = wxHW_SCROLLBAR_AUTO,
const wxString& name = "htmlWindow")
: wxHtmlWindow(parent, id, pos, size, style, name) {};
+ wxPyHtmlWindow() : wxHtmlWindow() {};
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;
};
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 doSave = wxPyRestoreThread();
- if (wxPyCBH_findCallback(m_myInst, "OnLinkClicked")) {
+ bool found;
+ wxPyBeginBlockThreads();
+ if ((found = wxPyCBH_findCallback(m_myInst, "OnLinkClicked"))) {
PyObject* obj = wxPyConstructObject((void*)&link, "wxHtmlLinkInfo", 0);
wxPyCBH_callCallback(m_myInst, Py_BuildValue("(O)", obj));
Py_DECREF(obj);
}
- else
+ wxPyEndBlockThreads();
+ if (! found)
wxHtmlWindow::OnLinkClicked(link);
- wxPySaveThread(doSave);
}
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;
+}
+
+
%}
wxSize& size = wxDefaultSize,
int flags=wxHW_SCROLLBAR_AUTO,
char* name = "htmlWindow");
+ %name(wxPreHtmlWindow)wxPyHtmlWindow();
+
+ bool Create(wxWindow *parent, int id = -1,
+ wxPoint& pos = wxDefaultPosition,
+ wxSize& size = wxDefaultSize,
+ int flags=wxHW_SCROLLBAR_AUTO,
+ char* name = "htmlWindow");
- void _setSelf(PyObject* self, PyObject* _class);
- %pragma(python) addtomethod = "__init__:self._setSelf(self, wxHtmlWindow)"
- %pragma(python) addtomethod = "__init__:#wx._StdWindowCallbacks(self)"
- %pragma(python) addtomethod = "__init__:#wx._StdOnScrollCallbacks(self)"
+ void _setCallbackInfo(PyObject* self, PyObject* _class);
+ %pragma(python) addtomethod = "__init__:self._setCallbackInfo(self, wxHtmlWindow)"
+ %pragma(python) addtomethod = "__init__:self._setOORInfo(self)"
+ %pragma(python) addtomethod = "wxPreHtmlWindow:val._setOORInfo(val)"
bool SetPage(const wxString& source);
bool LoadPage(const wxString& location);
+ bool AppendToPage(const wxString& source);
wxString GetOpenedPage();
wxString GetOpenedAnchor();
wxString GetOpenedPageTitle();
void base_OnLinkClicked(const wxHtmlLinkInfo& link);
void base_OnSetTitle(const char* 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