X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/d14a1e28567de23c586bc80017073d0c39f8d18f..30e24d9dd5a5abf1c9a375ea259eb239b122b7f7:/wxPython/src/_core_api.i?ds=sidebyside diff --git a/wxPython/src/_core_api.i b/wxPython/src/_core_api.i index a3c30fa56c..9fcad55a74 100644 --- a/wxPython/src/_core_api.i +++ b/wxPython/src/_core_api.i @@ -42,7 +42,7 @@ swig_type_info* wxPyFindSwigType(const wxChar* className) { if (! swigType) { // it wasn't in the cache, so look it up from SWIG name.Append(wxT(" *")); - swigType = SWIG_Python_TypeQuery(name.mb_str()); + swigType = SWIG_TypeQuery(name.mb_str()); // if it still wasn't found, try looking for a mapped name if (!swigType) { @@ -53,7 +53,7 @@ swig_type_info* wxPyFindSwigType(const wxChar* className) { (char*)(const char*)name.mbc_str())) != NULL) { name = wxString(PyString_AsString(item), *wxConvCurrent); name.Append(wxT(" *")); - swigType = SWIG_Python_TypeQuery(name.mb_str()); + swigType = SWIG_TypeQuery(name.mb_str()); } } if (swigType) { @@ -89,7 +89,7 @@ PyObject* wxPyConstructObject(void* ptr, // Extract a pointer to the wrapped C++ object from a Python proxy object. // Ensures that the proxy object is of the specified (or derived) type. If // not able to perform the conversion then a Python exception is set and the -// error should be handled properly in the caller. Returns true on success. +// error should be handled properly in the caller. Returns True on success. bool wxPyConvertSwigPtr(PyObject* obj, void **ptr, const wxChar* className) { @@ -99,57 +99,83 @@ bool wxPyConvertSwigPtr(PyObject* obj, void **ptr, return SWIG_Python_ConvertPtr(obj, ptr, swigType, SWIG_POINTER_EXCEPTION) != -1; } +%} + +#if SWIG_VERSION < 0x010328 +%{ // Make a SWIGified pointer object suitable for a .this attribute PyObject* wxPyMakeSwigPtr(void* ptr, const wxChar* className) { PyObject* robj = NULL; swig_type_info* swigType = wxPyFindSwigType(className); - wxCHECK_MSG(swigType != NULL, NULL, wxT("Unknown type in wxPyConvertSwigPtr")); + wxCHECK_MSG(swigType != NULL, NULL, wxT("Unknown type in wxPyMakeSwigPtr")); #ifdef SWIG_COBJECT_TYPES - robj = PyCObject_FromVoidPtrAndDesc((void *) ptr, (char *) swigType->name, NULL); + robj = PySwigObject_FromVoidPtrAndDesc((void *) ptr, (char *)swigType->name); #else { char result[1024]; - char *r = result; - *(r++) = '_'; - r = SWIG_Python_PackData(r, &ptr, sizeof(void *)); - strcpy(r, swigType->name); - robj = PyString_FromString(result); - } + robj = SWIG_PackVoidPtr(result, ptr, swigType->name, sizeof(result)) ? + PyString_FromString(result) : 0; + } #endif + return robj; +} +%} + +#else // SWIG_VERSION >= 1.3.28 +%{ +// Make a SWIGified pointer object suitable for a .this attribute +PyObject* wxPyMakeSwigPtr(void* ptr, const wxChar* className) { + + PyObject* robj = NULL; + + swig_type_info* swigType = wxPyFindSwigType(className); + wxCHECK_MSG(swigType != NULL, NULL, wxT("Unknown type in wxPyMakeSwigPtr")); + robj = PySwigObject_New(ptr, swigType, 0); return robj; } +%} +#endif + + +%{ +// Python's PyInstance_Check does not return True for instances of new-style +// classes. This should get close enough for both new and old classes but I +// should re-evaluate the need for doing instance checks... +bool wxPyInstance_Check(PyObject* obj) { + return PyObject_HasAttrString(obj, "__class__") != 0; +} +// This one checks if the object is an instance of a SWIG proxy class (it has +// a .this attribute, and the .this attribute is a PySwigObject.) +bool wxPySwigInstance_Check(PyObject* obj) { + static PyObject* this_str = NULL; + if (this_str == NULL) + this_str = PyString_FromString("this"); + + PyObject* this_attr = PyObject_GetAttr(obj, this_str); + if (this_attr) { + bool retval = (PySwigObject_Check(this_attr) != 0); + Py_DECREF(this_attr); + return retval; + } + + PyErr_Clear(); + return false; +} + // Export a C API in a struct. Other modules will be able to load this from -// the wx.core module and will then have safe access to these functions, even if -// they are located in another shared library. +// the wx._core_ module and will then have safe access to these functions, +// even if they are located in another shared library. static wxPyCoreAPI API = { - (p_SWIG_Python_TypeRegister_t)SWIG_Python_TypeRegister, - (p_SWIG_Python_TypeCheck_t)SWIG_Python_TypeCheck, - (p_SWIG_Python_TypeCast_t)SWIG_Python_TypeCast, - (p_SWIG_Python_TypeDynamicCast_t)SWIG_Python_TypeDynamicCast, - (p_SWIG_Python_TypeName_t)SWIG_Python_TypeName, - (p_SWIG_Python_TypeQuery_t)SWIG_Python_TypeQuery, - (p_SWIG_Python_TypeClientData_t)SWIG_Python_TypeClientData, - (p_SWIG_Python_newvarlink_t)SWIG_Python_newvarlink, - (p_SWIG_Python_addvarlink_t)SWIG_Python_addvarlink, - (p_SWIG_Python_ConvertPtr_t)SWIG_Python_ConvertPtr, - (p_SWIG_Python_ConvertPacked_t)SWIG_Python_ConvertPacked, - (p_SWIG_Python_PackData_t)SWIG_Python_PackData, - (p_SWIG_Python_UnpackData_t)SWIG_Python_UnpackData, - (p_SWIG_Python_NewPointerObj_t)SWIG_Python_NewPointerObj, - (p_SWIG_Python_NewPackedObj_t)SWIG_Python_NewPackedObj, - (p_SWIG_Python_InstallConstants_t)SWIG_Python_InstallConstants, - (p_SWIG_Python_MustGetPtr_t)SWIG_Python_MustGetPtr, - wxPyCheckSwigType, wxPyConstructObject, wxPyConvertSwigPtr, @@ -204,9 +230,16 @@ static wxPyCoreAPI API = { wxPyOORClientData_dtor, wxPyCBInputStream_create, - + wxPyCBInputStream_copy, + wxPyInstance_Check, - wxPySwigInstance_Check + wxPySwigInstance_Check, + + wxPyCheckForApp, + + wxArrayDouble2PyList_helper, + wxPoint2D_LIST_helper, + wxRect2D_helper, };