1 /////////////////////////////////////////////////////////////////////////////
 
   3 // Purpose:     SWIG definitions of the wxFileSystem family of classes
 
   7 // Created:     25-Sept-2000
 
   9 // Copyright:   (c) 2003 by Total Control Software
 
  10 // Licence:     wxWindows license
 
  11 /////////////////////////////////////////////////////////////////////////////
 
  16 //---------------------------------------------------------------------------
 
  19 #include "wx/wxPython/pyistream.h"
 
  22 //---------------------------------------------------------------------------
 
  26 class wxFSFile : public wxObject
 
  29     %typemap(out) wxFSFile*;    // turn off this typemap
 
  31     wxFSFile(wxInputStream *stream, const wxString& loc,
 
  32              const wxString& mimetype, const wxString& anchor,
 
  36     %typemap(out) wxFSFile* { $result = wxPyMake_wxObject($1, $owner); }
 
  40     wxInputStream *GetStream();
 
  43     const wxString& GetMimeType();
 
  44     const wxString& GetLocation();
 
  45     const wxString& GetAnchor();
 
  46     wxDateTime GetModificationTime();
 
  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`");
 
  57 //---------------------------------------------------------------------------
 
  60 class wxPyFileSystemHandler : public wxFileSystemHandler
 
  63     wxPyFileSystemHandler() : wxFileSystemHandler() {}
 
  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);
 
  70     wxString GetProtocol(const wxString& location) {
 
  71         return wxFileSystemHandler::GetProtocol(location);
 
  74     wxString GetLeftLocation(const wxString& location) {
 
  75         return wxFileSystemHandler::GetLeftLocation(location);
 
  78     wxString GetAnchor(const wxString& location) {
 
  79         return wxFileSystemHandler::GetAnchor(location);
 
  82     wxString GetRightLocation(const wxString& location) {
 
  83         return wxFileSystemHandler::GetRightLocation(location);
 
  86     wxString GetMimeTypeFromExt(const wxString& location) {
 
  87         return wxFileSystemHandler::GetMimeTypeFromExt(location);
 
  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);
 
 102 %rename(CPPFileSystemHandler) wxFileSystemHandler;
 
 103 class wxFileSystemHandler //: public wxObject
 
 106     //wxFileSystemHandler();
 
 107     ~wxFileSystemHandler();
 
 112 %rename(FileSystemHandler) wxPyFileSystemHandler;
 
 113 class wxPyFileSystemHandler : public wxFileSystemHandler
 
 116     %pythonAppend    wxPyFileSystemHandler "self._setCallbackInfo(self, FileSystemHandler)";
 
 118     wxPyFileSystemHandler();
 
 120     void _setCallbackInfo(PyObject* self, PyObject* _class);
 
 122     bool CanOpen(const wxString& location);
 
 124     wxFSFile* OpenFile(wxFileSystem& fs, const wxString& location);
 
 125     wxString FindFirst(const wxString& spec, int flags = 0);
 
 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);
 
 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`");
 
 142 // //---------------------------------------------------------------------------
 
 145 class wxFileSystem : public wxObject {
 
 147     // turn off this typemap
 
 148     %typemap(out) wxFileSystem*;    
 
 153     // Turn it back on again
 
 154     %typemap(out) wxFileSystem* { $result = wxPyMake_wxObject($1, $owner); }
 
 156     void ChangePathTo(const wxString& location, bool is_dir = false);
 
 160     wxFSFile* OpenFile(const wxString& location);
 
 162     wxString FindFirst(const wxString& spec, int flags = 0);
 
 165     %disownarg(wxFileSystemHandler *handler);
 
 166     static void AddHandler(wxFileSystemHandler *handler);
 
 167     %cleardisown(wxFileSystemHandler *handler);
 
 169     // Removes FS handler
 
 170     %newobject RemoveHandler;
 
 171     static wxFileSystemHandler* RemoveHandler(wxFileSystemHandler *handler);
 
 173     static void CleanUpHandlers();
 
 175     // Returns the file URL for a native path
 
 176     static wxString FileNameToURL(const wxString& filename);
 
 178     // Returns the native path for a file URL
 
 179     //static wxFileName URLToFileName(const wxString& url);
 
 181         static wxString URLToFileName(const wxString& url) {
 
 182             wxFileName fname = wxFileSystem::URLToFileName(url);
 
 183             return fname.GetFullPath();
 
 187     %property(Path, GetPath, doc="See `GetPath`");
 
 192 //---------------------------------------------------------------------------
 
 194 class wxInternetFSHandler : public wxFileSystemHandler {
 
 196     wxInternetFSHandler();
 
 197     bool CanOpen(const wxString& location);
 
 199     wxFSFile* OpenFile(wxFileSystem& fs, const wxString& location);
 
 203 //---------------------------------------------------------------------------
 
 205 class wxZipFSHandler : public wxFileSystemHandler {
 
 209     bool CanOpen(const wxString& location);
 
 211     wxFSFile* OpenFile(wxFileSystem& fs, const wxString& location);
 
 212     wxString FindFirst(const wxString& spec, int flags = 0);
 
 216 //---------------------------------------------------------------------------
 
 218 // TODO: Use SWIG's overloading feature to fix this mess?
 
 220 // getting the overloaded static AddFile method right
 
 222     void __wxMemoryFSHandler_AddFile_wxImage(const wxString& filename,
 
 225         wxMemoryFSHandler::AddFile(filename, image, type);
 
 228     void __wxMemoryFSHandler_AddFile_wxBitmap(const wxString& filename,
 
 229                                               const wxBitmap& bitmap,
 
 231         wxMemoryFSHandler::AddFile(filename, bitmap, type);
 
 234     void __wxMemoryFSHandler_AddFile_Data(const wxString& filename,
 
 236         if (! PyString_Check(data)) {
 
 237             wxPyBLOCK_THREADS(PyErr_SetString(PyExc_TypeError,
 
 238                                               "Expected string object"));
 
 242         wxPyBlock_t blocked = wxPyBeginBlockThreads();
 
 243         void*  ptr = (void*)PyString_AsString(data);
 
 244         size_t size = PyString_Size(data);
 
 245         wxPyEndBlockThreads(blocked);
 
 247         wxMemoryFSHandler::AddFile(filename, ptr, size);
 
 252 // case switch for overloading
 
 254 def MemoryFSHandler_AddFile(filename, dataItem, imgType=-1):
 
 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.
 
 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)
 
 269         raise TypeError, 'wx.Image, wx.Bitmap or string expected'
 
 273 class wxMemoryFSHandler : public wxFileSystemHandler {
 
 277     // Remove file from memory FS and free occupied memory
 
 278     static void RemoveFile(const wxString& filename);
 
 280     // Add a file to the memory FS
 
 281     %pythoncode { AddFile = staticmethod(MemoryFSHandler_AddFile) }
 
 283     bool CanOpen(const wxString& location);
 
 285     wxFSFile* OpenFile(wxFileSystem& fs, const wxString& location);
 
 286     wxString FindFirst(const wxString& spec, int flags = 0);
 
 287     virtual wxString FindNext();
 
 291 //---------------------------------------------------------------------------
 
 293     wxPyPtrTypeMap_Add("wxFileSystemHandler", "wxPyFileSystemHandler");
 
 295 //---------------------------------------------------------------------------