X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/c2e6d97098e4483b63d0bb3f986dd38311cc9588..e5ce86d84f4c697621182b63ce6c0a96fea2df70:/wxPython/src/my_typemaps.i diff --git a/wxPython/src/my_typemaps.i b/wxPython/src/my_typemaps.i index 1a7634c1f3..d9b078bc4e 100644 --- a/wxPython/src/my_typemaps.i +++ b/wxPython/src/my_typemaps.i @@ -90,7 +90,31 @@ $1 = PyString_Check($input) || PyUnicode_Check($input); } - +//--------------------------------------------------------------------------- +// wxMemoryBuffer (needed for wxSTC) + +%typemap(in) wxMemoryBuffer& (bool temp=False) { + if (!PyString_Check($input)) { + PyErr_SetString(PyExc_TypeError, "String buffer expected"); + SWIG_fail; + } + char* str = PyString_AS_STRING($input); + int len = PyString_GET_SIZE($input); + $1 = new wxMemoryBuffer(len); + temp = True; + memcpy($1->GetData(), str, len); + $1->SetDataLen(len); +} + +%typemap(freearg) wxMemoryBuffer& { + if (temp$argnum) delete $1; +} + +%typemap(out) wxMemoryBuffer { + $result = PyString_FromStringAndSize((char*)$1.GetData(), $1.GetDataLen()); +} + + //--------------------------------------------------------------------------- // Typemaps to convert Python sequence objects (tuples, etc.) to @@ -174,6 +198,7 @@ %#else PyObject* str = PyObject_Str(item); %#endif + if (PyErr_Occurred()) SWIG_fail; $1->Add(Py2wxString(str)); Py_DECREF(item); Py_DECREF(str); @@ -245,7 +270,80 @@ //--------------------------------------------------------------------------- -%typemap(out) bool "$result = $1 ? Py_True : Py_False; Py_INCREF($result);" +%typemap(out) bool { + $result = $1 ? Py_True : Py_False; Py_INCREF($result); +} + + +// These fragments are iserted in modules that need to convert PyObjects to +// integer values, my versions allow any numeric type to be used, as long as +// it can be converted to a PyInt. (Specifically, I allow floats where the +// default SWIG_AsLong would raise an obsucre exception from within +// PyLong_AsLong.) + +%fragment("SWIG_AsLong","header") %{ +SWIGSTATICINLINE(long) +SWIG_AsLong(PyObject * obj) +{ + if (PyNumber_Check(obj)) + return PyInt_AsLong(obj); + else { + PyObject* errmsg = PyString_FromFormat("Expected number, got %s", + obj->ob_type->tp_name); + PyErr_SetObject(PyExc_TypeError, errmsg); + Py_DECREF(errmsg); + return 0; + } +} +%} + +%fragment("SWIG_AsUnsignedLong","header", fragment="SWIG_AsLong") %{ +SWIGSTATICINLINE(unsigned long) +SWIG_AsUnsignedLong(PyObject * obj) +{ + if (PyLong_Check(obj)) { + return PyLong_AsUnsignedLong(obj); + } else { + long i = SWIG_AsLong(obj); + if ( !PyErr_Occurred() && (i < 0)) { + PyErr_SetString(PyExc_TypeError, "negative value received for unsigned type"); + } + return i; + } +} +%} + + +%fragment("SWIG_AsDouble","header") %{ +SWIGSTATICINLINE(double) +SWIG_AsDouble(PyObject *obj) +{ + if (PyNumber_Check(obj)) + return PyFloat_AsDouble(obj); + else { + PyObject* errmsg = PyString_FromFormat("Expected number, got %s", + obj->ob_type->tp_name); + PyErr_SetObject(PyExc_TypeError, errmsg); + Py_DECREF(errmsg); + return 0; + } +} +%} + + +//--------------------------------------------------------------------------- +// Typemap for when GDI objects are returned by reference. This will cause a +// copy to be made instead of returning a reference to the same instance. The +// GDI object's internal refcounting scheme will do a copy-on-write of the +// internal data as needed. + +// These too? +//, wxRegion&, wxPalette& + +%typemap(out) wxBrush&, wxPen&, wxFont&, wxBitmap&, wxIcon&, wxCursor& { + $*1_ltype* resultptr = new $*1_ltype(*$1); + $result = SWIG_NewPointerObj((void*)(resultptr), $1_descriptor, 1); +} //--------------------------------------------------------------------------- @@ -294,6 +392,8 @@ %typemap(out) wxHtmlWindow* { $result = wxPyMake_wxObject($1); } %typemap(out) wxPyHtmlWindow* { $result = wxPyMake_wxObject($1); } %typemap(out) wxWizardPage* { $result = wxPyMake_wxObject($1); } +%typemap(out) wxPanel* { $result = wxPyMake_wxObject($1); } +%typemap(out) wxDialog* { $result = wxPyMake_wxObject($1); } %typemap(out) wxSizer* { $result = wxPyMake_wxSizer($1); }