/////////////////////////////////////////////////////////////////////////////
-// 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/filename.h"
#include "wx/msw/helpwin.h"
-#if USE_HELP
#include <time.h>
-#ifdef __WINDOWS__
-#include <wx/msw/private.h>
+#ifdef __WXMSW__
+#include "wx/msw/private.h"
#endif
#include <string.h>
-// 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,
+ (ULONG_PTR)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, 0) != 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;
+ wxFileName::SplitPath(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 // USE_HELP
+#endif // wxUSE_HELP