]> git.saurik.com Git - wxWidgets.git/blobdiff - wxPython/src/_streams.i
fixes to wint_t and wchar_t handling in unichar.h (fixes FreeBSD compilation and...
[wxWidgets.git] / wxPython / src / _streams.i
index db75ebb98de77ecfa1370475ba12eff4d9438234..d5ef145ae1ba1f09f0bef5c19c996c15157fd456 100644 (file)
     }
 }
 
-
-
 %typemap(out) wxInputStream* {
     wxPyInputStream * _ptr = NULL;
-
-    if ($1) {
+    if ($1)
         _ptr = new wxPyInputStream($1);
-    }
     $result = wxPyConstructObject(_ptr, wxT("wxPyInputStream"), $owner);
 }
 
 
+//---------------------------------------------------------------------------
+// Typemaps for wxOutputStream.  We only need in by reference and out by
+// pointer in this one.
+
+
+%typemap(in) wxOutputStream&  (wxPyOutputStream* temp, bool created) {
+    if (wxPyConvertSwigPtr($input, (void **)&temp, wxT("wxPyOutputStream"))) {
+        $1 = temp->m_wxos;
+        created = false;
+    } else {
+        PyErr_Clear();  // clear the failure of the wxPyConvert above
+        $1 = wxPyCBOutputStream_create($input, false);
+        if ($1 == NULL) {
+            PyErr_SetString(PyExc_TypeError, "Expected wx.OutputStream or Python file-like object.");
+            SWIG_fail;
+        }
+        created = true;
+    }
+}
+%typemap(freearg) wxOutputStream& { if (created$argnum) delete $1; }
+
+
+%typemap(out) wxOutputStream* {
+    wxPyOutputStream * _ptr = NULL;
+    if ($1)
+        _ptr = new wxPyOutputStream($1);
+    $result = wxPyConstructObject(_ptr, wxT("wxPyOutputStream"), $owner);
+}
+
 //---------------------------------------------------------------------------
 
 enum wxSeekMode
@@ -107,14 +132,6 @@ public:
     void seek(int offset, int whence=0);
     int tell();
 
-    /*
-      bool isatty();
-      int fileno();
-      void truncate(int size=-1);
-      void write(wxString data);
-      void writelines(wxStringPtrList);
-    */
-
     char Peek();
     char GetC();
     size_t LastRead();
@@ -128,42 +145,41 @@ public:
 
 
 
-// TODO:  make a more fully implemented file interface...
-class wxOutputStream {
-public:
-    /*
-      void close();
-      void flush();
-      wxString* read(int size=-1);
-      wxString* readline(int size=-1);
-      wxStringPtrList* readlines(int sizehint=-1);
-      void seek(int offset, int whence=0);
-      int tell();
-      bool isatty();
-      int fileno();
-      void truncate(int size=-1);
-      void write(wxString data);
-      void writelines(wxStringPtrList);
-    */
 
+%rename(OutputStream) wxPyOutputStream;
+class wxPyOutputStream
+{
+public:
     %extend {
-        void write(PyObject* obj) {
-            // We use only strings for the streams, not unicode
-            PyObject* str = PyObject_Str(obj);
-            if (! str) {
-                PyErr_SetString(PyExc_TypeError, "Unable to convert to string");
-                return;
-            }
-            self->Write(PyString_AS_STRING(str),
-                        PyString_GET_SIZE(str));
-            Py_DECREF(str);
+        wxPyOutputStream(PyObject* p) {
+            wxOutputStream* wxis = wxPyCBOutputStream::create(p);
+            if (wxis)
+                return new wxPyOutputStream(wxis);
+            else
+                return NULL;
         }
     }
+    ~wxPyOutputStream();
+
+    void close();
+    void flush();
+    bool eof();
+    void seek(int offset, int whence=0);
+    int tell();
+
+    void write(PyObject* data);
+    //void writelines(wxStringArray& arr);
+
+    void PutC(char c);
+    size_t LastWrite();
+    unsigned long SeekO(unsigned long pos, wxSeekMode mode = wxFromStart);
+    unsigned long TellO();
 };
 
 
 //---------------------------------------------------------------------------
 %init %{
     wxPyPtrTypeMap_Add("wxInputStream", "wxPyInputStream");
+    wxPyPtrTypeMap_Add("wxOutputStream", "wxPyOutputStream");
 %}
 //---------------------------------------------------------------------------