| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502 | 
							- /////////////////////////////////////////////////////////////////////////////
 
- // Name:        filesys.h
 
- // Purpose:     interface of wxFileSystem, wxFileSystemHandler, wxFSFile
 
- // Author:      wxWidgets team
 
- // Licence:     wxWindows licence
 
- /////////////////////////////////////////////////////////////////////////////
 
- /**
 
-     Open Bit Flags
 
- */
 
- enum wxFileSystemOpenFlags
 
- {
 
-     wxFS_READ = 1,      /**< Open for reading */
 
-     wxFS_SEEKABLE = 4   /**< Returned stream will be seekable */
 
- };
 
- /**
 
-     @class wxFileSystem
 
-     This class provides an interface for opening files on different file systems.
 
-     It can handle absolute and/or local filenames.
 
-     It uses a system of handlers (see wxFileSystemHandler) to provide access to
 
-     user-defined virtual file systems.
 
-     @library{wxbase}
 
-     @category{vfs}
 
-     @see wxFileSystemHandler, wxFSFile, @ref overview_fs
 
- */
 
- class wxFileSystem : public wxObject
 
- {
 
- public:
 
-     /**
 
-         Constructor.
 
-         The initial current path of this object will be empty
 
-         (i.e. GetPath() == wxEmptyString) which means that e.g. OpenFile()
 
-         or FindFirst() functions will use current working directory as
 
-         current path (see also wxGetCwd).
 
-     */
 
-     wxFileSystem();
 
-     /**
 
-         This static function adds new handler into the list of handlers
 
-         (see wxFileSystemHandler) which provide access to virtual FS.
 
-         Note that if two handlers for the same protocol are added, the last
 
-         added one takes precedence.
 
-         @note You can call:
 
-               @code
 
-               wxFileSystem::AddHandler(new My_FS_Handler);
 
-               @endcode
 
-               This is because (a) AddHandler is a static method, and (b) the
 
-               handlers are deleted in wxFileSystem's destructor so that you
 
-               don't have to care about it.
 
-     */
 
-     static void AddHandler(wxFileSystemHandler* handler);
 
-     /**
 
-        Remove a filesystem handler from the list of handlers.
 
-     */
 
-     static wxFileSystemHandler* RemoveHandler(wxFileSystemHandler *handler);
 
-     
 
-     /**
 
-         Sets the current location. @a location parameter passed to OpenFile() is
 
-         relative to this path.
 
-         @remarks Unless @a is_dir is @true the @a location parameter is not the
 
-                  directory name but the name of the file in this directory.
 
-         All these commands change the path to "dir/subdir/":
 
-         @code
 
-         ChangePathTo("dir/subdir/xh.htm");
 
-         ChangePathTo("dir/subdir", true);
 
-         ChangePathTo("dir/subdir/", true);
 
-         @endcode
 
-         Example:
 
-         @code
 
-         f = fs->OpenFile("hello.htm"); // opens file 'hello.htm'
 
-         fs->ChangePathTo("subdir/folder", true);
 
-         f = fs->OpenFile("hello.htm"); // opens file 'subdir/folder/hello.htm' !!
 
-         @endcode
 
-         @param location
 
-             the new location. Its meaning depends on the value of is_dir
 
-         @param is_dir
 
-             if @true location is new directory.
 
-             If @false (the default) location is file in the new directory.
 
-     */
 
-     void ChangePathTo(const wxString& location, bool is_dir = false);
 
-     /**
 
-         Converts a wxFileName into an URL.
 
-         @see URLToFileName(), wxFileName
 
-     */
 
-     static wxString FileNameToURL(const wxFileName& filename);
 
-     /**
 
-         Looks for the file with the given name @a file in a colon or semi-colon
 
-         (depending on the current platform) separated list of directories in @a path.
 
-         If the file is found in any directory, returns @true and the full path
 
-         of the file in @a str, otherwise returns @false and doesn't modify @a str.
 
-         @param pStr
 
-             Receives the full path of the file, must not be @NULL
 
-         @param path
 
-             wxPATH_SEP-separated list of directories
 
-         @param file
 
-             the name of the file to look for
 
-     */
 
-     bool FindFileInPath(wxString* pStr, const wxString& path,
 
-                         const wxString& file);
 
-     /**
 
-         Works like ::wxFindFirstFile().
 
-         Returns the name of the first filename (within filesystem's current path)
 
-         that matches @a wildcard.
 
-         @param wildcard
 
-             The wildcard that the filename must match
 
-         @param flags
 
-             One of wxFILE (only files), wxDIR (only directories) or 0 (both).
 
-     */
 
-     wxString FindFirst(const wxString& wildcard, int flags = 0);
 
-     /**
 
-         Returns the next filename that matches the parameters passed to FindFirst().
 
-     */
 
-     wxString FindNext();
 
-     /**
 
-         Returns the actual path (set by wxFileSystem::ChangePathTo).
 
-     */
 
-     wxString GetPath() const;
 
-     /**
 
-         This static function returns @true if there is a registered handler which can
 
-         open the given location.
 
-     */
 
-     static bool HasHandlerForPath(const wxString& location);
 
-     /**
 
-         Opens the file and returns a pointer to a wxFSFile object or @NULL if failed.
 
-         It first tries to open the file in relative scope (based on value passed to
 
-         ChangePathTo() method) and then as an absolute path.
 
-         Note that the user is responsible for deleting the returned wxFSFile.
 
-         @a flags can be one or more of the ::wxFileSystemOpenFlags values
 
-         combined together.
 
-         A stream opened with just the default @e wxFS_READ flag may
 
-         or may not be seekable depending on the underlying source.
 
-         Passing @e "wxFS_READ | wxFS_SEEKABLE" for @a flags will back
 
-         a stream that is not natively seekable with memory or a file
 
-         and return a stream that is always seekable.
 
-         @note
 
-         The @a location argument is, despite this method's name @em not
 
-         a filename. It is a "location", aka wxFileSystem URL (see
 
-         @ref overview_fs).
 
-     */
 
-     wxFSFile* OpenFile(const wxString& location,
 
-                        int flags = wxFS_READ);
 
-     /**
 
-         Converts URL into a well-formed filename.
 
-         The URL must use the @c file protocol.
 
-     */
 
-     static wxFileName URLToFileName(const wxString& url);
 
- };
 
