]> git.saurik.com Git - wxWidgets.git/blame - wxPython/src/_filesys.i
A patch from Frame Niessink which adds an additional style that
[wxWidgets.git] / wxPython / src / _filesys.i
CommitLineData
c368d904 1/////////////////////////////////////////////////////////////////////////////
d14a1e28 2// Name: _filesys.i
c368d904
RD
3// Purpose: SWIG definitions of the wxFileSystem family of classes
4//
d14a1e28 5// Author: Robin Dunn
c368d904
RD
6//
7// Created: 25-Sept-2000
8// RCS-ID: $Id$
d14a1e28 9// Copyright: (c) 2003 by Total Control Software
c368d904
RD
10// Licence: wxWindows license
11/////////////////////////////////////////////////////////////////////////////
12
d14a1e28 13// Not a %module
c368d904 14
c368d904 15
d14a1e28 16//---------------------------------------------------------------------------
c368d904 17
d14a1e28
RD
18%{
19#include "wx/wxPython/pyistream.h"
20%}
c368d904
RD
21
22//---------------------------------------------------------------------------
d14a1e28 23%newgroup
c368d904 24
c368d904 25
d14a1e28
RD
26class wxFSFile : public wxObject
27{
c368d904 28public:
e2e2649f 29 %typemap(out) wxFSFile*; // turn off this typemap
d02ea46c 30
c368d904
RD
31 wxFSFile(wxInputStream *stream, const wxString& loc,
32 const wxString& mimetype, const wxString& anchor,
33 wxDateTime modif);
e2e2649f
RD
34
35 // Turn it back on.
36 %typemap(out) wxFSFile* { $result = wxPyMake_wxObject($1, $owner); }
37
38 ~wxFSFile();
c368d904
RD
39
40 wxInputStream *GetStream();
76b8fa1d
RD
41 void DetachStream();
42
c368d904
RD
43 const wxString& GetMimeType();
44 const wxString& GetLocation();
45 const wxString& GetAnchor();
46 wxDateTime GetModificationTime();
42e2bbb9
RD
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
c368d904
RD
54};
55
56
c368d904
RD
57//---------------------------------------------------------------------------
58
59%{
d14a1e28
RD
60class wxPyFileSystemHandler : public wxFileSystemHandler
61{
c368d904
RD
62public:
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
e9159fe8 86 wxString GetMimeTypeFromExt(const wxString& location) {
c368d904
RD
87 return wxFileSystemHandler::GetMimeTypeFromExt(location);
88 }
89
90 PYPRIVATE;
91};
92
93
94IMP_PYCALLBACK_BOOL_STRING_pure(wxPyFileSystemHandler, wxFileSystemHandler, CanOpen);
95IMP_PYCALLBACK_FSF_FSSTRING_pure(wxPyFileSystemHandler, wxFileSystemHandler, OpenFile);
96IMP_PYCALLBACK_STRING_STRINGINT_pure(wxPyFileSystemHandler, wxFileSystemHandler, FindFirst);
97IMP_PYCALLBACK_STRING__pure(wxPyFileSystemHandler, wxFileSystemHandler, FindNext);
98%}
99
100
c368d904 101
1b8c7ba6
RD
102%rename(CPPFileSystemHandler) wxFileSystemHandler;
103class wxFileSystemHandler //: public wxObject
d14a1e28
RD
104{
105public:
106 //wxFileSystemHandler();
cdd7b180 107 ~wxFileSystemHandler();
d14a1e28
RD
108};
109
110
111
1b8c7ba6
RD
112%rename(FileSystemHandler) wxPyFileSystemHandler;
113class wxPyFileSystemHandler : public wxFileSystemHandler
d14a1e28 114{
c368d904 115public:
2b9048c5 116 %pythonAppend wxPyFileSystemHandler "self._setCallbackInfo(self, FileSystemHandler)";
e2e2649f 117
c368d904
RD
118 wxPyFileSystemHandler();
119
0122b7e3 120 void _setCallbackInfo(PyObject* self, PyObject* _class);
c368d904
RD
121
122 bool CanOpen(const wxString& location);
b87bfdb7 123 %newobject OpenFile;
c368d904
RD
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);
d14a1e28 131 wxString GetRightLocation(const wxString& location);
c368d904 132 wxString GetMimeTypeFromExt(const wxString& location);
42e2bbb9
RD
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`");
c368d904
RD
139};
140
d14a1e28
RD
141
142// //---------------------------------------------------------------------------
143
c368d904 144
9416aa89 145class wxFileSystem : public wxObject {
c368d904 146public:
3ecece7e
RD
147 // turn off this typemap
148 %typemap(out) wxFileSystem*;
149
c368d904 150 wxFileSystem();
d14a1e28 151 ~wxFileSystem();
c368d904 152
3ecece7e
RD
153 // Turn it back on again
154 %typemap(out) wxFileSystem* { $result = wxPyMake_wxObject($1, $owner); }
155
a72f4631 156 void ChangePathTo(const wxString& location, bool is_dir = false);
c368d904
RD
157 wxString GetPath();
158
b87bfdb7 159 %newobject OpenFile;
c368d904
RD
160 wxFSFile* OpenFile(const wxString& location);
161
162 wxString FindFirst(const wxString& spec, int flags = 0);
163 wxString FindNext();
164
cdd7b180 165 %disownarg(wxFileSystemHandler *handler);
c368d904 166 static void AddHandler(wxFileSystemHandler *handler);
cdd7b180 167 %cleardisown(wxFileSystemHandler *handler);
e2e2649f 168
76b8fa1d
RD
169 // Removes FS handler
170 %newobject RemoveHandler;
171 static wxFileSystemHandler* RemoveHandler(wxFileSystemHandler *handler);
172
c368d904 173 static void CleanUpHandlers();
1e4a197e 174
dd116e73
RD
175 // Returns the file URL for a native path
176 static wxString FileNameToURL(const wxString& filename);
1e4a197e 177
dd116e73 178 // Returns the native path for a file URL
7e6581d4
RD
179 //static wxFileName URLToFileName(const wxString& url);
180 %extend {
181 static wxString URLToFileName(const wxString& url) {
182 wxFileName fname = wxFileSystem::URLToFileName(url);
183 return fname.GetFullPath();
184 }
e2e2649f 185 }
42e2bbb9
RD
186
187 %property(Path, GetPath, doc="See `GetPath`");
c368d904
RD
188};
189
dd116e73 190
d14a1e28 191
c368d904
RD
192//---------------------------------------------------------------------------
193
194class wxInternetFSHandler : public wxFileSystemHandler {
195public:
196 wxInternetFSHandler();
197 bool CanOpen(const wxString& location);
b87bfdb7 198 %newobject OpenFile;
c368d904
RD
199 wxFSFile* OpenFile(wxFileSystem& fs, const wxString& location);
200};
201
202
203//---------------------------------------------------------------------------
d14a1e28 204
c368d904
RD
205class wxZipFSHandler : public wxFileSystemHandler {
206public:
207 wxZipFSHandler();
208
209 bool CanOpen(const wxString& location);
b87bfdb7 210 %newobject OpenFile;
c368d904
RD
211 wxFSFile* OpenFile(wxFileSystem& fs, const wxString& location);
212 wxString FindFirst(const wxString& spec, int flags = 0);
213 wxString FindNext();
214};
215
216//---------------------------------------------------------------------------
217
d14a1e28 218// TODO: Use SWIG's overloading feature to fix this mess?
c368d904
RD
219
220// getting the overloaded static AddFile method right
221%inline %{
d14a1e28
RD
222 void __wxMemoryFSHandler_AddFile_wxImage(const wxString& filename,
223 wxImage& image,
224 long type) {
225 wxMemoryFSHandler::AddFile(filename, image, type);
226 }
c368d904 227
d14a1e28
RD
228 void __wxMemoryFSHandler_AddFile_wxBitmap(const wxString& filename,
229 const wxBitmap& bitmap,
230 long type) {
231 wxMemoryFSHandler::AddFile(filename, bitmap, type);
232 }
c368d904 233
d14a1e28
RD
234 void __wxMemoryFSHandler_AddFile_Data(const wxString& filename,
235 PyObject* data) {
7e6581d4
RD
236 if (! PyString_Check(data)) {
237 wxPyBLOCK_THREADS(PyErr_SetString(PyExc_TypeError,
238 "Expected string object"));
239 return;
240 }
241
6e6b3557 242 wxPyBlock_t blocked = wxPyBeginBlockThreads();
7e6581d4
RD
243 void* ptr = (void*)PyString_AsString(data);
244 size_t size = PyString_Size(data);
245 wxPyEndBlockThreads(blocked);
246
247 wxMemoryFSHandler::AddFile(filename, ptr, size);
d14a1e28 248 }
c368d904
RD
249%}
250
251
252// case switch for overloading
d14a1e28 253%pythoncode {
7e6581d4
RD
254def MemoryFSHandler_AddFile(filename, dataItem, imgType=-1):
255 """
256 Add 'file' to the memory filesystem. The dataItem parameter can
257 either be a `wx.Bitmap`, `wx.Image` or a string that can contain
258 arbitrary data. If a bitmap or image is used then the imgType
259 parameter should specify what kind of image file it should be
260 written as, wx.BITMAP_TYPE_PNG, etc.
261 """
262 if isinstance(dataItem, wx.Image):
263 __wxMemoryFSHandler_AddFile_wxImage(filename, dataItem, imgType)
264 elif isinstance(dataItem, wx.Bitmap):
265 __wxMemoryFSHandler_AddFile_wxBitmap(filename, dataItem, imgType)
266 elif type(dataItem) == str:
267 __wxMemoryFSHandler_AddFile_Data(filename, dataItem)
268 else:
269 raise TypeError, 'wx.Image, wx.Bitmap or string expected'
d14a1e28 270}
c368d904
RD
271
272
d14a1e28
RD
273class wxMemoryFSHandler : public wxFileSystemHandler {
274public:
275 wxMemoryFSHandler();
276
277 // Remove file from memory FS and free occupied memory
278 static void RemoveFile(const wxString& filename);
279
280 // Add a file to the memory FS
281 %pythoncode { AddFile = staticmethod(MemoryFSHandler_AddFile) }
e2e2649f 282
d14a1e28 283 bool CanOpen(const wxString& location);
b87bfdb7 284 %newobject OpenFile;
d14a1e28
RD
285 wxFSFile* OpenFile(wxFileSystem& fs, const wxString& location);
286 wxString FindFirst(const wxString& spec, int flags = 0);
287 virtual wxString FindNext();
288};
9416aa89 289
d14a1e28
RD
290
291//---------------------------------------------------------------------------
9416aa89
RD
292%init %{
293 wxPyPtrTypeMap_Add("wxFileSystemHandler", "wxPyFileSystemHandler");
294%}
c368d904 295//---------------------------------------------------------------------------