X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/52ad298e6600c75c417f94d23eef72ad4d78f133..616c0d1f3ac084bb92f0a75dc48812e8647f1b22:/include/wx/filesys.h?ds=sidebyside diff --git a/include/wx/filesys.h b/include/wx/filesys.h index ca273c8876..026fff1f28 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,16 +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 @@ -50,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; @@ -78,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; } @@ -99,7 +99,7 @@ private: #endif // wxUSE_DATETIME DECLARE_ABSTRACT_CLASS(wxFSFile) - DECLARE_NO_COPY_CLASS(wxFSFile) + wxDECLARE_NO_COPY_CLASS(wxFSFile); }; @@ -132,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) }; @@ -168,13 +168,13 @@ 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(wxFileSystemHandler*, wxFSHandlerHash); +WX_DECLARE_VOIDPTR_HASH_MAP_WITH_DECL(wxFileSystemHandler*, wxFSHandlerHash, class WXDLLIMPEXP_BASE); class WXDLLIMPEXP_BASE wxFileSystem : public wxObject { @@ -206,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 :-) @@ -246,7 +247,7 @@ protected: // Handlers local to this instance DECLARE_DYNAMIC_CLASS(wxFileSystem) - DECLARE_NO_COPY_CLASS(wxFileSystem) + wxDECLARE_NO_COPY_CLASS(wxFileSystem); }; @@ -292,7 +293,20 @@ protected: static wxString ms_root; }; +// Stream reading data from wxFSFile: this allows to use virtual files with any +// wx functions accepting streams. +class WXDLLIMPEXP_BASE wxFSInputStream : public wxWrapperInputStream +{ +public: + // Notice that wxFS_READ is implied in flags. + wxFSInputStream(const wxString& filename, int flags = 0); + virtual ~wxFSInputStream(); + +private: + wxFSFile* m_file; + wxDECLARE_NO_COPY_CLASS(wxFSInputStream); +}; #endif // wxUSE_FILESYSTEM