1 /*-*- c++ -*-********************************************************
2 * helpext.cpp - an external help controller for wxWindows *
4 * (C) 1999 by Karsten Ballüder (Ballueder@usa.net) *
7 *******************************************************************/
9 # pragma implementation "wxexthlp.h"
13 #include "wx/helpbase.h"
14 #include "wx/generic/helpext.h"
15 #include "wx/string.h"
23 IMPLEMENT_CLASS(wxExtHelpController
, wxHTMLHelpControllerBase
)
26 This class implements help via an external browser.
27 It requires the name of a directory containing the documentation
28 and a file mapping numerical Section numbers to relative URLS.
31 wxExtHelpController::wxExtHelpController(void)
33 m_BrowserName
= WXEXTHELP_DEFAULTBROWSER
;
34 m_BrowserIsNetscape
= WXEXTHELP_DEFAULTBROWSER_IS_NETSCAPE
;
36 char *browser
= getenv(WXEXTHELP_ENVVAR_BROWSER
);
39 m_BrowserName
= browser
;
40 browser
= getenv(WXEXTHELP_ENVVAR_BROWSERISNETSCAPE
);
41 m_BrowserIsNetscape
= browser
&& (atoi(browser
) != 0);
47 wxExtHelpController::SetBrowser(wxString
const & browsername
, bool isNetscape
)
49 m_BrowserName
= browsername
;
50 m_BrowserIsNetscape
= isNetscape
;
53 // Set viewer: new, generic name for SetBrowser
54 void wxExtHelpController::SetViewer(const wxString
& viewer
, long flags
)
56 SetBrowser(viewer
, ((flags
& wxHELP_NETSCAPE
) == wxHELP_NETSCAPE
));
60 wxExtHelpController::DisplayHelp(wxString
const &relativeURL
)
62 wxBusyCursor b
; // display a busy cursor
66 bool bOk
= (int)ShellExecute(NULL
, "open", relativeURL
.c_str(),
67 NULL
, NULL
, SW_SHOWNORMAL
) > 32;
70 wxLogSysError(_("Cannot open URL '%s'"), relativeURL
.c_str());
79 if(m_BrowserIsNetscape
) // try re-loading first
82 wxGetHomeDir(&lockfile
);
83 lockfile
<< WXEXTHELP_SEPARATOR
<< _T(".netscape/lock");
85 if(lstat(lockfile
.fn_str(), &statbuf
) == 0)
86 // cannot use wxFileExists, because it's a link pointing to a
87 // non-existing location if(wxFileExists(lockfile))
90 command
<< m_BrowserName
<< _T(" -remote openURL(")
91 << _T("file://") << m_MapFile
92 << WXEXTHELP_SEPARATOR
<< relativeURL
<< _T(")");
93 success
= wxExecute(command
);
94 if(success
!= 0 ) // returns PID on success
98 command
= m_BrowserName
;
99 command
<< _T(" file://")
100 << m_MapFile
<< WXEXTHELP_SEPARATOR
<< relativeURL
;
101 return wxExecute(command
) != 0;