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