- /**
 
-     @class wxFSFile
 
-     This class represents a single file opened by wxFileSystem.
 
-     It provides more information than wxWidgets' input streams
 
-     (stream, filename, mime type, anchor).
 
-     @note Any pointer returned by a method of wxFSFile is valid only as long as
 
-           the wxFSFile object exists. For example a call to GetStream()
 
-           doesn't @e create the stream but only returns the pointer to it.
 
-           In other words after 10 calls to GetStream() you will have obtained
 
-           ten identical pointers.
 
-     @library{wxbase}
 
-     @category{vfs,file}
 
-     @see wxFileSystemHandler, wxFileSystem, @ref overview_fs
 
- */
 
- class wxFSFile : public wxObject
 
- {
 
- public:
 
-     /**
 
-         Constructor. You probably won't use it. See the Note for details.
 
-         It is seldom used by the application programmer but you will need it if
 
-         you are writing your own virtual FS. For example you may need something
 
-         similar to wxMemoryInputStream, but because wxMemoryInputStream doesn't
 
-         free the memory when destroyed and thus passing a memory stream pointer
 
-         into wxFSFile constructor would lead to memory leaks, you can write your
 
-         own class derived from wxFSFile:
 
-         @code
 
-         class wxMyFSFile : public wxFSFile
 
-         {
 
-             private:
 
-                 void *m_Mem;
 
-             public:
 
-                 wxMyFSFile(.....)
 
-                 ~wxMyFSFile() {free(m_Mem);}
 
-                     // of course dtor is virtual ;-)
 
-         };
 
-         @endcode
 
-         If you are not sure of the meaning of these params, see the description
 
-         of the GetXXXX() functions.
 
-         @param stream
 
-             The input stream that will be used to access data
 
-         @param location
 
-             The full location (aka filename) of the file
 
-         @param mimetype
 
-             MIME type of this file. It may be left empty, in which
 
-             case the type will be determined from file's extension (location must
 
-             not be empty in this case).
 
-         @param anchor
 
-             Anchor. See GetAnchor() for details.
 
-         @param modif
 
-             Modification date and time for this file.
 
-     */
 
-     wxFSFile(wxInputStream* stream, const wxString& location,
 
-              const wxString& mimetype, const wxString& anchor,
 
-              wxDateTime modif);
 
-     /**
 
-         Detaches the stream from the wxFSFile object. That is, the
 
-         stream obtained with GetStream() will continue its existence
 
-         after the wxFSFile object is deleted.
 
-         You will have to delete the stream yourself.
 
-     */
 
-     wxInputStream* DetachStream();
 
-     /**
 
-         Returns anchor (if present). The term of @b anchor can be easily
 
-         explained using few examples:
 
-         @verbatim
 
-         index.htm#anchor                      // 'anchor' is anchor
 
-         index/wx001.htm                       // NO anchor here!
 
-         archive/main.zip#zip:index.htm#global // 'global'
 
-         archive/main.zip#zip:index.htm        // NO anchor here!
 
-         @endverbatim
 
-         Usually an anchor is presented only if the MIME type is 'text/html'.
 
-         But it may have some meaning with other files; for example myanim.avi#200
 
-         may refer to position in animation or reality.wrl#MyView may refer
 
-         to a predefined view in VRML.
 
-     */
 
-     const wxString& GetAnchor() const;
 
-     /**
 
-         Returns full location of the file, including path and protocol.
 
-         Examples:
 
-         @verbatim
 
-         http://www.wxwidgets.org
 
-         http://www.ms.mff.cuni.cz/~vsla8348/wxhtml/archive.zip#zip:info.txt
 
-         file:/home/vasek/index.htm
 
-         relative-file.htm
 
-         @endverbatim
 
-     */
 
-     const wxString& GetLocation() const;
 
-     /**
 
-         Returns the MIME type of the content of this file.
 
-         It is either extension-based (see wxMimeTypesManager) or extracted from
 
-         HTTP protocol Content-Type header.
 
-     */
 
-     const wxString& GetMimeType() const;
 
-     /**
 
-         Returns time when this file was modified.
 
-     */
 
-     wxDateTime GetModificationTime() const;
 
-     /**
 
-         Returns pointer to the stream.
 
-         You can use the returned stream to directly access data.
 
-         You may suppose that the stream provide Seek and GetSize functionality
 
-         (even in the case of the HTTP protocol which doesn't provide
 
-         this by default. wxHtml uses local cache to work around
 
-         this and to speed up the connection).
 
-     */
 
-     wxInputStream* GetStream() const;
 
- };
 
