1 /////////////////////////////////////////////////////////////////////////////
2 // Name:        fs_mem.h
3 // Purpose:     in-memory file system
4 // Author:      Vaclav Slavik
5 // Copyright:   (c) 2000 Vaclav Slavik
6 // Licence:     wxWindows licence
7 /////////////////////////////////////////////////////////////////////////////
8 
9 #ifndef _WX_FS_MEM_H_
10 #define _WX_FS_MEM_H_
11 
12 #include "wx/defs.h"
13 
14 #if wxUSE_FILESYSTEM
15 
16 #include "wx/filesys.h"
17 
18 #if wxUSE_GUI
19     class WXDLLIMPEXP_FWD_CORE wxBitmap;
20     class WXDLLIMPEXP_FWD_CORE wxImage;
21 #endif // wxUSE_GUI
22 
23 // ----------------------------------------------------------------------------
24 // wxMemoryFSHandlerBase
25 // ----------------------------------------------------------------------------
26 
27 class WXDLLIMPEXP_BASE wxMemoryFSHandlerBase : public wxFileSystemHandler
28 {
29 public:
30     wxMemoryFSHandlerBase();
31     virtual ~wxMemoryFSHandlerBase();
32 
33     // Add file to list of files stored in memory. Stored data (bitmap, text or
34     // raw data) will be copied into private memory stream and available under
35     // name "memory:" + filename
36     static void AddFile(const wxString& filename, const wxString& textdata);
37     static void AddFile(const wxString& filename, const void *binarydata, size_t size);
38 #if wxABI_VERSION >= 20805
39     static void AddFileWithMimeType(const wxString& filename,
40                                     const wxString& textdata,
41                                     const wxString& mimetype);
42     static void AddFileWithMimeType(const wxString& filename,
43                                     const void *binarydata, size_t size,
44                                     const wxString& mimetype);
45 #endif // wxABI_VERSION >= 20805
46 
47     // Remove file from memory FS and free occupied memory
48     static void RemoveFile(const wxString& filename);
49 
50     virtual bool CanOpen(const wxString& location);
51     virtual wxFSFile* OpenFile(wxFileSystem& fs, const wxString& location);
52     virtual wxString FindFirst(const wxString& spec, int flags = 0);
53     virtual wxString FindNext();
54 
55 protected:
56     static bool CheckHash(const wxString& filename);
57     static wxHashTable *m_Hash;
58 };
59 
60 // ----------------------------------------------------------------------------
61 // wxMemoryFSHandler
62 // ----------------------------------------------------------------------------
63 
64 #if wxUSE_GUI
65 
66 // add GUI-only operations to the base class
67 class WXDLLIMPEXP_CORE wxMemoryFSHandler : public wxMemoryFSHandlerBase
68 {
69 public:
70     // bring the base class versions into the scope, otherwise they would be
71     // inaccessible in wxMemoryFSHandler
72     // (unfortunately "using" can't be used as gcc 2.95 doesn't have it...)
AddFile(const wxString & filename,const wxString & textdata)73     static void AddFile(const wxString& filename, const wxString& textdata)
74     {
75         wxMemoryFSHandlerBase::AddFile(filename, textdata);
76     }
77 
AddFile(const wxString & filename,const void * binarydata,size_t size)78     static void AddFile(const wxString& filename,
79                         const void *binarydata,
80                         size_t size)
81     {
82         wxMemoryFSHandlerBase::AddFile(filename, binarydata, size);
83     }
84 #if wxABI_VERSION >= 20805
AddFileWithMimeType(const wxString & filename,const wxString & textdata,const wxString & mimetype)85     static void AddFileWithMimeType(const wxString& filename,
86                                     const wxString& textdata,
87                                     const wxString& mimetype)
88     {
89         wxMemoryFSHandlerBase::AddFileWithMimeType(filename,
90                                                    textdata,
91                                                    mimetype);
92     }
AddFileWithMimeType(const wxString & filename,const void * binarydata,size_t size,const wxString & mimetype)93     static void AddFileWithMimeType(const wxString& filename,
94                                     const void *binarydata, size_t size,
95                                     const wxString& mimetype)
96     {
97         wxMemoryFSHandlerBase::AddFileWithMimeType(filename,
98                                                    binarydata, size,
99                                                    mimetype);
100     }
101 #endif // wxABI_VERSION >= 20805
102 
103 #if wxUSE_IMAGE
104     static void AddFile(const wxString& filename,
105                         const wxImage& image,
106                         long type);
107 
108     static void AddFile(const wxString& filename,
109                         const wxBitmap& bitmap,
110                         long type);
111 #endif // wxUSE_IMAGE
112 
113 };
114 
115 #else // !wxUSE_GUI
116 
117 // just the same thing as the base class in wxBase
118 class WXDLLIMPEXP_BASE wxMemoryFSHandler : public wxMemoryFSHandlerBase
119 {
120 };
121 
122 #endif // wxUSE_GUI/!wxUSE_GUI
123 
124 #endif // wxUSE_FILESYSTEM
125 
126 #endif // _WX_FS_MEM_H_
127 
128