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
droptgt.cpp MSW OLE
enhmeta.cpp MSW Win32Only
helpbest.cpp MSW Win32Only
evtloop.cpp MSW LowLevel
fdrepdlg.cpp MSW Win32Only
filedlg.cpp MSW
@@ -922,6 +923,7 @@ minifram.h MotifH
msgdlg.h MotifH
palette.h MotifH
pen.h MotifH
helpbest.h MSWH
print.h MotifH
printdlg.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"
#endif
#if wxUSE_MS_HTML_HELP && wxUSE_WXHTML_HELP
#include "wx/msw/helpbest.h"
#endif
// ----------------------------------------------------------------------------
// ressources
// ----------------------------------------------------------------------------
@@ -113,6 +117,9 @@ public:
#if wxUSE_MS_HTML_HELP
wxCHMHelpController& GetMSHtmlHelpController() { return m_msHtmlHelp; }
#endif
#if wxUSE_MS_HTML_HELP && wxUSE_WXHTML_HELP
wxBestHelpController& GetBestHelpController() { return m_bestHelp; }
#endif
// event handlers (these functions should _not_ be virtual)
void OnQuit(wxCommandEvent& event);
@@ -120,6 +127,7 @@ public:
void OnHtmlHelp(wxCommandEvent& event);
void OnAdvancedHtmlHelp(wxCommandEvent& event);
void OnMSHtmlHelp(wxCommandEvent& event);
void OnBestHelp(wxCommandEvent& event);
void OnShowContextHelp(wxCommandEvent& event);
void OnShowDialogContextHelp(wxCommandEvent& event);
@@ -140,6 +148,10 @@ private:
wxCHMHelpController m_msHtmlHelp;
#endif
#if wxUSE_MS_HTML_HELP && wxUSE_WXHTML_HELP
wxBestHelpController m_bestHelp;
#endif
// any class wishing to process wxWindows events must use this macro
DECLARE_EVENT_TABLE()
};
@@ -190,6 +202,12 @@ enum
HelpDemo_MS_Html_Help_Help,
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_GNOME,
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_Search, MyFrame::OnMSHtmlHelp)
EVT_MENU(HelpDemo_Best_Help_Index, MyFrame::OnBestHelp)
EVT_MENU(HelpDemo_Help_KDE, MyFrame::OnHelp)
EVT_MENU(HelpDemo_Help_GNOME, MyFrame::OnHelp)
EVT_MENU(HelpDemo_Help_Netscape, MyFrame::OnHelp)
@@ -297,6 +317,21 @@ bool MyApp::OnInit()
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
// initialise the standard HTML help system: this means that the HTML docs are in the
// subdirectory doc for platforms using HTML help
@@ -319,7 +354,8 @@ bool MyApp::OnInit()
}
#endif
#if defined(__WXMSW__) && wxUSE_MS_HTML_HELP
#if 0
// defined(__WXMSW__) && wxUSE_MS_HTML_HELP
wxString path(wxGetCwd());
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...");
#endif
#if wxUSE_MS_HTML_HELP && wxUSE_WXHTML_HELP
menuFile->AppendSeparator();
menuFile->Append(HelpDemo_Best_Help_Index, "Best &Help Index...");
#endif
#ifndef __WXMSW__
#if !wxUSE_HTML
menuFile->AppendSeparator();
@@ -470,6 +511,13 @@ void MyFrame::OnMSHtmlHelp(wxCommandEvent& event)
#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,
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_Advanced_Html_Help_Classes:
case HelpDemo_MS_Html_Help_Classes:
case HelpDemo_Best_Help_Classes:
helpController.DisplaySection(2);
//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_Advanced_Html_Help_Help:
case HelpDemo_MS_Html_Help_Help:
case HelpDemo_Best_Help_Help:
helpController.DisplaySection(3);
//helpController.DisplaySection("About"); // An alternative form for most controllers
break;
@@ -568,6 +618,7 @@ void MyFrame::ShowHelp(int commandId, wxHelpControllerBase& helpController)
case HelpDemo_Html_Help_Search:
case HelpDemo_Advanced_Html_Help_Search:
case HelpDemo_MS_Html_Help_Search:
case HelpDemo_Best_Help_Search:
{
wxString key = wxGetTextFromUser("Search for?",
"Search help for keyword",
@@ -582,6 +633,7 @@ void MyFrame::ShowHelp(int commandId, wxHelpControllerBase& helpController)
case HelpDemo_Html_Help_Index:
case HelpDemo_Advanced_Html_Help_Index:
case HelpDemo_MS_Html_Help_Index:
case HelpDemo_Best_Help_Index:
helpController.DisplayContents();
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