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