Added parent window parameter to wxHelpController constructor
[wxWidgets.git] / src / msw / helpwin.cpp
1 /////////////////////////////////////////////////////////////////////////////
2 // Name: helpwin.cpp
3 // Purpose: Help system: WinHelp implementation
4 // Author: Julian Smart
5 // Modified by:
6 // Created: 04/01/98
7 // RCS-ID: $Id$
8 // Copyright: (c) Julian Smart
9 // Licence: wxWindows licence
10 /////////////////////////////////////////////////////////////////////////////
11
12 // For compilers that support precompilation, includes "wx.h".
13 #include "wx/wxprec.h"
14
15 #ifdef __BORLANDC__
16 #pragma hdrstop
17 #endif
18
19 #ifndef WX_PRECOMP
20 #include "wx/defs.h"
21 #endif
22
23 #if wxUSE_HELP
24
25 #include "wx/filefn.h"
26 #include "wx/msw/helpwin.h"
27
28 #include <time.h>
29
30 #ifdef __WXMSW__
31 #include "wx/msw/private.h"
32 #endif
33
34 #include <string.h>
35
36 static HWND GetSuitableHWND(wxWinHelpController* controller)
37 {
38 if (controller->GetParentWindow())
39 return (HWND) controller->GetParentWindow()->GetHWND();
40 else if (wxTheApp->GetTopWindow())
41 return (HWND) wxTheApp->GetTopWindow()->GetHWND();
42 else
43 return GetDesktopWindow();
44 }
45
46 IMPLEMENT_DYNAMIC_CLASS(wxWinHelpController, wxHelpControllerBase)
47
48 bool wxWinHelpController::Initialize(const wxString& filename)
49 {
50 m_helpFile = filename;
51 return true;
52 }
53
54 bool wxWinHelpController::LoadFile(const wxString& file)
55 {
56 if (!file.IsEmpty())
57 m_helpFile = file;
58 return true;
59 }
60
61 bool wxWinHelpController::DisplayContents(void)
62 {
63 if (m_helpFile.IsEmpty()) return false;
64
65 wxString str = GetValidFilename(m_helpFile);
66
67 #if defined(__WIN95__)
68 return (WinHelp(GetSuitableHWND(this), (const wxChar*) str, HELP_FINDER, 0L) != 0);
69 #else
70 return (WinHelp(GetSuitableHWND(this), (const wxChar*) str, HELP_CONTENTS, 0L) != 0);
71 #endif
72 }
73
74 bool wxWinHelpController::DisplaySection(int section)
75 {
76 // Use context number
77 if (m_helpFile.IsEmpty()) return false;
78
79 wxString str = GetValidFilename(m_helpFile);
80
81 return (WinHelp(GetSuitableHWND(this), (const wxChar*) str, HELP_CONTEXT, (DWORD)section) != 0);
82 }
83
84 bool wxWinHelpController::DisplayContextPopup(int contextId)
85 {
86 if (m_helpFile.IsEmpty()) return false;
87
88 wxString str = GetValidFilename(m_helpFile);
89
90 return (WinHelp(GetSuitableHWND(this), (const wxChar*) str, HELP_CONTEXTPOPUP, (DWORD) contextId) != 0);
91 }
92
93 bool wxWinHelpController::DisplayBlock(long block)
94 {
95 DisplaySection(block);
96 return true;
97 }
98
99 bool wxWinHelpController::KeywordSearch(const wxString& k,
100 wxHelpSearchMode WXUNUSED(mode))
101 {
102 if (m_helpFile.IsEmpty()) return false;
103
104 wxString str = GetValidFilename(m_helpFile);
105
106 return (WinHelp(GetSuitableHWND(this), (const wxChar*) str, HELP_PARTIALKEY, (DWORD)(const wxChar*) k) != 0);
107 }
108
109 // Can't close the help window explicitly in WinHelp
110 bool wxWinHelpController::Quit(void)
111 {
112 return (WinHelp(GetSuitableHWND(this), 0, HELP_QUIT, 0L) != 0);
113 }
114
115 // Append extension if necessary.
116 wxString wxWinHelpController::GetValidFilename(const wxString& file) const
117 {
118 wxString path, name, ext;
119 wxSplitPath(file, & path, & name, & ext);
120
121 wxString fullName;
122 if (path.IsEmpty())
123 fullName = name + wxT(".hlp");
124 else if (path.Last() == wxT('\\'))
125 fullName = path + name + wxT(".hlp");
126 else
127 fullName = path + wxT("\\") + name + wxT(".hlp");
128 return fullName;
129 }
130
131 #endif // wxUSE_HELP