1 /////////////////////////////////////////////////////////////////////////////
2 // Name:        fs_mem.h
3 // Purpose:     interface of wxMemoryFSHandler
4 // Author:      wxWidgets team
5 // Licence:     wxWindows licence
6 /////////////////////////////////////////////////////////////////////////////
7 
8 /**
9     @class wxMemoryFSHandler
10 
11     This wxFileSystem handler can store arbitrary data in memory stream and make
12     them accessible via an URL.
13 
14     It is particularly suitable for storing bitmaps from resources or included XPM
15     files so that they can be used with wxHTML or wxWebView.
16 
17     Filenames are prefixed with @c "memory:", e.g. @c "memory:myfile.html".
18 
19     Example:
20 
21     @code
22     #ifndef __WXMSW__
23     #include "logo.xpm"
24     #endif
25 
26     void MyFrame::OnAbout(wxCommandEvent&)
27     {
28         wxFileSystem::AddHandler(new wxMemoryFSHandler);
29         wxMemoryFSHandler::AddFile("logo.png", wxBITMAP(logo), wxBITMAP_TYPE_PNG);
30         wxMemoryFSHandler::AddFile("about.htm",
31                                 "<html><body>About: "
32                                 "<img src=\"memory:logo.png\"></body></html>");
33 
34         wxDialog dlg(this, -1, wxString(_("About")));
35         wxBoxSizer *topsizer;
36         topsizer = new wxBoxSizer(wxVERTICAL);
37     #ifdef USE_WEBVIEW
38         wxWebView* browser = wxWebView::New(&dlg, wxID_ANY, wxWebViewDefaultURLStr,
39                                  wxDefaultPosition, wxSize(380, 160));
40         browser->RegisterHandler(wxSharedPtr<wxWebViewHandler>(new wxWebViewFSHandler("memory")));
41         browser->LoadURL("memory:about.htm");
42     #else // Use wxHtml
43         wxHtmlWindow *browser;
44         browser = new wxHtmlWindow(&dlg, -1, wxDefaultPosition,
45                                    wxSize(380, 160), wxHW_SCROLLBAR_NEVER);
46         browser->SetBorders(0);
47         browser->LoadPage("memory:about.htm");
48         browser->SetSize(browser->GetInternalRepresentation()->GetWidth(),
49                     browser->GetInternalRepresentation()->GetHeight());
50     #endif
51         topsizer->Add(browser, 1, wxALL, 10);
52         topsizer->Add(new wxStaticLine(&dlg, -1), 0, wxEXPAND | wxLEFT | wxRIGHT, 10);
53         topsizer->Add(new wxButton(&dlg, wxID_OK, "Ok"),
54                     0, wxALL | wxALIGN_RIGHT, 15);
55         dlg.SetAutoLayout(true);
56         dlg.SetSizer(topsizer);
57         topsizer->Fit(&dlg);
58         dlg.Centre();
59         dlg.ShowModal();
60 
61         wxMemoryFSHandler::RemoveFile("logo.png");
62         wxMemoryFSHandler::RemoveFile("about.htm");
63     }
64     @endcode
65 
66     @library{wxbase}
67     @category{vfs}
68 
69     @see wxMemoryFSHandler::AddFileWithMimeType
70 */
71 class wxMemoryFSHandler : public wxFileSystemHandler
72 {
73 public:
74     /**
75         Constructor.
76     */
77     wxMemoryFSHandler();
78 
79     //@{
80     /**
81         Adds a file to the list of the files stored in memory.
82 
83         Stored data (bitmap, text or raw data) will be copied into private memory
84         stream and available under name @c "memory:" + @e filename.
85 
86         @note you must use a @a type value (aka image format) that wxWidgets
87               can save (e.g. JPG, PNG, see wxImage documentation)!
88 
89         @see AddFileWithMimeType()
90     */
91     static void AddFile(const wxString& filename, wxImage& image, wxBitmapType type);
92     static void AddFile(const wxString& filename, const wxBitmap& bitmap, wxBitmapType type);
93     static void AddFile(const wxString& filename, const wxString& textdata);
94     static void AddFile(const wxString& filename, const void *binarydata, size_t size);
95 
96     //@}
97 
98     //@{
99     /**
100         Like AddFile(), but lets you explicitly specify added file's MIME type.
101 
102         This version should be used whenever you know the MIME type, because it
103         makes accessing the files faster.
104 
105         @since 2.8.5
106 
107         @see AddFile()
108     */
109     static void AddFileWithMimeType(const wxString& filename,
110                                     const wxString& textdata,
111                                     const wxString& mimetype);
112     static void AddFileWithMimeType(const wxString& filename,
113                                     const void* binarydata,
114                                     size_t size,
115                                     const wxString& mimetype);
116     //@}
117 
118     /**
119         Removes a file from memory FS and frees the occupied memory.
120     */
121     static void RemoveFile(const wxString& filename);
122 };
123 
124