Minimum Requirements

Label: LOAD
Name: Load program, render GUI
Goal: Start up program 
Actors: User
Initiator: User
Description: Initialize all systems so user can start using system
Pre-conditions: System not set up	
Post-conditions: System set up
Extensions: None

Label: ADD
Name: Add object to circuit
Goal: Add a new object to the circuit user is currently working on
Actors: User
Initiator: User
Description: User selects the create object tool from palette by clicking
on the particular object type to add, and then clicks on the work space to
place the new object.  The user can add more than one object by clicking
on empty spots in the work space repeatedly.
Pre-conditions: None	
Post-conditions: None
Extensions: None

Label: MOVE
Name: Move object
Goal: Move object in work space
Actors: User
Initiator: User
Description:Move object (gate or input) in work space.  To do this the
user will click on a move tool, and then click and drag the object to the
new desired location.  All connections will then follow the gate to the
new location.
Pre-conditions: Object exists
Post-conditions: None
Extensions: None

Label: REMOVE
Name: Remove an object or connection from the workspace
Goal: To remove an unecessary object or connection from the workspace
Actors: User
Initiator: User
Description: User clicks on the remove tool in the palette, and then
clicks on the object or connection to be removed.  More than one object
connection can be removed this way, by clicking separately on each object
or connection to be removed, after the remove tool has been selected.  If
an object being removed has connections to or from it, then those
connections are also removed.
Pre-conditions: Object exists
Post-conditions: Object doesnt exist
Extensions: None

Label: CONNECT
Name: Make a Connection Between Two Objects
Goal: To connect the output of one object to the input of another,
logically.
Actors: User
Initiator: User
Description:User selects the connection tool by clicking on it in the
palette, and then clicks on one object and then another.  A connection is
formed from the output of the first object to the input of the second
object.  Connections can be made such that one output connects to two or
more inputs, but an input can only be connected to one output.  If this
condition is not met, nothing happens.
Pre-conditions: None
Post-conditions: Two objects are now connected.
Extensions: None

Label: INPUT
Name: Specify Input
Goal: Specify input to input object
Actors: User
Initiator: User
Description: A user can specify the input they wish to give to a
perticular input object by selecting the input tool, and clicking on an
existing input object.  The user will also be given the chance to select
an input when they first place the input object.
Pre-conditions: None
Post-conditions: None
Extensions: None

Label: CALCULATE
Name: Calculate output
Goal: To calculate the correct output.
Actors: User
Initiator: User
Description: Clicking a calculate button will run the specified input
through the logic gates and put it into an output object.  This output
object will be created at the output of any gate that is not connected to
any further gates.  If there is  a gate with too few inputs an error
messge will be displayed when calculate is clicked.
Pre-conditions: None
Post-conditions: None
Extensions: None

LABEL: STEP
Name: Step input
Goal: To calculate the next step in the logic gates
Actors: User
Initiator: User
Description: User clicks the step button, which runs the specified input
through one level of logic gates.  Each subsequent click on step moves the
input through the next level of gates, until none are left.  The
evaluation restarts at the input everytime something is changed.
Pre-Conditions: None
Post-Conditions: Execution is suspended in mid circuit
Extensions: None

Label: COPY COMPLEX
Name: Copy and place a complex object
Goal: To easily create a duplicate of a complex object from the workspace
Actors: User
Initiator: User
Description: User selects the complex object tool by clicking on it, and
then selects a group of objects in the workspace by clicking and dragging
a rectangle around them.  Then, the user clicks on open space in the
workspace to place a new copy of the selected objects (with
connections) at that spot.
Pre-conditions: None
Post-conditions: None
Extensions: None

Label: SAVE
Name: Save workspace to a file
Goal: To create a file that specifies the state of the workspace for
future use
Actors: User
Initiator: User
Description: User clicks on the save button, and then specifies a file path
in a pop-up dialog box, where the file should be saved.  If the file
already exists, the user is asked to overwrite or specify a different file
path.
Pre-conditions: None
Post-conditions: Object file created
Extensions: None

Label: OPEN
Name: Open a file
Goal: To open a file of a saved work space state, and restore that state
to the work space
Actors: User
Initiator: User
Description: User clicks on the load button, and then specifies a file
path in a pop-up dialog box, where the file should be loaded from.  This
state is then restored to the work space.
Pre-conditions: None
Post-conditions: Work space now reflects saved state.
Extensions: None



   Extra Features

Label: SAVE COMPLEX
Name: Save a complex object to a file
Goal: To create an external file that contains a complex object definition
Actors: User
Initiator: User
Description: User clicks on the workspace and drags to select a number of
logic gates and their connections, and then selects Save Object from the
menu.  The path where the file should be saved is specified in the
resulting dialog box.
Pre-conditions: None
Post-conditions: Object file created
Extensions: None

Label: PLACE COMPLEX
Name: Read in a complex object file for placement
Goal: To read in an external object file and place it in the workspace
Actors: User
Initiator: User
Description: User selects Place Object from the menu, and specifies the
path to a complex object file. The object is then read from the file and
when the User clicks on the workspace, a copy of that complex object is
placed there.  The user may click multiple times to place multiple copies
of the complex object.
Pre-conditions: Object file exists
Post-conditions: None
Extensions:  None

Label: PRINT
Name: Print the workspace
Goal: To get a paper copy of the logic circuit diagram
Actors: User
Initiator: User
Description: User selects Print from the print menu, and then specifies a
standard set of printing options.
Pre-conditions: None
Post-conditions: None
Extensions: None

Label: SCROLL
Name: Scroll the workspace
Goal: To view a different section of the workspace
Actors: User
Initiator: User
Description: User clicks on a scroll bar, causing the window pane to move
the view of the workspace in a particular direction, displaying another
section of the workspace.
Pre-conditions: None
Post-conditions: None
Extensions: None