All files compile in Unicode mode, but I have only converted things near
[wxWidgets.git] / src / generic / helpext.cpp
1 /*-*- c++ -*-********************************************************
2 * helpext.cpp - an external help controller for wxWindows *
3 * *
4 * (C) 1999 by Karsten Ballüder (Ballueder@usa.net) *
5 * *
6 * $Id$
7 *******************************************************************/
8 #ifdef __GNUG__
9 # pragma implementation "wxexthlp.h"
10 #endif
11
12 #include "wx/setup.h"
13 #include "wx/helpbase.h"
14 #include "wx/generic/helpext.h"
15 #include "wx/string.h"
16 #include "wx/utils.h"
17 #include "wx/list.h"
18 #include <stdio.h>
19 #include <ctype.h>
20 #include <sys/stat.h>
21 #include <unistd.h>
22
23 IMPLEMENT_CLASS(wxExtHelpController, wxHTMLHelpControllerBase)
24
25 /**
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.
29 */
30
31 wxExtHelpController::wxExtHelpController(void)
32 {
33 m_BrowserName = WXEXTHELP_DEFAULTBROWSER;
34 m_BrowserIsNetscape = WXEXTHELP_DEFAULTBROWSER_IS_NETSCAPE;
35
36 char *browser = getenv(WXEXTHELP_ENVVAR_BROWSER);
37 if(browser)
38 {
39 m_BrowserName = browser;
40 browser = getenv(WXEXTHELP_ENVVAR_BROWSERISNETSCAPE);
41 m_BrowserIsNetscape = browser && (atoi(browser) != 0);
42 }
43 }
44
45
46 void
47 wxExtHelpController::SetBrowser(wxString const & browsername, bool isNetscape)
48 {
49 m_BrowserName = browsername;
50 m_BrowserIsNetscape = isNetscape;
51 }
52
53 // Set viewer: new, generic name for SetBrowser
54 void wxExtHelpController::SetViewer(const wxString& viewer, long flags)
55 {
56 SetBrowser(viewer, ((flags & wxHELP_NETSCAPE) == wxHELP_NETSCAPE));
57 }
58
59 bool
60 wxExtHelpController::DisplayHelp(wxString const &relativeURL)
61 {
62 wxBusyCursor b; // display a busy cursor
63 wxString command;
64
65 if(m_BrowserIsNetscape) // try re-loading first
66 {
67 wxString lockfile;
68 wxGetHomeDir(&lockfile);
69 lockfile << WXEXTHELP_SEPARATOR << _T(".netscape/lock");
70 struct stat statbuf;
71 if(lstat(lockfile.fn_str(), &statbuf) == 0)
72 // cannot use wxFileExists, because it's a link pointing to a
73 // non-existing location if(wxFileExists(lockfile))
74 {
75 long success;
76 command << m_BrowserName << _T(" -remote openURL(")
77 << _T("file://") << m_MapFile
78 << WXEXTHELP_SEPARATOR << relativeURL << _T(")");
79 success = wxExecute(command);
80 if(success != 0 ) // returns PID on success
81 return TRUE;
82 }
83 }
84 command = m_BrowserName;
85 command << _T(" file://")
86 << m_MapFile << WXEXTHELP_SEPARATOR << relativeURL;
87 return wxExecute(command) != 0;
88 }
89
90