1 ///////////////////////////////////////////////////////////////////////////// 2 // Name: test.cpp 3 // Purpose: wxHtml testing example 4 ///////////////////////////////////////////////////////////////////////////// 5 6 // For compilers that support precompilation, includes "wx/wx.h". 7 #include "wx/wxprec.h" 8 9 #ifdef __BORLANDC__ 10 #pragma hdrstop 11 #endif 12 13 // for all others, include the necessary headers (this file is usually all you 14 // need because it includes almost all "standard" wxWidgets headers 15 #ifndef WX_PRECOMP 16 #include "wx/wx.h" 17 #endif 18 19 #include "wx/image.h" 20 #include "wx/html/helpfrm.h" 21 #include "wx/html/helpctrl.h" 22 #include "wx/filesys.h" 23 #include "wx/fs_zip.h" 24 25 // ---------------------------------------------------------------------------- 26 // private classes 27 // ---------------------------------------------------------------------------- 28 29 30 // Define a new application type, each program should derive a class from wxApp 31 class MyApp : public wxApp 32 { 33 public: 34 // override base class virtuals 35 // ---------------------------- 36 37 // this one is called on application startup and is a good place for the app 38 // initialization (doing it here and not in the ctor allows to have an error 39 // return: if OnInit() returns false, the application terminates) 40 virtual bool OnInit(); 41 }; 42 43 44 45 // Define a new frame type: this is going to be our main frame 46 class MyFrame : public wxFrame 47 { 48 public: 49 // ctor(s) 50 MyFrame(const wxString& title, const wxPoint& pos, const wxSize& size); 51 52 // event handlers (these functions should _not_ be virtual) 53 void OnQuit(wxCommandEvent& event); 54 void OnHelp(wxCommandEvent& event); 55 void OnClose(wxCloseEvent& event); 56 private: 57 wxHtmlHelpController help; 58 59 // any class wishing to process wxWidgets events must use this macro 60 DECLARE_EVENT_TABLE() 61 }; 62 63 // ---------------------------------------------------------------------------- 64 // constants 65 // ---------------------------------------------------------------------------- 66 67 // IDs for the controls and the menu commands 68 enum 69 { 70 // menu items 71 Minimal_Quit = 1, 72 Minimal_Help 73 }; 74 75 // ---------------------------------------------------------------------------- 76 // event tables and other macros for wxWidgets 77 // ---------------------------------------------------------------------------- 78 79 // the event tables connect the wxWidgets events with the functions (event 80 // handlers) which process them. It can be also done at run-time, but for the 81 // simple menu events like this the static method is much simpler. BEGIN_EVENT_TABLE(MyFrame,wxFrame)82 BEGIN_EVENT_TABLE(MyFrame, wxFrame) 83 EVT_MENU(Minimal_Quit, MyFrame::OnQuit) 84 EVT_MENU(Minimal_Help, MyFrame::OnHelp) 85 EVT_CLOSE(MyFrame::OnClose) 86 END_EVENT_TABLE() 87 88 // Create a new application object: this macro will allow wxWidgets to create 89 // the application object during program execution (it's better than using a 90 // static object for many reasons) and also declares the accessor function 91 // wxGetApp() which will return the reference of the right type (i.e. MyApp and 92 // not wxApp) 93 IMPLEMENT_APP(MyApp) 94 95 // ============================================================================ 96 // implementation 97 // ============================================================================ 98 99 // ---------------------------------------------------------------------------- 100 // the application class 101 // ---------------------------------------------------------------------------- 102 // `Main program' equivalent: the program execution "starts" here 103 bool MyApp::OnInit() 104 { 105 wxInitAllImageHandlers(); 106 #if wxUSE_STREAMS && wxUSE_ZIPSTREAM && wxUSE_ZLIB 107 wxFileSystem::AddHandler(new wxZipFSHandler); 108 #endif 109 SetVendorName(wxT("wxWidgets")); 110 SetAppName(wxT("wxHTMLHelp")); 111 112 // Create the main application window 113 MyFrame *frame = new MyFrame(_("HTML Help Sample"), 114 wxDefaultPosition, wxDefaultSize); 115 116 // Show it and tell the application that it's our main window 117 // @@@ what does it do exactly, in fact? is it necessary here? 118 frame->Show(true); 119 SetTopWindow(frame); 120 121 122 // success: wxApp::OnRun() will be called which will enter the main message 123 // loop and the application will run. If we returned false here, the 124 // application would exit immediately. 125 return true; 126 } 127 128 // ---------------------------------------------------------------------------- 129 // main frame 130 // ---------------------------------------------------------------------------- 131 132 133 // frame constructor MyFrame(const wxString & title,const wxPoint & pos,const wxSize & size)134 MyFrame::MyFrame(const wxString& title, const wxPoint& pos, const wxSize& size) 135 : wxFrame((wxFrame *)NULL, wxID_ANY, title, pos, size), 136 help(wxHF_DEFAULT_STYLE | wxHF_OPEN_FILES) 137 { 138 // create a menu bar 139 wxMenu *menuFile = new wxMenu; 140 141 menuFile->Append(Minimal_Help, _("&Help")); 142 menuFile->Append(Minimal_Quit, _("E&xit")); 143 144 // now append the freshly created menu to the menu bar... 145 wxMenuBar *menuBar = new wxMenuBar; 146 menuBar->Append(menuFile, _("&File")); 147 148 // ... and attach this menu bar to the frame 149 SetMenuBar(menuBar); 150 151 help.UseConfig(wxConfig::Get()); 152 bool ret; 153 help.SetTempDir(wxT(".")); 154 ret = help.AddBook(wxFileName(wxT("helpfiles/testing.hhp"), wxPATH_UNIX)); 155 if (! ret) 156 wxMessageBox(wxT("Failed adding book helpfiles/testing.hhp")); 157 ret = help.AddBook(wxFileName(wxT("helpfiles/another.hhp"), wxPATH_UNIX)); 158 if (! ret) 159 wxMessageBox(_("Failed adding book helpfiles/another.hhp")); 160 } 161 162 163 // event handlers 164 OnQuit(wxCommandEvent & WXUNUSED (event))165 void MyFrame::OnQuit(wxCommandEvent& WXUNUSED(event)) 166 { 167 // true is to force the frame to close 168 Close(true); 169 } 170 OnHelp(wxCommandEvent & WXUNUSED (event))171 void MyFrame::OnHelp(wxCommandEvent& WXUNUSED(event)) 172 { 173 help.Display(wxT("Test HELPFILE")); 174 } 175 OnClose(wxCloseEvent & event)176 void MyFrame::OnClose(wxCloseEvent& event) 177 { 178 // Close the help frame; this will cause the config data to 179 // get written. 180 if ( help.GetFrame() ) // returns NULL if no help frame active 181 help.GetFrame()->Close(true); 182 // now we can safely delete the config pointer 183 event.Skip(); 184 delete wxConfig::Set(NULL); 185 } 186 187 188 189 190 191 192 193