finally applied the helpbest patch

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@11534 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Václav Slavík
2001-09-01 12:59:08 +00:00
parent 65ec6247df
commit 3d285623a7
4 changed files with 285 additions and 1 deletions

View File

@@ -262,6 +262,7 @@ dragimag.cpp MSW
dropsrc.cpp MSW OLE dropsrc.cpp MSW OLE
droptgt.cpp MSW OLE droptgt.cpp MSW OLE
enhmeta.cpp MSW Win32Only enhmeta.cpp MSW Win32Only
helpbest.cpp MSW Win32Only
evtloop.cpp MSW LowLevel evtloop.cpp MSW LowLevel
fdrepdlg.cpp MSW Win32Only fdrepdlg.cpp MSW Win32Only
filedlg.cpp MSW filedlg.cpp MSW
@@ -922,6 +923,7 @@ minifram.h MotifH
msgdlg.h MotifH msgdlg.h MotifH
palette.h MotifH palette.h MotifH
pen.h MotifH pen.h MotifH
helpbest.h MSWH
print.h MotifH print.h MotifH
printdlg.h MotifH printdlg.h MotifH
private.h MotifH private.h MotifH

128
include/wx/msw/helpbest.h Normal file
View File

@@ -0,0 +1,128 @@
/////////////////////////////////////////////////////////////////////////////
// Name: helpbest.h
// Purpose: Tries to load MS HTML Help, falls back to wxHTML upon failure
// Author: Mattia Barbon
// Modified by:
// Created: 02/04/2001
// RCS-ID: $Id$
// Copyright: (c) Mattia Barbon
// Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////
#ifndef _WX_HELPBEST_H_
#define _WX_HELPBEST_H_
#ifdef __GNUG__
#pragma interface "helpbest.h"
#endif
#include "wx/wx.h"
#if wxUSE_HELP && wxUSE_MS_HTML_HELP && defined(__WIN95__) && wxUSE_WXHTML_HELP
#include "wx/helpbase.h"
class WXDLLEXPORT wxBestHelpController: public wxHelpControllerBase
{
DECLARE_DYNAMIC_CLASS(wxBestHelpController)
public:
wxBestHelpController():m_helpControllerType( wxUseNone ),
m_helpController( 0 ) {}
~wxBestHelpController() { delete m_helpController; }
// Must call this to set the filename
virtual bool Initialize(const wxString& file);
// If file is "", reloads file given in Initialize
virtual bool LoadFile(const wxString& file = wxEmptyString)
{
wxASSERT( m_helpController );
return m_helpController->LoadFile( GetValidFilename( file ) );
}
virtual bool DisplayContents()
{
wxASSERT( m_helpController );
return m_helpController->DisplayContents();
}
virtual bool DisplaySection(int sectionNo)
{
wxASSERT( m_helpController );
return m_helpController->DisplaySection( sectionNo );
}
virtual bool DisplaySection(const wxString& section)
{
wxASSERT( m_helpController );
return m_helpController->DisplaySection( section );
}
virtual bool DisplayBlock(long blockNo)
{
wxASSERT( m_helpController );
return m_helpController->DisplayBlock( blockNo );
}
virtual bool DisplayContextPopup(int contextId)
{
wxASSERT( m_helpController );
return m_helpController->DisplayContextPopup( contextId );
}
virtual bool DisplayTextPopup(const wxString& text, const wxPoint& pos)
{
wxASSERT( m_helpController );
return m_helpController->DisplayTextPopup( text, pos );
}
virtual bool KeywordSearch(const wxString& k)
{
wxASSERT( m_helpController );
return m_helpController->KeywordSearch( k );
}
virtual bool Quit()
{
wxASSERT( m_helpController );
return m_helpController->Quit();
}
/// Allows one to override the default settings for the help frame.
virtual void SetFrameParameters(const wxString& title,
const wxSize& size,
const wxPoint& pos = wxDefaultPosition,
bool newFrameEachTime = FALSE)
{
wxASSERT( m_helpController );
m_helpController->SetFrameParameters( title, size, pos,
newFrameEachTime );
}
/// Obtains the latest settings used by the help frame and the help
/// frame.
virtual wxFrame *GetFrameParameters(wxSize *size = NULL,
wxPoint *pos = NULL,
bool *newFrameEachTime = NULL)
{
wxASSERT( m_helpController );
return m_helpController->GetFrameParameters( size, pos,
newFrameEachTime );
}
protected:
// Append/change extension if necessary.
wxString GetValidFilename(const wxString& file) const;
protected:
enum HelpControllerType { wxUseNone, wxUseHtmlHelp, wxUseChmHelp };
HelpControllerType m_helpControllerType;
wxHelpControllerBase* m_helpController;
};
#endif // wxUSE_HELP && wxUSE_MS_HTML_HELP && defined(__WIN95__) && wxUSE_WXHTML_HELP
#endif
// _WX_HELPBEST_H_

