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)
}
}
+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.
{ "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 },