X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/43e8916ff3fd271e55c9daa6660cb8ea5ff7efe6..23c06cde5df85dbfd94e92e90de225618191153f:/include/wx/filesys.h diff --git a/include/wx/filesys.h b/include/wx/filesys.h index 99dba2e96c..69d4ffd284 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 @@ -10,10 +10,6 @@ #ifndef __FILESYS_H__ #define __FILESYS_H__ -#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA) -#pragma interface "filesys.h" -#endif - #include "wx/defs.h" #if !wxUSE_STREAMS @@ -29,6 +25,7 @@ #include "wx/stream.h" #include "wx/datetime.h" #include "wx/filename.h" +#include "wx/hashmap.h" class WXDLLIMPEXP_BASE wxFSFile; class WXDLLIMPEXP_BASE wxFileSystemHandler; @@ -60,22 +57,36 @@ public: #endif // wxUSE_DATETIME } - virtual ~wxFSFile() { if (m_Stream) delete m_Stream; } + virtual ~wxFSFile() { delete m_Stream; } + + // returns stream. This doesn't give away ownership of the stream object. + wxInputStream *GetStream() const { return m_Stream; } + + // gives away the ownership of the current stream. + wxInputStream *DetachStream() + { + wxInputStream *stream = m_Stream; + m_Stream = NULL; + return stream; + } - // returns stream. This doesn't _create_ stream, it only returns - // pointer to it. - wxInputStream *GetStream() const {return m_Stream;} + // deletes the current stream and takes ownership of another. + void SetStream(wxInputStream *stream) + { + delete m_Stream; + m_Stream = stream; + } // returns file's mime type - const wxString& GetMimeType() const {return m_MimeType;} + const wxString& GetMimeType() const { return m_MimeType; } // returns the original location (aka filename) of the file - const wxString& GetLocation() const {return m_Location;} + const wxString& GetLocation() const { return m_Location; } - const wxString& GetAnchor() const {return m_Anchor;} + const wxString& GetAnchor() const { return m_Anchor; } #if wxUSE_DATETIME - wxDateTime GetModificationTime() const {return m_Modif;} + wxDateTime GetModificationTime() const { return m_Modif; } #endif // wxUSE_DATETIME private: @@ -156,11 +167,19 @@ protected: // kinds of files (HTPP, FTP, local, tar.gz etc..) //-------------------------------------------------------------------------------- +// Open Bit Flags +enum { + wxFS_READ = 1, // Open for reading + 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. @@ -177,7 +196,7 @@ public: // It first tries to open the file in relative scope // (based on ChangePathTo()'s value) and then as an absolute // path. - wxFSFile* OpenFile(const wxString& location); + wxFSFile* OpenFile(const wxString& location, int flags = wxFS_READ); // Finds first/next file that matches spec wildcard. flags can be wxDIR for restricting // the query to directories or wxFILE for files only or 0 for either. @@ -185,10 +204,19 @@ public: wxString FindFirst(const wxString& spec, int flags = 0); 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); + // Adds FS handler. // In fact, this class is only front-end to the FS handlers :-) static void AddHandler(wxFileSystemHandler *handler); + // Removes FS handler + static wxFileSystemHandler* RemoveHandler(wxFileSystemHandler *handler); + + // Returns true if there is a handler which can open the given location. + static bool HasHandlerForPath(const wxString& location); + // remove all items from the m_Handlers list static void CleanUpHandlers(); @@ -200,6 +228,8 @@ public: protected: + wxFileSystemHandler *MakeLocal(wxFileSystemHandler *h); + wxString m_Path; // the path (location) we are currently in // this is path, not file! @@ -211,6 +241,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)