1 /////////////////////////////////////////////////////////////////////////////
3 // Purpose: wxHelpController demo
4 // Author: Karsten Ballueder
8 // Copyright: (c) Karsten Ballueder, Julian Smart
9 // Licence: wxWindows licence
10 /////////////////////////////////////////////////////////////////////////////
12 // ============================================================================
14 // ============================================================================
16 // ----------------------------------------------------------------------------
18 // ----------------------------------------------------------------------------
20 // For compilers that support precompilation, includes "wx/wx.h".
21 #include "wx/wxprec.h"
27 // for all others, include the necessary headers (this file is usually all you
28 // need because it includes almost all "standard" wxWidgets headers
33 # include "wx/image.h"
35 # include "wx/cshelp.h"
38 # include "wx/tooltip.h"
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.
45 #define USE_HTML_HELP 1
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
54 #define USE_HTML_HELP 0
58 #include "wx/filesys.h"
59 #include "wx/fs_zip.h"
61 #include "wx/html/helpctrl.h"
64 #if wxUSE_MS_HTML_HELP && !defined(__WXUNIVERSAL__)
65 #include "wx/msw/helpchm.h"
68 #if wxUSE_MS_HTML_HELP && wxUSE_WXHTML_HELP && !defined(__WXUNIVERSAL__)
69 #include "wx/msw/helpbest.h"
72 // ----------------------------------------------------------------------------
74 // ----------------------------------------------------------------------------
75 // the application icon
76 #if defined(__WXGTK__) || defined(__WXX11__) || defined(__WXMOTIF__) || defined(__WXMAC__) || defined(__WXMGL__)
77 #include "mondrian.xpm"
80 // ----------------------------------------------------------------------------
82 // ----------------------------------------------------------------------------
84 // Define a new application type, each program should derive a class from wxApp
85 class MyApp
: public wxApp
88 // override base class virtuals
89 // ----------------------------
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();
96 // do some clean up here
100 // Define a new frame type: this is going to be our main frame
101 class MyFrame
: public wxFrame
105 MyFrame(const wxString
& title
, const wxPoint
& pos
, const wxSize
& size
);
107 wxHelpController
& GetHelpController() { return m_help
; }
110 wxHtmlHelpController
& GetAdvancedHtmlHelpController() { return m_advancedHtmlHelp
; }
112 #if wxUSE_MS_HTML_HELP && !defined(__WXUNIVERSAL__)
113 wxCHMHelpController
& GetMSHtmlHelpController() { return m_msHtmlHelp
; }
115 #if wxUSE_MS_HTML_HELP && wxUSE_WXHTML_HELP && !defined(__WXUNIVERSAL__)
116 wxBestHelpController
& GetBestHelpController() { return m_bestHelp
; }
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
);
126 #if wxUSE_MS_HTML_HELP && wxUSE_WXHTML_HELP && !defined(__WXUNIVERSAL__)
127 void OnBestHelp(wxCommandEvent
& event
);
130 void OnModalHtmlHelp(wxCommandEvent
& event
);
133 void OnShowContextHelp(wxCommandEvent
& event
);
134 void OnShowDialogContextHelp(wxCommandEvent
& event
);
136 void ShowHelp(int commandId
, wxHelpControllerBase
& helpController
);
139 wxHelpController m_help
;
142 wxHtmlHelpController m_advancedHtmlHelp
;
143 wxHtmlHelpController m_embeddedHtmlHelp
;
144 wxHtmlHelpWindow
* m_embeddedHelpWindow
;
147 #if wxUSE_MS_HTML_HELP && !defined(__WXUNIVERSAL__)
148 wxCHMHelpController m_msHtmlHelp
;
151 #if wxUSE_MS_HTML_HELP && wxUSE_WXHTML_HELP && !defined(__WXUNIVERSAL__)
152 wxBestHelpController m_bestHelp
;
155 // any class wishing to process wxWidgets events must use this macro
156 DECLARE_EVENT_TABLE()
159 // A custom modal dialog
160 class MyModalDialog
: public wxDialog
163 MyModalDialog(wxWindow
*parent
);
167 DECLARE_EVENT_TABLE()
170 // ----------------------------------------------------------------------------
172 // ----------------------------------------------------------------------------
174 // IDs for the controls and the menu commands
180 HelpDemo_Help_Classes
,
181 HelpDemo_Help_Functions
,
183 HelpDemo_Help_Search
,
184 HelpDemo_Help_ContextHelp
,
185 HelpDemo_Help_DialogContextHelp
,
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
,
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
,
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
,
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
,
214 HelpDemo_Help_Netscape
,
215 // controls start here (the numbers are, of course, arbitrary)
216 HelpDemo_Text
= 1000,
219 // ----------------------------------------------------------------------------
220 // event tables and other macros for wxWidgets
221 // ----------------------------------------------------------------------------
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
)
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
)
242 EVT_MENU(HelpDemo_Advanced_Html_Help_Modal
, MyFrame::OnModalHtmlHelp
)
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
)
253 #if wxUSE_MS_HTML_HELP && wxUSE_WXHTML_HELP && !defined(__WXUNIVERSAL__)
254 EVT_MENU(HelpDemo_Best_Help_Index
, MyFrame::OnBestHelp
)
257 EVT_MENU(HelpDemo_Help_KDE
, MyFrame::OnHelp
)
258 EVT_MENU(HelpDemo_Help_GNOME
, MyFrame::OnHelp
)
259 EVT_MENU(HelpDemo_Help_Netscape
, MyFrame::OnHelp
)
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
269 // ============================================================================
271 // ============================================================================
273 // ----------------------------------------------------------------------------
274 // the application class
275 // ----------------------------------------------------------------------------
277 // `Main program' equivalent: the program execution "starts" here
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
;
285 wxHelpControllerHelpProvider
* provider
= new wxHelpControllerHelpProvider
;
287 wxHelpProvider::Set(provider
);
291 // Required for images in the online documentation
292 wxImage::AddHandler(new wxGIFHandler
);
294 // Required for advanced HTML help
295 #if wxUSE_STREAMS && wxUSE_ZIPSTREAM && wxUSE_ZLIB
296 wxFileSystem::AddHandler(new wxZipFSHandler
);
302 // Create the main application window
303 MyFrame
*frame
= new MyFrame(_T("HelpDemo wxWidgets App"),
304 wxPoint(50, 50), wxSize(450, 340));
306 #if !USE_SIMPLE_HELP_PROVIDER
307 #if wxUSE_MS_HTML_HELP && !defined(__WXUNIVERSAL__)
308 provider
->SetHelpController(& frame
->GetMSHtmlHelpController());
310 provider
->SetHelpController(& frame
->GetHelpController());
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
320 if ( !frame
->GetHelpController().Initialize(_T("doc")) )
322 wxLogError(wxT("Cannot initialize the help system, aborting."));
327 #if wxUSE_MS_HTML_HELP && !defined(__WXUNIVERSAL__)
328 if( !frame
->GetMSHtmlHelpController().Initialize(_T("doc")) )
330 wxLogError(wxT("Cannot initialize the MS HTML Help system."));
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")) )
338 wxLogError(wxT("Cannot initialize the best help system, aborting."));
343 // initialise the advanced HTML help system: this means that the HTML docs are in .htb
345 if ( !frame
->GetAdvancedHtmlHelpController().Initialize(_T("doc")) )
347 wxLogError(wxT("Cannot initialize the advanced HTML help system, aborting."));
354 // defined(__WXMSW__) && wxUSE_MS_HTML_HELP
355 wxString
path(wxGetCwd());
356 if ( !frame
->GetMSHtmlHelpController().Initialize(path
+ _T("\\doc.chm")) )
358 wxLogError("Cannot initialize the MS HTML help system, aborting.");
370 delete wxHelpProvider::Set(NULL
);
375 // ----------------------------------------------------------------------------
377 // ----------------------------------------------------------------------------
380 MyFrame::MyFrame(const wxString
& title
, const wxPoint
& pos
, const wxSize
& size
)
381 : wxFrame((wxFrame
*)NULL
, 300, title
, pos
, size
)
383 , m_embeddedHtmlHelp(wxHF_EMBEDDED
|wxHF_DEFAULT_STYLE
)
386 // set the frame icon
387 SetIcon(wxICON(mondrian
));
390 wxMenu
*menuFile
= new wxMenu
;
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..."));
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..."));
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..."));
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..."));
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"));
431 menuFile
->AppendSeparator();
432 menuFile
->Append(HelpDemo_Quit
, _T("E&xit"));
434 // now append the freshly created menu to the menu bar...
435 wxMenuBar
*menuBar
= new wxMenuBar
;
436 menuBar
->Append(menuFile
, _T("&File"));
438 // ... and attach this menu bar to the frame
442 // create a status bar just for fun (by default with 1 pane only)
444 SetStatusText(_T("Welcome to wxWidgets!"));
445 #endif // wxUSE_STATUSBAR
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
);
453 m_embeddedHelpWindow
->Create(this,
454 wxID_ANY
, wxDefaultPosition
, GetClientSize(), wxTAB_TRAVERSAL
|wxNO_BORDER
, wxHF_DEFAULT_STYLE
);
456 m_embeddedHtmlHelp
.AddBook(wxFileName(_T("doc.zip")));
457 m_embeddedHtmlHelp
.Display(_T("Introduction"));
459 // now create some controls
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));
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."));
476 void MyFrame::OnQuit(wxCommandEvent
& WXUNUSED(event
))
478 // true is to force the frame to close
482 void MyFrame::OnHelp(wxCommandEvent
& event
)
484 ShowHelp(event
.GetId(), m_help
);
487 void MyFrame::OnShowContextHelp(wxCommandEvent
& WXUNUSED(event
))
489 // This starts context help mode, then the user
490 // clicks on a window to send a help message
491 wxContextHelp
contextHelp(this);
494 void MyFrame::OnShowDialogContextHelp(wxCommandEvent
& WXUNUSED(event
))
496 MyModalDialog
dialog(this);
500 void MyFrame::OnAdvancedHtmlHelp(wxCommandEvent
& event
)
503 ShowHelp(event
.GetId(), m_advancedHtmlHelp
);
507 #if wxUSE_MS_HTML_HELP && !defined(__WXUNIVERSAL__)
508 void MyFrame::OnMSHtmlHelp(wxCommandEvent
& event
)
510 ShowHelp(event
.GetId(), m_msHtmlHelp
);
514 #if wxUSE_MS_HTML_HELP && wxUSE_WXHTML_HELP && !defined(__WXUNIVERSAL__)
515 void MyFrame::OnBestHelp(wxCommandEvent
& event
)
517 ShowHelp(event
.GetId(), m_bestHelp
);
522 void MyFrame::OnModalHtmlHelp(wxCommandEvent
& WXUNUSED(event
))
524 wxHtmlModalHelp
modalHelp(this, wxT("doc.zip"), wxT("Introduction"));
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.
532 Section ids are specified as follows for the different formats.
536 The [MAP] section specifies the topic to integer id mapping, e.g.
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.
548 Note that Tex2RTF doesn't currently generate the MAP section automatically.
552 The [MAP] section specifies the HTML filename root to integer id mapping, e.g.
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.
564 Note that Tex2RTF doesn't currently generate the MAP section automatically.
566 Simple wxHTML Help and External HTML Help
568 A wxhelp.map file is used, for example:
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
574 Note that Tex2RTF doesn't currently generate the MAP section automatically.
578 An extension to the .hhc file format is used, specifying a new parameter
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>
587 Again, this is not generated automatically by Tex2RTF, though it could
588 be added quite easily.
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.
595 void MyFrame::ShowHelp(int commandId
, wxHelpControllerBase
& helpController
)
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
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
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
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
:
631 wxString key
= wxGetTextFromUser(_T("Search for?"),
632 _T("Search help for keyword"),
636 helpController
.KeywordSearch(key
);
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();
648 // These three calls are only used by wxExtHelpController
650 case HelpDemo_Help_KDE
:
651 helpController
.SetViewer(_T("kdehelp"));
653 case HelpDemo_Help_GNOME
:
654 helpController
.SetViewer(_T("gnome-help-browser"));
656 case HelpDemo_Help_Netscape
:
657 helpController
.SetViewer(_T("netscape"), wxHELP_NETSCAPE
);
662 // ----------------------------------------------------------------------------
664 // Demonstrates context-sensitive help
665 // ----------------------------------------------------------------------------
667 BEGIN_EVENT_TABLE(MyModalDialog
, wxDialog
)
670 MyModalDialog::MyModalDialog(wxWindow
*parent
)
673 // Add the context-sensitive help button on the caption for MSW
675 SetExtraStyle(wxDIALOG_EX_CONTEXTHELP
);
678 wxDialog::Create(parent
, wxID_ANY
, wxString(_T("Modal dialog")));
680 wxBoxSizer
*sizerTop
= new wxBoxSizer(wxVERTICAL
);
681 wxBoxSizer
*sizerRow
= new wxBoxSizer(wxHORIZONTAL
);
683 wxButton
* btnOK
= new wxButton(this, wxID_OK
, _T("&OK"));
684 btnOK
->SetHelpText(_("The OK button confirms the dialog choices."));
686 wxButton
* btnCancel
= new wxButton(this, wxID_CANCEL
, _T("&Cancel"));
687 btnCancel
->SetHelpText(_("The Cancel button cancels the dialog."));
689 sizerRow
->Add(btnOK
, 0, wxALIGN_CENTER
| wxALL
, 5);
690 sizerRow
->Add(btnCancel
, 0, wxALIGN_CENTER
| wxALL
, 5);
692 // Add explicit context-sensitive help button for non-MSW
694 sizerRow
->Add(new wxContextHelpButton(this), 0, wxALIGN_CENTER
| wxALL
, 5);
697 wxTextCtrl
*text
= new wxTextCtrl(this, wxID_ANY
, wxT("A demo text control"),
698 wxDefaultPosition
, wxSize(300, 100),
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 );
706 sizerTop
->SetSizeHints(this);