X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/55acd85e7134f8d16d40dc21cd665c5ea18a98f1..b4414c1f3778c54fb0ddfd2eea63f940bbee6d0f:/samples/help/demo.cpp diff --git a/samples/help/demo.cpp b/samples/help/demo.cpp index 01e9b6fbca..35778a4694 100644 --- a/samples/help/demo.cpp +++ b/samples/help/demo.cpp @@ -1,12 +1,12 @@ ///////////////////////////////////////////////////////////////////////////// -// Name: minimal.cpp -// Purpose: Minimal wxWindows sample -// Author: Julian Smart +// Name: demo.cpp +// Purpose: wxHelpController demo +// Author: Karsten Ballueder // Modified by: // Created: 04/01/98 // RCS-ID: $Id$ -// Copyright: (c) Julian Smart and Markus Holzem -// Licence: wxWindows license +// Copyright: (c) Karsten Ballueder, Julian Smart +// Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// // ============================================================================ @@ -16,26 +16,37 @@ // ---------------------------------------------------------------------------- // headers // ---------------------------------------------------------------------------- -#ifdef __GNUG__ - #pragma implementation "minimal.cpp" - #pragma interface "minimal.cpp" -#endif // For compilers that support precompilation, includes "wx/wx.h". #include "wx/wxprec.h" #ifdef __BORLANDC__ - #pragma hdrstop +# pragma hdrstop #endif // for all others, include the necessary headers (this file is usually all you // need because it includes almost all "standard" wxWindows headers #ifndef WX_PRECOMP - #include "wx/wx.h" +# include "wx/wx.h" #endif -#include "wx/helpbase.h" -#include "wx/help.h" +# include "wx/image.h" +# include "wx/help.h" + +// define this to 1 to use HTML help even under Windows (by default, Windows +// version will use WinHelp). +// Please also see samples/html/helpview for a more complex help viewer. + +#define USE_HTML_HELP 1 + +#if !wxUSE_HTML +#undef USE_HTML_HELP +#define USE_HTML_HELP 0 +#endif + +#if USE_HTML_HELP +# include "wx/generic/helpwxht.h" +#endif // ---------------------------------------------------------------------------- // ressources @@ -69,12 +80,24 @@ public: // ctor(s) MyFrame(const wxString& title, const wxPoint& pos, const wxSize& size); + wxHelpController& GetHelpController() { return m_help; } + +#if USE_HTML_HELP + wxHelpControllerHtml& GetHtmlHelpController() { return m_htmlHelp; } +#endif + // event handlers (these functions should _not_ be virtual) void OnQuit(wxCommandEvent& event); void OnHelp(wxCommandEvent& event); + void OnHtmlHelp(wxCommandEvent& event); private: - wxHelpController help; + wxHelpController m_help; + +#if USE_HTML_HELP + wxHelpControllerHtml m_htmlHelp; +#endif + // any class wishing to process wxWindows events must use this macro DECLARE_EVENT_TABLE() }; @@ -87,17 +110,24 @@ private: enum { // menu items - Minimal_Quit = 1, - Minimal_Help_Index, - Minimal_Help_Classes, - Minimal_Help_Functions, - Minimal_Help_Help, - Minimal_Help_KDE, - Minimal_Help_GNOME, - Minimal_Help_Netscape, - Minimal_Help_Search, + HelpDemo_Quit = 1, + HelpDemo_Help_Index, + HelpDemo_Help_Classes, + HelpDemo_Help_Functions, + HelpDemo_Help_Help, + HelpDemo_Help_Search, + + HelpDemo_Html_Help_Index, + HelpDemo_Html_Help_Classes, + HelpDemo_Html_Help_Functions, + HelpDemo_Html_Help_Help, + HelpDemo_Html_Help_Search, + + HelpDemo_Help_KDE, + HelpDemo_Help_GNOME, + HelpDemo_Help_Netscape, // controls start here (the numbers are, of course, arbitrary) - Minimal_Text = 1000, + HelpDemo_Text = 1000 }; // ---------------------------------------------------------------------------- @@ -108,15 +138,22 @@ enum // handlers) which process them. It can be also done at run-time, but for the // simple menu events like this the static method is much simpler. BEGIN_EVENT_TABLE(MyFrame, wxFrame) - EVT_MENU(Minimal_Quit, MyFrame::OnQuit) - EVT_MENU(Minimal_Help_Index, MyFrame::OnHelp) - EVT_MENU(Minimal_Help_Classes, MyFrame::OnHelp) - EVT_MENU(Minimal_Help_Functions, MyFrame::OnHelp) - EVT_MENU(Minimal_Help_Help, MyFrame::OnHelp) - EVT_MENU(Minimal_Help_KDE, MyFrame::OnHelp) - EVT_MENU(Minimal_Help_GNOME, MyFrame::OnHelp) - EVT_MENU(Minimal_Help_Netscape, MyFrame::OnHelp) - EVT_MENU(Minimal_Help_Search, MyFrame::OnHelp) + EVT_MENU(HelpDemo_Quit, MyFrame::OnQuit) + EVT_MENU(HelpDemo_Help_Index, MyFrame::OnHelp) + EVT_MENU(HelpDemo_Help_Classes, MyFrame::OnHelp) + EVT_MENU(HelpDemo_Help_Functions, MyFrame::OnHelp) + EVT_MENU(HelpDemo_Help_Help, MyFrame::OnHelp) + EVT_MENU(HelpDemo_Help_Search, MyFrame::OnHelp) + + EVT_MENU(HelpDemo_Html_Help_Index, MyFrame::OnHtmlHelp) + EVT_MENU(HelpDemo_Html_Help_Classes, MyFrame::OnHtmlHelp) + EVT_MENU(HelpDemo_Html_Help_Functions, MyFrame::OnHtmlHelp) + EVT_MENU(HelpDemo_Html_Help_Help, MyFrame::OnHtmlHelp) + EVT_MENU(HelpDemo_Html_Help_Search, MyFrame::OnHtmlHelp) + + EVT_MENU(HelpDemo_Help_KDE, MyFrame::OnHelp) + EVT_MENU(HelpDemo_Help_GNOME, MyFrame::OnHelp) + EVT_MENU(HelpDemo_Help_Netscape, MyFrame::OnHelp) END_EVENT_TABLE() // Create a new application object: this macro will allow wxWindows to create @@ -137,18 +174,41 @@ IMPLEMENT_APP(MyApp) // `Main program' equivalent: the program execution "starts" here bool MyApp::OnInit() { +#if wxUSE_HTML +#if wxUSE_GIF + // Required for images in the online documentation + wxImage::AddHandler(new wxGIFHandler); +#endif +#endif + // Create the main application window - MyFrame *frame = new MyFrame("Minimal wxWindows App", + MyFrame *frame = new MyFrame("HelpDemo wxWindows App", wxPoint(50, 50), wxSize(450, 340)); - // Show it and tell the application that it's our main window - // @@@ what does it do exactly, in fact? is it necessary here? frame->Show(TRUE); SetTopWindow(frame); - // success: wxApp::OnRun() will be called which will enter the main message - // loop and the application will run. If we returned FALSE here, the - // application would exit immediately. + // initialise the help system: this means that we'll use doc.hlp file under + // Windows and that the HTML docs are in the subdirectory doc for platforms + // using HTML help + if ( !frame->GetHelpController().Initialize("doc") ) + { + wxLogError("Cannot initialize the help system, aborting."); + + return FALSE; + } + +#if USE_HTML_HELP + // initialise the help system: this means that the HTML docs are in the + // subdirectory doc for platforms using HTML help + if ( !frame->GetHtmlHelpController().Initialize("doc") ) + { + wxLogError("Cannot initialize the HTML help system, aborting."); + + return FALSE; + } +#endif + return TRUE; } @@ -166,21 +226,32 @@ MyFrame::MyFrame(const wxString& title, const wxPoint& pos, const wxSize& size) // create a menu bar wxMenu *menuFile = new wxMenu; - menuFile->Append(Minimal_Help_Index, "&Help Index..."); - menuFile->Append(Minimal_Help_Classes, "&Help on Classes..."); - menuFile->Append(Minimal_Help_Functions, "&Help on Functions..."); - menuFile->Append(Minimal_Help_Help, "&About wxExtHelpController..."); + menuFile->Append(HelpDemo_Help_Index, "&Help Index..."); + menuFile->Append(HelpDemo_Help_Classes, "&Help on Classes..."); + menuFile->Append(HelpDemo_Help_Functions, "&Help on Functions..."); + menuFile->Append(HelpDemo_Help_Help, "&About Help Demo..."); menuFile->AppendSeparator(); - menuFile->Append(Minimal_Help_Search, "&Search help..."); - if(help.IsKindOf(CLASSINFO(wxExtHelpController))) - { - menuFile->AppendSeparator(); - menuFile->Append(Minimal_Help_KDE, "Use &KDE"); - menuFile->Append(Minimal_Help_GNOME, "Use &GNOME"); - menuFile->Append(Minimal_Help_Netscape, "Use &Netscape"); - } + menuFile->Append(HelpDemo_Help_Search, "&Search help..."); +#if USE_HTML_HELP menuFile->AppendSeparator(); - menuFile->Append(Minimal_Quit, "E&xit"); + menuFile->Append(HelpDemo_Html_Help_Index, "HTML &Help Index..."); + menuFile->Append(HelpDemo_Html_Help_Classes, "HTML &Help on Classes..."); + menuFile->Append(HelpDemo_Html_Help_Functions, "HTML &Help on Functions..."); + menuFile->Append(HelpDemo_Html_Help_Help, "HTML &About Help Demo..."); + menuFile->AppendSeparator(); + menuFile->Append(HelpDemo_Html_Help_Search, "HTML &Search help..."); +#endif + +#ifndef __WXMSW__ +#if !wxUSE_HTML + menuFile->AppendSeparator(); + menuFile->Append(HelpDemo_Help_KDE, "Use &KDE"); + menuFile->Append(HelpDemo_Help_GNOME, "Use &GNOME"); + menuFile->Append(HelpDemo_Help_Netscape, "Use &Netscape"); +#endif +#endif + menuFile->AppendSeparator(); + menuFile->Append(HelpDemo_Quit, "E&xit"); // now append the freshly created menu to the menu bar... wxMenuBar *menuBar = new wxMenuBar; @@ -201,10 +272,6 @@ MyFrame::MyFrame(const wxString& title, const wxPoint& pos, const wxSize& size) // and a static control whose parent is the panel (void)new wxStaticText(panel, -1, "Hello, world!", wxPoint(10, 10)); - - // initialise the help system - help.Initialize("doc"); - } @@ -220,40 +287,81 @@ void MyFrame::OnHelp(wxCommandEvent& event) { switch(event.GetId()) { - case Minimal_Help_Classes: - help.DisplaySection(1); + + // Note: For WinHelp, these ids are specified in the map session, mapping + // topic names to numbers. + // For HTML and external help, a wxhelp.map file is used. + + case HelpDemo_Help_Classes: + m_help.DisplaySection(2); break; - case Minimal_Help_Functions: - help.DisplaySection(2); + case HelpDemo_Help_Functions: + m_help.DisplaySection(1); break; - case Minimal_Help_Help: - help.DisplaySection(5); + case HelpDemo_Help_Help: + m_help.DisplaySection(3); break; - case Minimal_Help_KDE: - if(help.IsKindOf(CLASSINFO(wxExtHelpController))) - ((wxExtHelpController *)&help)->SetBrowser("kdehelp"); + + // These three calls are only used by wxExtHelpController + + case HelpDemo_Help_KDE: + m_help.SetViewer("kdehelp"); break; - case Minimal_Help_GNOME: - if(help.IsKindOf(CLASSINFO(wxExtHelpController))) - ((wxExtHelpController *)&help)->SetBrowser("gnome-help-browser"); + case HelpDemo_Help_GNOME: + m_help.SetViewer("gnome-help-browser"); break; - case Minimal_Help_Netscape: - if(help.IsKindOf(CLASSINFO(wxExtHelpController))) - ((wxExtHelpController *)&help)->SetBrowser("netscape",TRUE); + case HelpDemo_Help_Netscape: + m_help.SetViewer("netscape", wxHELP_NETSCAPE); break; - case Minimal_Help_Search: + + case HelpDemo_Help_Search: { wxString key = wxGetTextFromUser("Search for?", "Search help for keyword", "", this); if(! key.IsEmpty()) - help.KeywordSearch(key); + m_help.KeywordSearch(key); } break; - case Minimal_Help_Index: + case HelpDemo_Help_Index: default: - help.DisplayContents(); + m_help.DisplayContents(); break; } } + +void MyFrame::OnHtmlHelp(wxCommandEvent& event) +{ +#if USE_HTML_HELP + switch(event.GetId()) + { + + case HelpDemo_Html_Help_Classes: + m_htmlHelp.DisplaySection(2); + break; + case HelpDemo_Html_Help_Functions: + m_htmlHelp.DisplaySection(1); + break; + case HelpDemo_Html_Help_Help: + m_htmlHelp.DisplaySection(3); + break; + + case HelpDemo_Html_Help_Search: + { + wxString key = wxGetTextFromUser("Search for?", + "Search help for keyword", + "", + this); + if(! key.IsEmpty()) + m_htmlHelp.KeywordSearch(key); + } + break; + case HelpDemo_Html_Help_Index: + default: + m_htmlHelp.DisplayContents(); + break; + } +#endif +} +