X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/c8bc7bb84dcca816055d5876e4772551c48acda5..d975da9bc4f16d73730a158dd94e4a108034c30b:/wxPython/src/gtk/grid.cpp diff --git a/wxPython/src/gtk/grid.cpp b/wxPython/src/gtk/grid.cpp index 3b59ce1521..7ba7e379e6 100644 --- a/wxPython/src/gtk/grid.cpp +++ b/wxPython/src/gtk/grid.cpp @@ -86,6 +86,9 @@ static PyObject* t_output_helper(PyObject* target, PyObject* o) { return target; } + // Put some wx default wxChar* values into wxStrings. + DECLARE_DEF_STRING(PanelNameStr); + #define PYCALLBACK_GCA_INTINTKIND(PCLASS, CBNAME) \ wxGridCellAttr* CBNAME(int a, int b, wxGridCellAttr::wxAttrKind c) { \ wxGridCellAttr* rval = NULL; \ @@ -173,50 +176,46 @@ static PyObject* t_output_helper(PyObject* target, PyObject* o) { } -// TODO: unicode fix #define PYCALLBACK_STRING_INTINT_pure(CBNAME) \ wxString CBNAME(int a, int b) { \ - wxPyBeginBlockThreads(); \ + wxPyBeginBlockThreads(); \ wxString rval; \ if (wxPyCBH_findCallback(m_myInst, #CBNAME)) { \ PyObject* ro; \ ro = wxPyCBH_callCallbackObj(m_myInst, Py_BuildValue("(ii)",a,b)); \ if (ro) { \ - PyObject* str = PyObject_Str(ro); \ - rval = PyString_AsString(str); \ - Py_DECREF(ro); Py_DECREF(str); \ + rval = Py2wxString(ro); \ + Py_DECREF(ro); \ } \ } \ - wxPyEndBlockThreads(); \ + wxPyEndBlockThreads(); \ return rval; \ } -// TODO: unicode fix #define PYCALLBACK__INTINTSTRING_pure(CBNAME) \ void CBNAME(int a, int b, const wxString& c) { \ - wxPyBeginBlockThreads(); \ + wxPyBeginBlockThreads(); \ if (wxPyCBH_findCallback(m_myInst, #CBNAME)) \ - wxPyCBH_callCallback(m_myInst, Py_BuildValue("(iis)",a,b,c.c_str()));\ - wxPyEndBlockThreads(); \ + wxPyCBH_callCallback(m_myInst, Py_BuildValue("(iiO)",a,b,wx2PyString(c)));\ + wxPyEndBlockThreads(); \ } -// TODO: unicode fix + #define PYCALLBACK_STRING_INTINT(PCLASS, CBNAME) \ wxString CBNAME(int a, int b) { \ bool found; \ - wxPyBeginBlockThreads(); \ + wxPyBeginBlockThreads(); \ wxString rval; \ if ((found = wxPyCBH_findCallback(m_myInst, #CBNAME))) { \ PyObject* ro; \ ro = wxPyCBH_callCallbackObj(m_myInst, Py_BuildValue("(ii)",a,b)); \ if (ro) { \ - PyObject* str = PyObject_Str(ro); \ - rval = PyString_AsString(str); \ - Py_DECREF(ro); Py_DECREF(str); \ + rval = Py2wxString(ro); \ + Py_DECREF(ro); \ } \ } \ - wxPyEndBlockThreads(); \ + wxPyEndBlockThreads(); \ if (! found) \ rval = PCLASS::CBNAME(a, b); \ return rval; \ @@ -226,15 +225,14 @@ static PyObject* t_output_helper(PyObject* target, PyObject* o) { } -// TODO: unicode fix #define PYCALLBACK_BOOL_INTINTSTRING(PCLASS, CBNAME) \ bool CBNAME(int a, int b, const wxString& c) { \ bool rval = 0; \ bool found; \ - wxPyBeginBlockThreads(); \ + wxPyBeginBlockThreads(); \ if ((found = wxPyCBH_findCallback(m_myInst, #CBNAME))) \ - rval = wxPyCBH_callCallback(m_myInst, Py_BuildValue("(iis)", a,b,c.c_str()));\ - wxPyEndBlockThreads(); \ + rval = wxPyCBH_callCallback(m_myInst, Py_BuildValue("(iiO)", a,b,wx2PyString(c)));\ + wxPyEndBlockThreads(); \ if (! found) \ rval = PCLASS::CBNAME(a,b,c); \ return rval; \ @@ -359,22 +357,20 @@ static PyObject* t_output_helper(PyObject* target, PyObject* o) { } -// TODO: unicode fix #define PYCALLBACK_STRING_INT(PCLASS, CBNAME) \ wxString CBNAME(int a) { \ bool found; \ - wxPyBeginBlockThreads(); \ + wxPyBeginBlockThreads(); \ wxString rval; \ if ((found = wxPyCBH_findCallback(m_myInst, #CBNAME))) { \ PyObject* ro; \ ro = wxPyCBH_callCallbackObj(m_myInst, Py_BuildValue("(i)",a)); \ if (ro) { \ - PyObject* str = PyObject_Str(ro); \ - rval = PyString_AsString(str); \ - Py_DECREF(ro); Py_DECREF(str); \ + rval = Py2wxString(ro); \ + Py_DECREF(ro); \ } \ } \ - wxPyEndBlockThreads(); \ + wxPyEndBlockThreads(); \ if (! found) \ rval = PCLASS::CBNAME(a); \ return rval; \ @@ -384,14 +380,13 @@ static PyObject* t_output_helper(PyObject* target, PyObject* o) { } -// TODO: unicode fix #define PYCALLBACK__INTSTRING(PCLASS, CBNAME) \ void CBNAME(int a, const wxString& c) { \ bool found; \ - wxPyBeginBlockThreads(); \ + wxPyBeginBlockThreads(); \ if ((found = wxPyCBH_findCallback(m_myInst, #CBNAME))) \ - wxPyCBH_callCallback(m_myInst, Py_BuildValue("(is)", a,c.c_str())); \ - wxPyEndBlockThreads(); \ + wxPyCBH_callCallback(m_myInst, Py_BuildValue("(iO)", a, wx2PyString(c))); \ + wxPyEndBlockThreads(); \ if (! found) \ PCLASS::CBNAME(a,c); \ } \ @@ -406,10 +401,10 @@ static PyObject* t_output_helper(PyObject* target, PyObject* o) { bool CBNAME() { \ bool rval = 0; \ bool found; \ - wxPyBeginBlockThreads(); \ + wxPyBeginBlockThreads(); \ if ((found = wxPyCBH_findCallback(m_myInst, #CBNAME))) \ rval = wxPyCBH_callCallback(m_myInst, Py_BuildValue("()")); \ - wxPyEndBlockThreads(); \ + wxPyEndBlockThreads(); \ if (! found) \ rval = PCLASS::CBNAME(); \ return rval; \ @@ -423,10 +418,10 @@ static PyObject* t_output_helper(PyObject* target, PyObject* o) { #define PYCALLBACK__SIZETINT(PCLASS, CBNAME) \ void CBNAME(size_t a, int b) { \ bool found; \ - wxPyBeginBlockThreads(); \ + wxPyBeginBlockThreads(); \ if ((found = wxPyCBH_findCallback(m_myInst, #CBNAME))) \ wxPyCBH_callCallback(m_myInst, Py_BuildValue("(ii)", a,b)); \ - wxPyEndBlockThreads(); \ + wxPyEndBlockThreads(); \ if (! found) \ PCLASS::CBNAME(a,b); \ } \ @@ -440,10 +435,10 @@ static PyObject* t_output_helper(PyObject* target, PyObject* o) { #define PYCALLBACK__INTINTLONG(PCLASS, CBNAME) \ void CBNAME(int a, int b, long c) { \ bool found; \ - wxPyBeginBlockThreads(); \ + wxPyBeginBlockThreads(); \ if ((found = wxPyCBH_findCallback(m_myInst, #CBNAME))) \ wxPyCBH_callCallback(m_myInst, Py_BuildValue("(iii)", a,b,c)); \ - wxPyEndBlockThreads(); \ + wxPyEndBlockThreads(); \ if (! found) \ PCLASS::CBNAME(a,b,c); \ } \ @@ -457,10 +452,10 @@ static PyObject* t_output_helper(PyObject* target, PyObject* o) { #define PYCALLBACK__INTINTDOUBLE(PCLASS, CBNAME) \ void CBNAME(int a, int b, double c) { \ bool found; \ - wxPyBeginBlockThreads(); \ + wxPyBeginBlockThreads(); \ if ((found = wxPyCBH_findCallback(m_myInst, #CBNAME))) \ wxPyCBH_callCallback(m_myInst, Py_BuildValue("(iif)", a,b,c)); \ - wxPyEndBlockThreads(); \ + wxPyEndBlockThreads(); \ if (! found) \ PCLASS::CBNAME(a,b,c); \ } \ @@ -473,10 +468,10 @@ static PyObject* t_output_helper(PyObject* target, PyObject* o) { #define PYCALLBACK__INTINTBOOL(PCLASS, CBNAME) \ void CBNAME(int a, int b, bool c) { \ bool found; \ - wxPyBeginBlockThreads(); \ + wxPyBeginBlockThreads(); \ if ((found = wxPyCBH_findCallback(m_myInst, #CBNAME))) \ wxPyCBH_callCallback(m_myInst, Py_BuildValue("(iii)", a,b,c)); \ - wxPyEndBlockThreads(); \ + wxPyEndBlockThreads(); \ if (! found) \ PCLASS::CBNAME(a,b,c); \ } \ @@ -524,8 +519,23 @@ public: wxPyConstructObject((void*)&dc, "wxDC", 0), row, col)); if (ro) { - if (!SWIG_GetPtrObj(ro, (void **)&ptr, "_wxSize_p")) + const char* errmsg = "GetBestSize should return a 2-tuple of integers or a wxSize object."; + if (!SWIG_GetPtrObj(ro, (void **)&ptr, "_wxSize_p")) { rval = *ptr; + } + else if (PySequence_Check(ro) && PyObject_Length(ro) == 2) { + PyObject* o1 = PySequence_GetItem(ro, 0); + PyObject* o2 = PySequence_GetItem(ro, 1); + if (PyNumber_Check(o1) && PyNumber_Check(o2)) + rval = wxSize(PyInt_AsLong(o1), PyInt_AsLong(o2)); + else + PyErr_SetString(PyExc_TypeError, errmsg); + Py_DECREF(o1); + Py_DECREF(o2); + } + else { + PyErr_SetString(PyExc_TypeError, errmsg); + } Py_DECREF(ro); } } @@ -724,15 +734,8 @@ public: PyObject* ro; ro = wxPyCBH_callCallbackObj(m_myInst, Py_BuildValue("(ii)",row,col)); if (ro) { -#if wxUSE_UNICODE - PyObject* str = PyObject_Unicode(ro); - rval = PyUnicode_AS_UNICODE(str); -#else - PyObject* str = PyObject_Str(ro); - rval = PyString_AsString(str); -#endif + rval = Py2wxString(ro); Py_DECREF(ro); - Py_DECREF(str); } } wxPyEndBlockThreads(); @@ -742,11 +745,7 @@ public: void SetValue(int row, int col, const wxString& val) { wxPyBeginBlockThreads(); if (wxPyCBH_findCallback(m_myInst, "SetValue")) { -#if wxUSE_UNICODE - wxPyCBH_callCallback(m_myInst, Py_BuildValue("(iiu)",row,col,val.c_str())); -#else - wxPyCBH_callCallback(m_myInst, Py_BuildValue("(iis)",row,col,val.c_str())); -#endif + wxPyCBH_callCallback(m_myInst, Py_BuildValue("(iiO)",row,col,wx2PyString(val))); } wxPyEndBlockThreads(); } @@ -7040,17 +7039,18 @@ static PyObject *_wrap_new_wxGrid(PyObject *self, PyObject *args, PyObject *kwar wxPoint * _arg2 = (wxPoint *) &wxDefaultPosition; wxSize * _arg3 = (wxSize *) &wxDefaultSize; long _arg4 = (long ) wxWANTS_CHARS; - char * _arg5 = (char *) wxPanelNameStr; + wxString * _arg5 = (wxString *) &wxPyPanelNameStr; PyObject * _argo0 = 0; wxPoint temp; PyObject * _obj2 = 0; wxSize temp0; PyObject * _obj3 = 0; + PyObject * _obj5 = 0; char *_kwnames[] = { "parent","id","pos","size","style","name", NULL }; char _ptemp[128]; self = self; - if(!PyArg_ParseTupleAndKeywords(args,kwargs,"Oi|OOls:new_wxGrid",_kwnames,&_argo0,&_arg1,&_obj2,&_obj3,&_arg4,&_arg5)) + if(!PyArg_ParseTupleAndKeywords(args,kwargs,"Oi|OOlO:new_wxGrid",_kwnames,&_argo0,&_arg1,&_obj2,&_obj3,&_arg4,&_obj5)) return NULL; if (_argo0) { if (_argo0 == Py_None) { _arg0 = NULL; } @@ -7070,10 +7070,16 @@ static PyObject *_wrap_new_wxGrid(PyObject *self, PyObject *args, PyObject *kwar _arg3 = &temp0; if (! wxSize_helper(_obj3, &_arg3)) return NULL; +} + if (_obj5) +{ + _arg5 = wxString_in_helper(_obj5); + if (_arg5 == NULL) + return NULL; } { PyThreadState* __tstate = wxPyBeginAllowThreads(); - _result = (wxGrid *)new_wxGrid(_arg0,_arg1,*_arg2,*_arg3,_arg4,_arg5); + _result = (wxGrid *)new_wxGrid(_arg0,_arg1,*_arg2,*_arg3,_arg4,*_arg5); wxPyEndAllowThreads(__tstate); if (PyErr_Occurred()) return NULL; @@ -7084,6 +7090,10 @@ static PyObject *_wrap_new_wxGrid(PyObject *self, PyObject *args, PyObject *kwar Py_INCREF(Py_None); _resultobj = Py_None; } +{ + if (_obj5) + delete _arg5; +} return _resultobj; }