]> git.mxchange.org Git - flightgear.git/commitdiff
Add generic "open-browser" command to show URLs or local HTML/text pages.
authorThorstenB <brehmt@gmail.com>
Sun, 9 Oct 2011 10:37:43 +0000 (12:37 +0200)
committerThorstenB <brehmt@gmail.com>
Sun, 9 Oct 2011 10:37:43 +0000 (12:37 +0200)
Replace deprecated "old-help-dialog" command with generic "open-browser".
Can also be used to add links to aircraft manuals in the menubar (local
file or http) , i.e.
<binding>
    <command>open-browser</command>
    <path>Aircraft/ogeL/FlightManual.html</path>
</binding>

src/GUI/gui.h
src/GUI/gui_funcs.cxx
src/GUI/menubar.cxx
src/Main/fg_commands.cxx

index d6570c7e41331ca97913bd4b8aff671c76f6fdd6..f25d0c9613866faf3d7efc905959882755c65d4a 100644 (file)
@@ -42,6 +42,7 @@ class GraphicsContext;
 // gui.cxx
 extern void guiStartInit(osg::GraphicsContext*);
 extern bool guiFinishInit();
+extern bool openBrowser(string address);
 extern void mkDialog(const char *txt);
 extern void guiErrorMessage(const char *txt);
 extern void guiErrorMessage(const char *txt, const sg_throwable &throwable);
index 538eb755d64941de7521631ad1fe5249937fcde4..6cd2a95bf4d15953e3bb5439f50a047f42dfce2a 100644 (file)
@@ -156,46 +156,60 @@ void guiErrorMessage (const char *txt, const sg_throwable &throwable)
 the Gui callback functions 
 ____________________________________________________________________*/
 
+void helpCb()
+{
+    openBrowser( "Docs/index.html" );
+}
 
-// Hier Neu :-) This is my newly added code
-// Added by David Findlay <nedz@bigpond.com>
-// on Sunday 3rd of December
+bool openBrowser(string address)
+{
+    bool ok = true;
 
+    // do not resolve addresses with given protocol, i.e. "http://...", "ftp://..."
+    if (address.find("://")==string::npos)
+    {
+        // resolve local file path
+        SGPath path(address);
+        path = globals->resolve_maybe_aircraft_path(address);
+        if (!path.isNull())
+            address = path.str();
+        else
+        {
+            mkDialog ("Sorry, file not found!");
+            SG_LOG(SG_GENERAL, SG_ALERT, "openBrowser: Cannot find requested file '"  
+                    << address << "'.");
+            return false;
+        }
+    }
 
-void helpCb ()
-{
-    string command;
-       
-    SGPath path( globals->get_fg_root() );
-    path.append( "Docs/index.html" );
-       
 #ifndef _WIN32
 
-    command = globals->get_browser();
+    string command = globals->get_browser();
     string::size_type pos;
     if ((pos = command.find("%u", 0)) != string::npos)
-        command.replace(pos, 2, path.str());
+        command.replace(pos, 2, address);
     else
-        command += " " + path.str();
+        command += " " + address;
 
     command += " &";
-    system( command.c_str() );
+    ok = (system( command.c_str() ) == 0);
 
 #else // _WIN32
 
     // Look for favorite browser
     char win32_name[1024];
 # ifdef __CYGWIN__
-    cygwin32_conv_to_full_win32_path(path.c_str(),win32_name);
+    cygwin32_conv_to_full_win32_path(address.c_str(),win32_name);
 # else
-    strncpy(win32_name,path.c_str(), 1024);
+    strncpy(win32_name,address.c_str(), 1024);
 # endif
     ShellExecute ( NULL, "open", win32_name, NULL, NULL,
                    SW_SHOWNORMAL ) ;
 
 #endif
-       
-    mkDialog ("Help started in your web browser window.");
+
+    mkDialog("The file is shown in your web browser window.");
+    return ok;
 }
 
 #if defined( TR_HIRES_SNAP)
index 39d4d53aa8bdc2be89c963c21a7545a8dd623521..40f803c231b954ca7f8fb418a768b9e58b6eef4e 100644 (file)
@@ -37,14 +37,6 @@ do_hires_snapshot_dialog (const SGPropertyNode * arg)
 }
 #endif // TR_HIRES_SNAP
 
-extern void helpCb ();
-static bool
-do_help_dialog (const SGPropertyNode * arg)
-{
-    helpCb();
-    return true;
-}
-
 static struct {
     const char * name;
     SGCommandMgr::command_t command;
@@ -52,7 +44,6 @@ static struct {
 #if defined(TR_HIRES_SNAP)
     { "old-hires-snapshot-dialog", do_hires_snapshot_dialog },
 #endif
-    { "old-help-dialog", do_help_dialog },
     { 0, 0 }
 };
 
index db234bfc9685625bf646f38e56c9b58477093785..14a04c3d06a5260ee4b4528730a9115f351f57b2 100644 (file)
@@ -1040,6 +1040,20 @@ do_dialog_update (const SGPropertyNode * arg)
     }
 }
 
+static bool
+do_open_browser (const SGPropertyNode * arg)
+{
+    string path;
+    if (arg->hasValue("path"))
+        path = arg->getStringValue("path");
+    else
+    if (arg->hasValue("url"))
+        path = arg->getStringValue("url");
+    else
+        return false;
+
+    return openBrowser(path);
+}
 
 /**
  * Apply a value in the active XML-configured dialog.
@@ -1468,6 +1482,7 @@ static struct {
     { "dialog-close", do_dialog_close },
     { "dialog-update", do_dialog_update },
     { "dialog-apply", do_dialog_apply },
+    { "open-browser", do_open_browser },
     { "gui-redraw", do_gui_redraw },
     { "add-model", do_add_model },
     { "set-cursor", do_set_cursor },