/**
 * @anchor ExternalApplications
 * @page LEVEL2 Runtime GUIs
 *
 * Trick provides the following graphical user interfaces:
 */

#include "sim_services/ExternalApplications/scp.dox_in"

/**
 * @page LEVEL2cont
 * - @subpage SimControlPanelPage "LEVEL3cont Sim Control Panel" <br>
 *   Send control commands to and view the status of a simulation.
 */

#include "sim_services/ExternalApplications/tv.dox_in"

/**
 * @page LEVEL2cont
 * - @subpage TrickViewPage "LEVEL3cont Trick View" <br>
 *   Browse and modify a simulation's variables while it's running. Launch integrated strip charts.
 */

#include "sim_services/ExternalApplications/mtv.dox_in"

/**
 * @page LEVEL2cont
 * - @subpage MalfunctionsTrickViewPage "LEVEL3cont Events/Malfunctions Trick View" <br>
 *   Manage the events and malfunctions of a simulation.
 */

#include "sim_services/ExternalApplications/mm.dox_in"

/**
 * @page LEVEL2cont
 * - @subpage MonteMonitorPage "LEVEL3cont Monte Monitor" <br>
 *   Monitor the status of a Monte Carlo simulation; create, start, and stop slaves.
 *
 * @section LEVEL3 Managing External Applications
 *
 * External applications are managed by instantiating and invoking calls on instances of launcher classes, which provide
 * interfaces for setting up external applications from the input file or user model code. For instance, to manipulate
 * %Trick View from the input file:
 *
 * @code trickView = trick.TrickView() @endcode
 *
 * You now have an instance of the %Trick View launcher class on which you can invoke calls to modify the actual %Trick View
 * application's behavior at launch. For instance, you could set the host and port:
 *
 * @code
 * trickView.set_host("localhost")
 * trickView.set_port(7000)
 * @endcode
 *
 * And then add it for automatic launching:
 *
 * @code trick.add_external_application(trickView) @endcode
 *
 * Provided launcher classes are derived from and listed in Trick::ExternalApplication. Some functionality is shared
 * among launcher classes, and each class provides its own specific additional options. %Trick allows any number of
 * instances of any subclass of ExternalApplication. This means you could automatically launch two different %Trick Views
 * with completely separate settings (if you find that sort of thing useful).
 *
 * @anchor ExternalApplicationsAutomaticLaunching
 * @section LEVEL3 Automatically Launching Applications
 *
 * Applications can be set to automatically launch during the initialization job phase by adding them to the queue of
 * external applications managed by %Trick. To do this, instantiate an instance of the appropriate launcher class (see
 * above) and call Trick::ExternalApplication::add_external_application.
 *
 * @section LEVEL3 Manually Launching Applications
 *
 * %Trick automatically launches all applications that have been added to its queue during simulation initialization.
 * However, applications may also be manually launched via Trick::ExternalApplication::launch.
 *
 * @section LEVEL3 Launch Command
 *
 * Default commands suitable to launch each application are provided by their individual constructors. However, they may be
 * changed, if desired, via Trick::ExternalApplication::set_startup_command.
 *
 * @section LEVEL3 Launching Custom Applications or Commands
 *
 * Having %Trick automatically launch a custom application, or execute any command at all really, is a simple matter of
 * instantiating an instance of the base class ExternalApplication and then setting the desired command as described above.
 *
 * @code
 * customApplication = trick.ExternalApplication()
 * customApplication.set_startup_command("echo Hello World!")
 * customApplication.set_arguments("")
 * trick.add_external_application(customApplication)
 * @endcode
 *
 * Note that ExternalApplication automatically appends the host and port argument unless you set the arguments by calling
 * Trick::ExternalApplication::set_arguments.
 *
 * Why would anyone want to have %Trick automatically run additional commands? Well, for one thing, it saves you from
 * manually running them each time you run a sim or writing a script to do it. But more importantly, applications managed by
 * %Trick are included in binary checkpoints, which means they can be saved and restored with no work on your part!
 *
 * @section LEVEL3 Shared Options
 *
 * As each %Trick GUI was written by a different developer and few standards were in place, most options vary according to
 * each GUI. The following apply to at least %Trick View and Monte Monitor. Application-specific options can be passed from
 * the input file or user model code via Trick::ExternalApplication::set_arguments or
 * Trick::ExternalApplication::add_arguments.
 *
 * @section LEVEL4 Host
 *
 * The host of the Variable Server to which the application will connect at launch can be specified via one of:
 *
 * - From the command line, use the <code>\-\-host</code> option.
 *
 * - From the input file or user model code, use Trick::ExternalApplication::set_host
 *
 * If no host is specified, it will automatically be set to that of the simulation which is launching this application.
 *
 * @section LEVEL4 Port
 *
 * The port of the Variable Server to which the application will connect at launch can be specified via one of:
 *
 * - From the command line, use the <code>\-\-port</code> option.
 *
 * - From the input file or user model code, use Trick::ExternalApplication::set_port
 *
 * If no port is specified, it will automatically be set to that of the simulation which is launching this application.
 *
 * @section LEVEL4 Automatically Reconnect
 *
 * The application can be configured to automatically reestablish lost connections via one of:
 *
 * - From the command line, use the <code>\-\-autoReconnect</code> option.
 *
 * - From the input file or user model code, use Trick::ExternalApplication::set_auto_reconnect
 *
 * - From the application, use the <code>File->Settings</code> menu.
 *
 * The default value is <code>false</code>.
 *
 * @section LEVEL4 Window Size and Placement
 *
 * The window's coordinates and dimensions at launch can be set via one of:
 *
 * - From the command line, use the <code>\-\-x</code>, <code>\-\-y</code>, <code>\-\-width</code>, or <code>\-\-height</code>
 *   options.
 *
 * - From the input file or user model code, use Trick::ExternalApplication::set_x, Trick::ExternalApplication::set_y,
 *   Trick::ExternalApplication::set_width, or Trick::ExternalApplication::set_height.
 *
 * @section LEVEL4 Cycle Period
 *
 * The period (in seconds) at which the Variable Server sends information to the application can be specified via one of:
 *
 * - From the command line, use the <code>\-\-cycle</code> option.
 *
 * - From the input file or user model code, use Trick::ExternalApplication::set_cycle_period.
 *
 * - From the application, use the <code>File->Settings</code> menu.
 *
 * The cycle period must be a non-negative number. Specify <code>0</code> to recieve updates at the maximum rate. Values
 * below the minimum cycle period will be set to the minimum cycle period.
 *
 * @section LEVEL4 Minimum Cycle Period
 *
 * The minimum period (in seconds) at which the Variable Server can be requested to send information to the application
 * can be specified via one of:
 *
 * - From the command line, use the <code>\-\-minCycle</code> option.
 *
 * - From the input file or user model code, use Trick::ExternalApplication::set_minimum_cycle_period.
 *
 * The minimum cycle period must be a non-negative number. The recommended and default value is <code>0.1</code>. Values
 * below this may cause instability in %Trick GUIs.
 *
 * @section LEVEL4 Application Behavior
 *
 * The application can take one of several actions when it loses the connection with the simulation:
 *
 * - <b>Close</b><br>
 *   Terminate and close.
 *
 * - <b>Notify</b><br>
 *   Present a notification dialog describing the failure.
 *
 * - <b>Nothing</b><br>
 *   Do nothing.
 *
 * This behavior can be specified via one of:
 *
 * - From the command line, use the <code>\-\-disconnectBehavior</code> option.
 *
 * - From the input file or user model code, use Trick::ExternalApplication::set_disconnect_behavior.
 *
 * - From the application, use the <code>File->Settings</code> menu.
 */
