X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/900d98862dc265f24943f60074d8b69025331737..d820003682bc59c2813db9ccb642551ce8af83b6:/wxPython/src/helpers.h diff --git a/wxPython/src/helpers.h b/wxPython/src/helpers.h index 46d04e9f60..f114d2ab63 100644 --- a/wxPython/src/helpers.h +++ b/wxPython/src/helpers.h @@ -134,6 +134,7 @@ wxPoint* wxPoint_LIST_helper(PyObject* source, int* npoints); wxBitmap** wxBitmap_LIST_helper(PyObject* source); wxString* wxString_LIST_helper(PyObject* source); wxAcceleratorEntry* wxAcceleratorEntry_LIST_helper(PyObject* source); +wxPen** wxPen_LIST_helper(PyObject* source); bool wxSize_helper(PyObject* source, wxSize** obj); bool wxPoint_helper(PyObject* source, wxPoint** obj); @@ -141,6 +142,20 @@ bool wxRealPoint_helper(PyObject* source, wxRealPoint** obj); bool wxRect_helper(PyObject* source, wxRect** obj); bool wxColour_helper(PyObject* source, wxColour** obj); +#if PYTHON_API_VERSION < 1009 +#define PySequence_Fast_GET_ITEM(o, i) \ + (PyList_Check(o) ? PyList_GET_ITEM(o, i) : PyTuple_GET_ITEM(o, i)) +#endif + +bool _2int_seq_helper(PyObject* source, int* i1, int* i2); +bool _4int_seq_helper(PyObject* source, int* i1, int* i2, int* i3, int* i4); + + +PyObject* wxArrayString2PyList_helper(const wxArrayString& app); + + +#define RETURN_NONE() { Py_INCREF(Py_None); return Py_None; } + //---------------------------------------------------------------------- #ifndef SWIGCODE @@ -260,7 +275,7 @@ struct wxPyCoreAPI { bool (*p_wxRect_helper)(PyObject* source, wxRect** obj); bool (*p_wxColour_helper)(PyObject* source, wxColour** obj); - void (*p_wxPyCBH_setSelf)(wxPyCallbackHelper& cbh, PyObject* self, PyObject* klass, int incref); + void (*p_wxPyCBH_setCallbackInfo)(wxPyCallbackHelper& cbh, PyObject* self, PyObject* klass, int incref); bool (*p_wxPyCBH_findCallback)(const wxPyCallbackHelper& cbh, const char* name); int (*p_wxPyCBH_callCallback)(const wxPyCallbackHelper& cbh, PyObject* argTuple); PyObject* (*p_wxPyCBH_callCallbackObj)(const wxPyCallbackHelper& cbh, PyObject* argTuple); @@ -318,7 +333,7 @@ private: }; -void wxPyCBH_setSelf(wxPyCallbackHelper& cbh, PyObject* self, PyObject* klass, int incref); +void wxPyCBH_setCallbackInfo(wxPyCallbackHelper& cbh, PyObject* self, PyObject* klass, int incref); bool wxPyCBH_findCallback(const wxPyCallbackHelper& cbh, const char* name); int wxPyCBH_callCallback(const wxPyCallbackHelper& cbh, PyObject* argTuple); PyObject* wxPyCBH_callCallbackObj(const wxPyCallbackHelper& cbh, PyObject* argTuple); @@ -381,8 +396,8 @@ public: //--------------------------------------------------------------------------- #define PYPRIVATE \ - void _setSelf(PyObject* self, PyObject* _class, int incref=1) { \ - wxPyCBH_setSelf(m_myInst, self, _class, incref); \ + void _setCallbackInfo(PyObject* self, PyObject* _class, int incref=1) { \ + wxPyCBH_setCallbackInfo(m_myInst, self, _class, incref); \ } \ private: wxPyCallbackHelper m_myInst @@ -1020,6 +1035,58 @@ public: return rval; \ } +//--------------------------------------------------------------------------- + +#define DEC_PYCALLBACK__CELLINTINT(CBNAME) \ + void CBNAME(wxHtmlCell *cell, wxCoord x, wxCoord y); \ + void base_##CBNAME(wxHtmlCell *cell, wxCoord x, wxCoord y); + +#define IMP_PYCALLBACK__CELLINTINT(CLASS, PCLASS, CBNAME) \ + void CLASS::CBNAME(wxHtmlCell *cell, wxCoord x, wxCoord y) { \ + wxString rval; \ + bool found; \ + wxPyTState* state = wxPyBeginBlockThreads(); \ + if ((found = wxPyCBH_findCallback(m_myInst, #CBNAME))) { \ + PyObject* obj = wxPyConstructObject((void*)cell, "wxHtmlCell", 0); \ + wxPyCBH_callCallbackObj(m_myInst, Py_BuildValue("(Oii)",obj,x,y)); \ + Py_DECREF(obj); \ + } \ + wxPyEndBlockThreads(state); \ + if (! found) \ + PCLASS::CBNAME(cell, x, y); \ + } \ + void CLASS::base_##CBNAME(wxHtmlCell *cell, wxCoord x, wxCoord y) { \ + PCLASS::CBNAME(cell, x, y); \ + } + + +//--------------------------------------------------------------------------- + +#define DEC_PYCALLBACK__CELLINTINTME(CBNAME) \ + void CBNAME(wxHtmlCell *cell, wxCoord x, wxCoord y, const wxMouseEvent& e); \ + void base_##CBNAME(wxHtmlCell *cell, wxCoord x, wxCoord y, const wxMouseEvent& e); + +#define IMP_PYCALLBACK__CELLINTINTME(CLASS, PCLASS, CBNAME) \ + void CLASS::CBNAME(wxHtmlCell *cell, wxCoord x, wxCoord y, const wxMouseEvent& e) { \ + bool found; \ + wxPyTState* state = wxPyBeginBlockThreads(); \ + if ((found = wxPyCBH_findCallback(m_myInst, #CBNAME))) { \ + PyObject* obj = wxPyConstructObject((void*)cell, "wxHtmlCell", 0); \ + PyObject* o2 = wxPyConstructObject((void*)&e, "wxMouseEvent", 0); \ + wxPyCBH_callCallbackObj(m_myInst, Py_BuildValue("(OiiO)",obj,x,y,o2)); \ + Py_DECREF(obj); \ + Py_DECREF(o2); \ + } \ + wxPyEndBlockThreads(state); \ + if (! found) \ + PCLASS::CBNAME(cell, x, y, e); \ + } \ + void CLASS::base_##CBNAME(wxHtmlCell *cell, wxCoord x, wxCoord y, const wxMouseEvent& e) { \ + PCLASS::CBNAME(cell, x, y, e); \ + } + + + //--------------------------------------------------------------------------- #define DEC_PYCALLBACK___pure(CBNAME) \ @@ -1321,7 +1388,7 @@ public: #define IMP_PYCALLBACK_bool_any(CLASS, PCLASS, CBNAME, Type) \ bool CLASS::CBNAME(Type& a) { \ - bool rv; \ + bool rv=FALSE; \ bool found; \ wxPyTState* state = wxPyBeginBlockThreads(); \ if ((found = wxPyCBH_findCallback(m_myInst, #CBNAME))) { \ @@ -1431,4 +1498,35 @@ public: //--------------------------------------------------------------------------- +#define DEC_PYCALLBACK_BOOL_ME(CBNAME) \ + bool CBNAME(wxMouseEvent& e); \ + bool base_##CBNAME(wxMouseEvent& e); + +#define IMP_PYCALLBACK_BOOL_ME(CLASS, PCLASS, CBNAME) \ + bool CLASS::CBNAME(wxMouseEvent& e) { \ + bool rval=FALSE; \ + bool found; \ + wxPyTState* state = wxPyBeginBlockThreads(); \ + if ((found = wxPyCBH_findCallback(m_myInst, #CBNAME))) { \ + PyObject* ro; \ + PyObject* obj = wxPyConstructObject((void*)&e, "wxMouseEvent", 0); \ + ro = wxPyCBH_callCallbackObj(m_myInst, Py_BuildValue("(O)",obj)); \ + if (ro) { \ + rval = PyInt_AsLong(ro); \ + Py_DECREF(ro); \ + } \ + Py_DECREF(obj); \ + } \ + wxPyEndBlockThreads(state); \ + if (! found) \ + return PCLASS::CBNAME(e); \ + return rval; \ + } \ + bool CLASS::base_##CBNAME(wxMouseEvent& e) { \ + return PCLASS::CBNAME(e); \ + } + + +//--------------------------------------------------------------------------- + #endif