home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / wxos2233.zip / wxOS2-2_3_3.zip / wxWindows-2.3.3 / include / wx / filesys.h < prev    next >
C/C++ Source or Header  |  2002-08-31  |  9KB  |  249 lines

  1. /////////////////////////////////////////////////////////////////////////////
  2. // Name:        filesys.h
  3. // Purpose:     class for opening files - virtual file system
  4. // Author:      Vaclav Slavik
  5. // Copyright:   (c) 1999 Vaclav Slavik
  6. // RCS-ID:      $Id: filesys.h,v 1.12 2002/08/31 11:29:10 GD Exp $
  7. // Licence:     wxWindows Licence
  8. /////////////////////////////////////////////////////////////////////////////
  9.  
  10. #ifndef __FILESYS_H__
  11. #define __FILESYS_H__
  12.  
  13. #if defined(__GNUG__) && !defined(__APPLE__)
  14. #pragma interface "filesys.h"
  15. #endif
  16.  
  17. #include "wx/setup.h"
  18.  
  19. #if !wxUSE_STREAMS
  20. #error You cannot compile virtual file systems without wxUSE_STREAMS
  21. #endif
  22.  
  23. #if wxUSE_HTML && !wxUSE_FILESYSTEM
  24. #error You cannot compile wxHTML without virtual file systems
  25. #endif
  26.  
  27. #if wxUSE_FILESYSTEM
  28.  
  29. #include "wx/stream.h"
  30. #include "wx/url.h"
  31. #include "wx/datetime.h"
  32.  
  33. class wxFSFile;
  34. class wxFileSystemHandler;
  35. class wxFileSystem;
  36.  
  37. //--------------------------------------------------------------------------------
  38. // wxFSFile
  39. //                  This class is a file opened using wxFileSystem. It consists of
  40. //                  input stream, location, mime type & optional anchor
  41. //                  (in 'index.htm#chapter2', 'chapter2' is anchor)
  42. //--------------------------------------------------------------------------------
  43.  
  44. class WXDLLEXPORT wxFSFile : public wxObject
  45. {
  46. public:
  47.     wxFSFile(wxInputStream *stream, const wxString& loc,
  48.              const wxString& mimetype, const wxString& anchor,
  49.              wxDateTime modif)
  50.     {
  51.         m_Stream = stream;
  52.         m_Location = loc;
  53.         m_MimeType = mimetype; m_MimeType.MakeLower();
  54.         m_Anchor = anchor;
  55.         m_Modif = modif;
  56.     }
  57.     virtual ~wxFSFile() { if (m_Stream) delete m_Stream; }
  58.  
  59.     // returns stream. This doesn't _create_ stream, it only returns
  60.     // pointer to it!!
  61.     wxInputStream *GetStream() const {return m_Stream;}
  62.  
  63.     // returns file's mime type
  64.     const wxString& GetMimeType() const {return m_MimeType;}
  65.  
  66.     // returns the original location (aka filename) of the file
  67.     const wxString& GetLocation() const {return m_Location;}
  68.  
  69.     const wxString& GetAnchor() const {return m_Anchor;}
  70.  
  71.     wxDateTime GetModificationTime() const {return m_Modif;}
  72.  
  73. private:
  74.     wxInputStream *m_Stream;
  75.     wxString m_Location;
  76.     wxString m_MimeType;
  77.     wxString m_Anchor;
  78.     wxDateTime m_Modif;
  79.  
  80.     DECLARE_ABSTRACT_CLASS(wxFSFile)
  81. };
  82.  
  83.  
  84.  
  85.  
  86.  
  87. //--------------------------------------------------------------------------------
  88. // wxFileSystemHandler
  89. //                  This class is FS handler for wxFileSystem. It provides
  90. //                  interface to access certain
  91. //                  kinds of files (HTPP, FTP, local, tar.gz etc..)
  92. //--------------------------------------------------------------------------------
  93.  
  94. class WXDLLEXPORT wxFileSystemHandler : public wxObject
  95. {
  96. public:
  97.     wxFileSystemHandler() : wxObject() {}
  98.  
  99.     // returns TRUE if this handler is able to open given location
  100.     virtual bool CanOpen(const wxString& location) = 0;
  101.  
  102.     // opens given file and returns pointer to input stream.
  103.     // Returns NULL if opening failed.
  104.     // The location is always absolute path.
  105.     virtual wxFSFile* OpenFile(wxFileSystem& fs, const wxString& location) = 0;
  106.  
  107.     // Finds first/next file that matches spec wildcard. flags can be wxDIR for restricting
  108.     // the query to directories or wxFILE for files only or 0 for either.
  109.     // Returns filename or empty string if no more matching file exists
  110.     virtual wxString FindFirst(const wxString& spec, int flags = 0);
  111.     virtual wxString FindNext();
  112.  
  113. protected:
  114.     // returns protocol ("file", "http", "tar" etc.) The last (most right)
  115.     // protocol is used:
  116.     // {it returns "tar" for "file:subdir/archive.tar.gz#tar:/README.txt"}
  117.     wxString GetProtocol(const wxString& location) const;
  118.  
  119.     // returns left part of address:
  120.     // {it returns "file:subdir/archive.tar.gz" for "file:subdir/archive.tar.gz#tar:/README.txt"}
  121.     wxString GetLeftLocation(const wxString& location) const;
  122.  
  123.     // returns anchor part of address:
  124.     // {it returns "anchor" for "file:subdir/archive.tar.gz#tar:/README.txt#anchor"}
  125.     // NOTE:  anchor is NOT a part of GetLeftLocation()'s return value
  126.     wxString GetAnchor(const wxString& location) const;
  127.  
  128.     // returns right part of address:
  129.     // {it returns "/README.txt" for "file:subdir/archive.tar.gz#tar:/README.txt"}
  130.     wxString GetRightLocation(const wxString& location) const;
  131.  
  132.     // Returns MIME type of the file - w/o need to open it
  133.     // (default behaviour is that it returns type based on extension)
  134.     wxString GetMimeTypeFromExt(const wxString& location);
  135.  
  136.     DECLARE_ABSTRACT_CLASS(wxFileSystemHandler)
  137. };
  138.  
  139.  
  140.  
  141.  
  142. //--------------------------------------------------------------------------------
  143. // wxFileSystem
  144. //                  This class provides simple interface for opening various
  145. //                  kinds of files (HTPP, FTP, local, tar.gz etc..)
  146. //--------------------------------------------------------------------------------
  147.  
  148. class WXDLLEXPORT wxFileSystem : public wxObject
  149. {
  150. public:
  151.     wxFileSystem() : wxObject() {m_Path = m_LastName = wxEmptyString; m_Handlers.DeleteContents(TRUE); m_FindFileHandler = NULL;}
  152.  
  153.     // sets the current location. Every call to OpenFile is
  154.     // relative to this location.
  155.     // NOTE !!
  156.     // unless is_dir = TRUE 'location' is *not* the directory but
  157.     // file contained in this directory
  158.     // (so ChangePathTo("dir/subdir/xh.htm") sets m_Path to "dir/subdir/")
  159.     void ChangePathTo(const wxString& location, bool is_dir = FALSE);
  160.  
  161.     wxString GetPath() const {return m_Path;}
  162.  
  163.     // opens given file and returns pointer to input stream.
  164.     // Returns NULL if opening failed.
  165.     // It first tries to open the file in relative scope
  166.     // (based on ChangePathTo()'s value) and then as an absolute
  167.     // path.
  168.     wxFSFile* OpenFile(const wxString& location);
  169.  
  170.     // Finds first/next file that matches spec wildcard. flags can be wxDIR for restricting
  171.     // the query to directories or wxFILE for files only or 0 for either.
  172.     // Returns filename or empty string if no more matching file exists
  173.     wxString FindFirst(const wxString& spec, int flags = 0);
  174.     wxString FindNext();
  175.  
  176.     // Adds FS handler.
  177.     // In fact, this class is only front-end to the FS hanlers :-)
  178.     static void AddHandler(wxFileSystemHandler *handler);
  179.  
  180.     // remove all items from the m_Handlers list
  181.     static void CleanUpHandlers();
  182.  
  183. protected:
  184.     wxString m_Path;
  185.             // the path (location) we are currently in
  186.             // this is path, not file!
  187.             // (so if you opened test/demo.htm, it is
  188.             // "test/", not "test/demo.htm")
  189.     wxString m_LastName;
  190.             // name of last opened file (full path)
  191.     static wxList m_Handlers;
  192.             // list of FS handlers
  193.     wxFileSystemHandler *m_FindFileHandler;
  194.             // handler that succeed in FindFirst query
  195.  
  196.     DECLARE_DYNAMIC_CLASS(wxFileSystem)
  197. };
  198.  
  199.  
  200. /*
  201.  
  202. 'location' syntax:
  203.  
  204. To determine FS type, we're using standard KDE notation:
  205. file:/absolute/path/file.htm
  206. file:relative_path/xxxxx.html
  207. /some/path/x.file               ('file:' is default)
  208. http://www.gnome.org
  209. file:subdir/archive.tar.gz#tar:/README.txt
  210.  
  211. special characters :
  212.   ':' - FS identificator is before this char
  213.   '#' - separator. It can be either HTML anchor ("index.html#news")
  214.             (in case there is no ':' in the string to the right from it)
  215.         or FS separator
  216.             (example : http://www.wxhtml.org/wxhtml-0.1.tar.gz#tar:/include/wxhtml/filesys.h"
  217.              this would access tgz archive stored on web)
  218.   '/' - directory (path) separator. It is used to determine upper-level path.
  219.         HEY! Don't use \ even if you're on Windows!
  220.  
  221. */
  222.  
  223.  
  224. class wxLocalFSHandler : public wxFileSystemHandler
  225. {
  226. public:
  227.     virtual bool CanOpen(const wxString& location);
  228.     virtual wxFSFile* OpenFile(wxFileSystem& fs, const wxString& location);
  229.     virtual wxString FindFirst(const wxString& spec, int flags = 0);
  230.     virtual wxString FindNext();
  231.  
  232.     // wxLocalFSHandler will prefix all filenames with 'root' before accessing
  233.     // files on disk. This effectively makes 'root' the top-level directory
  234.     // and prevents access to files outside this directory.
  235.     // (This is similar to Unix command 'chroot'.)
  236.     static void Chroot(const wxString& root) { ms_root = root; }
  237.  
  238. protected:
  239.     static wxString ms_root;
  240. };
  241.  
  242.  
  243.  
  244. #endif
  245.   // wxUSE_FILESYSTEM
  246.  
  247. #endif
  248.   // __FILESYS_H__
  249.