X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/0316942268a5004c3d639fa1cd7df4ea42257dbd..795c9ab863b2cd2c8839f042162c6e8b921f1734:/src/msw/helpchm.cpp diff --git a/src/msw/helpchm.cpp b/src/msw/helpchm.cpp index c7090d0877..9e8c8846fa 100644 --- a/src/msw/helpchm.cpp +++ b/src/msw/helpchm.cpp @@ -6,103 +6,82 @@ // Created: 16/04/2000 // RCS-ID: $Id$ // Copyright: (c) Julian Smart -// Licence: wxWindows licence +// Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// -#ifdef __GNUG__ -#pragma implementation "helpchm.h" +#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA) + #pragma implementation "helpchm.h" #endif // For compilers that support precompilation, includes "wx.h". #include "wx/wxprec.h" #ifdef __BORLANDC__ -#pragma hdrstop + #pragma hdrstop #endif -#ifndef WX_PRECOMP -#include "wx/defs.h" -#endif +#if wxUSE_HELP && wxUSE_MS_HTML_HELP && defined(__WIN95__) #include "wx/filefn.h" - -#if wxUSE_HELP && wxUSE_MS_HTML_HELP && defined(__WIN95__) #include "wx/msw/helpchm.h" -#include "wx/dynlib.h" +#include "wx/dynload.h" #ifndef WX_PRECOMP -#include + #include "wx/intl.h" + #include "wx/app.h" #endif -// This is found in the HTML Help Workshop installation, -// along with htmlhelp.lib. -#include - -#include - -#ifdef __WXMSW__ #include "wx/msw/private.h" -#endif - -#include +#include "wx/msw/missing.h" +// ---------------------------------------------------------------------------- // utility functions to manage the loading/unloading // of hhctrl.ocx +// ---------------------------------------------------------------------------- + #ifndef UNICODE -typedef HWND ( WINAPI * HTMLHELP )( HWND, LPCSTR, UINT, DWORD ); -#define HTMLHELP_NAME "HtmlHelpA" -#else -typedef HWND ( WINAPI * HTMLHELP )( HWND, LPCWSTR, UINT, DWORD ); -#define HTMLHELP_NAME "HtmlHelpW" + typedef HWND ( WINAPI * HTMLHELP )( HWND, LPCSTR, UINT, DWORD ); + #define HTMLHELP_NAME wxT("HtmlHelpA") +#else // ANSI + typedef HWND ( WINAPI * HTMLHELP )( HWND, LPCWSTR, UINT, DWORD ); + #define HTMLHELP_NAME wxT("HtmlHelpW") #endif -// dll handle/reference count + +// dll symbol handle static HTMLHELP gs_htmlHelp = 0; -static wxDllType gs_dllHandle = 0; -static int gs_dllCount = 0; static bool LoadHtmlHelpLibrary() { - if( !gs_dllCount ) - { - gs_dllHandle = wxDllLoader::LoadLibrary( "hhctrl.ocx" ); - if( !gs_dllHandle ) - { - wxLogError(_("MS HTML Help functions are unavailable because the MS HTML Help library is not installed on this machine. Please install it.")); - return FALSE; - } - else - { - gs_dllCount = 1; - gs_htmlHelp = (HTMLHELP)wxDllLoader::GetSymbol( gs_dllHandle, HTMLHELP_NAME ); + wxPluginLibrary *lib = wxPluginManager::LoadLibrary( _T("HHCTRL.OCX"), wxDL_DEFAULT | wxDL_VERBATIM ); - if( !gs_htmlHelp ) - { - wxLogError(_("Failed to initialize MS HTML Help.")); - - wxDllLoader::UnloadLibrary(gs_dllHandle); - gs_dllHandle = 0; - gs_dllCount = 0; - - return FALSE ; - } - } + if( !lib ) + { + wxLogError(_("MS HTML Help functions are unavailable because the MS HTML Help library is not installed on this machine. Please install it.")); + return false; } else { - ++gs_dllCount; + gs_htmlHelp = (HTMLHELP)lib->GetSymbol( HTMLHELP_NAME ); + + if( !gs_htmlHelp ) + { + wxLogError(_("Failed to initialize MS HTML Help.")); + + lib->UnrefLib(); + return false ; + } } - return TRUE; + return true; } static void UnloadHtmlHelpLibrary() { - if( gs_dllCount != 0 && !--gs_dllCount ) + if ( gs_htmlHelp ) { - wxDllLoader::UnloadLibrary( gs_dllHandle ); - gs_dllHandle = 0; - gs_htmlHelp = 0; + if (wxPluginManager::UnloadLibrary( _T("HHCTRL.OCX") )) + gs_htmlHelp = 0; } } @@ -120,60 +99,60 @@ bool wxCHMHelpController::Initialize(const wxString& filename) { // warn on failure if( !LoadHtmlHelpLibrary() ) - return FALSE; + return false; m_helpFile = filename; - return TRUE; + return true; } bool wxCHMHelpController::LoadFile(const wxString& file) { if (!file.IsEmpty()) m_helpFile = file; - return TRUE; + return true; } bool wxCHMHelpController::DisplayContents() { - if (m_helpFile.IsEmpty()) return FALSE; + if (m_helpFile.IsEmpty()) return false; wxString str = GetValidFilename(m_helpFile); - gs_htmlHelp(GetSuitableHWND(), (const wxChar*) str, HH_HELP_FINDER, 0L); - return TRUE; + gs_htmlHelp(GetSuitableHWND(), (const wxChar*) str, HH_DISPLAY_TOPIC, 0L); + return true; } // Use topic or HTML filename bool wxCHMHelpController::DisplaySection(const wxString& section) { - if (m_helpFile.IsEmpty()) return FALSE; + if (m_helpFile.IsEmpty()) return false; wxString str = GetValidFilename(m_helpFile); // Is this an HTML file or a keyword? - bool isFilename = (section.Find(wxT(".htm")) != -1); + bool isFilename = (section.Find(wxT(".htm")) != wxNOT_FOUND); if (isFilename) gs_htmlHelp(GetSuitableHWND(), (const wxChar*) str, HH_DISPLAY_TOPIC, (DWORD) (const wxChar*) section); else KeywordSearch(section); - return TRUE; + return true; } // Use context number bool wxCHMHelpController::DisplaySection(int section) { - if (m_helpFile.IsEmpty()) return FALSE; + if (m_helpFile.IsEmpty()) return false; wxString str = GetValidFilename(m_helpFile); gs_htmlHelp(GetSuitableHWND(), (const wxChar*) str, HH_HELP_CONTEXT, (DWORD)section); - return TRUE; + return true; } bool wxCHMHelpController::DisplayContextPopup(int contextId) { - if (m_helpFile.IsEmpty()) return FALSE; + if (m_helpFile.IsEmpty()) return false; wxString str = GetValidFilename(m_helpFile); @@ -193,7 +172,7 @@ bool wxCHMHelpController::DisplayContextPopup(int contextId) popup.pszText = NULL; gs_htmlHelp(GetSuitableHWND(), (const wxChar*) str, HH_DISPLAY_TEXT_POPUP, (DWORD) & popup); - return TRUE; + return true; } bool wxCHMHelpController::DisplayTextPopup(const wxString& text, const wxPoint& pos) @@ -210,7 +189,7 @@ bool wxCHMHelpController::DisplayTextPopup(const wxString& text, const wxPoint& popup.pszText = (const wxChar*) text; gs_htmlHelp(GetSuitableHWND(), NULL, HH_DISPLAY_TEXT_POPUP, (DWORD) & popup); - return TRUE; + return true; } bool wxCHMHelpController::DisplayBlock(long block) @@ -218,9 +197,10 @@ bool wxCHMHelpController::DisplayBlock(long block) return DisplaySection(block); } -bool wxCHMHelpController::KeywordSearch(const wxString& k) +bool wxCHMHelpController::KeywordSearch(const wxString& k, + wxHelpSearchMode WXUNUSED(mode)) { - if (m_helpFile.IsEmpty()) return FALSE; + if (m_helpFile.IsEmpty()) return false; wxString str = GetValidFilename(m_helpFile); @@ -235,15 +215,14 @@ bool wxCHMHelpController::KeywordSearch(const wxString& k) link.fIndexOnFail = TRUE ; gs_htmlHelp(GetSuitableHWND(), (const wxChar*) str, HH_KEYWORD_LOOKUP, (DWORD)& link); - return TRUE; + return true; } bool wxCHMHelpController::Quit() { gs_htmlHelp(GetSuitableHWND(), 0, HH_CLOSE_ALL, 0L); - UnloadHtmlHelpLibrary(); - return TRUE; + return true; } // Append extension if necessary. @@ -262,4 +241,10 @@ wxString wxCHMHelpController::GetValidFilename(const wxString& file) const return fullName; } +wxCHMHelpController::~wxCHMHelpController() +{ + UnloadHtmlHelpLibrary(); +} + #endif // wxUSE_HELP +