1 /////////////////////////////////////////////////////////////////////////////
3 // Purpose: SWIG definitions of the wxFileSystem family of classes
5 // Author: Joerg Baumann
7 // Created: 25-Sept-2000
9 // Copyright: (c) 2000 by Joerg Baumann
10 // Licence: wxWindows license
11 /////////////////////////////////////////////////////////////////////////////
17 #include <wx/filesys.h>
18 #include <wx/fs_inet.h>
19 #include <wx/fs_mem.h>
20 #include <wx/fs_zip.h>
23 //----------------------------------------------------------------------
26 %include my_typemaps.i
28 // Import some definitions of other classes, etc.
34 %pragma(python) code = "import wx"
35 %pragma(python) code = "import string"
37 //---------------------------------------------------------------------------
39 // // typemaps for wxInputStream: Note wxFSFile object has to do the delete
40 // // of wxInputStream *
41 // %typemap(python,in) wxInputStream *stream {
42 // if (PyInstance_Check($source)) {
43 // wxPyInputStream* ptr;
44 // if (SWIG_GetPtrObj($source, (void **) &ptr,"_wxPyInputStream_p")) {
45 // PyErr_SetString(PyExc_TypeError,"Expected _wxInputStream_p.");
48 // $target = ptr->wxi;
50 // PyErr_SetString(PyExc_TypeError,"Expected _wxInputStream_p.");
56 // // typemaps for wxInputStream: Note wxFSFile object has to do the delete
57 // // of wxInputStream *
58 // %typemap(python,out) wxInputStream* {
59 // wxPyInputStream * _ptr = NULL;
62 // _ptr = new wxPyInputStream($source);
66 // SWIG_MakePtr(swigptr, _ptr, "_wxPyInputStream_p");
68 // PyObject* classobj = PyDict_GetItemString(wxPython_dict, "wxInputStreamPtr");
70 // Py_INCREF(Py_None);
73 // PyObject* arg = Py_BuildValue("(s)", swigptr);
74 // $target = PyInstance_New(classobj, arg, NULL);
78 // PyObject* one = PyInt_FromLong(1);
79 // PyObject_SetAttrString($target, "thisown", one);
83 // Py_INCREF(Py_None);
90 class wxFSFile : public wxObject {
92 wxFSFile(wxInputStream *stream, const wxString& loc,
93 const wxString& mimetype, const wxString& anchor,
96 wxInputStream *GetStream();
97 const wxString& GetMimeType();
98 const wxString& GetLocation();
99 const wxString& GetAnchor();
100 wxDateTime GetModificationTime();
105 %typemap(python,in) wxInputStream *stream;
106 %typemap(python,out) wxInputStream *;
109 //---------------------------------------------------------------------------
112 // wxPyFileSystemHandler will be the Python class wxFileSystemHandler and handling
113 // the callback functions
114 class wxPyFileSystemHandler : public wxFileSystemHandler {
116 wxPyFileSystemHandler() : wxFileSystemHandler() {}
118 DEC_PYCALLBACK_BOOL_STRING_pure(CanOpen);
119 DEC_PYCALLBACK_FSF_FSSTRING_pure(OpenFile);
120 DEC_PYCALLBACK_STRING_STRINGINT_pure(FindFirst);
121 DEC_PYCALLBACK_STRING__pure(FindNext);
123 wxString GetProtocol(const wxString& location) {
124 return wxFileSystemHandler::GetProtocol(location);
127 wxString GetLeftLocation(const wxString& location) {
128 return wxFileSystemHandler::GetLeftLocation(location);
131 wxString GetAnchor(const wxString& location) {
132 return wxFileSystemHandler::GetAnchor(location);
135 wxString GetRightLocation(const wxString& location) {
136 return wxFileSystemHandler::GetRightLocation(location);
139 wxString GetMimeTypeFromExt(const wxString& location){
140 return wxFileSystemHandler::GetMimeTypeFromExt(location);
147 IMP_PYCALLBACK_BOOL_STRING_pure(wxPyFileSystemHandler, wxFileSystemHandler, CanOpen);
148 IMP_PYCALLBACK_FSF_FSSTRING_pure(wxPyFileSystemHandler, wxFileSystemHandler, OpenFile);
149 IMP_PYCALLBACK_STRING_STRINGINT_pure(wxPyFileSystemHandler, wxFileSystemHandler, FindFirst);
150 IMP_PYCALLBACK_STRING__pure(wxPyFileSystemHandler, wxFileSystemHandler, FindNext);
154 %name(wxCPPFileSystemHandler)class wxFileSystemHandler : public wxObject {
155 wxFileSystemHandler();
158 %name(wxFileSystemHandler)class wxPyFileSystemHandler : public wxFileSystemHandler {
160 wxPyFileSystemHandler();
162 void _setCallbackInfo(PyObject* self, PyObject* _class);
163 %pragma(python) addtomethod = "__init__:self._setCallbackInfo(self, wxFileSystemHandler)"
165 bool CanOpen(const wxString& location);
166 wxFSFile* OpenFile(wxFileSystem& fs, const wxString& location);
167 wxString FindFirst(const wxString& spec, int flags = 0);
170 wxString GetProtocol(const wxString& location);
171 wxString GetLeftLocation(const wxString& location);
172 wxString GetAnchor(const wxString& location);
173 wxString GetRightLocation(const wxString& location) const;
174 wxString GetMimeTypeFromExt(const wxString& location);
177 //---------------------------------------------------------------------------
179 class wxFileSystem : public wxObject {
183 void ChangePathTo(const wxString& location, bool is_dir = FALSE);
186 wxFSFile* OpenFile(const wxString& location);
188 wxString FindFirst(const wxString& spec, int flags = 0);
191 static void AddHandler(wxFileSystemHandler *handler);
192 static void CleanUpHandlers();
195 //---------------------------------------------------------------------------
197 class wxInternetFSHandler : public wxFileSystemHandler {
199 wxInternetFSHandler();
200 bool CanOpen(const wxString& location);
201 wxFSFile* OpenFile(wxFileSystem& fs, const wxString& location);
205 //---------------------------------------------------------------------------
206 class wxZipFSHandler : public wxFileSystemHandler {
210 bool CanOpen(const wxString& location);
211 wxFSFile* OpenFile(wxFileSystem& fs, const wxString& location);
212 wxString FindFirst(const wxString& spec, int flags = 0);
216 //---------------------------------------------------------------------------
218 class wxMemoryFSHandler : public wxFileSystemHandler {
222 // Remove file from memory FS and free occupied memory
223 static void RemoveFile(const wxString& filename);
225 bool CanOpen(const wxString& location);
226 wxFSFile* OpenFile(wxFileSystem& fs, const wxString& location);
227 wxString FindFirst(const wxString& spec, int flags = 0);
228 virtual wxString FindNext();
232 // getting the overloaded static AddFile method right
234 void __wxMemoryFSHandler_AddFile_wxImage(const wxString& filename,
237 wxMemoryFSHandler::AddFile(filename, image, type);
240 void __wxMemoryFSHandler_AddFile_wxBitmap(const wxString& filename,
241 const wxBitmap& bitmap,
243 wxMemoryFSHandler::AddFile(filename, bitmap, type);
246 // void __wxMemoryFSHandler_AddFile_wxString(const wxString& filename,
247 // const wxString& textdata) {
248 // wxMemoryFSHandler::AddFile(filename, textdata);
251 void __wxMemoryFSHandler_AddFile_Data(const wxString& filename,
254 wxMemoryFSHandler::AddFile(filename,
255 (void*)PyString_AsString(data),
256 (size_t)PyString_Size(data));
261 // case switch for overloading
262 %pragma(python) code = "
264 def wxMemoryFSHandler_AddFile(filename, a, b=''):
265 if isinstance(a, wxImage):
266 __wxMemoryFSHandler_AddFile_wxImage(filename, a, b)
267 elif isinstance(a, wxBitmap):
268 __wxMemoryFSHandler_AddFile_wxBitmap(filename, a, b)
269 elif type(a) == types.StringType:
270 #__wxMemoryFSHandler_AddFile_wxString(filename, a)
271 __wxMemoryFSHandler_AddFile_Data(filename, a)
272 else: raise TypeError, 'wxImage, wxBitmap or string expected'
276 //---------------------------------------------------------------------------
279 wxPyPtrTypeMap_Add("wxFileSystemHandler", "wxPyFileSystemHandler");
282 //---------------------------------------------------------------------------