Split up wxStream doc files; added wxTCP... files; added wxBusyCursor;
[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 bool
54 wxExtHelpController::DisplayHelp(wxString const &relativeURL)
55 {
56 wxBusyCursor b; // display a busy cursor
57 wxString command;
58
59 if(m_BrowserIsNetscape) // try re-loading first
60 {
61 wxString lockfile;
62 wxGetHomeDir(&lockfile);
63 lockfile << WXEXTHELP_SEPARATOR << ".netscape/lock";
64 struct stat statbuf;
65 if(lstat(lockfile.c_str(), &statbuf) == 0)
66 // cannot use wxFileExists, because it's a link pointing to a
67 // non-existing location if(wxFileExists(lockfile))
68 {
69 long success;
70 command << m_BrowserName << " -remote openURL("
71 << "file://" << m_MapFile
72 << WXEXTHELP_SEPARATOR << relativeURL << ")";
73 success = wxExecute(command);
74 if(success != 0 ) // returns PID on success
75 return TRUE;
76 }
77 }
78 command = m_BrowserName;
79 command << " file://"
80 << m_MapFile << WXEXTHELP_SEPARATOR << relativeURL;
81 return wxExecute(command) != 0;
82 }
83
84