X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/7e1e096097346054f8194cf475d03ae9cde46647..ef54e2af142658f1676333ba3a35da7fedd48ac0:/samples/html/virtual/virtual.cpp diff --git a/samples/html/virtual/virtual.cpp b/samples/html/virtual/virtual.cpp index 6efe0580be..8d5a4e91de 100644 --- a/samples/html/virtual/virtual.cpp +++ b/samples/html/virtual/virtual.cpp @@ -4,32 +4,27 @@ // demonstrates virtual file systems feature ///////////////////////////////////////////////////////////////////////////// -#ifdef __GNUG__ - #pragma implementation "test.cpp" - #pragma interface "test.cpp" -#endif - // For compilers that support precompilation, includes "wx/wx.h". -#include +#include "wx/wxprec.h" #ifdef __BORLANDC__ #pragma hdrstop #endif // for all others, include the necessary headers (this file is usually all you -// need because it includes almost all "standard" wxWindows headers +// need because it includes almost all "standard" wxWidgets headers #ifndef WX_PRECOMP - #include + #include "wx/wx.h" #endif -#include +#include "wx/html/htmlwin.h" // new handler class: -#include -#include +#include "wx/wfstream.h" +#include "wx/mstream.h" @@ -45,16 +40,17 @@ public: bool MyVFS::CanOpen(const wxString& location) { - return (GetProtocol(location) == "myVFS"); + return (GetProtocol(location) == wxT("myVFS")); } -wxFSFile* MyVFS::OpenFile(wxFileSystem& fs, const wxString& location) +wxFSFile* MyVFS::OpenFile(wxFileSystem& WXUNUSED(fs), const wxString& location) { wxFSFile *f; wxInputStream *str; - char *buf = (char*)malloc(1024); + static char buf[1024]; + const wxWX2MBbuf loc = location.ToAscii(); sprintf(buf, "

You're in Node %s

" "Where do you want to go?

