]> git.saurik.com Git - wxWidgets.git/blobdiff - wxPython/src/helpers.cpp
Added default values for some parameters
[wxWidgets.git] / wxPython / src / helpers.cpp
index ae0ace5dc59b35e7cc4fbd5244508630e1dab85b..ef5fb35e32d9c09e9e1e3dfa56d70bcb9612edfc 100644 (file)
@@ -49,7 +49,7 @@
 
 //----------------------------------------------------------------------
 
-#if PYTHON_API_VERSION <= 1007 && wxUSE_UNICODE
+#if PYTHON_API_VERSION < 1009 && wxUSE_UNICODE
 #error Python must support Unicode to use wxWindows Unicode
 #endif
 
@@ -78,6 +78,8 @@ wxPyThreadStateArray* wxPyTStates = NULL;
 wxMutex*              wxPyTMutex = NULL;
 #endif
 
+#define DEFAULTENCODING_SIZE 64
+static char wxPyDefaultEncoding[DEFAULTENCODING_SIZE] = "ascii";
 
 static PyObject* wxPython_dict = NULL;
 static PyObject* wxPyAssertionError = NULL;
@@ -421,10 +423,10 @@ void wxPyApp::_BootstrapApp()
             goto error;
         }
 
-        // On wxGTK the locale will be changed to match the system settings, but
-        // Python needs to have LC_NUMERIC set to "C" in order for the floating
-        // point conversions and such to work right.
-#if defined(__WXGTK__) && PYTHON_API_VERSION <= 1012
+        // On wxGTK the locale will be changed to match the system settings,
+        // but Python before 2.4 needs to have LC_NUMERIC set to "C" in order
+        // for the floating point conversions and such to work right.
+#if defined(__WXGTK__) && PY_VERSION_HEX < 0x02040000
         setlocale(LC_NUMERIC, "C");
 #endif
     
@@ -1184,7 +1186,8 @@ bool wxPyInputStream::eof() {
 }
 
 wxPyInputStream::~wxPyInputStream() {
-    /* do nothing */
+    if (m_wxis)
+        delete m_wxis;
 }
 
 
@@ -1429,14 +1432,20 @@ size_t wxPyCBInputStream::OnSysWrite(const void *buffer, size_t bufsize) {
     return 0;
 }
 
+
 wxFileOffset wxPyCBInputStream::OnSysSeek(wxFileOffset off, wxSeekMode mode) {
     bool blocked = wxPyBeginBlockThreads();
-#if defined( __WINCE__) || defined(_LARGE_FILES) || wxHAS_HUGE_FILES
-    // wxFileOffset is a 64-bit value...
-    PyObject* arglist = Py_BuildValue("(Li)", off, mode);
-#else
-    PyObject* arglist = Py_BuildValue("(ii)", off, mode);
-#endif
+    PyObject* arglist = PyTuple_New(2);
+
+    if (sizeof(wxFileOffset) > sizeof(long))
+        // wxFileOffset is a 64-bit value...
+        PyTuple_SET_ITEM(arglist, 0, PyLong_FromLongLong(off));
+    else
+        PyTuple_SET_ITEM(arglist, 0, PyInt_FromLong(off));
+
+    PyTuple_SET_ITEM(arglist, 1, PyInt_FromLong(mode));
+
+    
     PyObject* result = PyEval_CallObject(m_seek, arglist);
     Py_DECREF(arglist);
     Py_XDECREF(result);
@@ -1452,11 +1461,9 @@ wxFileOffset wxPyCBInputStream::OnSysTell() const {
     Py_DECREF(arglist);
     wxFileOffset o = 0;
     if (result != NULL) {
-#if defined( __WINCE__) || defined(_LARGE_FILES) || wxHAS_HUGE_FILES
         if (PyLong_Check(result))
             o = PyLong_AsLongLong(result);
         else
-#endif
             o = PyInt_AsLong(result);
         Py_DECREF(result);
     };
@@ -1898,7 +1905,7 @@ wxString* wxString_in_helper(PyObject* source) {
 #if wxUSE_UNICODE
     PyObject* uni = source;
     if (PyString_Check(source)) {
-        uni = PyUnicode_FromObject(source);
+        uni = PyUnicode_FromEncodedObject(source, wxPyDefaultEncoding, "strict");
         if (PyErr_Occurred()) return NULL;
     }
     target = new wxString();
@@ -1913,7 +1920,11 @@ wxString* wxString_in_helper(PyObject* source) {
 #else
     // Convert to a string object if it isn't already, then to wxString
     PyObject* str = source;
-    if (!PyString_Check(source)) {
+    if (PyUnicode_Check(source)) {
+        str = PyUnicode_AsEncodedString(source, wxPyDefaultEncoding, "strict");
+        if (PyErr_Occurred()) return NULL;
+    }    
+    else if (!PyString_Check(source)) {
         str = PyObject_Str(source);
         if (PyErr_Occurred()) return NULL;
     }
@@ -1938,7 +1949,7 @@ wxString Py2wxString(PyObject* source)
     // Convert to a unicode object, if not already, then to a wxString
     PyObject* uni = source;
     if (!PyUnicode_Check(source)) {
-        uni = PyUnicode_FromObject(source);
+        uni = PyUnicode_FromEncodedObject(source, wxPyDefaultEncoding, "strict");
         if (PyErr_Occurred()) return wxEmptyString;  // TODO:  should we PyErr_Clear?
     }    
     size_t len = PyUnicode_GET_SIZE(uni);
@@ -1952,7 +1963,11 @@ wxString Py2wxString(PyObject* source)
 #else
     // Convert to a string object if it isn't already, then to wxString
     PyObject* str = source;
-    if (!PyString_Check(source)) {
+    if (PyUnicode_Check(source)) {
+        str = PyUnicode_AsEncodedString(source, wxPyDefaultEncoding, "strict");
+        if (PyErr_Occurred()) return wxEmptyString;    // TODO:  should we PyErr_Clear?
+    }    
+    else if (!PyString_Check(source)) {
         str = PyObject_Str(source);
         if (PyErr_Occurred()) return wxEmptyString;    // TODO:  should we PyErr_Clear?
     }
@@ -1981,6 +1996,17 @@ PyObject* wx2PyString(const wxString& src)
 }
 
 
+
+void wxSetDefaultPyEncoding(const char* encoding)
+{
+    strncpy(wxPyDefaultEncoding, encoding, DEFAULTENCODING_SIZE);
+}
+
+const char* wxGetDefaultPyEncoding()
+{
+    return wxPyDefaultEncoding;
+}
+
 //----------------------------------------------------------------------