GUI Requirements * the GUI needs to show a view of the source code * the source code will usually consist of multiple files, these should be shown in separate windows or tabs * the source view must show line numbers * GUI needs to show a view of the AST in a hierarchical way * GUI needs to show a view of the CIVL model in a hierarchical way * Components of the CIVL model * Lexical scope tree * Function tree * Features * Show source code for statements * the GUI should provide a (non-interactive) Console view which shows the output produced by CIVL as it executes its functions, similar to what would be seen when using CIVL from the command line * it should be possible to see any number of the different views simultaneously * the GUI needs to guide the user through all commands which can be executed through the command line * verify, run, parse, etc. * there should be a file browser for users to choose the .cvl/.c file to run * the GUI should guide the user by showing the options available to each command in some way and letting the user select those options in a graphical way (buttons, menus, etc.) * the GUI should allow the user to specify by inputs by showing the list of input variables in a table, with one row for each input. The table should show the type of the input variable. * for a boolean input variable, the options should be unspecified (always the default), true, or false. * for an integer input variable, the options should be unspecified (again, the default), or some concrete integer that can be typed into a field * etc. * the GUI needs to display the trace and allow the user to interact with the trace if a counterexample is found or if the run command is used * when interacting with a trace, at any time, there will be at most one selected execution step (the "active step"). The active step will cause the corresponding parts of the source code view, the AST view, and the model view to be highlighted * the GUI needs to display the statistics resulting from execution in formatted way (such as a table) * the views of the source code, model, AST, and trace need to all be linked. For example, a location occurring in the trace should be clickable, and clicking it should take you to the location in the CIVL Model. Clicking in some other way should take to the AST, and some other way should take you to the source code. * If an error is reported, the GUI needs to * display the error message * display the error state if possible * allow the user to click the source code summary to go the source code * if the error is an execution error, then there should be a shortcut for the user to replay the counter example immediately * the GUI should interact with CIVL solely through CIVL's Java API (and not, for example, through the command line interface), both when invoking CIVL's functionality and in obtaining CIVL's results, including statistics, traces, and error messages * the GUI should display useful information when the mouse pointer "hovers" over certain elements. This is admittedly vague, but let's think of some cool things it can show when hovering. * when the GUI is first launched, it doesn't open up a window, to interact with the GUI the user must select a menu option from the menu bar. * To run a CIVL-Session, the user MUST select create a new run configuration. * Selecting this option will open a new window from which the user can specify: inputs, modes and additional run-time options * Once this run configuration is finished it will be saved in a folder in the workspace/project * The user can select "execute run configuration" which will open a browser to this folder from which they can execute any configurations they have created. * When the user selects a run configuration, it opens up a window with all of the information about the run configuration and will provide a button to execute it or edit it. * This execution will be called a new CIVL-Session which will contain all artifacts of a given run of a CIVL program(AST,Model,trace,source,lexical scope tree) in a new multi-tabbed window. * When you close a CIVL-Session, it frees all resources associated with the specific CIVL-Session * The GUI will allow multiple CIVL-Sessions to be open at the same time. * The GUI will also have a menu option that will provide the user with help menus that describe all of the various options and run modes that CIVL has as well as help menus for setting up and executing a new run configuration. * The GUI will also have a menu option that will open a trace viewer where the user can select two active traces and can compare them side-by-side in a new window. GLOSSARY: * CIVL Program: a .cvl file * Artifact: Specific information that is gathered and displayed for each CIVL-Session(AST, Model etc.) * Run configuration: A specified set of inputs and run options for a specific CIVL program that will be executed by the user. * CIVL-Session: An execution of a run configuration that opens in a multi-tabbed window containing all of the artifacts of an execution * Menu Option: An option that drops down from the menu bar(by the apple for OS) * Execute: A run configuration is executed which means its options and inputs are passed directly to CIVL's API which runs it as usual. * Launch: Opening the main GUI