X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/e166644c534521f311e4f010b0829c7c9951e7a3..37f214d588b02079a3ddf64c2e46585ca1657c1b:/utils/wxPython/src/helpers.cpp diff --git a/utils/wxPython/src/helpers.cpp b/utils/wxPython/src/helpers.cpp index 19acec1d3b..df05338a93 100644 --- a/utils/wxPython/src/helpers.cpp +++ b/utils/wxPython/src/helpers.cpp @@ -141,7 +141,11 @@ void __wxPreStart() argv[argc] = NULL; gtk_set_locale(); +#if wxUSE_WCHAR_T if (!wxOKlibc()) wxConvCurrent = &wxConvLocal; +#else + if (!wxOKlibc()) wxConvCurrent = (wxMBConv*) NULL; +#endif gtk_init( &argc, &argv ); wxSetDetectableAutoRepeat( TRUE ); delete [] argv; @@ -323,11 +327,18 @@ HELPEREXPORT void wxPySaveThread(bool doSave) { //--------------------------------------------------------------------------- +IMPLEMENT_ABSTRACT_CLASS(wxPyCallback, wxObject); + wxPyCallback::wxPyCallback(PyObject* func) { m_func = func; Py_INCREF(m_func); } +wxPyCallback::wxPyCallback(const wxPyCallback& other) { + m_func = other.m_func; + Py_INCREF(m_func); +} + wxPyCallback::~wxPyCallback() { bool doSave = wxPyRestoreThread(); Py_DECREF(m_func); @@ -377,9 +388,18 @@ wxPyCallbackHelper::~wxPyCallbackHelper() { wxPySaveThread(doSave); } -void wxPyCallbackHelper::setSelf(PyObject* self) { +wxPyCallbackHelper::wxPyCallbackHelper(const wxPyCallbackHelper& other) { + m_lastFound = NULL; + m_self = other.m_self; + if (m_self) + Py_INCREF(m_self); +} + + +void wxPyCallbackHelper::setSelf(PyObject* self, int incref) { m_self = self; - Py_INCREF(m_self); + if (incref) + Py_INCREF(m_self); } @@ -453,47 +473,8 @@ void wxPyTimer::Notify() { } -//---------------------------------------------------------------------- - -IMPLEMENT_DYNAMIC_CLASS(wxPyEvent, wxCommandEvent) - -wxPyEvent::wxPyEvent(wxEventType commandType, PyObject* userData) - : wxCommandEvent(commandType), m_userData(Py_None) -{ - m_userData = userData; - if (m_userData != Py_None) { - Py_INCREF(m_userData); - } -} - -wxPyEvent::~wxPyEvent() { - bool doSave = wxPyRestoreThread(); - if (m_userData != Py_None) { - Py_DECREF(m_userData); - m_userData = Py_None; - } - wxPySaveThread(doSave); -} - - -void wxPyEvent::SetUserData(PyObject* userData) { - if (m_userData != Py_None) { - Py_DECREF(m_userData); - m_userData = Py_None; - } - m_userData = userData; - if (m_userData != Py_None) { - Py_INCREF(m_userData); - } -} - - -PyObject* wxPyEvent::GetUserData() { - return m_userData; -} - -//---------------------------------------------------------------------- +//--------------------------------------------------------------------------- //--------------------------------------------------------------------------- // Convert a wxList to a Python List @@ -520,7 +501,7 @@ PyObject* wxPy_ConvertList(wxListBase* list, char* className) { // included in every file... -HELPEREXPORT byte* byte_LIST_helper(PyObject* source) { +byte* byte_LIST_helper(PyObject* source) { if (!PyList_Check(source)) { PyErr_SetString(PyExc_TypeError, "Expected a list object."); return NULL; @@ -543,7 +524,7 @@ HELPEREXPORT byte* byte_LIST_helper(PyObject* source) { } -HELPEREXPORT int* int_LIST_helper(PyObject* source) { +int* int_LIST_helper(PyObject* source) { if (!PyList_Check(source)) { PyErr_SetString(PyExc_TypeError, "Expected a list object."); return NULL; @@ -566,7 +547,7 @@ HELPEREXPORT int* int_LIST_helper(PyObject* source) { } -HELPEREXPORT long* long_LIST_helper(PyObject* source) { +long* long_LIST_helper(PyObject* source) { if (!PyList_Check(source)) { PyErr_SetString(PyExc_TypeError, "Expected a list object."); return NULL; @@ -589,7 +570,7 @@ HELPEREXPORT long* long_LIST_helper(PyObject* source) { } -HELPEREXPORT char** string_LIST_helper(PyObject* source) { +char** string_LIST_helper(PyObject* source) { if (!PyList_Check(source)) { PyErr_SetString(PyExc_TypeError, "Expected a list object."); return NULL; @@ -613,7 +594,7 @@ HELPEREXPORT char** string_LIST_helper(PyObject* source) { -HELPEREXPORT wxPoint* wxPoint_LIST_helper(PyObject* source) { +wxPoint* wxPoint_LIST_helper(PyObject* source) { if (!PyList_Check(source)) { PyErr_SetString(PyExc_TypeError, "Expected a list object."); return NULL; @@ -650,7 +631,7 @@ HELPEREXPORT wxPoint* wxPoint_LIST_helper(PyObject* source) { } -HELPEREXPORT wxBitmap** wxBitmap_LIST_helper(PyObject* source) { +wxBitmap** wxBitmap_LIST_helper(PyObject* source) { if (!PyList_Check(source)) { PyErr_SetString(PyExc_TypeError, "Expected a list object."); return NULL; @@ -681,7 +662,7 @@ HELPEREXPORT wxBitmap** wxBitmap_LIST_helper(PyObject* source) { -HELPEREXPORT wxString* wxString_LIST_helper(PyObject* source) { +wxString* wxString_LIST_helper(PyObject* source) { if (!PyList_Check(source)) { PyErr_SetString(PyExc_TypeError, "Expected a list object."); return NULL; @@ -704,7 +685,7 @@ HELPEREXPORT wxString* wxString_LIST_helper(PyObject* source) { } -HELPEREXPORT wxAcceleratorEntry* wxAcceleratorEntry_LIST_helper(PyObject* source) { +wxAcceleratorEntry* wxAcceleratorEntry_LIST_helper(PyObject* source) { if (!PyList_Check(source)) { PyErr_SetString(PyExc_TypeError, "Expected a list object."); return NULL; @@ -746,6 +727,108 @@ HELPEREXPORT wxAcceleratorEntry* wxAcceleratorEntry_LIST_helper(PyObject* source //---------------------------------------------------------------------- +bool wxSize_helper(PyObject* source, wxSize** obj) { + + // If source is an object instance then it may already be the right type + if (PyInstance_Check(source)) { + wxSize* ptr; + if (SWIG_GetPtrObj(source, (void **)&ptr, "_wxSize_p")) + goto error; + *obj = ptr; + return TRUE; + } + // otherwise a 2-tuple of integers is expected + else if (PySequence_Check(source) && PyObject_Length(source) == 2) { + PyObject* o1 = PySequence_GetItem(source, 0); + PyObject* o2 = PySequence_GetItem(source, 1); + **obj = wxSize(PyInt_AsLong(o1), PyInt_AsLong(o2)); + return TRUE; + } + + error: + PyErr_SetString(PyExc_TypeError, "Expected a 2-tuple of integers or a wxSize object."); + return FALSE; +} + +bool wxPoint_helper(PyObject* source, wxPoint** obj) { + + // If source is an object instance then it may already be the right type + if (PyInstance_Check(source)) { + wxPoint* ptr; + if (SWIG_GetPtrObj(source, (void **)&ptr, "_wxPoint_p")) + goto error; + *obj = ptr; + return TRUE; + } + // otherwise a 2-tuple of integers is expected + else if (PySequence_Check(source) && PyObject_Length(source) == 2) { + PyObject* o1 = PySequence_GetItem(source, 0); + PyObject* o2 = PySequence_GetItem(source, 1); + **obj = wxPoint(PyInt_AsLong(o1), PyInt_AsLong(o2)); + return TRUE; + } + + error: + PyErr_SetString(PyExc_TypeError, "Expected a 2-tuple of integers or a wxPoint object."); + return FALSE; +} + + + +bool wxRealPoint_helper(PyObject* source, wxRealPoint** obj) { + + // If source is an object instance then it may already be the right type + if (PyInstance_Check(source)) { + wxRealPoint* ptr; + if (SWIG_GetPtrObj(source, (void **)&ptr, "_wxRealPoint_p")) + goto error; + *obj = ptr; + return TRUE; + } + // otherwise a 2-tuple of floats is expected + else if (PySequence_Check(source) && PyObject_Length(source) == 2) { + PyObject* o1 = PySequence_GetItem(source, 0); + PyObject* o2 = PySequence_GetItem(source, 1); + **obj = wxRealPoint(PyFloat_AsDouble(o1), PyFloat_AsDouble(o2)); + return TRUE; + } + + error: + PyErr_SetString(PyExc_TypeError, "Expected a 2-tuple of floats or a wxRealPoint object."); + return FALSE; +} + + + + +bool wxRect_helper(PyObject* source, wxRect** obj) { + + // If source is an object instance then it may already be the right type + if (PyInstance_Check(source)) { + wxRect* ptr; + if (SWIG_GetPtrObj(source, (void **)&ptr, "_wxRect_p")) + goto error; + *obj = ptr; + return TRUE; + } + // otherwise a 4-tuple of integers is expected + else if (PySequence_Check(source) && PyObject_Length(source) == 4) { + PyObject* o1 = PySequence_GetItem(source, 0); + PyObject* o2 = PySequence_GetItem(source, 1); + PyObject* o3 = PySequence_GetItem(source, 2); + PyObject* o4 = PySequence_GetItem(source, 3); + **obj = wxRect(PyInt_AsLong(o1), PyInt_AsLong(o2), + PyInt_AsLong(o3), PyInt_AsLong(o4)); + return TRUE; + } + + error: + PyErr_SetString(PyExc_TypeError, "Expected a 4-tuple of integers or a wxRect object."); + return FALSE; +} + + + //---------------------------------------------------------------------- //---------------------------------------------------------------------- //----------------------------------------------------------------------