- /**
 
-     @class wxFileSystemHandler
 
-     Classes derived from wxFileSystemHandler are used to access virtual file systems.
 
-     Its public interface consists of two methods: wxFileSystemHandler::CanOpen
 
-     and wxFileSystemHandler::OpenFile.
 
-     It provides additional protected methods to simplify the process
 
-     of opening the file: GetProtocol(), GetLeftLocation(), GetRightLocation(),
 
-     GetAnchor(), GetMimeTypeFromExt().
 
-     Please have a look at overview (see wxFileSystem) if you don't know how locations
 
-     are constructed.
 
-     Also consult the @ref overview_fs_wxhtmlfs "list of available handlers".
 
-     Note that the handlers are shared by all instances of wxFileSystem.
 
-     @remarks
 
-     wxHTML library provides handlers for local files and HTTP or FTP protocol.
 
-     @note
 
-     The location parameter passed to OpenFile() or CanOpen() methods is always an
 
-     absolute path. You don't need to check the FS's current path.
 
-     @beginWxPerlOnly
 
-     In wxPerl, you need to derive your file system handler class
 
-     from @c Wx::PlFileSystemHandler.
 
-     @endWxPerlOnly
 
-     @library{wxbase}
 
-     @category{vfs}
 
-     @see wxFileSystem, wxFSFile, @ref overview_fs
 
- */
 
- class wxFileSystemHandler : public wxObject
 
