X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/2b5f62a0b2db198609b45dec622a018dae37008e..d5dc103fd4afb197f48d6a87f67f6b82dd7f56fe:/include/wx/filesys.h diff --git a/include/wx/filesys.h b/include/wx/filesys.h index b819282152..bda6d7c5dd 100644 --- a/include/wx/filesys.h +++ b/include/wx/filesys.h @@ -4,17 +4,13 @@ // Author: Vaclav Slavik // Copyright: (c) 1999 Vaclav Slavik // RCS-ID: $Id$ -// Licence: wxWindows Licence +// Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// #ifndef __FILESYS_H__ #define __FILESYS_H__ -#if defined(__GNUG__) && !defined(__APPLE__) -#pragma interface "filesys.h" -#endif - -#include "wx/setup.h" +#include "wx/defs.h" #if !wxUSE_STREAMS #error You cannot compile virtual file systems without wxUSE_STREAMS @@ -27,12 +23,12 @@ #if wxUSE_FILESYSTEM #include "wx/stream.h" -#include "wx/url.h" #include "wx/datetime.h" +#include "wx/filename.h" -class wxFSFile; -class wxFileSystemHandler; -class wxFileSystem; +class WXDLLIMPEXP_BASE wxFSFile; +class WXDLLIMPEXP_BASE wxFileSystemHandler; +class WXDLLIMPEXP_BASE wxFileSystem; //-------------------------------------------------------------------------------- // wxFSFile @@ -41,25 +37,35 @@ class wxFileSystem; // (in 'index.htm#chapter2', 'chapter2' is anchor) //-------------------------------------------------------------------------------- -class WXDLLEXPORT wxFSFile : public wxObject +class WXDLLIMPEXP_BASE wxFSFile : public wxObject { public: wxFSFile(wxInputStream *stream, const wxString& loc, - const wxString& mimetype, const wxString& anchor, - wxDateTime modif) + const wxString& mimetype, const wxString& anchor +#if wxUSE_DATETIME + , wxDateTime modif +#endif // wxUSE_DATETIME + ) { m_Stream = stream; + m_destroy = true; m_Location = loc; m_MimeType = mimetype; m_MimeType.MakeLower(); m_Anchor = anchor; +#if wxUSE_DATETIME m_Modif = modif; +#endif // wxUSE_DATETIME } - virtual ~wxFSFile() { if (m_Stream) delete m_Stream; } + + virtual ~wxFSFile() { if (m_Stream && m_destroy) delete m_Stream; } // returns stream. This doesn't _create_ stream, it only returns - // pointer to it!! + // pointer to it. wxInputStream *GetStream() const {return m_Stream;} + // gives away the ownership of stream + void DetachStream() { m_destroy = false; } + // returns file's mime type const wxString& GetMimeType() const {return m_MimeType;} @@ -68,16 +74,22 @@ public: const wxString& GetAnchor() const {return m_Anchor;} +#if wxUSE_DATETIME wxDateTime GetModificationTime() const {return m_Modif;} +#endif // wxUSE_DATETIME private: wxInputStream *m_Stream; + bool m_destroy; wxString m_Location; wxString m_MimeType; wxString m_Anchor; +#if wxUSE_DATETIME wxDateTime m_Modif; +#endif // wxUSE_DATETIME DECLARE_ABSTRACT_CLASS(wxFSFile) + DECLARE_NO_COPY_CLASS(wxFSFile) }; @@ -91,12 +103,12 @@ private: // kinds of files (HTPP, FTP, local, tar.gz etc..) //-------------------------------------------------------------------------------- -class WXDLLEXPORT wxFileSystemHandler : public wxObject +class WXDLLIMPEXP_BASE wxFileSystemHandler : public wxObject { public: wxFileSystemHandler() : wxObject() {} - // returns TRUE if this handler is able to open given location + // returns true if this handler is able to open given location virtual bool CanOpen(const wxString& location) = 0; // opens given file and returns pointer to input stream. @@ -145,18 +157,19 @@ protected: // kinds of files (HTPP, FTP, local, tar.gz etc..) //-------------------------------------------------------------------------------- -class WXDLLEXPORT wxFileSystem : public wxObject +class WXDLLIMPEXP_BASE wxFileSystem : public wxObject { public: - wxFileSystem() : wxObject() {m_Path = m_LastName = wxEmptyString; m_Handlers.DeleteContents(TRUE); m_FindFileHandler = NULL;} + wxFileSystem() : wxObject() { m_FindFileHandler = NULL;} + virtual ~wxFileSystem() { } // sets the current location. Every call to OpenFile is // relative to this location. // NOTE !! - // unless is_dir = TRUE 'location' is *not* the directory but + // unless is_dir = true 'location' is *not* the directory but // file contained in this directory // (so ChangePathTo("dir/subdir/xh.htm") sets m_Path to "dir/subdir/") - void ChangePathTo(const wxString& location, bool is_dir = FALSE); + void ChangePathTo(const wxString& location, bool is_dir = false); wxString GetPath() const {return m_Path;} @@ -173,18 +186,28 @@ 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 hanlers :-) + // 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(); // Returns the native path for a file URL - static wxString URLToNativePath( const wxString& url ); + static wxFileName URLToFileName(const wxString& url); // Returns the file URL for a native path - static wxString NativePathToURL( const wxString& path ); + static wxString FileNameToURL(const wxFileName& filename); protected: @@ -201,6 +224,7 @@ protected: // handler that succeed in FindFirst query DECLARE_DYNAMIC_CLASS(wxFileSystem) + DECLARE_NO_COPY_CLASS(wxFileSystem) }; @@ -228,7 +252,7 @@ special characters : */ -class wxLocalFSHandler : public wxFileSystemHandler +class WXDLLIMPEXP_BASE wxLocalFSHandler : public wxFileSystemHandler { public: virtual bool CanOpen(const wxString& location);