From 7c4a59a881c4b58111b104fb18597009c6b55fec Mon Sep 17 00:00:00 2001 From: Julian Smart Date: Wed, 8 Mar 2000 13:04:51 +0000 Subject: [PATCH] Added WinHelp sample doc to samples/help, and made it possible to show both native and wxHTML help git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@6522 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- distrib/msw/generic.rsp | 10 ++- distrib/msw/makefile.rsp | 13 ++-- distrib/msw/msw.rsp | 30 --------- distrib/msw/nplugin.rsp | 29 +++++++++ include/wx/generic/helpwxht.h | 6 +- include/wx/help.h | 17 ++++- include/wx/helpbase.h | 17 ----- samples/help/bullet.bmp | Bin 0 -> 138 bytes samples/help/demo.cpp | 118 ++++++++++++++++++++++++++++++---- samples/help/doc.cnt | 8 +++ samples/help/doc.hlp | Bin 0 -> 10603 bytes samples/help/doc.hpj | 21 ++++++ samples/help/doc.tex | 59 +++++++++++++++++ samples/help/doc/wxhelp.map | 6 +- samples/help/tex2rtf.ini | 21 ++++++ samples/plot/makefile.b32 | 16 +++++ samples/plot/makefile.bcc | 19 ++++++ samples/plot/makefile.dos | 17 +++++ samples/plot/makefile.vc | 18 ++++++ samples/plot/makefile.wat | 15 +++++ 20 files changed, 367 insertions(+), 73 deletions(-) create mode 100644 distrib/msw/nplugin.rsp create mode 100644 samples/help/bullet.bmp create mode 100644 samples/help/doc.cnt create mode 100644 samples/help/doc.hlp create mode 100644 samples/help/doc.hpj create mode 100644 samples/help/doc.tex create mode 100644 samples/help/tex2rtf.ini create mode 100644 samples/plot/makefile.b32 create mode 100644 samples/plot/makefile.bcc create mode 100644 samples/plot/makefile.dos create mode 100644 samples/plot/makefile.vc create mode 100644 samples/plot/makefile.wat diff --git a/distrib/msw/generic.rsp b/distrib/msw/generic.rsp index 929cfa6f9a..bad4201992 100644 --- a/distrib/msw/generic.rsp +++ b/distrib/msw/generic.rsp @@ -238,13 +238,15 @@ utils/dialoged/test/*.ico utils/dialoged/test/*.prj utils/dialoged/test/*.bmp +contrib/configure +contrib/configure.in + contrib/include/wx/mmedia/*.h contrib/include/wx/mmedia/internal/*.h contrib/src/mmedia/makefile* contrib/src/mmedia/README contrib/src/mmedia/*.h contrib/src/mmedia/*.cpp -contrib/src/mmedia/makefile* contrib/samples/mmedia/*.h contrib/samples/mmedia/*.cpp contrib/samples/mmedia/makefile* @@ -322,7 +324,13 @@ samples/help/makefile* samples/help/*.xbm samples/help/*.xpm samples/help/*.ico +samples/help/*.bmp samples/help/*.rc +samples/help/*.hlp +samples/help/*.cnt +samples/help/*.hpj +samples/help/*.tex +samples/help/*.ini samples/help/doc/*.html samples/help/doc/*.htm samples/help/doc/*.class diff --git a/distrib/msw/makefile.rsp b/distrib/msw/makefile.rsp index 9c309552b9..03a58c081e 100644 --- a/distrib/msw/makefile.rsp +++ b/distrib/msw/makefile.rsp @@ -57,14 +57,11 @@ samples/treelay/Makefile.in samples/opengl/cube/Makefile.in samples/opengl/penguin/Makefile.in samples/opengl/isosurf/Makefile.in -samples/ogl/ogledit/Makefile.in -samples/ogl/studio/Makefile.in demos/bombs/Makefile.in demos/forty/Makefile.in demos/fractal/Makefile.in demos/poem/Makefile.in demos/life/Makefile.in -utils/glcanvas/motif/Makefile.in utils/HelpGen/Makefile.in utils/tex2rtf/Makefile.in utils/tex2rtf/src/Makefile.in @@ -72,6 +69,10 @@ utils/dialoged/Makefile.in utils/dialoged/src/Makefile.in utils/hhp2cached/Makefile.in utils/Makefile.in -utils/wxMMedia2/Makefile.in -utils/wxMMedia2/lib/Makefile.in -utils/wxMMedia2/sample/Makefile.in +contrib/Makefile.in +contrib/src/ogl/Makefile.in +contrib/src/mmedia/Makefile.in +contrib/samples/ogl/ogledit/Makefile.in +contrib/samples/ogl/studio/Makefile.in +contrib/samples/mmedia/Makefile.in + diff --git a/distrib/msw/msw.rsp b/distrib/msw/msw.rsp index dcdddd05bd..976642cfa6 100644 --- a/distrib/msw/msw.rsp +++ b/distrib/msw/msw.rsp @@ -53,7 +53,6 @@ src/common/doslex.c src/common/y_tab.c src/common/lex_yy.c -src/msw/files.lst src/msw/*.cpp src/msw/*.h src/msw/makefile.* @@ -151,32 +150,3 @@ samples/oleauto/*.txt samples/oleauto/*.bmp samples/oleauto/*.ico -utils/nplugin/make*.* -utils/nplugin/src/*.cpp -utils/nplugin/src/*.h -utils/nplugin/src/*.rc -utils/nplugin/src/*.def -utils/nplugin/src/makefile.* -utils/nplugin/src/*.txt -utils/nplugin/samples/simple/*.cpp -utils/nplugin/samples/simple/*.h -utils/nplugin/samples/simple/*.rc -utils/nplugin/samples/simple/*.def -utils/nplugin/samples/simple/makefile.* -utils/nplugin/samples/simple/*.txt -utils/nplugin/samples/gui/*.cpp -utils/nplugin/samples/gui/*.h -utils/nplugin/samples/gui/*.rc -utils/nplugin/samples/gui/*.def -utils/nplugin/samples/gui/makefile.* -utils/nplugin/samples/gui/*.txt -utils/nplugin/docs/*.tex -utils/nplugin/docs/*.txt -utils/nplugin/docs/*.hpj -utils/nplugin/docs/*.eps -utils/nplugin/docs/*.ps -utils/nplugin/docs/*.ini -utils/nplugin/docs/*.cnt -utils/nplugin/docs/*.hlp -utils/nplugin/lib/dummy - diff --git a/distrib/msw/nplugin.rsp b/distrib/msw/nplugin.rsp new file mode 100644 index 0000000000..98c928c283 --- /dev/null +++ b/distrib/msw/nplugin.rsp @@ -0,0 +1,29 @@ +utils/nplugin/make*.* +utils/nplugin/src/*.cpp +utils/nplugin/src/*.h +utils/nplugin/src/*.rc +utils/nplugin/src/*.def +utils/nplugin/src/makefile.* +utils/nplugin/src/*.txt +utils/nplugin/samples/simple/*.cpp +utils/nplugin/samples/simple/*.h +utils/nplugin/samples/simple/*.rc +utils/nplugin/samples/simple/*.def +utils/nplugin/samples/simple/makefile.* +utils/nplugin/samples/simple/*.txt +utils/nplugin/samples/gui/*.cpp +utils/nplugin/samples/gui/*.h +utils/nplugin/samples/gui/*.rc +utils/nplugin/samples/gui/*.def +utils/nplugin/samples/gui/makefile.* +utils/nplugin/samples/gui/*.txt +utils/nplugin/docs/*.tex +utils/nplugin/docs/*.txt +utils/nplugin/docs/*.hpj +utils/nplugin/docs/*.eps +utils/nplugin/docs/*.ps +utils/nplugin/docs/*.ini +utils/nplugin/docs/*.cnt +utils/nplugin/docs/*.hlp +utils/nplugin/lib/dummy + diff --git a/include/wx/generic/helpwxht.h b/include/wx/generic/helpwxht.h index 9f1f8f9fca..449c20f085 100644 --- a/include/wx/generic/helpwxht.h +++ b/include/wx/generic/helpwxht.h @@ -6,8 +6,8 @@ * $Id$ *******************************************************************/ -#ifndef __WX_HELPWXHT_H_ -#define __WX_HELPWXHT_H_ +#ifndef _WX_HELPWXHT_H_ +#define _WX_HELPWXHT_H_ #if wxUSE_HELP #if wxUSE_HTML @@ -72,4 +72,4 @@ protected: #endif // wxUSE_HELP #endif // wxUSE_HTML -#endif // __WX_HELPEXT_H_ +#endif // _WX_HELPWXHT_H_ diff --git a/include/wx/help.h b/include/wx/help.h index 98f7cee571..e67d49358a 100644 --- a/include/wx/help.h +++ b/include/wx/help.h @@ -9,7 +9,22 @@ #define wxHelpController wxWinHelpController #define sm_classwxHelpController sm_classwxWinHelpController #else // !MSW - #include "wx/helpbase.h" + +/* By default, if wxHTML is compiled in, use the + wxHelpControllerHtml. If not, use the external help controller. + (of course, we shouldn't do it for wxMSW) +*/ + +#if wxUSE_HTML +# include "wx/generic/helpwxht.h" +# define wxHelpController wxHelpControllerHtml +# define sm_classwxHelpController sm_classwxHelpControllerHtml +#else +# include "wx/generic/helpext.h" +# define wxHelpController wxExtHelpController +# define sm_classwxHelpController sm_classwxExtHelpController +#endif + #endif // MSW/!MSW #endif diff --git a/include/wx/helpbase.h b/include/wx/helpbase.h index 9479573ecb..37cc6ea158 100644 --- a/include/wx/helpbase.h +++ b/include/wx/helpbase.h @@ -72,23 +72,6 @@ class WXDLLEXPORT wxHelpControllerBase: public wxObject virtual void OnQuit(void) {}; }; - -/* By default, if wxHTML is compiled in, use the - wxHelpControllerHtml. If not, use the external help controller. - (of course, we shouldn't do it for wxMSW) -*/ -#ifndef __WXMSW__ -#if wxUSE_HTML -# include "wx/generic/helpwxht.h" -# define wxHelpController wxHelpControllerHtml -# define sm_classwxHelpController sm_classwxHelpControllerHtml -#else -# include "wx/generic/helpext.h" -# define wxHelpController wxExtHelpController -# define sm_classwxHelpController sm_classwxExtHelpController -#endif -#endif // wxMSW - #endif // wxUSE_HELP #endif // _WX_HELPBASEH__ diff --git a/samples/help/bullet.bmp b/samples/help/bullet.bmp new file mode 100644 index 0000000000000000000000000000000000000000..aad8fc793edd54ffb5910e67b2470659c95448b7 GIT binary patch literal 138 zcmZumxe>rH2vhFtK1GJ`9PYi2Yw9con_&SdBlI1b>qTKR2Gu`ZXgNITWj7;KP=JJL V1)UXU1`*-lNw`O&c<~DR!2u5s7-j$f literal 0 HcmV?d00001 diff --git a/samples/help/demo.cpp b/samples/help/demo.cpp index e4b02bca0e..a27dfef41a 100644 --- a/samples/help/demo.cpp +++ b/samples/help/demo.cpp @@ -30,13 +30,22 @@ # include "wx/wx.h" #endif +# include "wx/image.h" +# include "wx/help.h" + // define this to 1 to use HTML help even under Windows (by default, Windows -// version will HLP-based help) +// 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/helpbase.h" -#else -# include "wx/help.h" +# include "wx/generic/helpwxht.h" #endif // ---------------------------------------------------------------------------- @@ -73,12 +82,21 @@ public: 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 m_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() @@ -97,10 +115,17 @@ enum 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, - HelpDemo_Help_Search, // controls start here (the numbers are, of course, arbitrary) HelpDemo_Text = 1000, }; @@ -118,10 +143,17 @@ BEGIN_EVENT_TABLE(MyFrame, wxFrame) 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) - EVT_MENU(HelpDemo_Help_Search, MyFrame::OnHelp) END_EVENT_TABLE() // Create a new application object: this macro will allow wxWindows to create @@ -142,6 +174,13 @@ 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("HelpDemo wxWindows App", wxPoint(50, 50), wxSize(450, 340)); @@ -149,7 +188,6 @@ bool MyApp::OnInit() frame->Show(TRUE); SetTopWindow(frame); - // 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 @@ -160,6 +198,17 @@ bool MyApp::OnInit() 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; } @@ -183,6 +232,16 @@ MyFrame::MyFrame(const wxString& title, const wxPoint& pos, const wxSize& size) menuFile->Append(HelpDemo_Help_Help, "&About Help Demo..."); menuFile->AppendSeparator(); menuFile->Append(HelpDemo_Help_Search, "&Search help..."); +#if USE_HTML_HELP + menuFile->AppendSeparator(); + 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(); @@ -229,14 +288,15 @@ void MyFrame::OnHelp(wxCommandEvent& event) switch(event.GetId()) { - // Note: these DisplaySection calls use ids that are specific to wxExtHelpController - // (on Unix). For WinHelp, we'd need to use different context ids. + // 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(1); + m_help.DisplaySection(2); break; case HelpDemo_Help_Functions: - m_help.DisplaySection(2); + m_help.DisplaySection(1); break; case HelpDemo_Help_Help: m_help.DisplaySection(3); @@ -271,3 +331,37 @@ void MyFrame::OnHelp(wxCommandEvent& event) } } +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 +} + diff --git a/samples/help/doc.cnt b/samples/help/doc.cnt new file mode 100644 index 0000000000..ff60ab9f0d --- /dev/null +++ b/samples/help/doc.cnt @@ -0,0 +1,8 @@ +:Base doc.hlp +1 Introduction +2 Introduction=intro +2 Classes=classes +2 Functions=functions +2 About=about +1 Chapter 2 +2 Chapter 2=chapter2 diff --git a/samples/help/doc.hlp b/samples/help/doc.hlp new file mode 100644 index 0000000000000000000000000000000000000000..23177dc5c6b5b18e1d96c989eb30179ac0f67dc2 GIT binary patch literal 10603 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