home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / wxos2233.zip / wxOS2-2_3_3.zip / wxWindows-2.3.3 / src / generic / helpext.cpp < prev    next >
C/C++ Source or Header  |  2002-08-27  |  5KB  |  169 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 2002/08/25 18:16:19 SN 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   "WX_HELPBROWSER"
  51. /// Is browser a netscape browser?
  52. #define   WXEXTHELP_ENVVAR_BROWSERISNETSCAPE "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.    char *browser = getenv(WXEXTHELP_ENVVAR_BROWSER);
  66.    if(browser)
  67.    {
  68.       m_BrowserName = browser;
  69.       browser = getenv(WXEXTHELP_ENVVAR_BROWSERISNETSCAPE);
  70.       m_BrowserIsNetscape = browser && (atoi(browser) != 0);
  71.    }
  72. }
  73.  
  74.  
  75. void
  76. wxExtHelpController::SetBrowser(wxString const & browsername, bool isNetscape)
  77. {
  78.    m_BrowserName = browsername;
  79.    m_BrowserIsNetscape = isNetscape;
  80. }
  81.  
  82. // Set viewer: new, generic name for SetBrowser
  83. void wxExtHelpController::SetViewer(const wxString& viewer, long flags)
  84. {
  85.     SetBrowser(viewer, ((flags & wxHELP_NETSCAPE) == wxHELP_NETSCAPE));
  86. }
  87.  
  88. bool
  89. wxExtHelpController::DisplayHelp(const wxString &relativeURL)
  90. {
  91.    wxBusyCursor b; // display a busy cursor
  92.  
  93.  
  94. #if defined(__WXMSW__)
  95.    wxString url;
  96.    url << m_MapFile << '\\' << relativeURL.BeforeFirst('#');
  97.    bool bOk = (int)ShellExecute(NULL, wxT("open"), url.c_str(),
  98.                                 NULL, NULL, SW_SHOWNORMAL ) > 32;
  99.    if ( !bOk )
  100.    {
  101.       wxLogSysError(_("Cannot open URL '%s'"), relativeURL.c_str());
  102.       return false;
  103.    }
  104.    else
  105.       return true;
  106.  
  107. #elif  defined(__WXPM__)
  108.  
  109.    wxString url;
  110.    url << m_MapFile << '\\' << relativeURL.BeforeFirst('#');
  111. //   will have to fix for OS/2, later.....DW
  112. //   bool bOk = (int)ShellExecute(NULL, "open", url,
  113. //                                NULL, NULL, SW_SHOWNORMAL ) > 32;
  114. //   if ( !bOk )
  115. //   {
  116. //      wxLogSysError(_("Cannot open URL '%s'"), relativeURL.c_str());
  117. //      return false;
  118. //   }
  119. //   else
  120.       return TRUE;
  121.  
  122. #elif defined(__DOS__)
  123.  
  124.    wxString command;
  125.    command = m_BrowserName;
  126.    command << wxT(" file://")
  127.            << m_MapFile << WXEXTHELP_SEPARATOR << relativeURL;
  128.    return wxExecute(command) != 0;
  129.  
  130. #else // UNIX
  131.    wxString command;
  132.  
  133. #ifndef __EMX__
  134.    if(m_BrowserIsNetscape) // try re-loading first
  135.    {
  136.       wxString lockfile;
  137.       wxGetHomeDir(&lockfile);
  138. #ifdef __VMS__
  139.       lockfile << WXEXTHELP_SEPARATOR << wxT(".netscape]lock.");
  140.       struct stat statbuf;
  141.       if(stat(lockfile.fn_str(), &statbuf) == 0)
  142. #else
  143.       lockfile << WXEXTHELP_SEPARATOR << wxT(".netscape/lock");
  144.       struct stat statbuf;
  145.       if(lstat(lockfile.fn_str(), &statbuf) == 0)
  146.       // cannot use wxFileExists, because it's a link pointing to a
  147.       // non-existing location      if(wxFileExists(lockfile))
  148. #endif
  149.       {
  150.          long success;
  151.          command << m_BrowserName << wxT(" -remote openURL(")
  152.                  << wxT("file://") << m_MapFile
  153.                  << WXEXTHELP_SEPARATOR << relativeURL << wxT(")");
  154.          success = wxExecute(command);
  155.          if(success != 0 ) // returns PID on success
  156.             return TRUE;
  157.       }
  158.    }
  159. #endif
  160.    command = m_BrowserName;
  161.    command << wxT(" file://")
  162.            << m_MapFile << WXEXTHELP_SEPARATOR << relativeURL;
  163.    return wxExecute(command) != 0;
  164. #endif
  165. }
  166.  
  167. #endif // wxUSE_HELP
  168.  
  169.