]> git.saurik.com Git - wxWidgets.git/blame_incremental - wxPython/src/_streams.i
fixed deadlock when calling wxPostEvent() from worker thread
[wxWidgets.git] / wxPython / src / _streams.i
... / ...
CommitLineData
1/////////////////////////////////////////////////////////////////////////////
2// Name: _streams.i
3// Purpose: SWIG typemaps and wrappers for wxInputStream
4//
5// Author: Robin Dunn
6//
7// Created: 25-Sept-2000
8// RCS-ID: $Id$
9// Copyright: (c) 2003 by Total Control Software
10// Licence: wxWindows license
11/////////////////////////////////////////////////////////////////////////////
12
13// Not a %module
14
15
16//---------------------------------------------------------------------------
17
18%{
19#include "wx/wxPython/pyistream.h"
20%}
21
22//---------------------------------------------------------------------------
23%newgroup
24
25
26// Typemaps for wxInputStream
27//
28// We assume that input params taking a wxInputStream& will *not* take
29// ownership of the stream and so we manage it in the typemaps. On the other
30// hand, when a paramter expects a wxInputStream* then it does take ownership
31// (such as wxFSFile) and so the typemap will make a copy of the stream object
32// to give to it.
33
34%typemap(in) wxInputStream& (wxPyInputStream* temp, bool created) {
35 if (wxPyConvertSwigPtr($input, (void **)&temp, wxT("wxPyInputStream"))) {
36 $1 = temp->m_wxis;
37 created = false;
38 } else {
39 PyErr_Clear(); // clear the failure of the wxPyConvert above
40 $1 = wxPyCBInputStream_create($input, false);
41 if ($1 == NULL) {
42 PyErr_SetString(PyExc_TypeError, "Expected wx.InputStream or Python file-like object.");
43 SWIG_fail;
44 }
45 created = true;
46 }
47}
48%typemap(freearg) wxInputStream& { if (created$argnum) delete $1; }
49
50
51%typemap(in) wxInputStream* (wxPyInputStream* temp) {
52 if (wxPyConvertSwigPtr($input, (void **)&temp, wxT("wxPyInputStream"))) {
53 $1 = wxPyCBInputStream_copy((wxPyCBInputStream*)temp->m_wxis);
54 } else {
55 PyErr_Clear(); // clear the failure of the wxPyConvert above
56 $1 = wxPyCBInputStream_create($input, true);
57 if ($1 == NULL) {
58 PyErr_SetString(PyExc_TypeError, "Expected wx.InputStream or Python file-like object.");
59 SWIG_fail;
60 }
61 }
62}
63
64
65
66%typemap(out) wxInputStream* {
67 wxPyInputStream * _ptr = NULL;
68
69 if ($1) {
70 _ptr = new wxPyInputStream($1);
71 }
72 $result = wxPyConstructObject(_ptr, wxT("wxPyInputStream"), $owner);
73}
74
75
76//---------------------------------------------------------------------------
77
78enum wxSeekMode
79{
80 wxFromStart,
81 wxFromCurrent,
82 wxFromEnd
83};
84
85
86%rename(InputStream) wxPyInputStream;
87class wxPyInputStream
88{
89public:
90 %extend {
91 wxPyInputStream(PyObject* p) {
92 wxInputStream* wxis = wxPyCBInputStream::create(p);
93 if (wxis)
94 return new wxPyInputStream(wxis);
95 else
96 return NULL;
97 }
98 }
99 ~wxPyInputStream();
100
101 void close();
102 void flush();
103 bool eof();
104 PyObject* read(int size=-1);
105 PyObject* readline(int size=-1);
106 PyObject* readlines(int sizehint=-1);
107 void seek(int offset, int whence=0);
108 int tell();
109
110 /*
111 bool isatty();
112 int fileno();
113 void truncate(int size=-1);
114 void write(wxString data);
115 void writelines(wxStringPtrList);
116 */
117
118 char Peek();
119 char GetC();
120 size_t LastRead();
121 bool CanRead();
122 bool Eof();
123 bool Ungetch(char c);
124
125 long SeekI(long pos, wxSeekMode mode = wxFromStart);
126 long TellI();
127};
128
129
130
131// TODO: make a more fully implemented file interface...
132class wxOutputStream {
133public:
134 /*
135 void close();
136 void flush();
137 wxString* read(int size=-1);
138 wxString* readline(int size=-1);
139 wxStringPtrList* readlines(int sizehint=-1);
140 void seek(int offset, int whence=0);
141 int tell();
142 bool isatty();
143 int fileno();
144 void truncate(int size=-1);
145 void write(wxString data);
146 void writelines(wxStringPtrList);
147 */
148
149 %extend {
150 void write(PyObject* obj) {
151 // We use only strings for the streams, not unicode
152 PyObject* str = PyObject_Str(obj);
153 if (! str) {
154 PyErr_SetString(PyExc_TypeError, "Unable to convert to string");
155 return;
156 }
157 self->Write(PyString_AS_STRING(str),
158 PyString_GET_SIZE(str));
159 Py_DECREF(str);
160 }
161 }
162 size_t LastWrite() const;
163};
164
165
166//---------------------------------------------------------------------------
167%init %{
168 wxPyPtrTypeMap_Add("wxInputStream", "wxPyInputStream");
169%}
170//---------------------------------------------------------------------------