#if defined(HAVE_PLIB_PSL)
# include <Scripting/scriptmgr.hxx>
#endif
+#include <Scripting/NasalSys.hxx>
#include <Time/sunsolver.hxx>
#include <Time/tmp.hxx>
#include "fg_init.hxx"
+#include "fg_io.hxx"
#include "fg_commands.hxx"
#include "fg_props.hxx"
+#include "globals.hxx"
+#include "logger.cxx"
+#include "util.hxx"
+#include "viewmgr.hxx"
SG_USING_STD(string);
SG_USING_STD(ifstream);
SG_USING_STD(ofstream);
-#include "fg_props.hxx"
-#include "fg_io.hxx"
-#include "globals.hxx"
-#include "util.hxx"
-#include "viewmgr.hxx"
-
\f
////////////////////////////////////////////////////////////////////////
}
#endif // HAVE_PLIB_PSL
+/**
+ * Built-in command: run a Nasal script.
+ */
+static bool
+do_nasal (const SGPropertyNode * arg)
+{
+ return ((FGNasalSys*)globals->get_subsystem("nasal"))->handleCommand(arg);
+}
/**
* Built-in command: exit FlightGear.
}
+/**
+ * Built-in command: reinit the data logging system based on the
+ * current contents of the /logger tree.
+ */
+static bool
+do_data_logging_commit (const SGPropertyNode * arg)
+{
+ FGLogger *log = (FGLogger *)globals->get_subsystem("logger");
+ log->reinit();
+ return true;
+}
+
+/**
+ * Built-in command: Add a dialog to the GUI system. Does *not*
+ * display the dialog. The property node should have the same format
+ * as a dialog XML configuration. It must include:
+ *
+ * name: the name of the GUI dialog for future reference.
+ */
+static bool
+do_dialog_new (const SGPropertyNode * arg)
+{
+ NewGUI * gui = (NewGUI *)globals->get_subsystem("gui");
+
+ // Note the casting away of const: this is *real*. Doing a
+ // "dialog-apply" command later on will mutate this property node.
+ // I'm not convinced that this isn't the Right Thing though; it
+ // allows client to create a node, pass it to dialog-new, and get
+ // the values back from the dialog by reading the same node.
+ // Perhaps command arguments are not as "const" as they would
+ // seem?
+ gui->newDialog((SGPropertyNode*)arg);
+ return true;
+}
+
/**
* Built-in command: Show an XML-configured dialog.
*
do_dialog_close (const SGPropertyNode * arg)
{
NewGUI * gui = (NewGUI *)globals->get_subsystem("gui");
+ if(arg->hasValue("dialog-name"))
+ return gui->closeDialog(arg->getStringValue("dialog-name"));
return gui->closeActiveDialog();
}
#if defined(HAVE_PLIB_PSL)
{ "script", do_script },
#endif // HAVE_PLIB_PSL
+ { "nasal", do_nasal },
{ "exit", do_exit },
{ "reinit", do_reinit },
{ "suspend", do_reinit },
{ "property-scale", do_property_scale },
{ "property-cycle", do_property_cycle },
{ "property-randomize", do_property_randomize },
+ { "data-logging-commit", do_data_logging_commit },
+ { "dialog-new", do_dialog_new },
{ "dialog-show", do_dialog_show },
{ "dialog-close", do_dialog_close },
{ "dialog-show", do_dialog_show },