- {
 
- public:
 
-     /**
 
-         Constructor.
 
-     */
 
-     wxFileSystemHandler();
 
-     /**
 
-         Returns @true if the handler is able to open this file. This function doesn't
 
-         check whether the file exists or not, it only checks if it knows the protocol.
 
-         Example:
 
-         @code
 
-         bool MyHand::CanOpen(const wxString& location)
 
-         {
 
-             return (GetProtocol(location) == "http");
 
-         }
 
-         @endcode
 
-         Must be overridden in derived handlers.
 
-     */
 
-     virtual bool CanOpen(const wxString& location) = 0;
 
-     /**
 
-         Works like ::wxFindFirstFile().
 
-         Returns the name of the first filename (within filesystem's current path)
 
-         that matches @e wildcard. @a flags may be one of wxFILE (only files),
 
-         wxDIR (only directories) or 0 (both).
 
-         This method is only called if CanOpen() returns @true.
 
-     */
 
-     virtual wxString FindFirst(const wxString& wildcard,
 
-                                int flags = 0);
 
-     /**
 
-         Returns next filename that matches parameters passed to wxFileSystem::FindFirst.
 
-         This method is only called if CanOpen() returns @true and FindFirst()
 
-         returned a non-empty string.
 
-     */
 
-     virtual wxString FindNext();
 
-     /**
 
-         Returns the MIME type based on @b extension of @a location.
 
-         (While wxFSFile::GetMimeType() returns real MIME type - either
 
-          extension-based or queried from HTTP.)
 
-         Example:
 
-         @code
 
-         GetMimeTypeFromExt("index.htm") == "text/html"
 
-         @endcode
 
-     */
 
-     static wxString GetMimeTypeFromExt(const wxString& location);
 
-     /**
 
-         Opens the file and returns wxFSFile pointer or @NULL if failed.
 
-         Must be overridden in derived handlers.
 
-         @param fs
 
-             Parent FS (the FS from that OpenFile was called).
 
-             See the ZIP handler for details of how to use it.
 
-         @param location
 
-             The absolute location of file.
 
-     */
 
-     virtual wxFSFile* OpenFile(wxFileSystem& fs, const wxString& location) = 0;
 
- protected:
 
-     /**
 
-         Returns the anchor if present in the location.
 
-         See wxFSFile::GetAnchor for details.
 
-         Example:
 
-         @code
 
-         GetAnchor("index.htm#chapter2") == "chapter2"
 
-         @endcode
 
-         @note the anchor is NOT part of the left location.
 
-     */
 
-     static wxString GetAnchor(const wxString& location);
 
-     /**
 
-         Returns the left location string extracted from @e location.
 
-         Example:
 
-         @code
 
-         GetLeftLocation("file:myzipfile.zip#zip:index.htm") == "file:myzipfile.zip"
 
-         @endcode
 
-     */
 
-     static wxString GetLeftLocation(const wxString& location);
 
-     /**
 
-         Returns the protocol string extracted from @a location.
 
-         Example:
 
-         @code
 
-         GetProtocol("file:myzipfile.zip#zip:index.htm") == "zip"
 
-         @endcode
 
-     */
 
-     static wxString GetProtocol(const wxString& location);
 
-     /**
 
-         Returns the right location string extracted from @a location.
 
-         Example:
 
-         @code
 
-         GetRightLocation("file:myzipfile.zip#zip:index.htm") == "index.htm"
 
-         @endcode
 
-     */
 
-     static wxString GetRightLocation(const wxString& location);
 
- };
 
- /**
 
-     Input stream for virtual file stream files.
 
-     The stream reads data from wxFSFile obtained from wxFileSystem. It is
 
-     especially useful to allow using virtual files with other wxWidgets
 
-     functions and classes working with streams, e.g. for loading images or
 
-     animations from virtual files and not only physical ones.
 
-     @library{wxbase}
 
-     @category{streams}
 
-     @see wxWrapperInputStream, wxFSFile
 
-     @since 2.9.4
 
- */
 
- class wxFSInputStream : public wxWrapperInputStream
 
- {
 
- public:
 
-     /**
 
-         Create a stream associated with the data of the given virtual file
 
-         system file.
 
-         @param filename
 
-             The name of the input file passed to wxFileSystem::OpenFile().
 
-         @param flags
 
-             Combination of flags from wxFileSystemOpenFlags. ::wxFS_READ is
 
-             implied, i.e. it is always added to the flags value.
 
-         Use wxStreamBase::IsOk() to verify if the constructor succeeded.
 
-     */
 
-     wxFileInputStream(const wxString& filename, int flags = 0);
 
-     /**
 
-         Returns @true if the stream is initialized and ready.
 
-     */
 
-     bool IsOk() const;
 
- };
 
 
  |