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