]> git.saurik.com Git - wxWidgets.git/blob - wxPython/src/_filesys.i
Applied second part of patch #1570448, use the device origin for where
[wxWidgets.git] / wxPython / src / _filesys.i
1 /////////////////////////////////////////////////////////////////////////////
2 // Name: _filesys.i
3 // Purpose: SWIG definitions of the wxFileSystem family of classes
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 class wxFSFile : public wxObject
27 {
28 public:
29 %typemap(out) wxFSFile*; // turn off this typemap
30
31 wxFSFile(wxInputStream *stream, const wxString& loc,
32 const wxString& mimetype, const wxString& anchor,
33 wxDateTime modif);
34
35 // Turn it back on.
36 %typemap(out) wxFSFile* { $result = wxPyMake_wxObject($1, $owner); }
37
38 ~wxFSFile();
39
40 wxInputStream *GetStream();
41 void DetachStream();
42
43 const wxString& GetMimeType();
44 const wxString& GetLocation();
45 const wxString& GetAnchor();
46 wxDateTime GetModificationTime();
47
48 %property(Anchor, GetAnchor, doc="See `GetAnchor`");
49 %property(Location, GetLocation, doc="See `GetLocation`");
50 %property(MimeType, GetMimeType, doc="See `GetMimeType`");
51 %property(ModificationTime, GetModificationTime, doc="See `GetModificationTime`");
52 %property(Stream, GetStream, doc="See `GetStream`");
53
54 };
55
56
57 //---------------------------------------------------------------------------
58
59 %{
60 class wxPyFileSystemHandler : public wxFileSystemHandler
61 {
62 public:
63 wxPyFileSystemHandler() : wxFileSystemHandler() {}
64
65 DEC_PYCALLBACK_BOOL_STRING_pure(CanOpen);
66 DEC_PYCALLBACK_FSF_FSSTRING_pure(OpenFile);
67 DEC_PYCALLBACK_STRING_STRINGINT_pure(FindFirst);
68 DEC_PYCALLBACK_STRING__pure(FindNext);
69
70 wxString GetProtocol(const wxString& location) {
71 return wxFileSystemHandler::GetProtocol(location);
72 }
73
74 wxString GetLeftLocation(const wxString& location) {
75 return wxFileSystemHandler::GetLeftLocation(location);
76 }
77
78 wxString GetAnchor(const wxString& location) {
79 return wxFileSystemHandler::GetAnchor(location);
80 }
81
82 wxString GetRightLocation(const wxString& location) {
83 return wxFileSystemHandler::GetRightLocation(location);
84 }
85
86 wxString GetMimeTypeFromExt(const wxString& location) {
87 return wxFileSystemHandler::GetMimeTypeFromExt(location);
88 }
89
90 PYPRIVATE;
91 };
92
93
94 IMP_PYCALLBACK_BOOL_STRING_pure(wxPyFileSystemHandler, wxFileSystemHandler, CanOpen);
95 IMP_PYCALLBACK_FSF_FSSTRING_pure(wxPyFileSystemHandler, wxFileSystemHandler, OpenFile);
96 IMP_PYCALLBACK_STRING_STRINGINT_pure(wxPyFileSystemHandler, wxFileSystemHandler, FindFirst);
97 IMP_PYCALLBACK_STRING__pure(wxPyFileSystemHandler, wxFileSystemHandler, FindNext);
98 %}
99
100
101
102 %rename(CPPFileSystemHandler) wxFileSystemHandler;
103 class wxFileSystemHandler //: public wxObject
104 {
105 public:
106 //wxFileSystemHandler();
107 ~wxFileSystemHandler();
108 };
109
110
111
112 %rename(FileSystemHandler) wxPyFileSystemHandler;
113 class wxPyFileSystemHandler : public wxFileSystemHandler
114 {
115 public:
116 %pythonAppend wxPyFileSystemHandler "self._setCallbackInfo(self, FileSystemHandler)";
117
118 wxPyFileSystemHandler();
119
120 void _setCallbackInfo(PyObject* self, PyObject* _class);
121
122 bool CanOpen(const wxString& location);
123 %newobject OpenFile;
124 wxFSFile* OpenFile(wxFileSystem& fs, const wxString& location);
125 wxString FindFirst(const wxString& spec, int flags = 0);
126 wxString FindNext();
127
128 wxString GetProtocol(const wxString& location);
129 wxString GetLeftLocation(const wxString& location);
130 wxString GetAnchor(const wxString& location);
131 wxString GetRightLocation(const wxString& location);
132 wxString GetMimeTypeFromExt(const wxString& location);
133
134 %property(Anchor, GetAnchor, doc="See `GetAnchor`");
135 %property(LeftLocation, GetLeftLocation, doc="See `GetLeftLocation`");
136 %property(MimeTypeFromExt, GetMimeTypeFromExt, doc="See `GetMimeTypeFromExt`");
137 %property(Protocol, GetProtocol, doc="See `GetProtocol`");
138 %property(RightLocation, GetRightLocation, doc="See `GetRightLocation`");
139 };
140
141
142 // //---------------------------------------------------------------------------
143
144
145 class wxFileSystem : public wxObject {
146 public:
147 wxFileSystem();
148 ~wxFileSystem();
149
150 void ChangePathTo(const wxString& location, bool is_dir = false);
151 wxString GetPath();
152
153 %newobject OpenFile;
154 wxFSFile* OpenFile(const wxString& location);
155
156 wxString FindFirst(const wxString& spec, int flags = 0);
157 wxString FindNext();
158
159 %disownarg(wxFileSystemHandler *handler);
160 static void AddHandler(wxFileSystemHandler *handler);
161 %cleardisown(wxFileSystemHandler *handler);
162
163 // Removes FS handler
164 %newobject RemoveHandler;
165 static wxFileSystemHandler* RemoveHandler(wxFileSystemHandler *handler);
166
167 static void CleanUpHandlers();
168
169 // Returns the file URL for a native path
170 static wxString FileNameToURL(const wxString& filename);
171
172 // Returns the native path for a file URL
173 //static wxFileName URLToFileName(const wxString& url);
174 %extend {
175 static wxString URLToFileName(const wxString& url) {
176 wxFileName fname = wxFileSystem::URLToFileName(url);
177 return fname.GetFullPath();
178 }
179 }
180
181 %property(Path, GetPath, doc="See `GetPath`");
182 };
183
184
185
186 //---------------------------------------------------------------------------
187
188 class wxInternetFSHandler : public wxFileSystemHandler {
189 public:
190 wxInternetFSHandler();
191 bool CanOpen(const wxString& location);
192 %newobject OpenFile;
193 wxFSFile* OpenFile(wxFileSystem& fs, const wxString& location);
194 };
195
196
197 //---------------------------------------------------------------------------
198
199 class wxZipFSHandler : public wxFileSystemHandler {
200 public:
201 wxZipFSHandler();
202
203 bool CanOpen(const wxString& location);
204 %newobject OpenFile;
205 wxFSFile* OpenFile(wxFileSystem& fs, const wxString& location);
206 wxString FindFirst(const wxString& spec, int flags = 0);
207 wxString FindNext();
208 };
209
210 //---------------------------------------------------------------------------
211
212 // TODO: Use SWIG's overloading feature to fix this mess?
213
214 // getting the overloaded static AddFile method right
215 %inline %{
216 void __wxMemoryFSHandler_AddFile_wxImage(const wxString& filename,
217 wxImage& image,
218 long type) {
219 wxMemoryFSHandler::AddFile(filename, image, type);
220 }
221
222 void __wxMemoryFSHandler_AddFile_wxBitmap(const wxString& filename,
223 const wxBitmap& bitmap,
224 long type) {
225 wxMemoryFSHandler::AddFile(filename, bitmap, type);
226 }
227
228 void __wxMemoryFSHandler_AddFile_Data(const wxString& filename,
229 PyObject* data) {
230 if (! PyString_Check(data)) {
231 wxPyBLOCK_THREADS(PyErr_SetString(PyExc_TypeError,
232 "Expected string object"));
233 return;
234 }
235
236 wxPyBlock_t blocked = wxPyBeginBlockThreads();
237 void* ptr = (void*)PyString_AsString(data);
238 size_t size = PyString_Size(data);
239 wxPyEndBlockThreads(blocked);
240
241 wxMemoryFSHandler::AddFile(filename, ptr, size);
242 }
243 %}
244
245
246 // case switch for overloading
247 %pythoncode {
248 def MemoryFSHandler_AddFile(filename, dataItem, imgType=-1):
249 """
250 Add 'file' to the memory filesystem. The dataItem parameter can
251 either be a `wx.Bitmap`, `wx.Image` or a string that can contain
252 arbitrary data. If a bitmap or image is used then the imgType
253 parameter should specify what kind of image file it should be
254 written as, wx.BITMAP_TYPE_PNG, etc.
255 """
256 if isinstance(dataItem, wx.Image):
257 __wxMemoryFSHandler_AddFile_wxImage(filename, dataItem, imgType)
258 elif isinstance(dataItem, wx.Bitmap):
259 __wxMemoryFSHandler_AddFile_wxBitmap(filename, dataItem, imgType)
260 elif type(dataItem) == str:
261 __wxMemoryFSHandler_AddFile_Data(filename, dataItem)
262 else:
263 raise TypeError, 'wx.Image, wx.Bitmap or string expected'
264 }
265
266
267 class wxMemoryFSHandler : public wxFileSystemHandler {
268 public:
269 wxMemoryFSHandler();
270
271 // Remove file from memory FS and free occupied memory
272 static void RemoveFile(const wxString& filename);
273
274 // Add a file to the memory FS
275 %pythoncode { AddFile = staticmethod(MemoryFSHandler_AddFile) }
276
277 bool CanOpen(const wxString& location);
278 %newobject OpenFile;
279 wxFSFile* OpenFile(wxFileSystem& fs, const wxString& location);
280 wxString FindFirst(const wxString& spec, int flags = 0);
281 virtual wxString FindNext();
282 };
283
284
285 //---------------------------------------------------------------------------
286 %init %{
287 wxPyPtrTypeMap_Add("wxFileSystemHandler", "wxPyFileSystemHandler");
288 %}
289 //---------------------------------------------------------------------------