home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / wxos2240.zip / wxWindows-2.4.0 / src / generic / helpext.cpp < prev    next >
C/C++ Source or Header  |  2002-11-04  |  5KB  |  168 lines

  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: helpext.cpp,v 1.23.2.1 2002/10/29 21:47:53 RR Exp $
  8. // Copyright:   (c) Karsten Ballueder
  9. // Licence:     wxWindows licence
  10. /////////////////////////////////////////////////////////////////////////////
  11.  
  12. #ifdef __GNUG__
  13. #   pragma implementation "wxexthlp.h"
  14. #endif
  15.  
  16. #include "wx/wxprec.h"
  17.  
  18. #ifdef __BORLANDC__
  19.     #pragma hdrstop
  20. #endif
  21.  
  22. #if wxUSE_HELP
  23.  
  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.  
  39. #if !defined(__WINDOWS__) && !defined(__OS2__)
  40.     #include   <unistd.h>
  41. #endif
  42.  
  43. #ifdef __WXMSW__
  44. #include <windows.h>
  45. #endif
  46.  
  47. IMPLEMENT_CLASS(wxExtHelpController, wxHTMLHelpControllerBase)
  48.  
  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")
  53.  
  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.  
  60. wxExtHelpController::wxExtHelpController(void)
  61. {
  62.    m_BrowserName = WXEXTHELP_DEFAULTBROWSER;
  63.    m_BrowserIsNetscape = WXEXTHELP_DEFAULTBROWSER_IS_NETSCAPE;
  64.  
  65.    wxChar *browser = wxGetenv(WXEXTHELP_ENVVAR_BROWSER);
  66.    if(browser)
  67.    {
  68.       m_BrowserName = browser;
  69.       browser = wxGetenv(WXEXTHELP_ENVVAR_BROWSERISNETSCAPE);
  70.       m_BrowserIsNetscape = browser && (wxAtoi(browser) != 0);
  71.    }
  72. }
  73.  
  74.  
  75. void wxExtHelpController::SetBrowser(wxString const & browsername, bool isNetscape)
  76. {
  77.    m_BrowserName = browsername;
  78.    m_BrowserIsNetscape = isNetscape;
  79. }
  80.  
  81. // Set viewer: new, generic name for SetBrowser
  82. void wxExtHelpController::SetViewer(const wxString& viewer, long flags)
  83. {
  84.     SetBrowser(viewer, ((flags & wxHELP_NETSCAPE) == wxHELP_NETSCAPE));
  85. }
  86.  
  87. bool
  88. wxExtHelpController::DisplayHelp(const wxString &relativeURL)
  89. {
  90.    wxBusyCursor b; // display a busy cursor
  91.  
  92.  
  93. #if defined(__WXMSW__)
  94.    wxString url;
  95.    url << m_MapFile << '\\' << relativeURL.BeforeFirst('#');
  96.    bool bOk = (int)ShellExecute(NULL, wxT("open"), url.c_str(),
  97.                                 NULL, NULL, SW_SHOWNORMAL ) > 32;
  98.    if ( !bOk )
  99.    {
  100.       wxLogSysError(_("Cannot open URL '%s'"), relativeURL.c_str());
  101.       return false;
  102.    }
  103.    else
  104.       return true;
  105.  
  106. #elif  defined(__WXPM__)
  107.  
  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;
  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
  130.    wxString command;
  131.  
  132. #ifndef __EMX__
  133.    if(m_BrowserIsNetscape) // try re-loading first
  134.    {
  135.       wxString lockfile;
  136.       wxGetHomeDir(&lockfile);
  137. #ifdef __VMS__
  138.       lockfile << WXEXTHELP_SEPARATOR << wxT(".netscape]lock.");
  139.       struct stat statbuf;
  140.       if(stat(lockfile.fn_str(), &statbuf) == 0)
  141. #else
  142.       lockfile << WXEXTHELP_SEPARATOR << wxT(".netscape/lock");
  143.       struct stat statbuf;
  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))
  147. #endif
  148.       {
  149.          long success;
  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
  155.             return TRUE;
  156.       }
  157.    }
  158. #endif
  159.    command = m_BrowserName;
  160.    command << wxT(" file://")
  161.            << m_MapFile << WXEXTHELP_SEPARATOR << relativeURL;
  162.    return wxExecute(command) != 0;
  163. #endif
  164. }
  165.  
  166. #endif // wxUSE_HELP
  167.  
  168.