X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/2432b92dd7a837db13d3938a56c1959decd03203..9d5507f7a2701395e1d5c121bd877bb9066ee6ea:/src/msw/helpwin.cpp diff --git a/src/msw/helpwin.cpp b/src/msw/helpwin.cpp index 068165f21e..edb293ca0f 100644 --- a/src/msw/helpwin.cpp +++ b/src/msw/helpwin.cpp @@ -1,148 +1,126 @@ ///////////////////////////////////////////////////////////////////////////// -// Name: helpwin.cpp +// Name: src/msw/helpwin.cpp // Purpose: Help system: WinHelp implementation // Author: Julian Smart // Modified by: // Created: 04/01/98 // RCS-ID: $Id$ -// Copyright: (c) Julian Smart and Markus Holzem -// Licence: wxWindows license +// Copyright: (c) Julian Smart +// Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// -#ifdef __GNUG__ -#pragma implementation "helpwin.h" -#endif - // For compilers that support precompilation, includes "wx.h". #include "wx/wxprec.h" #ifdef __BORLANDC__ -#pragma hdrstop + #pragma hdrstop #endif +#if wxUSE_HELP + #ifndef WX_PRECOMP -#include "wx/defs.h" #endif +#include "wx/filefn.h" #include "wx/msw/helpwin.h" -#if wxUSE_HELP #include #ifdef __WXMSW__ -#include +#include "wx/msw/private.h" #endif #include -// MAX path length -#define _MAXPATHLEN 500 - -// MAX length of Help descriptor -#define _MAX_HELP_LEN 500 - -#if !USE_SHARED_LIBRARY -IMPLEMENT_DYNAMIC_CLASS(wxWinHelpController, wxHelpControllerBase) -#endif - -wxWinHelpController::wxWinHelpController(void) +static HWND GetSuitableHWND(wxWinHelpController* controller) { - m_helpFile = ""; + if (controller->GetParentWindow()) + return (HWND) controller->GetParentWindow()->GetHWND(); + else if (wxTheApp->GetTopWindow()) + return (HWND) wxTheApp->GetTopWindow()->GetHWND(); + else + return GetDesktopWindow(); } -wxWinHelpController::~wxWinHelpController(void) -{ -} +IMPLEMENT_DYNAMIC_CLASS(wxWinHelpController, wxHelpControllerBase) bool wxWinHelpController::Initialize(const wxString& filename) { - m_helpFile = filename; - return TRUE; + m_helpFile = filename; + return true; } bool wxWinHelpController::LoadFile(const wxString& file) { - m_helpFile = file; - return TRUE; + if (!file.empty()) + m_helpFile = file; + return true; } bool wxWinHelpController::DisplayContents(void) { - if (m_helpFile == "") return FALSE; - - char buf[_MAXPATHLEN]; - strcpy(buf, (const char*) m_helpFile); - size_t len = strlen(buf); - if (!(buf[len-1] == 'p' && buf[len-2] == 'l' && buf[len-3] == 'h' && buf[len-4] == '.')) - strcat(buf, ".hlp"); - if (wxTheApp->GetTopWindow()) - { -#if defined(__WIN95__) - WinHelp((HWND) wxTheApp->GetTopWindow()->GetHWND(), buf, HELP_FINDER, 0L); -#else - WinHelp((HWND) wxTheApp->GetTopWindow()->GetHWND(), buf, HELP_CONTENTS, 0L); -#endif - return TRUE; - } - return FALSE; + if (m_helpFile.empty()) return false; + + wxString str = GetValidFilename(m_helpFile); + + return (WinHelp(GetSuitableHWND(this), str.wx_str(), HELP_FINDER, 0L) != 0); } bool wxWinHelpController::DisplaySection(int section) { - // No WinHelp equivalent for this - return FALSE; + // Use context number + if (m_helpFile.empty()) return false; + + wxString str = GetValidFilename(m_helpFile); + + return (WinHelp(GetSuitableHWND(this), str.wx_str(), HELP_CONTEXT, (DWORD)section) != 0); +} + +bool wxWinHelpController::DisplayContextPopup(int contextId) +{ + if (m_helpFile.empty()) return false; + + wxString str = GetValidFilename(m_helpFile); + + return (WinHelp(GetSuitableHWND(this), str.wx_str(), HELP_CONTEXTPOPUP, (DWORD) contextId) != 0); } bool wxWinHelpController::DisplayBlock(long block) { - // Use context number -- a very rough equivalent to block id! - if (m_helpFile == "") return FALSE; - - char buf[_MAXPATHLEN]; - strcpy(buf, m_helpFile); - size_t len = strlen(buf); - if (!(buf[len-1] == 'p' && buf[len-2] == 'l' && buf[len-3] == 'h' && buf[len-4] == '.')) - strcat(buf, ".hlp"); - if (wxTheApp->GetTopWindow()) - { - WinHelp((HWND) wxTheApp->GetTopWindow()->GetHWND(), buf, HELP_CONTEXT, (DWORD)block); - return TRUE; - } - return FALSE; + DisplaySection(block); + return true; } -bool wxWinHelpController::KeywordSearch(const wxString& k) +bool wxWinHelpController::KeywordSearch(const wxString& k, + wxHelpSearchMode WXUNUSED(mode)) { - if (m_helpFile == "") return FALSE; - - char buf[_MAXPATHLEN]; - strcpy(buf, m_helpFile); - size_t len = strlen(buf); - if (!(buf[len-1] == 'p' && buf[len-2] == 'l' && buf[len-3] == 'h' && buf[len-4] == '.')) - strcat(buf, ".hlp"); - if (wxTheApp->GetTopWindow()) - { - WinHelp((HWND) wxTheApp->GetTopWindow()->GetHWND(), buf, HELP_PARTIALKEY, (DWORD)(const char*) k); - return TRUE; - } - return FALSE; + if (m_helpFile.empty()) return false; + + wxString str = GetValidFilename(m_helpFile); + + return (WinHelp(GetSuitableHWND(this), str.wx_str(), HELP_PARTIALKEY, (DWORD)k.wx_str()) != 0); } // Can't close the help window explicitly in WinHelp bool wxWinHelpController::Quit(void) { - if (wxTheApp->GetTopWindow()) - { - WinHelp((HWND) wxTheApp->GetTopWindow()->GetHWND(), 0, HELP_QUIT, 0L); - return TRUE; - } - else - return FALSE; + return (WinHelp(GetSuitableHWND(this), 0, HELP_QUIT, 0L) != 0); } -// Don't get notified of WinHelp quitting -void wxWinHelpController::OnQuit(void) +// Append extension if necessary. +wxString wxWinHelpController::GetValidFilename(const wxString& file) const { + wxString path, name, ext; + wxSplitPath(file, & path, & name, & ext); + + wxString fullName; + if (path.empty()) + fullName = name + wxT(".hlp"); + else if (path.Last() == wxT('\\')) + fullName = path + name + wxT(".hlp"); + else + fullName = path + wxT("\\") + name + wxT(".hlp"); + return fullName; } #endif // wxUSE_HELP