X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/fd512ba2864a4ddf82ef70caf7a5b107d34906c8..b9ac87bc5cbe46227195e32c44e25831f8206e3c:/wxPython/src/helpers.h?ds=sidebyside diff --git a/wxPython/src/helpers.h b/wxPython/src/helpers.h index 1ca7acd7da..58c81db3a7 100644 --- a/wxPython/src/helpers.h +++ b/wxPython/src/helpers.h @@ -14,27 +14,13 @@ #define __wxp_helpers__ #include - +#include //--------------------------------------------------------------------------- typedef unsigned char byte; - -class wxPyApp: public wxApp -{ -public: - wxPyApp(); - ~wxPyApp(); - bool OnInit(); - int MainLoop(); -}; - -extern wxPyApp *wxPythonApp; - -//---------------------------------------------------------------------- - -void __wxPreStart(); +void __wxPreStart(PyObject*); PyObject* __wxStart(PyObject*, PyObject* args); void __wxCleanup(); @@ -80,6 +66,8 @@ void wxPyEndAllowThreads(PyThreadState* state); void wxPyBeginBlockThreads(); void wxPyEndBlockThreads(); +#define wxPyBLOCK_THREADS(stmt) wxPyBeginBlockThreads(); stmt; wxPyEndBlockThreads() + //---------------------------------------------------------------------- // These are helpers used by the typemaps @@ -101,6 +89,9 @@ bool wxRealPoint_helper(PyObject* source, wxRealPoint** obj); bool wxRect_helper(PyObject* source, wxRect** obj); bool wxColour_helper(PyObject* source, wxColour** obj); +bool wxPoint2DDouble_helper(PyObject* source, wxPoint2DDouble** obj); + + //---------------------------------------------------------------------- // Other helpful stuff @@ -109,8 +100,8 @@ bool wxColour_helper(PyObject* source, wxColour** obj); (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); +bool wxPy2int_seq_helper(PyObject* source, int* i1, int* i2); +bool wxPy4int_seq_helper(PyObject* source, int* i1, int* i2, int* i3, int* i4); PyObject* wxArrayString2PyList_helper(const wxArrayString& arr); @@ -120,6 +111,21 @@ PyObject* wxArrayInt2PyList_helper(const wxArrayInt& arr); #define DECLARE_DEF_STRING(name) static const wxString wxPy##name(wx##name) #define DECLARE_DEF_STRING2(name,val) static const wxString wxPy##name(val) +//---------------------------------------------------------------------- +// functions used by the DrawXXXList enhancements added to wxDC + +typedef bool (*wxPyDrawListOp_t)(wxDC& dc, PyObject* coords); +PyObject* wxPyDrawXXXList(wxDC& dc, wxPyDrawListOp_t doDraw, + PyObject* pyCoords, PyObject* pyPens, PyObject* pyBrushes); +bool wxPyDrawXXXPoint(wxDC& dc, PyObject* coords); +bool wxPyDrawXXXLine(wxDC& dc, PyObject* coords); +bool wxPyDrawXXXRectangle(wxDC& dc, PyObject* coords); +bool wxPyDrawXXXEllipse(wxDC& dc, PyObject* coords); +bool wxPyDrawXXXPolygon(wxDC& dc, PyObject* coords); + +PyObject* wxPyDrawTextList(wxDC& dc, PyObject* textList, PyObject* pyPoints, + PyObject* foregroundList, PyObject* backgroundList); + //---------------------------------------------------------------------- #ifndef SWIGCODE @@ -270,6 +276,7 @@ struct wxPyCoreAPI { bool (*p_wxRealPoint_helper)(PyObject* source, wxRealPoint** obj); bool (*p_wxRect_helper)(PyObject* source, wxRect** obj); bool (*p_wxColour_helper)(PyObject* source, wxColour** obj); + bool (*p_wxPoint2DDouble_helper)(PyObject* source, wxPoint2DDouble** obj); void (*p_wxPyCBH_setCallbackInfo)(wxPyCallbackHelper& cbh, PyObject* self, PyObject* klass, int incref); bool (*p_wxPyCBH_findCallback)(const wxPyCallbackHelper& cbh, const char* name); @@ -403,18 +410,77 @@ void wxPyCBH_delete(wxPyCallbackHelper* cbh); -//--------------------------------------------------------------------------- -// These macros are used to implement the virtual methods that should -// redirect to a Python method if one exists. The names designate the -// return type, if any, as well as any parameter types. //--------------------------------------------------------------------------- -#define PYPRIVATE \ +// This is used in C++ classes that need to be able to make callback to +// "overloaded" python methods + +#define PYPRIVATE \ void _setCallbackInfo(PyObject* self, PyObject* _class, int incref=1) { \ wxPyCBH_setCallbackInfo(m_myInst, self, _class, incref); \ - } \ + } \ private: wxPyCallbackHelper m_myInst + +//--------------------------------------------------------------------------- + +enum { + wxPYAPP_ASSERT_SUPPRESS = 1, + wxPYAPP_ASSERT_EXCEPTION = 2, + wxPYAPP_ASSERT_DIALOG = 4, + wxPYAPP_ASSERT_LOG = 8 +}; + +class wxPyApp: public wxApp +{ + DECLARE_ABSTRACT_CLASS(wxPyApp); + +public: + wxPyApp(); + ~wxPyApp(); + bool OnInit(); + int MainLoop(); + + int GetAssertMode() { return m_assertMode; } + void SetAssertMode(int mode) { m_assertMode = mode; } + + virtual bool OnInitGui(); + virtual int OnExit(); +#ifdef __WXDEBUG__ + virtual void OnAssert(const wxChar *file, + int line, + const wxChar *cond, + const wxChar *msg); +#endif + // virtual int FilterEvent(wxEvent& event); // This one too???? + + + static bool GetMacDefaultEncodingIsPC(); + static bool GetMacSupportPCMenuShortcuts(); + static long GetMacAboutMenuItemId(); + static long GetMacPreferencesMenuItemId(); + static long GetMacExitMenuItemId(); + static wxString GetMacHelpMenuTitleName(); + + static void SetMacDefaultEncodingIsPC(bool val); + static void SetMacSupportPCMenuShortcuts(bool val); + static void SetMacAboutMenuItemId(long val); + static void SetMacPreferencesMenuItemId(long val); + static void SetMacExitMenuItemId(long val); + static void SetMacHelpMenuTitleName(const wxString& val); + + + PYPRIVATE; + int m_assertMode; +}; + +extern wxPyApp *wxPythonApp; + + +//---------------------------------------------------------------------- +// These macros are used to implement the virtual methods that should +// redirect to a Python method if one exists. The names designate the +// return type, if any, as well as any parameter types. //--------------------------------------------------------------------------- #define DEC_PYCALLBACK__(CBNAME) \ @@ -425,10 +491,10 @@ void wxPyCBH_delete(wxPyCallbackHelper* cbh); #define IMP_PYCALLBACK__(CLASS, PCLASS, CBNAME) \ void CLASS::CBNAME() { \ bool found; \ - wxPyBeginBlockThreads(); \ + wxPyBeginBlockThreads(); \ if ((found = wxPyCBH_findCallback(m_myInst, #CBNAME))) \ wxPyCBH_callCallback(m_myInst, Py_BuildValue("()")); \ - wxPyEndBlockThreads(); \ + wxPyEndBlockThreads(); \ if (! found) \ PCLASS::CBNAME(); \ } \ @@ -1173,6 +1239,34 @@ void wxPyCBH_delete(wxPyCallbackHelper* cbh); //--------------------------------------------------------------------------- +#define DEC_PYCALLBACK_STRING__const(CBNAME) \ + wxString CBNAME() const; \ + wxString base_##CBNAME() const; + +#define IMP_PYCALLBACK_STRING__const(CLASS, PCLASS, CBNAME) \ + wxString CLASS::CBNAME() const { \ + wxString rval; \ + bool found; \ + wxPyBeginBlockThreads(); \ + if ((found = wxPyCBH_findCallback(m_myInst, #CBNAME))) { \ + PyObject* ro; \ + ro = wxPyCBH_callCallbackObj(m_myInst, Py_BuildValue("()")); \ + if (ro) { \ + rval = Py2wxString(ro); \ + Py_DECREF(ro); \ + } \ + } \ + wxPyEndBlockThreads(); \ + if (! found) \ + rval = PCLASS::CBNAME(); \ + return rval; \ + } \ + wxString CLASS::base_##CBNAME() const { \ + return PCLASS::CBNAME(); \ + } + +//--------------------------------------------------------------------------- + #define DEC_PYCALLBACK_STRING__pure(CBNAME) \ wxString CBNAME(); @@ -1203,7 +1297,7 @@ void wxPyCBH_delete(wxPyCallbackHelper* cbh); bool rval=FALSE; \ wxPyBeginBlockThreads(); \ if (wxPyCBH_findCallback(m_myInst, #CBNAME)) { \ - PyObject* obj = wxPyConstructObject((void*)&a, "wxHtmlTag", 0); \ + PyObject* obj = wxPyConstructObject((void*)&a, wxT("wxHtmlTag"), 0); \ rval = wxPyCBH_callCallback(m_myInst, Py_BuildValue("(O)", obj)); \ Py_DECREF(obj); \ } \ @@ -1222,7 +1316,7 @@ void wxPyCBH_delete(wxPyCallbackHelper* cbh); bool found; \ wxPyBeginBlockThreads(); \ if ((found = wxPyCBH_findCallback(m_myInst, #CBNAME))) { \ - PyObject* obj = wxPyConstructObject((void*)cell, "wxHtmlCell", 0); \ + PyObject* obj = wxPyConstructObject((void*)cell, wxT("wxHtmlCell"), 0); \ wxPyCBH_callCallbackObj(m_myInst, Py_BuildValue("(Oii)",obj,x,y)); \ Py_DECREF(obj); \ } \ @@ -1246,8 +1340,8 @@ void wxPyCBH_delete(wxPyCallbackHelper* cbh); bool found; \ wxPyBeginBlockThreads(); \ if ((found = wxPyCBH_findCallback(m_myInst, #CBNAME))) { \ - PyObject* obj = wxPyConstructObject((void*)cell, "wxHtmlCell", 0); \ - PyObject* o2 = wxPyConstructObject((void*)&e, "wxMouseEvent", 0); \ + PyObject* obj = wxPyConstructObject((void*)cell, wxT("wxHtmlCell"), 0); \ + PyObject* o2 = wxPyConstructObject((void*)&e, wxT("wxMouseEvent"), 0); \ wxPyCBH_callCallbackObj(m_myInst, Py_BuildValue("(OiiO)",obj,x,y,o2)); \ Py_DECREF(obj); \ Py_DECREF(o2); \ @@ -1582,7 +1676,7 @@ void wxPyCBH_delete(wxPyCallbackHelper* cbh); bool found; \ wxPyBeginBlockThreads(); \ if ((found = wxPyCBH_findCallback(m_myInst, #CBNAME))) { \ - PyObject* obj = wxPyConstructObject((void*)&a, #Type, 0); \ + PyObject* obj = wxPyConstructObject((void*)&a, wxT(#Type), 0); \ wxPyCBH_callCallback(m_myInst, Py_BuildValue("(O)", obj)); \ Py_DECREF(obj); \ } \ @@ -1607,7 +1701,7 @@ void wxPyCBH_delete(wxPyCallbackHelper* cbh); bool found; \ wxPyBeginBlockThreads(); \ if ((found = wxPyCBH_findCallback(m_myInst, #CBNAME))) { \ - PyObject* obj = wxPyConstructObject((void*)&a, #Type, 0); \ + PyObject* obj = wxPyConstructObject((void*)&a, wxT(#Type), 0); \ wxPyCBH_callCallback(m_myInst, Py_BuildValue("(O)", obj)); \ Py_DECREF(obj); \ } \ @@ -1632,7 +1726,7 @@ void wxPyCBH_delete(wxPyCallbackHelper* cbh); bool found; \ wxPyBeginBlockThreads(); \ if ((found = wxPyCBH_findCallback(m_myInst, #CBNAME))) { \ - PyObject* obj = wxPyConstructObject((void*)&a, #Type, 0); \ + PyObject* obj = wxPyConstructObject((void*)&a, wxT(#Type), 0); \ rv = wxPyCBH_callCallback(m_myInst, Py_BuildValue("(O)", obj)); \ Py_DECREF(obj); \ } \ @@ -1656,7 +1750,7 @@ void wxPyCBH_delete(wxPyCallbackHelper* cbh); bool rv=FALSE; \ wxPyBeginBlockThreads(); \ if (wxPyCBH_findCallback(m_myInst, #CBNAME)) { \ - PyObject* obj = wxPyConstructObject((void*)&a, #Type, 0); \ + PyObject* obj = wxPyConstructObject((void*)&a, wxT(#Type), 0); \ rv = wxPyCBH_callCallback(m_myInst, Py_BuildValue("(O)", obj)); \ Py_DECREF(obj); \ } \ @@ -1766,7 +1860,7 @@ void wxPyCBH_delete(wxPyCallbackHelper* cbh); wxPyBeginBlockThreads(); \ if ((found = wxPyCBH_findCallback(m_myInst, #CBNAME))) { \ PyObject* ro; \ - PyObject* obj = wxPyConstructObject((void*)&e, "wxMouseEvent", 0); \ + PyObject* obj = wxPyConstructObject((void*)&e, wxT("wxMouseEvent"), 0); \ ro = wxPyCBH_callCallbackObj(m_myInst, Py_BuildValue("(O)",obj)); \ if (ro) { \ rval = PyInt_AsLong(ro); \ @@ -1851,6 +1945,29 @@ void wxPyCBH_delete(wxPyCallbackHelper* cbh); //--------------------------------------------------------------------------- +#define DEC_PYCALLBACK_OBJECT_STRING_pure(CBNAME) \ + wxObject* CBNAME(const wxString& a); + +#define IMP_PYCALLBACK_OBJECT_STRING_pure(CLASS, PCLASS, CBNAME) \ + wxObject* CLASS::CBNAME(const wxString& a) { \ + wxObject* rv = NULL; \ + wxPyBeginBlockThreads(); \ + if (wxPyCBH_findCallback(m_myInst, #CBNAME)) { \ + PyObject* so = wx2PyString(a); \ + PyObject* ro; \ + ro = wxPyCBH_callCallbackObj(m_myInst, Py_BuildValue("(O)", so)); \ + if (ro) { \ + SWIG_GetPtrObj(ro, (void **)&rv, "_wxObject_p"); \ + Py_DECREF(ro); \ + } \ + Py_DECREF(so); \ + } \ + wxPyEndBlockThreads(); \ + return rv; \ + } + +//--------------------------------------------------------------------------- + #define DEC_PYCALLBACK_BOOL_NODE_pure(CBNAME) \ bool CBNAME(wxXmlNode* a); @@ -1860,7 +1977,7 @@ void wxPyCBH_delete(wxPyCallbackHelper* cbh); bool rv=FALSE; \ wxPyBeginBlockThreads(); \ if (wxPyCBH_findCallback(m_myInst, #CBNAME)) { \ - PyObject* obj = wxPyConstructObject((void*)a, "wxXmlNode", 0); \ + PyObject* obj = wxPyConstructObject((void*)a, wxT("wxXmlNode"), 0); \ rv = wxPyCBH_callCallback(m_myInst, Py_BuildValue("(O)", obj)); \ Py_DECREF(obj); \ } \