]> git.saurik.com Git - wxWidgets.git/blame - src/generic/helpext.cpp
Applied some of patch [ 688466 ] MSVC7 build & bug fixes
[wxWidgets.git] / src / generic / helpext.cpp
CommitLineData
f96b60aa
VZ
1/////////////////////////////////////////////////////////////////////////////
2// Name: helpext.cpp
3// Purpose: an external help controller for wxWindows
4// Author: Karsten Ballueder
5// Modified by:
6// Created: 04/01/98
7// RCS-ID: $Id$
8// Copyright: (c) Karsten Ballueder
9// Licence: wxWindows licence
10/////////////////////////////////////////////////////////////////////////////
11
e9aad10a
KB
12#ifdef __GNUG__
13# pragma implementation "wxexthlp.h"
14#endif
15
f96b60aa
VZ
16#include "wx/wxprec.h"
17
18#ifdef __BORLANDC__
19 #pragma hdrstop
20#endif
21
31528cd3
VZ
22#if wxUSE_HELP
23
f96b60aa
VZ
24#ifndef WX_PRECOMP
25 #include "wx/setup.h"
26 #include "wx/string.h"
27 #include "wx/utils.h"
28 #include "wx/list.h"
29 #include "wx/intl.h"
30#endif
31
32#include "wx/helpbase.h"
33#include "wx/generic/helpext.h"
34
35#include <stdio.h>
36#include <ctype.h>
37#include <sys/stat.h>
38
004fd0c8 39#if !defined(__WINDOWS__) && !defined(__OS2__)
f96b60aa
VZ
40 #include <unistd.h>
41#endif
e9aad10a 42
583f6c5c
JS
43#ifdef __WXMSW__
44#include <windows.h>
45#endif
46
afcaf277 47IMPLEMENT_CLASS(wxExtHelpController, wxHTMLHelpControllerBase)
31528cd3 48
aa0ffd1d 49/// Name of environment variable to set help browser.
2b5f62a0 50#define WXEXTHELP_ENVVAR_BROWSER wxT("WX_HELPBROWSER")
aa0ffd1d 51/// Is browser a netscape browser?
2b5f62a0 52#define WXEXTHELP_ENVVAR_BROWSERISNETSCAPE wxT("WX_HELPBROWSER_NS")
aa0ffd1d 53
e9aad10a
KB
54/**
55 This class implements help via an external browser.
56 It requires the name of a directory containing the documentation
57 and a file mapping numerical Section numbers to relative URLS.
58*/
59
60wxExtHelpController::wxExtHelpController(void)
61{
e9aad10a
KB
62 m_BrowserName = WXEXTHELP_DEFAULTBROWSER;
63 m_BrowserIsNetscape = WXEXTHELP_DEFAULTBROWSER_IS_NETSCAPE;
64
2b5f62a0 65 wxChar *browser = wxGetenv(WXEXTHELP_ENVVAR_BROWSER);
e9aad10a
KB
66 if(browser)
67 {
68 m_BrowserName = browser;
2b5f62a0
VZ
69 browser = wxGetenv(WXEXTHELP_ENVVAR_BROWSERISNETSCAPE);
70 m_BrowserIsNetscape = browser && (wxAtoi(browser) != 0);
e9aad10a
KB
71 }
72}
73
e9aad10a 74
2b5f62a0 75void wxExtHelpController::SetBrowser(wxString const & browsername, bool isNetscape)
e9aad10a
KB
76{
77 m_BrowserName = browsername;
78 m_BrowserIsNetscape = isNetscape;
79}
80
33b64e6f
JS
81// Set viewer: new, generic name for SetBrowser
82void wxExtHelpController::SetViewer(const wxString& viewer, long flags)
83{
84 SetBrowser(viewer, ((flags & wxHELP_NETSCAPE) == wxHELP_NETSCAPE));
85}
86
e9aad10a 87bool
f6bcfd97 88wxExtHelpController::DisplayHelp(const wxString &relativeURL)
e9aad10a
KB
89{
90 wxBusyCursor b; // display a busy cursor
6e5fefdf
KB
91
92
004fd0c8 93#if defined(__WXMSW__)
f96b60aa
VZ
94 wxString url;
95 url << m_MapFile << '\\' << relativeURL.BeforeFirst('#');
f6bcfd97 96 bool bOk = (int)ShellExecute(NULL, wxT("open"), url.c_str(),
f96b60aa 97 NULL, NULL, SW_SHOWNORMAL ) > 32;
6e5fefdf
KB
98 if ( !bOk )
99 {
100 wxLogSysError(_("Cannot open URL '%s'"), relativeURL.c_str());
101 return false;
102 }
103 else
104 return true;
b13f5fbf 105
004fd0c8 106#elif defined(__WXPM__)
b13f5fbf 107
004fd0c8
DW
108 wxString url;
109 url << m_MapFile << '\\' << relativeURL.BeforeFirst('#');
110// will have to fix for OS/2, later.....DW
111// bool bOk = (int)ShellExecute(NULL, "open", url,
112// NULL, NULL, SW_SHOWNORMAL ) > 32;
113// if ( !bOk )
114// {
115// wxLogSysError(_("Cannot open URL '%s'"), relativeURL.c_str());
116// return false;
117// }
118// else
119 return TRUE;
b13f5fbf
VS
120
121#elif defined(__DOS__)
122
123 wxString command;
124 command = m_BrowserName;
125 command << wxT(" file://")
126 << m_MapFile << WXEXTHELP_SEPARATOR << relativeURL;
127 return wxExecute(command) != 0;
128
129#else // UNIX
e9aad10a
KB
130 wxString command;
131
de560321 132#ifndef __EMX__
e9aad10a
KB
133 if(m_BrowserIsNetscape) // try re-loading first
134 {
135 wxString lockfile;
136 wxGetHomeDir(&lockfile);
e0b3e85b
JJ
137#ifdef __VMS__
138 lockfile << WXEXTHELP_SEPARATOR << wxT(".netscape]lock.");
139 struct stat statbuf;
140 if(stat(lockfile.fn_str(), &statbuf) == 0)
141#else
223d09f6 142 lockfile << WXEXTHELP_SEPARATOR << wxT(".netscape/lock");
e9aad10a 143 struct stat statbuf;
87138c52 144 if(lstat(lockfile.fn_str(), &statbuf) == 0)
e9aad10a
KB
145 // cannot use wxFileExists, because it's a link pointing to a
146 // non-existing location if(wxFileExists(lockfile))
e0b3e85b 147#endif
aa0ffd1d 148 {
e9aad10a 149 long success;
223d09f6
KB
150 command << m_BrowserName << wxT(" -remote openURL(")
151 << wxT("file://") << m_MapFile
152 << WXEXTHELP_SEPARATOR << relativeURL << wxT(")");
e9aad10a
KB
153 success = wxExecute(command);
154 if(success != 0 ) // returns PID on success
5dcf05ae 155 return TRUE;
e9aad10a
KB
156 }
157 }
de560321 158#endif
e9aad10a 159 command = m_BrowserName;
223d09f6 160 command << wxT(" file://")
31528cd3
VZ
161 << m_MapFile << WXEXTHELP_SEPARATOR << relativeURL;
162 return wxExecute(command) != 0;
6e5fefdf 163#endif
e9aad10a
KB
164}
165
31528cd3 166#endif // wxUSE_HELP
e9aad10a 167