]> git.saurik.com Git - wxWidgets.git/blobdiff - wxPython/src/_streams.i
wx.lib.masked: Patch from Will Sadkin. Includes Unicode fixes, plus
[wxWidgets.git] / wxPython / src / _streams.i
index 225a0b901f6b335857fbc1a6e7733de333ab7b52..a918d91470599a5ee1930575d587e2c30f7bd2ca 100644 (file)
 %newgroup
 
 
-// typemaps for wxInputStream
-%typemap(in) wxInputStream*  (wxPyInputStream* temp, bool created) {
+// Typemaps for wxInputStream
+//
+// We assume that input params taking a wxInputStream& will *not* take
+// ownership of the stream and so we manage it in the typemaps. On the other
+// hand, when a paramter expects a wxInputStream* then it does take ownership
+// (such as wxFSFile) and so the typemap will make a copy of the stream object
+// to give to it.
+%typemap(in) wxInputStream&  (wxPyInputStream* temp, bool created) {
     if (wxPyConvertSwigPtr($input, (void **)&temp, wxT("wxPyInputStream"))) {
         $1 = temp->m_wxis;
         created = false;
         PyErr_Clear();  // clear the failure of the wxPyConvert above
         $1 = wxPyCBInputStream_create($input, false);
         if ($1 == NULL) {
-            PyErr_SetString(PyExc_TypeError, "Expected wxInputStream or Python file-like object.");
+            PyErr_SetString(PyExc_TypeError, "Expected wx.InputStream or Python file-like object.");
             SWIG_fail;
         }
         created = true;
     }
 }
-%typemap(freearg) wxInputStream* {
-    if (created$argnum)
-        delete $1;
-}
+%typemap(freearg) wxInputStream& { if (created$argnum) delete $1; }
+
 
+%typemap(in) wxInputStream*  (wxPyInputStream* temp) {
+    if (wxPyConvertSwigPtr($input, (void **)&temp, wxT("wxPyInputStream"))) {
+        $1 = wxPyCBInputStream_copy((wxPyCBInputStream*)temp->m_wxis);
+    } else {
+        PyErr_Clear();  // clear the failure of the wxPyConvert above
+        $1 = wxPyCBInputStream_create($input, true);
+        if ($1 == NULL) {
+            PyErr_SetString(PyExc_TypeError, "Expected wx.InputStream or Python file-like object.");
+            SWIG_fail;
+        }
+    }
+}
 
-%typemap(in) wxInputStream&       = wxInputStream*;
-%typemap(freearg) wxInputStream&  = wxInputStream*;
 
 
 %typemap(out) wxInputStream* {
@@ -54,7 +69,7 @@
     if ($1) {
         _ptr = new wxPyInputStream($1);
     }
-    $result = wxPyConstructObject(_ptr, wxT("wxPyInputStream"), true);
+    $result = wxPyConstructObject(_ptr, wxT("wxPyInputStream"), $owner);
 }
 
 
@@ -68,7 +83,9 @@ enum wxSeekMode
 };
 
 
-%name(InputStream) class wxPyInputStream {
+%rename(InputStream) wxPyInputStream;
+class wxPyInputStream
+{
 public:
     %extend {
         wxPyInputStream(PyObject* p) {
@@ -142,6 +159,7 @@ public:
             Py_DECREF(str);
         }
     }
+    size_t LastWrite() const;
 };