1 /////////////////////////////////////////////////////////////////////////////
3 // Purpose: an external help controller for wxWindows
4 // Author: Karsten Ballueder
8 // Copyright: (c) Karsten Ballueder
9 // Licence: wxWindows licence
10 /////////////////////////////////////////////////////////////////////////////
13 # pragma implementation "wxexthlp.h"
16 #include "wx/wxprec.h"
26 #include "wx/string.h"
32 #include "wx/helpbase.h"
33 #include "wx/generic/helpext.h"
39 #if !defined(__WINDOWS__) && !defined(__OS2__)
47 IMPLEMENT_CLASS(wxExtHelpController
, wxHTMLHelpControllerBase
)
49 /// Name of environment variable to set help browser.
50 #define WXEXTHELP_ENVVAR_BROWSER wxT("WX_HELPBROWSER")
51 /// Is browser a netscape browser?
52 #define WXEXTHELP_ENVVAR_BROWSERISNETSCAPE wxT("WX_HELPBROWSER_NS")
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.
60 wxExtHelpController::wxExtHelpController(void)
62 m_BrowserName
= WXEXTHELP_DEFAULTBROWSER
;
63 m_BrowserIsNetscape
= WXEXTHELP_DEFAULTBROWSER_IS_NETSCAPE
;
65 wxChar
*browser
= wxGetenv(WXEXTHELP_ENVVAR_BROWSER
);
68 m_BrowserName
= browser
;
69 browser
= wxGetenv(WXEXTHELP_ENVVAR_BROWSERISNETSCAPE
);
70 m_BrowserIsNetscape
= browser
&& (wxAtoi(browser
) != 0);
75 void wxExtHelpController::SetBrowser(wxString
const & browsername
, bool isNetscape
)
77 m_BrowserName
= browsername
;
78 m_BrowserIsNetscape
= isNetscape
;
81 // Set viewer: new, generic name for SetBrowser
82 void wxExtHelpController::SetViewer(const wxString
& viewer
, long flags
)
84 SetBrowser(viewer
, ((flags
& wxHELP_NETSCAPE
) == wxHELP_NETSCAPE
));
88 wxExtHelpController::DisplayHelp(const wxString
&relativeURL
)
90 wxBusyCursor b
; // display a busy cursor
93 #if defined(__WXMSW__)
95 url
<< m_MapFile
<< '\\' << relativeURL
.BeforeFirst('#');
96 bool bOk
= (int)ShellExecute(NULL
, wxT("open"), url
.c_str(),
97 NULL
, NULL
, SW_SHOWNORMAL
) > 32;
100 wxLogSysError(_("Cannot open URL '%s'"), relativeURL
.c_str());
106 #elif defined(__WXPM__)
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;
115 // wxLogSysError(_("Cannot open URL '%s'"), relativeURL.c_str());
121 #elif defined(__DOS__)
124 command
= m_BrowserName
;
125 command
<< wxT(" file://")
126 << m_MapFile
<< WXEXTHELP_SEPARATOR
<< relativeURL
;
127 return wxExecute(command
) != 0;
133 if(m_BrowserIsNetscape
) // try re-loading first
136 wxGetHomeDir(&lockfile
);
138 lockfile
<< WXEXTHELP_SEPARATOR
<< wxT(".netscape]lock.");
140 if(stat(lockfile
.fn_str(), &statbuf
) == 0)
142 lockfile
<< WXEXTHELP_SEPARATOR
<< wxT(".netscape/lock");
144 if(lstat(lockfile
.fn_str(), &statbuf
) == 0)
145 // cannot use wxFileExists, because it's a link pointing to a
146 // non-existing location if(wxFileExists(lockfile))
150 command
<< m_BrowserName
<< wxT(" -remote openURL(")
151 << wxT("file://") << m_MapFile
152 << WXEXTHELP_SEPARATOR
<< relativeURL
<< wxT(")");
153 success
= wxExecute(command
);
154 if(success
!= 0 ) // returns PID on success
159 command
= m_BrowserName
;
160 command
<< wxT(" file://")
161 << m_MapFile
<< WXEXTHELP_SEPARATOR
<< relativeURL
;
162 return wxExecute(command
) != 0;