View File

@@ -67,6 +67,10 @@
#include "wx/msw/helpchm.h" #include "wx/msw/helpchm.h"
#endif #endif
#if wxUSE_MS_HTML_HELP && wxUSE_WXHTML_HELP
#include "wx/msw/helpbest.h"
#endif
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
// ressources // ressources
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
@@ -113,6 +117,9 @@ public:
#if wxUSE_MS_HTML_HELP #if wxUSE_MS_HTML_HELP
wxCHMHelpController& GetMSHtmlHelpController() { return m_msHtmlHelp; } wxCHMHelpController& GetMSHtmlHelpController() { return m_msHtmlHelp; }
#endif #endif
#if wxUSE_MS_HTML_HELP && wxUSE_WXHTML_HELP
wxBestHelpController& GetBestHelpController() { return m_bestHelp; }
#endif
// event handlers (these functions should _not_ be virtual) // event handlers (these functions should _not_ be virtual)
void OnQuit(wxCommandEvent& event); void OnQuit(wxCommandEvent& event);
@@ -120,6 +127,7 @@ public:
void OnHtmlHelp(wxCommandEvent& event); void OnHtmlHelp(wxCommandEvent& event);
void OnAdvancedHtmlHelp(wxCommandEvent& event); void OnAdvancedHtmlHelp(wxCommandEvent& event);
void OnMSHtmlHelp(wxCommandEvent& event); void OnMSHtmlHelp(wxCommandEvent& event);
void OnBestHelp(wxCommandEvent& event);
void OnShowContextHelp(wxCommandEvent& event); void OnShowContextHelp(wxCommandEvent& event);
void OnShowDialogContextHelp(wxCommandEvent& event); void OnShowDialogContextHelp(wxCommandEvent& event);
@@ -140,6 +148,10 @@ private:
wxCHMHelpController m_msHtmlHelp; wxCHMHelpController m_msHtmlHelp;
#endif #endif
#if wxUSE_MS_HTML_HELP && wxUSE_WXHTML_HELP
wxBestHelpController m_bestHelp;
#endif
// any class wishing to process wxWindows events must use this macro // any class wishing to process wxWindows events must use this macro
DECLARE_EVENT_TABLE() DECLARE_EVENT_TABLE()
}; };
@@ -190,6 +202,12 @@ enum
HelpDemo_MS_Html_Help_Help, HelpDemo_MS_Html_Help_Help,
HelpDemo_MS_Html_Help_Search, HelpDemo_MS_Html_Help_Search,
HelpDemo_Best_Help_Index,
HelpDemo_Best_Help_Classes,
HelpDemo_Best_Help_Functions,
HelpDemo_Best_Help_Help,
HelpDemo_Best_Help_Search,
HelpDemo_Help_KDE, HelpDemo_Help_KDE,
HelpDemo_Help_GNOME, HelpDemo_Help_GNOME,
HelpDemo_Help_Netscape, HelpDemo_Help_Netscape,
@@ -232,6 +250,8 @@ BEGIN_EVENT_TABLE(MyFrame, wxFrame)
EVT_MENU(HelpDemo_MS_Html_Help_Help, MyFrame::OnMSHtmlHelp) EVT_MENU(HelpDemo_MS_Html_Help_Help, MyFrame::OnMSHtmlHelp)
EVT_MENU(HelpDemo_MS_Html_Help_Search, MyFrame::OnMSHtmlHelp) EVT_MENU(HelpDemo_MS_Html_Help_Search, MyFrame::OnMSHtmlHelp)
EVT_MENU(HelpDemo_Best_Help_Index, MyFrame::OnBestHelp)
EVT_MENU(HelpDemo_Help_KDE, MyFrame::OnHelp) EVT_MENU(HelpDemo_Help_KDE, MyFrame::OnHelp)
EVT_MENU(HelpDemo_Help_GNOME, MyFrame::OnHelp) EVT_MENU(HelpDemo_Help_GNOME, MyFrame::OnHelp)
EVT_MENU(HelpDemo_Help_Netscape, MyFrame::OnHelp) EVT_MENU(HelpDemo_Help_Netscape, MyFrame::OnHelp)
@@ -297,6 +317,21 @@ bool MyApp::OnInit()
return FALSE; return FALSE;
} }
#if wxUSE_MS_HTML_HELP
if( !frame->GetMSHtmlHelpController().Initialize("doc") )
{
wxLogError("Cannot initialize the MS HTML Help system.");
}
#endif
#if wxUSE_MS_HTML_HELP && wxUSE_WXHTML_HELP
// you need to call Initialize in order to use wxBestHelpController
if( !frame->GetBestHelpController().Initialize("doc") )
{
wxLogError("Cannot initialize the best help system, aborting.");
}
#endif
#if USE_HTML_HELP #if USE_HTML_HELP
// initialise the standard HTML help system: this means that the HTML docs are in the // initialise the standard HTML help system: this means that the HTML docs are in the
// subdirectory doc for platforms using HTML help // subdirectory doc for platforms using HTML help
@@ -319,7 +354,8 @@ bool MyApp::OnInit()
} }
#endif #endif
#if defined(__WXMSW__) && wxUSE_MS_HTML_HELP #if 0
// defined(__WXMSW__) && wxUSE_MS_HTML_HELP
wxString path(wxGetCwd()); wxString path(wxGetCwd());
if ( !frame->GetMSHtmlHelpController().Initialize(path + "\\doc.chm") ) if ( !frame->GetMSHtmlHelpController().Initialize(path + "\\doc.chm") )
{ {
@@ -387,6 +423,11 @@ MyFrame::MyFrame(const wxString& title, const wxPoint& pos, const wxSize& size)
menuFile->Append(HelpDemo_MS_Html_Help_Search, "MS HTML &Search help..."); menuFile->Append(HelpDemo_MS_Html_Help_Search, "MS HTML &Search help...");
#endif #endif
#if wxUSE_MS_HTML_HELP && wxUSE_WXHTML_HELP
menuFile->AppendSeparator();
menuFile->Append(HelpDemo_Best_Help_Index, "Best &Help Index...");
#endif
#ifndef __WXMSW__ #ifndef __WXMSW__
#if !wxUSE_HTML #if !wxUSE_HTML
menuFile->AppendSeparator(); menuFile->AppendSeparator();
@@ -470,6 +511,13 @@ void MyFrame::OnMSHtmlHelp(wxCommandEvent& event)
#endif #endif
} }
void MyFrame::OnBestHelp(wxCommandEvent& event)
{
#if wxUSE_MS_HTML_HELP && wxUSE_HTML
ShowHelp(event.GetId(), m_bestHelp);
#endif
}
/* /*
Notes: ShowHelp uses section ids for displaying particular topics, Notes: ShowHelp uses section ids for displaying particular topics,
but you might want to use a unique keyword to display a topic, instead. but you might want to use a unique keyword to display a topic, instead.
@@ -545,6 +593,7 @@ void MyFrame::ShowHelp(int commandId, wxHelpControllerBase& helpController)
case HelpDemo_Html_Help_Classes: case HelpDemo_Html_Help_Classes:
case HelpDemo_Advanced_Html_Help_Classes: case HelpDemo_Advanced_Html_Help_Classes:
case HelpDemo_MS_Html_Help_Classes: case HelpDemo_MS_Html_Help_Classes:
case HelpDemo_Best_Help_Classes:
helpController.DisplaySection(2); helpController.DisplaySection(2);
//helpController.DisplaySection("Classes"); // An alternative form for most controllers //helpController.DisplaySection("Classes"); // An alternative form for most controllers
@@ -560,6 +609,7 @@ void MyFrame::ShowHelp(int commandId, wxHelpControllerBase& helpController)
case HelpDemo_Html_Help_Help: case HelpDemo_Html_Help_Help:
case HelpDemo_Advanced_Html_Help_Help: case HelpDemo_Advanced_Html_Help_Help:
case HelpDemo_MS_Html_Help_Help: case HelpDemo_MS_Html_Help_Help:
case HelpDemo_Best_Help_Help:
helpController.DisplaySection(3); helpController.DisplaySection(3);
//helpController.DisplaySection("About"); // An alternative form for most controllers //helpController.DisplaySection("About"); // An alternative form for most controllers
break; break;
@@ -568,6 +618,7 @@ void MyFrame::ShowHelp(int commandId, wxHelpControllerBase& helpController)
case HelpDemo_Html_Help_Search: case HelpDemo_Html_Help_Search:
case HelpDemo_Advanced_Html_Help_Search: case HelpDemo_Advanced_Html_Help_Search:
case HelpDemo_MS_Html_Help_Search: case HelpDemo_MS_Html_Help_Search:
case HelpDemo_Best_Help_Search:
{ {
wxString key = wxGetTextFromUser("Search for?", wxString key = wxGetTextFromUser("Search for?",
"Search help for keyword", "Search help for keyword",
@@ -582,6 +633,7 @@ void MyFrame::ShowHelp(int commandId, wxHelpControllerBase& helpController)
case HelpDemo_Html_Help_Index: case HelpDemo_Html_Help_Index:
case HelpDemo_Advanced_Html_Help_Index: case HelpDemo_Advanced_Html_Help_Index:
case HelpDemo_MS_Html_Help_Index: case HelpDemo_MS_Html_Help_Index:
case HelpDemo_Best_Help_Index:
helpController.DisplayContents(); helpController.DisplayContents();
break; break;

102
src/msw/helpbest.cpp Normal file
View File

@@ -0,0 +1,102 @@
/////////////////////////////////////////////////////////////////////////////
// Name: helpbest.cpp
// Purpose: Tries to load MS HTML Help, falls back to wxHTML upon failure
// Author: Mattia Barbon
// Modified by:
// Created: 02/04/2001
// RCS-ID: $Id$
// Copyright: (c) Mattia Barbon
// Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////
#ifdef __GNUG__
#pragma implementation "helpbest.h"
#endif
// For compilers that support precompilation, includes "wx.h".
#include "wx/wxprec.h"
#ifdef __BORLANDC__
#pragma hdrstop
#endif
#ifndef WX_PRECOMP
#include "wx/defs.h"
#endif
#include "wx/filefn.h"
#if wxUSE_HELP && wxUSE_MS_HTML_HELP && defined(__WIN95__) && wxUSE_WXHTML_HELP
#include "wx/msw/helpchm.h"
#include "wx/html/helpctrl.h"
#include "wx/msw/helpbest.h"
IMPLEMENT_DYNAMIC_CLASS( wxBestHelpController, wxHelpControllerBase );
bool wxBestHelpController::Initialize( const wxString& filename )
{
// try wxCHMHelpController
wxCHMHelpController* chm = new wxCHMHelpController;
m_helpControllerType = wxUseChmHelp;
// do not warn upon failure
wxLogNull dontWarnOnFailure;
if( chm->Initialize( GetValidFilename( filename ) ) )
{
m_helpController = chm;
return TRUE;
}
// failed
delete chm;
// try wxHtmlHelpController
wxHtmlHelpController* html = new wxHtmlHelpController;
m_helpControllerType = wxUseHtmlHelp;
if( html->Initialize( GetValidFilename( filename ) ) )
{
m_helpController = html;
return TRUE;
}
// failed
delete html;
return FALSE;
}
wxString wxBestHelpController::GetValidFilename( const wxString& filename ) const
{
wxString tmp = filename;
::wxStripExtension( tmp );
switch( m_helpControllerType )
{
case wxUseChmHelp:
if( ::wxFileExists( tmp + ".chm" ) )
return tmp + ".chm";
return filename;
break;
case wxUseHtmlHelp:
if( ::wxFileExists( tmp + ".htb" ) )
return tmp + ".htb";
if( ::wxFileExists( tmp + ".zip" ) )
return tmp + ".zip";
if( ::wxFileExists( tmp + ".hhp" ) )
return tmp + ".hhp";
return filename;
break;
default:
// we CAN'T get here
wxFAIL_MSG( "wxBestHelpController: Must call Initialize, first!" );
return wxEmptyString;
break;
}
}
#endif
// wxUSE_HELP && wxUSE_MS_HTML_HELP && defined(__WIN95__) && wxUSE_WXHTML_HELP