#include "wx/stream.h"
#include "wx/datetime.h"
#include "wx/filename.h"
+#include "wx/hashmap.h"
class WXDLLIMPEXP_BASE wxFSFile;
class WXDLLIMPEXP_BASE wxFileSystemHandler;
// kinds of files (HTPP, FTP, local, tar.gz etc..)
//--------------------------------------------------------------------------------
+// Open Bit Flags
+enum {
+ 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.
// 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.
// 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);
protected:
+ wxFileSystemHandler *MakeLocal(wxFileSystemHandler *h);
+
wxString m_Path;
// the path (location) we are currently in
// this is path, not file!
// 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)