" @@ -62,12 +58,17 @@ wxFSFile* MyVFS::OpenFile(wxFileSystem& fs, const wxString& location) "sub-2
" "sub-3
" "
", - location.GetData(), location.GetData(), location.GetData(), location.GetData()); - - // WARNING: wxMemoryInputStream will not free buf. - // There is a memory leak here. + (const char*)loc, (const char*)loc, (const char*)loc, + (const char*)loc); + + // NB: There's a terrible hack involved: we fill 'buf' with new data every + // time this method is called and return new wxMemoryInputStream pointing to it. + // This won't work as soon as there are 2+ myVFS files opened. Fortunately, + // this won't happen because wxHTML keeps only one "page" file opened at the + // time. str = new wxMemoryInputStream(buf, strlen(buf)); - f = new wxFSFile(str, location, "text/html", wxEmptyString); + f = new wxFSFile(str, location, wxT("text/html"), wxEmptyString, wxDateTime::Today()); + return f; } @@ -99,12 +100,11 @@ wxFSFile* MyVFS::OpenFile(wxFileSystem& fs, const wxString& location) // event handlers (these functions should _not_ be virtual) void OnQuit(wxCommandEvent& event); - void OnAbout(wxCommandEvent& event); void OnBack(wxCommandEvent& event); void OnForward(wxCommandEvent& event); private: - // any class wishing to process wxWindows events must use this macro + // any class wishing to process wxWidgets events must use this macro DECLARE_EVENT_TABLE() }; @@ -117,29 +117,27 @@ wxFSFile* MyVFS::OpenFile(wxFileSystem& fs, const wxString& location) { // menu items Minimal_Quit = 1, - Minimal_About, Minimal_Back, Minimal_Forward, // controls start here (the numbers are, of course, arbitrary) - Minimal_Text = 1000, + Minimal_Text = 1000 }; // ---------------------------------------------------------------------------- -// event tables and other macros for wxWindows +// event tables and other macros for wxWidgets // ---------------------------------------------------------------------------- -// the event tables connect the wxWindows events with the functions (event +// the event tables connect the wxWidgets events with the functions (event // handlers) which process them. It can be also done at run-time, but for the // simple menu events like this the static method is much simpler. BEGIN_EVENT_TABLE(MyFrame, wxFrame) EVT_MENU(Minimal_Quit, MyFrame::OnQuit) - EVT_MENU(Minimal_About, MyFrame::OnAbout) EVT_MENU(Minimal_Back, MyFrame::OnBack) EVT_MENU(Minimal_Forward, MyFrame::OnForward) END_EVENT_TABLE() - // Create a new application object: this macro will allow wxWindows to create + // Create a new application object: this macro will allow wxWidgets to create // the application object during program execution (it's better than using a // static object for many reasons) and also declares the accessor function // wxGetApp() which will return the reference of the right type (i.e. MyApp and @@ -158,19 +156,19 @@ wxFSFile* MyVFS::OpenFile(wxFileSystem& fs, const wxString& location) bool MyApp::OnInit() { // Create the main application window - MyFrame *frame = new MyFrame("wxHtmlWindow testing application", - wxPoint(50, 50), wxSize(640, 480)); - + MyFrame *frame = new MyFrame(_("wxHtmlWindow testing application"), + wxDefaultPosition, wxSize(640, 480)); + // Show it and tell the application that it's our main window // @@@ what does it do exactly, in fact? is it necessary here? - frame->Show(TRUE); + frame->Show(true); SetTopWindow(frame); wxFileSystem::AddHandler(new MyVFS); - + // success: wxApp::OnRun() will be called which will enter the main message - // loop and the application will run. If we returned FALSE here, the + // loop and the application will run. If we returned false here, the // application would exit immediately. - return TRUE; + return true; } // ---------------------------------------------------------------------------- @@ -181,30 +179,34 @@ wxHtmlWindow *html; // frame constructor MyFrame::MyFrame(const wxString& title, const wxPoint& pos, const wxSize& size) - : wxFrame((wxFrame *)NULL, -1, title, pos, size) + : wxFrame((wxFrame *)NULL, wxID_ANY, title, pos, size) { // create a menu bar wxMenu *menuFile = new wxMenu; wxMenu *menuNav = new wxMenu; - menuFile->Append(Minimal_Quit, "E&xit"); - menuNav->Append(Minimal_Back, "Go &BACK"); - menuNav->Append(Minimal_Forward, "Go &FORWARD"); + menuFile->Append(Minimal_Quit, _("E&xit")); + menuNav->Append(Minimal_Back, _("Go &BACK")); + menuNav->Append(Minimal_Forward, _("Go &FORWARD")); // now append the freshly created menu to the menu bar... wxMenuBar *menuBar = new wxMenuBar; - menuBar->Append(menuFile, "&File"); - menuBar->Append(menuNav, "&Navigate"); + menuBar->Append(menuFile, _("&File")); + menuBar->Append(menuNav, _("&Navigate")); // ... and attach this menu bar to the frame SetMenuBar(menuBar); - CreateStatusBar(1); +#if wxUSE_STATUSBAR + CreateStatusBar(2); +#endif // wxUSE_STATUSBAR html = new wxHtmlWindow(this); - html -> SetRelatedFrame(this, "VFS Demo: '%s'"); + html -> SetRelatedFrame(this, _("VFS Demo: '%s'")); +#if wxUSE_STATUSBAR html -> SetRelatedStatusBar(1); - html -> LoadPage("start.htm"); +#endif // wxUSE_STATUSBAR + html -> LoadPage(wxT("start.htm")); } @@ -212,23 +214,17 @@ wxHtmlWindow *html; void MyFrame::OnQuit(wxCommandEvent& WXUNUSED(event)) { - // TRUE is to force the frame to close - Close(TRUE); - } - - void MyFrame::OnAbout(wxCommandEvent& WXUNUSED(event)) - { + // true is to force the frame to close + Close(true); } - - void MyFrame::OnBack(wxCommandEvent& WXUNUSED(event)) { - if (!html -> HistoryBack()) wxMessageBox("You reached prehistory era!"); + if (!html -> HistoryBack()) wxMessageBox(_("You reached prehistory era!")); } void MyFrame::OnForward(wxCommandEvent& WXUNUSED(event)) { - if (!html -> HistoryForward()) wxMessageBox("No more items in history!"); + if (!html -> HistoryForward()) wxMessageBox(_("No more items in history!")); }