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