]> git.saurik.com Git - wxWidgets.git/blame - samples/help/demo.cpp
No real changes, just convert a Mac-specific file to UTF-8.
[wxWidgets.git] / samples / help / demo.cpp
CommitLineData
de5c0ba7 1/////////////////////////////////////////////////////////////////////////////
33b64e6f
JS
2// Name: demo.cpp
3// Purpose: wxHelpController demo
4// Author: Karsten Ballueder
de5c0ba7
KB
5// Modified by:
6// Created: 04/01/98
7// RCS-ID: $Id$
33b64e6f
JS
8// Copyright: (c) Karsten Ballueder, Julian Smart
9// Licence: wxWindows licence
de5c0ba7
KB
10/////////////////////////////////////////////////////////////////////////////
11
12// ============================================================================
13// declarations
14// ============================================================================
15
16// ----------------------------------------------------------------------------
17// headers
18// ----------------------------------------------------------------------------
f96b60aa 19
de5c0ba7
KB
20// For compilers that support precompilation, includes "wx/wx.h".
21#include "wx/wxprec.h"
22
23#ifdef __BORLANDC__
29ea4a29 24# pragma hdrstop
de5c0ba7
KB
25#endif
26
27// for all others, include the necessary headers (this file is usually all you
be5a51fb 28// need because it includes almost all "standard" wxWidgets headers
de5c0ba7 29#ifndef WX_PRECOMP
29ea4a29 30# include "wx/wx.h"
de5c0ba7
KB
31#endif
32
7c4a59a8
JS
33# include "wx/image.h"
34# include "wx/help.h"
fb6261e9 35# include "wx/cshelp.h"
7c4a59a8 36
c43e86bd
JS
37#if wxUSE_TOOLTIPS
38# include "wx/tooltip.h"
39#endif
40
29ea4a29 41// define this to 1 to use HTML help even under Windows (by default, Windows
7c4a59a8 42// version will use WinHelp).
5da69e38 43// Please also see samples/html/helpview.
d22699b5 44#define USE_HTML_HELP 1
7c4a59a8 45
02f51f1f
VZ
46// define this to 1 to use external help controller (not used by default)
47#define USE_EXT_HELP 0
48
8f2a41e9
JS
49// Define this to 0 to use the help controller as the help
50// provider, or to 1 to use the 'simple help provider'
51// (the one implemented with wxTipWindow).
52#define USE_SIMPLE_HELP_PROVIDER 0
53
7c4a59a8
JS
54#if !wxUSE_HTML
55#undef USE_HTML_HELP
56#define USE_HTML_HELP 0
57#endif
58
f96b60aa 59#if USE_HTML_HELP
012f2cb2
GD
60#include "wx/filesys.h"
61#include "wx/fs_zip.h"
7b28757f 62
7b28757f 63#include "wx/html/helpctrl.h"
f96b60aa 64#endif
de5c0ba7 65
3fe1edc2 66#if wxUSE_MS_HTML_HELP && !defined(__WXUNIVERSAL__)
f6bcfd97
BP
67#include "wx/msw/helpchm.h"
68#endif
69
3fe1edc2 70#if wxUSE_MS_HTML_HELP && wxUSE_WXHTML_HELP && !defined(__WXUNIVERSAL__)
3d285623
VS
71#include "wx/msw/helpbest.h"
72#endif
73
02f51f1f
VZ
74#if USE_EXT_HELP
75#include "wx/generic/helpext.h"
76#endif
77
de5c0ba7
KB
78// ----------------------------------------------------------------------------
79// ressources
80// ----------------------------------------------------------------------------
81// the application icon
618f2efa 82#if defined(__WXGTK__) || defined(__WXX11__) || defined(__WXMOTIF__) || defined(__WXMAC__) || defined(__WXMGL__)
de5c0ba7
KB
83 #include "mondrian.xpm"
84#endif
85
86// ----------------------------------------------------------------------------
87// private classes
88// ----------------------------------------------------------------------------
89
90// Define a new application type, each program should derive a class from wxApp
91class MyApp : public wxApp
92{
93public:
94 // override base class virtuals
95 // ----------------------------
96
97 // this one is called on application startup and is a good place for the app
98 // initialization (doing it here and not in the ctor allows to have an error
99 // return: if OnInit() returns false, the application terminates)
100 virtual bool OnInit();
bd83cb56
VZ
101
102 // do some clean up here
103 virtual int OnExit();
de5c0ba7
KB
104};
105
106// Define a new frame type: this is going to be our main frame
107class MyFrame : public wxFrame
108{
109public:
110 // ctor(s)
111 MyFrame(const wxString& title, const wxPoint& pos, const wxSize& size);
112
02f51f1f 113 wxHelpControllerBase& GetHelpController() { return m_help; }
e66ad5c6 114
7c4a59a8 115#if USE_HTML_HELP
7b28757f 116 wxHtmlHelpController& GetAdvancedHtmlHelpController() { return m_advancedHtmlHelp; }
7c4a59a8 117#endif
3fe1edc2 118#if wxUSE_MS_HTML_HELP && !defined(__WXUNIVERSAL__)
f6bcfd97
BP
119 wxCHMHelpController& GetMSHtmlHelpController() { return m_msHtmlHelp; }
120#endif
3fe1edc2 121#if wxUSE_MS_HTML_HELP && wxUSE_WXHTML_HELP && !defined(__WXUNIVERSAL__)
3d285623
VS
122 wxBestHelpController& GetBestHelpController() { return m_bestHelp; }
123#endif
7c4a59a8 124
de5c0ba7
KB
125 // event handlers (these functions should _not_ be virtual)
126 void OnQuit(wxCommandEvent& event);
127 void OnHelp(wxCommandEvent& event);
7b28757f 128 void OnAdvancedHtmlHelp(wxCommandEvent& event);
3fe1edc2 129#if wxUSE_MS_HTML_HELP && !defined(__WXUNIVERSAL__)
f6bcfd97 130 void OnMSHtmlHelp(wxCommandEvent& event);
3fe1edc2
WS
131#endif
132#if wxUSE_MS_HTML_HELP && wxUSE_WXHTML_HELP && !defined(__WXUNIVERSAL__)
3d285623 133 void OnBestHelp(wxCommandEvent& event);
3fe1edc2 134#endif
3755cfa6
JS
135#if USE_HTML_HELP
136 void OnModalHtmlHelp(wxCommandEvent& event);
137#endif
de5c0ba7 138
b96340e6 139 void OnShowContextHelp(wxCommandEvent& event);
542acbee 140 void OnShowDialogContextHelp(wxCommandEvent& event);
b96340e6 141
5da69e38
JS
142 void ShowHelp(int commandId, wxHelpControllerBase& helpController);
143
de5c0ba7 144private:
02f51f1f
VZ
145#if USE_EXT_HELP
146 wxExtHelpController m_help;
147#else
7c4a59a8 148 wxHelpController m_help;
02f51f1f 149#endif
7c4a59a8
JS
150
151#if USE_HTML_HELP
7b28757f 152 wxHtmlHelpController m_advancedHtmlHelp;
3755cfa6
JS
153 wxHtmlHelpController m_embeddedHtmlHelp;
154 wxHtmlHelpWindow* m_embeddedHelpWindow;
7c4a59a8 155#endif
f96b60aa 156
3fe1edc2 157#if wxUSE_MS_HTML_HELP && !defined(__WXUNIVERSAL__)
f6bcfd97
BP
158 wxCHMHelpController m_msHtmlHelp;
159#endif
160
3fe1edc2 161#if wxUSE_MS_HTML_HELP && wxUSE_WXHTML_HELP && !defined(__WXUNIVERSAL__)
3d285623
VS
162 wxBestHelpController m_bestHelp;
163#endif
164
be5a51fb 165 // any class wishing to process wxWidgets events must use this macro
de5c0ba7
KB
166 DECLARE_EVENT_TABLE()
167};
168
542acbee
JS
169// A custom modal dialog
170class MyModalDialog : public wxDialog
171{
172public:
173 MyModalDialog(wxWindow *parent);
174
542acbee
JS
175private:
176
177 DECLARE_EVENT_TABLE()
178};
179
de5c0ba7
KB
180// ----------------------------------------------------------------------------
181// constants
182// ----------------------------------------------------------------------------
183
184// IDs for the controls and the menu commands
185enum
186{
187 // menu items
5100cabf 188 HelpDemo_Quit = 100,
33b64e6f
JS
189 HelpDemo_Help_Index,
190 HelpDemo_Help_Classes,
191 HelpDemo_Help_Functions,
192 HelpDemo_Help_Help,
7c4a59a8 193 HelpDemo_Help_Search,
b96340e6 194 HelpDemo_Help_ContextHelp,
542acbee 195 HelpDemo_Help_DialogContextHelp,
7c4a59a8
JS
196
197 HelpDemo_Html_Help_Index,
198 HelpDemo_Html_Help_Classes,
199 HelpDemo_Html_Help_Functions,
200 HelpDemo_Html_Help_Help,
201 HelpDemo_Html_Help_Search,
202
7b28757f
JS
203 HelpDemo_Advanced_Html_Help_Index,
204 HelpDemo_Advanced_Html_Help_Classes,
205 HelpDemo_Advanced_Html_Help_Functions,
206 HelpDemo_Advanced_Html_Help_Help,
207 HelpDemo_Advanced_Html_Help_Search,
3755cfa6 208 HelpDemo_Advanced_Html_Help_Modal,
7b28757f 209
f6bcfd97
BP
210 HelpDemo_MS_Html_Help_Index,
211 HelpDemo_MS_Html_Help_Classes,
212 HelpDemo_MS_Html_Help_Functions,
213 HelpDemo_MS_Html_Help_Help,
214 HelpDemo_MS_Html_Help_Search,
215
3d285623
VS
216 HelpDemo_Best_Help_Index,
217 HelpDemo_Best_Help_Classes,
218 HelpDemo_Best_Help_Functions,
219 HelpDemo_Best_Help_Help,
220 HelpDemo_Best_Help_Search,
221
33b64e6f
JS
222 HelpDemo_Help_KDE,
223 HelpDemo_Help_GNOME,
224 HelpDemo_Help_Netscape,
de5c0ba7 225 // controls start here (the numbers are, of course, arbitrary)
004f4002 226 HelpDemo_Text = 1000
de5c0ba7
KB
227};
228
229// ----------------------------------------------------------------------------
be5a51fb 230// event tables and other macros for wxWidgets
de5c0ba7
KB
231// ----------------------------------------------------------------------------
232
be5a51fb 233// the event tables connect the wxWidgets events with the functions (event
de5c0ba7
KB
234// handlers) which process them. It can be also done at run-time, but for the
235// simple menu events like this the static method is much simpler.
236BEGIN_EVENT_TABLE(MyFrame, wxFrame)
33b64e6f
JS
237 EVT_MENU(HelpDemo_Quit, MyFrame::OnQuit)
238 EVT_MENU(HelpDemo_Help_Index, MyFrame::OnHelp)
239 EVT_MENU(HelpDemo_Help_Classes, MyFrame::OnHelp)
240 EVT_MENU(HelpDemo_Help_Functions, MyFrame::OnHelp)
241 EVT_MENU(HelpDemo_Help_Help, MyFrame::OnHelp)
7c4a59a8 242 EVT_MENU(HelpDemo_Help_Search, MyFrame::OnHelp)
b96340e6 243 EVT_MENU(HelpDemo_Help_ContextHelp, MyFrame::OnShowContextHelp)
542acbee 244 EVT_MENU(HelpDemo_Help_DialogContextHelp, MyFrame::OnShowDialogContextHelp)
b96340e6 245
7b28757f
JS
246 EVT_MENU(HelpDemo_Advanced_Html_Help_Index, MyFrame::OnAdvancedHtmlHelp)
247 EVT_MENU(HelpDemo_Advanced_Html_Help_Classes, MyFrame::OnAdvancedHtmlHelp)
248 EVT_MENU(HelpDemo_Advanced_Html_Help_Functions, MyFrame::OnAdvancedHtmlHelp)
249 EVT_MENU(HelpDemo_Advanced_Html_Help_Help, MyFrame::OnAdvancedHtmlHelp)
250 EVT_MENU(HelpDemo_Advanced_Html_Help_Search, MyFrame::OnAdvancedHtmlHelp)
3755cfa6
JS
251#if USE_HTML_HELP
252 EVT_MENU(HelpDemo_Advanced_Html_Help_Modal, MyFrame::OnModalHtmlHelp)
253#endif
7b28757f 254
3fe1edc2 255#if wxUSE_MS_HTML_HELP && !defined(__WXUNIVERSAL__)
f6bcfd97
BP
256 EVT_MENU(HelpDemo_MS_Html_Help_Index, MyFrame::OnMSHtmlHelp)
257 EVT_MENU(HelpDemo_MS_Html_Help_Classes, MyFrame::OnMSHtmlHelp)
258 EVT_MENU(HelpDemo_MS_Html_Help_Functions, MyFrame::OnMSHtmlHelp)
259 EVT_MENU(HelpDemo_MS_Html_Help_Help, MyFrame::OnMSHtmlHelp)
260 EVT_MENU(HelpDemo_MS_Html_Help_Search, MyFrame::OnMSHtmlHelp)
3fe1edc2 261#endif
f6bcfd97 262
3fe1edc2 263#if wxUSE_MS_HTML_HELP && wxUSE_WXHTML_HELP && !defined(__WXUNIVERSAL__)
3d285623 264 EVT_MENU(HelpDemo_Best_Help_Index, MyFrame::OnBestHelp)
3fe1edc2 265#endif
3d285623 266
33b64e6f
JS
267 EVT_MENU(HelpDemo_Help_KDE, MyFrame::OnHelp)
268 EVT_MENU(HelpDemo_Help_GNOME, MyFrame::OnHelp)
269 EVT_MENU(HelpDemo_Help_Netscape, MyFrame::OnHelp)
de5c0ba7
KB
270END_EVENT_TABLE()
271
be5a51fb 272// Create a new application object: this macro will allow wxWidgets to create
de5c0ba7
KB
273// the application object during program execution (it's better than using a
274// static object for many reasons) and also declares the accessor function
275// wxGetApp() which will return the reference of the right type (i.e. MyApp and
276// not wxApp)
277IMPLEMENT_APP(MyApp)
278
279// ============================================================================
280// implementation
281// ============================================================================
282
283// ----------------------------------------------------------------------------
284// the application class
285// ----------------------------------------------------------------------------
286
287// `Main program' equivalent: the program execution "starts" here
288bool MyApp::OnInit()
289{
45e6e6f8
VZ
290 if ( !wxApp::OnInit() )
291 return false;
292
5100cabf
JS
293 // Create a simple help provider to make SetHelpText() do something.
294 // Note that this must be set before any SetHelpText() calls are made.
8f2a41e9
JS
295#if USE_SIMPLE_HELP_PROVIDER
296 wxSimpleHelpProvider* provider = new wxSimpleHelpProvider;
297#else
5100cabf 298 wxHelpControllerHelpProvider* provider = new wxHelpControllerHelpProvider;
8f2a41e9 299#endif
5100cabf
JS
300 wxHelpProvider::Set(provider);
301
02f51f1f 302#if USE_HTML_HELP
a6c355d2
VZ
303 #if wxUSE_GIF
304 // Required for images in the online documentation
305 wxImage::AddHandler(new wxGIFHandler);
306 #endif // wxUSE_GIF
7b28757f
JS
307
308 // Required for advanced HTML help
a6c355d2
VZ
309 #if wxUSE_STREAMS && wxUSE_ZIPSTREAM && wxUSE_ZLIB
310 wxFileSystem::AddHandler(new wxZipFSHandler);
311 #endif
312#endif // wxUSE_HTML
7c4a59a8 313
de5c0ba7 314 // Create the main application window
9a83f860 315 MyFrame *frame = new MyFrame(wxT("HelpDemo wxWidgets App"),
de5c0ba7
KB
316 wxPoint(50, 50), wxSize(450, 340));
317
8f2a41e9 318#if !USE_SIMPLE_HELP_PROVIDER
3fe1edc2 319#if wxUSE_MS_HTML_HELP && !defined(__WXUNIVERSAL__)
5100cabf
JS
320 provider->SetHelpController(& frame->GetMSHtmlHelpController());
321#else
322 provider->SetHelpController(& frame->GetHelpController());
8f2a41e9 323#endif
a6c355d2 324#endif // !USE_SIMPLE_HELP_PROVIDER
5100cabf 325
3fe1edc2 326 frame->Show(true);
de5c0ba7
KB
327 SetTopWindow(frame);
328
e66ad5c6
VZ
329 // initialise the help system: this means that we'll use doc.hlp file under
330 // Windows and that the HTML docs are in the subdirectory doc for platforms
331 // using HTML help
9a83f860 332 if ( !frame->GetHelpController().Initialize(wxT("doc")) )
e66ad5c6 333 {
4693b20c 334 wxLogError(wxT("Cannot initialize the help system, aborting."));
e66ad5c6 335
3fe1edc2 336 return false;
e66ad5c6
VZ
337 }
338
3fe1edc2 339#if wxUSE_MS_HTML_HELP && !defined(__WXUNIVERSAL__)
9a83f860 340 if( !frame->GetMSHtmlHelpController().Initialize(wxT("doc")) )
3d285623 341 {
4693b20c 342 wxLogError(wxT("Cannot initialize the MS HTML Help system."));
3d285623
VS
343 }
344#endif
345
3fe1edc2 346#if wxUSE_MS_HTML_HELP && wxUSE_WXHTML_HELP && !defined(__WXUNIVERSAL__)
3d285623 347 // you need to call Initialize in order to use wxBestHelpController
9a83f860 348 if( !frame->GetBestHelpController().Initialize(wxT("doc")) )
3d285623 349 {
4693b20c 350 wxLogError(wxT("Cannot initialize the best help system, aborting."));
3d285623
VS
351 }
352#endif
353
7c4a59a8 354#if USE_HTML_HELP
7b28757f
JS
355 // initialise the advanced HTML help system: this means that the HTML docs are in .htb
356 // (zipped) form
9a83f860 357 if ( !frame->GetAdvancedHtmlHelpController().Initialize(wxT("doc")) )
7b28757f 358 {
4693b20c 359 wxLogError(wxT("Cannot initialize the advanced HTML help system, aborting."));
7b28757f 360
3fe1edc2 361 return false;
7b28757f 362 }
7c4a59a8
JS
363#endif
364
3d285623
VS
365#if 0
366 // defined(__WXMSW__) && wxUSE_MS_HTML_HELP
a1b8f548 367 wxString path(wxGetCwd());
9a83f860 368 if ( !frame->GetMSHtmlHelpController().Initialize(path + wxT("\\doc.chm")) )
f6bcfd97
BP
369 {
370 wxLogError("Cannot initialize the MS HTML help system, aborting.");
371
3fe1edc2 372 return false;
f6bcfd97
BP
373 }
374#endif
375
3fe1edc2 376 return true;
de5c0ba7
KB
377}
378
bd83cb56
VZ
379int MyApp::OnExit()
380{
381 // clean up
382 delete wxHelpProvider::Set(NULL);
383
384 return 0;
385}
386
de5c0ba7
KB
387// ----------------------------------------------------------------------------
388// main frame
389// ----------------------------------------------------------------------------
390
391// frame constructor
392MyFrame::MyFrame(const wxString& title, const wxPoint& pos, const wxSize& size)
5100cabf 393 : wxFrame((wxFrame *)NULL, 300, title, pos, size)
3755cfa6
JS
394#if USE_HTML_HELP
395 , m_embeddedHtmlHelp(wxHF_EMBEDDED|wxHF_DEFAULT_STYLE)
396#endif
de5c0ba7
KB
397{
398 // set the frame icon
399 SetIcon(wxICON(mondrian));
400
401 // create a menu bar
402 wxMenu *menuFile = new wxMenu;
403
9a83f860
VZ
404 menuFile->Append(HelpDemo_Help_Index, wxT("&Help Index..."));
405 menuFile->Append(HelpDemo_Help_Classes, wxT("&Help on Classes..."));
406 menuFile->Append(HelpDemo_Help_Functions, wxT("&Help on Functions..."));
407 menuFile->Append(HelpDemo_Help_ContextHelp, wxT("&Context Help..."));
408 menuFile->Append(HelpDemo_Help_DialogContextHelp, wxT("&Dialog Context Help...\tCtrl-H"));
409 menuFile->Append(HelpDemo_Help_Help, wxT("&About Help Demo..."));
410 menuFile->Append(HelpDemo_Help_Search, wxT("&Search help..."));
7c4a59a8 411#if USE_HTML_HELP
7b28757f 412 menuFile->AppendSeparator();
9a83f860
VZ
413 menuFile->Append(HelpDemo_Advanced_Html_Help_Index, wxT("Advanced HTML &Help Index..."));
414 menuFile->Append(HelpDemo_Advanced_Html_Help_Classes, wxT("Advanced HTML &Help on Classes..."));
415 menuFile->Append(HelpDemo_Advanced_Html_Help_Functions, wxT("Advanced HTML &Help on Functions..."));
416 menuFile->Append(HelpDemo_Advanced_Html_Help_Help, wxT("Advanced HTML &About Help Demo..."));
417 menuFile->Append(HelpDemo_Advanced_Html_Help_Search, wxT("Advanced HTML &Search help..."));
418 menuFile->Append(HelpDemo_Advanced_Html_Help_Modal, wxT("Advanced HTML Help &Modal Dialog..."));
7c4a59a8
JS
419#endif
420
3fe1edc2 421#if wxUSE_MS_HTML_HELP && !defined(__WXUNIVERSAL__)
f6bcfd97 422 menuFile->AppendSeparator();
9a83f860
VZ
423 menuFile->Append(HelpDemo_MS_Html_Help_Index, wxT("MS HTML &Help Index..."));
424 menuFile->Append(HelpDemo_MS_Html_Help_Classes, wxT("MS HTML &Help on Classes..."));
425 menuFile->Append(HelpDemo_MS_Html_Help_Functions, wxT("MS HTML &Help on Functions..."));
426 menuFile->Append(HelpDemo_MS_Html_Help_Help, wxT("MS HTML &About Help Demo..."));
427 menuFile->Append(HelpDemo_MS_Html_Help_Search, wxT("MS HTML &Search help..."));
f6bcfd97
BP
428#endif
429
3fe1edc2 430#if wxUSE_MS_HTML_HELP && wxUSE_WXHTML_HELP && !defined(__WXUNIVERSAL__)
3d285623 431 menuFile->AppendSeparator();
9a83f860 432 menuFile->Append(HelpDemo_Best_Help_Index, wxT("Best &Help Index..."));
3d285623
VS
433#endif
434
29ea4a29 435#ifndef __WXMSW__
e66ad5c6 436#if !wxUSE_HTML
de5c0ba7 437 menuFile->AppendSeparator();
9a83f860
VZ
438 menuFile->Append(HelpDemo_Help_KDE, wxT("Use &KDE"));
439 menuFile->Append(HelpDemo_Help_GNOME, wxT("Use &GNOME"));
440 menuFile->Append(HelpDemo_Help_Netscape, wxT("Use &Netscape"));
29ea4a29 441#endif
33b64e6f
JS
442#endif
443 menuFile->AppendSeparator();
9a83f860 444 menuFile->Append(HelpDemo_Quit, wxT("E&xit"));
de5c0ba7
KB
445
446 // now append the freshly created menu to the menu bar...
447 wxMenuBar *menuBar = new wxMenuBar;
9a83f860 448 menuBar->Append(menuFile, wxT("&File"));
de5c0ba7
KB
449
450 // ... and attach this menu bar to the frame
451 SetMenuBar(menuBar);
452
8520f137 453#if wxUSE_STATUSBAR
de5c0ba7
KB
454 // create a status bar just for fun (by default with 1 pane only)
455 CreateStatusBar();
9a83f860 456 SetStatusText(wxT("Welcome to wxWidgets!"));
8520f137 457#endif // wxUSE_STATUSBAR
de5c0ba7 458
3755cfa6
JS
459#if USE_HTML_HELP
460 // Create embedded HTML Help window
461 m_embeddedHelpWindow = new wxHtmlHelpWindow;
462 // m_embeddedHtmlHelp.UseConfig(config, rootPath); // Can set your own config object here
463 m_embeddedHtmlHelp.SetHelpWindow(m_embeddedHelpWindow);
464
465 m_embeddedHelpWindow->Create(this,
466 wxID_ANY, wxDefaultPosition, GetClientSize(), wxTAB_TRAVERSAL|wxNO_BORDER, wxHF_DEFAULT_STYLE);
467
9a83f860
VZ
468 m_embeddedHtmlHelp.AddBook(wxFileName(wxT("doc.zip")));
469 m_embeddedHtmlHelp.Display(wxT("Introduction"));
3755cfa6 470#else
de5c0ba7
KB
471 // now create some controls
472
473 // a panel first - if there were several controls, it would allow us to
474 // navigate between them from the keyboard
5100cabf 475 wxPanel *panel = new wxPanel(this, 301, wxPoint(0, 0), wxSize(400, 200));
5f9ab82d
JS
476 panel->SetHelpText(_("This panel just holds a static text control."));
477 //panel->SetHelpText(wxContextId(300));
de5c0ba7
KB
478
479 // and a static control whose parent is the panel
9a83f860 480 wxStaticText* staticText = new wxStaticText(panel, 302, wxT("Hello, world!"), wxPoint(10, 10));
5100cabf 481 staticText->SetHelpText(_("This static text control isn't doing a lot right now."));
3755cfa6 482#endif
de5c0ba7
KB
483}
484
485
486// event handlers
487
488void MyFrame::OnQuit(wxCommandEvent& WXUNUSED(event))
489{
3fe1edc2
WS
490 // true is to force the frame to close
491 Close(true);
de5c0ba7
KB
492}
493
494void MyFrame::OnHelp(wxCommandEvent& event)
495{
5da69e38
JS
496 ShowHelp(event.GetId(), m_help);
497}
498
87728739 499void MyFrame::OnShowContextHelp(wxCommandEvent& WXUNUSED(event))
b96340e6
JS
500{
501 // This starts context help mode, then the user
502 // clicks on a window to send a help message
503 wxContextHelp contextHelp(this);
504}
505
87728739 506void MyFrame::OnShowDialogContextHelp(wxCommandEvent& WXUNUSED(event))
542acbee
JS
507{
508 MyModalDialog dialog(this);
509 dialog.ShowModal();
510}
511
5da69e38
JS
512void MyFrame::OnAdvancedHtmlHelp(wxCommandEvent& event)
513{
514#if USE_HTML_HELP
515 ShowHelp(event.GetId(), m_advancedHtmlHelp);
516#endif
517}
518
3fe1edc2 519#if wxUSE_MS_HTML_HELP && !defined(__WXUNIVERSAL__)
f6bcfd97
BP
520void MyFrame::OnMSHtmlHelp(wxCommandEvent& event)
521{
f6bcfd97 522 ShowHelp(event.GetId(), m_msHtmlHelp);
f6bcfd97 523}
3fe1edc2 524#endif
f6bcfd97 525
3fe1edc2 526#if wxUSE_MS_HTML_HELP && wxUSE_WXHTML_HELP && !defined(__WXUNIVERSAL__)
3d285623
VS
527void MyFrame::OnBestHelp(wxCommandEvent& event)
528{
3d285623 529 ShowHelp(event.GetId(), m_bestHelp);
3d285623 530}
3fe1edc2 531#endif
3d285623 532
3755cfa6
JS
533#if USE_HTML_HELP
534void MyFrame::OnModalHtmlHelp(wxCommandEvent& WXUNUSED(event))
535{
536 wxHtmlModalHelp modalHelp(this, wxT("doc.zip"), wxT("Introduction"));
537}
538#endif
539
f6bcfd97
BP
540/*
541 Notes: ShowHelp uses section ids for displaying particular topics,
542 but you might want to use a unique keyword to display a topic, instead.
543
544 Section ids are specified as follows for the different formats.
545
546 WinHelp
547
548 The [MAP] section specifies the topic to integer id mapping, e.g.
549
550 [MAP]
551 #define intro 100
552 #define functions 1
553 #define classes 2
554 #define about 3
555
556 The identifier name corresponds to the label used for that topic.
557 You could also put these in a .h file and #include it in both the MAP
558 section and your C++ source.
559
560 Note that Tex2RTF doesn't currently generate the MAP section automatically.
561
562 MS HTML Help
563
564 The [MAP] section specifies the HTML filename root to integer id mapping, e.g.
565
566 [MAP]
567 #define doc1 100
568 #define doc3 1
569 #define doc2 2
570 #define doc4 3
571
572 The identifier name corresponds to the HTML filename used for that topic.
573 You could also put these in a .h file and #include it in both the MAP
574 section and your C++ source.
575
576 Note that Tex2RTF doesn't currently generate the MAP section automatically.
577
578 Simple wxHTML Help and External HTML Help
579
580 A wxhelp.map file is used, for example:
581
be5a51fb
JS
582 0 wx.htm ; wxWidgets: Help index; additional keywords like overview
583 1 wx204.htm ; wxWidgets Function Reference
584 2 wx34.htm ; wxWidgets Class Reference
f6bcfd97
BP
585
586 Note that Tex2RTF doesn't currently generate the MAP section automatically.
587
588 Advanced HTML Help
589
590 An extension to the .hhc file format is used, specifying a new parameter
591 with name="ID":
592
593 <OBJECT type="text/sitemap">
594 <param name="Local" value="doc2.htm#classes">
595 <param name="Name" value="Classes">
596 <param name="ID" value=2>
597 </OBJECT>
598
599 Again, this is not generated automatically by Tex2RTF, though it could
600 be added quite easily.
601
602 Unfortunately adding the ID parameters appears to interfere with MS HTML Help,
603 so you should not try to compile a .chm file from a .hhc file with
604 this extension, or the contents will be messed up.
605 */
606
5da69e38
JS
607void MyFrame::ShowHelp(int commandId, wxHelpControllerBase& helpController)
608{
609 switch(commandId)
de5c0ba7 610 {
4c6b8d9e
VZ
611 case HelpDemo_Help_Classes:
612 case HelpDemo_Html_Help_Classes:
613 case HelpDemo_Advanced_Html_Help_Classes:
614 case HelpDemo_MS_Html_Help_Classes:
615 case HelpDemo_Best_Help_Classes:
616 helpController.DisplaySection(2);
617 //helpController.DisplaySection("Classes"); // An alternative form for most controllers
618 break;
619
620 case HelpDemo_Help_Functions:
621 case HelpDemo_Html_Help_Functions:
622 case HelpDemo_Advanced_Html_Help_Functions:
623 case HelpDemo_MS_Html_Help_Functions:
624 helpController.DisplaySection(1);
625 //helpController.DisplaySection("Functions"); // An alternative form for most controllers
626 break;
627
628 case HelpDemo_Help_Help:
629 case HelpDemo_Html_Help_Help:
630 case HelpDemo_Advanced_Html_Help_Help:
631 case HelpDemo_MS_Html_Help_Help:
632 case HelpDemo_Best_Help_Help:
633 helpController.DisplaySection(3);
634 //helpController.DisplaySection("About"); // An alternative form for most controllers
635 break;
636
637 case HelpDemo_Help_Search:
638 case HelpDemo_Html_Help_Search:
639 case HelpDemo_Advanced_Html_Help_Search:
640 case HelpDemo_MS_Html_Help_Search:
641 case HelpDemo_Best_Help_Search:
642 {
9a83f860
VZ
643 wxString key = wxGetTextFromUser(wxT("Search for?"),
644 wxT("Search help for keyword"),
dabbc6a5 645 wxEmptyString,
4c6b8d9e
VZ
646 this);
647 if(! key.IsEmpty())
648 helpController.KeywordSearch(key);
649 }
650 break;
651
652 case HelpDemo_Help_Index:
653 case HelpDemo_Html_Help_Index:
654 case HelpDemo_Advanced_Html_Help_Index:
655 case HelpDemo_MS_Html_Help_Index:
656 case HelpDemo_Best_Help_Index:
657 helpController.DisplayContents();
658 break;
659
660 // These three calls are only used by wxExtHelpController
661
662 case HelpDemo_Help_KDE:
9a83f860 663 helpController.SetViewer(wxT("kdehelp"));
4c6b8d9e
VZ
664 break;
665 case HelpDemo_Help_GNOME:
9a83f860 666 helpController.SetViewer(wxT("gnome-help-browser"));
4c6b8d9e
VZ
667 break;
668 case HelpDemo_Help_Netscape:
9a83f860 669 helpController.SetViewer(wxT("netscape"), wxHELP_NETSCAPE);
4c6b8d9e 670 break;
7b28757f 671 }
7b28757f
JS
672}
673
542acbee
JS
674// ----------------------------------------------------------------------------
675// MyModalDialog
676// Demonstrates context-sensitive help
677// ----------------------------------------------------------------------------
678
679BEGIN_EVENT_TABLE(MyModalDialog, wxDialog)
542acbee
JS
680END_EVENT_TABLE()
681
682MyModalDialog::MyModalDialog(wxWindow *parent)
9a83f860 683 : wxDialog(parent, wxID_ANY, wxString(wxT("Modal dialog")))
542acbee 684{
42447c4f
VZ
685 // Add the context-sensitive help button on the caption for the platforms
686 // which support it (currently MSW only)
5100cabf 687 SetExtraStyle(wxDIALOG_EX_CONTEXTHELP);
5100cabf 688
542acbee
JS
689
690 wxBoxSizer *sizerTop = new wxBoxSizer(wxVERTICAL);
691 wxBoxSizer *sizerRow = new wxBoxSizer(wxHORIZONTAL);
692
9a83f860 693 wxButton* btnOK = new wxButton(this, wxID_OK, wxT("&OK"));
5100cabf
JS
694 btnOK->SetHelpText(_("The OK button confirms the dialog choices."));
695
9a83f860 696 wxButton* btnCancel = new wxButton(this, wxID_CANCEL, wxT("&Cancel"));
5100cabf
JS
697 btnCancel->SetHelpText(_("The Cancel button cancels the dialog."));
698
542acbee
JS
699 sizerRow->Add(btnOK, 0, wxALIGN_CENTER | wxALL, 5);
700 sizerRow->Add(btnCancel, 0, wxALIGN_CENTER | wxALL, 5);
701
5100cabf
JS
702 // Add explicit context-sensitive help button for non-MSW
703#ifndef __WXMSW__
542acbee
JS
704 sizerRow->Add(new wxContextHelpButton(this), 0, wxALIGN_CENTER | wxALL, 5);
705#endif
706
3fe1edc2 707 wxTextCtrl *text = new wxTextCtrl(this, wxID_ANY, wxT("A demo text control"),
bd83cb56
VZ
708 wxDefaultPosition, wxSize(300, 100),
709 wxTE_MULTILINE);
4693b20c 710 text->SetHelpText(_("Type text here if you have got nothing more interesting to do"));
bd83cb56 711 sizerTop->Add(text, 0, wxEXPAND|wxALIGN_CENTER_VERTICAL|wxALL, 5 );
542acbee
JS
712 sizerTop->Add(sizerRow, 0, wxALIGN_RIGHT|wxALIGN_CENTER_VERTICAL|wxALL, 5 );
713
92c01615 714 SetSizerAndFit(sizerTop);
542acbee
JS
715
716 btnOK->SetFocus();
717 btnOK->SetDefault();
718}
719