X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/8c3dbc46b3558a8a1935492f88c1a2a4873ce57e..a721fd82b7ca8c97048453d4aaff559e8f741d69:/include/wx/filesys.h diff --git a/include/wx/filesys.h b/include/wx/filesys.h index 27ba3bf2b6..80f772c0b7 100644 --- a/include/wx/filesys.h +++ b/include/wx/filesys.h @@ -1,5 +1,5 @@ ///////////////////////////////////////////////////////////////////////////// -// Name: filesys.h +// Name: wx/filesys.h // Purpose: class for opening files - virtual file system // Author: Vaclav Slavik // Copyright: (c) 1999 Vaclav Slavik @@ -12,6 +12,8 @@ #include "wx/defs.h" +#if wxUSE_FILESYSTEM + #if !wxUSE_STREAMS #error You cannot compile virtual file systems without wxUSE_STREAMS #endif @@ -20,15 +22,14 @@ #error You cannot compile wxHTML without virtual file systems #endif -#if wxUSE_FILESYSTEM - #include "wx/stream.h" #include "wx/datetime.h" #include "wx/filename.h" +#include "wx/hashmap.h" -class WXDLLIMPEXP_BASE wxFSFile; -class WXDLLIMPEXP_BASE wxFileSystemHandler; -class WXDLLIMPEXP_BASE wxFileSystem; +class WXDLLIMPEXP_FWD_BASE wxFSFile; +class WXDLLIMPEXP_FWD_BASE wxFileSystemHandler; +class WXDLLIMPEXP_FWD_BASE wxFileSystem; //-------------------------------------------------------------------------------- // wxFSFile @@ -49,7 +50,7 @@ public: { m_Stream = stream; m_Location = loc; - m_MimeType = mimetype; m_MimeType.MakeLower(); + m_MimeType = mimetype.Lower(); m_Anchor = anchor; #if wxUSE_DATETIME m_Modif = modif; @@ -77,7 +78,7 @@ public: } // returns file's mime type - const wxString& GetMimeType() const { return m_MimeType; } + const wxString& GetMimeType() const; // returns the original location (aka filename) of the file const wxString& GetLocation() const { return m_Location; } @@ -131,28 +132,28 @@ public: virtual wxString FindFirst(const wxString& spec, int flags = 0); virtual wxString FindNext(); + // Returns MIME type of the file - w/o need to open it + // (default behaviour is that it returns type based on extension) + static wxString GetMimeTypeFromExt(const wxString& location); + protected: // returns protocol ("file", "http", "tar" etc.) The last (most right) // protocol is used: // {it returns "tar" for "file:subdir/archive.tar.gz#tar:/README.txt"} - wxString GetProtocol(const wxString& location) const; + static wxString GetProtocol(const wxString& location); // returns left part of address: // {it returns "file:subdir/archive.tar.gz" for "file:subdir/archive.tar.gz#tar:/README.txt"} - wxString GetLeftLocation(const wxString& location) const; + static wxString GetLeftLocation(const wxString& location); // returns anchor part of address: // {it returns "anchor" for "file:subdir/archive.tar.gz#tar:/README.txt#anchor"} // NOTE: anchor is NOT a part of GetLeftLocation()'s return value - wxString GetAnchor(const wxString& location) const; + static wxString GetAnchor(const wxString& location); // returns right part of address: // {it returns "/README.txt" for "file:subdir/archive.tar.gz#tar:/README.txt"} - wxString GetRightLocation(const wxString& location) const; - - // Returns MIME type of the file - w/o need to open it - // (default behaviour is that it returns type based on extension) - wxString GetMimeTypeFromExt(const wxString& location); + static wxString GetRightLocation(const wxString& location); DECLARE_ABSTRACT_CLASS(wxFileSystemHandler) }; @@ -167,17 +168,19 @@ protected: //-------------------------------------------------------------------------------- // Open Bit Flags -enum { +enum wxFileSystemOpenFlags +{ wxFS_READ = 1, // Open for reading - wxFS_WRITE = 2, // Open for writing wxFS_SEEKABLE = 4 // Returned stream will be seekable }; +WX_DECLARE_VOIDPTR_HASH_MAP_WITH_DECL(wxFileSystemHandler*, wxFSHandlerHash, class WXDLLIMPEXP_BASE); + class WXDLLIMPEXP_BASE wxFileSystem : public wxObject { public: wxFileSystem() : wxObject() { m_FindFileHandler = NULL;} - virtual ~wxFileSystem() { } + virtual ~wxFileSystem(); // sets the current location. Every call to OpenFile is // relative to this location. @@ -203,7 +206,8 @@ public: wxString FindNext(); // find a file in a list of directories, returns false if not found - bool FindFileInPath(wxString *pStr, const wxChar *path, const wxChar *file); + bool FindFileInPath(wxString *pStr, + const wxString& path, const wxString& file); // Adds FS handler. // In fact, this class is only front-end to the FS handlers :-) @@ -226,6 +230,8 @@ public: protected: + wxFileSystemHandler *MakeLocal(wxFileSystemHandler *h); + wxString m_Path; // the path (location) we are currently in // this is path, not file! @@ -237,6 +243,8 @@ protected: // list of FS handlers wxFileSystemHandler *m_FindFileHandler; // handler that succeed in FindFirst query + wxFSHandlerHash m_LocalHandlers; + // Handlers local to this instance DECLARE_DYNAMIC_CLASS(wxFileSystem) DECLARE_NO_COPY_CLASS(wxFileSystem)