+#if wxUSE_GUI
+ #include "wx/bitmap.h"
+#endif // wxUSE_GUI
+
+// ----------------------------------------------------------------------------
+// wxMemoryFSHandlerBase
+// ----------------------------------------------------------------------------
+
+class WXDLLIMPEXP_BASE wxMemoryFSHandlerBase : public wxFileSystemHandler
+{
+public:
+ wxMemoryFSHandlerBase();
+ virtual ~wxMemoryFSHandlerBase();
+
+ // Add file to list of files stored in memory. Stored data (bitmap, text or
+ // raw data) will be copied into private memory stream and available under
+ // name "memory:" + filename
+ static void AddFile(const wxString& filename, const wxString& textdata);
+ static void AddFile(const wxString& filename, const void *binarydata, size_t size);
+ static void AddFileWithMimeType(const wxString& filename,
+ const wxString& textdata,
+ const wxString& mimetype);
+ static void AddFileWithMimeType(const wxString& filename,
+ const void *binarydata, size_t size,
+ const wxString& mimetype);
+
+ // Remove file from memory FS and free occupied memory
+ static void RemoveFile(const wxString& filename);
+
+ virtual bool CanOpen(const wxString& location);
+ virtual wxFSFile* OpenFile(wxFileSystem& fs, const wxString& location);
+ virtual wxString FindFirst(const wxString& spec, int flags = 0);
+ virtual wxString FindNext();
+
+protected:
+ // check that the given file is not already present in m_Hash; logs an
+ // error and returns false if it does exist
+ static bool CheckDoesntExist(const wxString& filename);
+
+ // the hash map indexed by the names of the files stored in the memory FS
+ static wxMemoryFSHash m_Hash;
+
+ // the file name currently being searched for, i.e. the argument of the
+ // last FindFirst() call or empty string if FindFirst() hasn't been called
+ // yet or FindNext() didn't find anything
+ wxString m_findArgument;