X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/d559219f4016139d6c52d3b386903821a99c54d2..37f214d588b02079a3ddf64c2e46585ca1657c1b:/utils/wxPython/src/helpers.cpp diff --git a/utils/wxPython/src/helpers.cpp b/utils/wxPython/src/helpers.cpp index c74c75de36..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,53 +473,35 @@ 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); - } -} +//--------------------------------------------------------------------------- +//--------------------------------------------------------------------------- +// Convert a wxList to a Python List +PyObject* wxPy_ConvertList(wxListBase* list, char* className) { + PyObject* pyList; + PyObject* pyObj; + wxObject* wxObj; + wxNode* node = list->First(); -wxPyEvent::~wxPyEvent() { bool doSave = wxPyRestoreThread(); - if (m_userData != Py_None) { - Py_DECREF(m_userData); - m_userData = Py_None; + pyList = PyList_New(0); + while (node) { + wxObj = node->Data(); + pyObj = wxPyConstructObject(wxObj, className); + PyList_Append(pyList, pyObj); + node = node->Next(); } wxPySaveThread(doSave); + return pyList; } - -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; -} - -//---------------------------------------------------------------------- //---------------------------------------------------------------------- // Some helper functions for typemaps in my_typemaps.i, so they won't be -// imcluded in every file... +// 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; @@ -522,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; @@ -545,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; @@ -568,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; @@ -592,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; @@ -629,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; @@ -642,10 +644,9 @@ HELPEREXPORT wxBitmap** wxBitmap_LIST_helper(PyObject* source) { } for (int x=0; x