From 30e2db94b11b43beab603af34200a67664b866fe Mon Sep 17 00:00:00 2001 From: ThorstenB Date: Sun, 9 Oct 2011 12:37:43 +0200 Subject: [PATCH] Add generic "open-browser" command to show URLs or local HTML/text pages. 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. open-browser Aircraft/ogeL/FlightManual.html --- src/GUI/gui.h | 1 + src/GUI/gui_funcs.cxx | 54 +++++++++++++++++++++++++--------------- src/GUI/menubar.cxx | 9 ------- src/Main/fg_commands.cxx | 15 +++++++++++ 4 files changed, 50 insertions(+), 29 deletions(-) diff --git a/src/GUI/gui.h b/src/GUI/gui.h index d6570c7e4..f25d0c961 100644 --- a/src/GUI/gui.h +++ b/src/GUI/gui.h @@ -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); diff --git a/src/GUI/gui_funcs.cxx b/src/GUI/gui_funcs.cxx index 538eb755d..6cd2a95bf 100644 --- a/src/GUI/gui_funcs.cxx +++ b/src/GUI/gui_funcs.cxx @@ -156,46 +156,60 @@ void guiErrorMessage (const char *txt, const sg_throwable &throwable) the Gui callback functions ____________________________________________________________________*/ - -// Hier Neu :-) This is my newly added code -// Added by David Findlay -// on Sunday 3rd of December - - -void helpCb () +void helpCb() { - string command; - - SGPath path( globals->get_fg_root() ); - path.append( "Docs/index.html" ); - + openBrowser( "Docs/index.html" ); +} + +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; + } + } + #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) diff --git a/src/GUI/menubar.cxx b/src/GUI/menubar.cxx index 39d4d53aa..40f803c23 100644 --- a/src/GUI/menubar.cxx +++ b/src/GUI/menubar.cxx @@ -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 } }; diff --git a/src/Main/fg_commands.cxx b/src/Main/fg_commands.cxx index db234bfc9..14a04c3d0 100644 --- a/src/Main/fg_commands.cxx +++ b/src/Main/fg_commands.cxx @@ -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 },