This document describes the UI package's hierarchy, a bit on how the system
 works overall, the relationship between classes during various stages of
 execution, and ends with some gotchas. Update (2008y08M13d) this only
 describes the hierarchy, all other parts have been moved out to devguide.xml
 in the docs folder

@author eliottbartley
@date   22.May.08

- class hierarchy and description----------------------------------------------

All classes marked * are abstract
  GEVAPropertiesGUI              - Main GUI entry point, this should be
                                    executed (contains main) and displays the
                                    properties for editing.
  GEVAConfig                     - Handles parsing and storing the config set-
                                    up of the command line
  GEVAConfigGUI                  - Gives the user the alternative GUI config
                                    set-up
  GEVASplash                     - Display the splash screen
  GEVARun                        - All things necessary for running GEVA, this
                                    file is broken into the following classes
    GEVARun                      - The kick-off point and window that displays
                                    the output of the run
    GEVAStreamReader             - Read the output stream of GEVA in a separate
                                    thread. There is one GEVAStreamReader for
                                    reading the standard out and one for the
                                    error out
    GEVAOutputPane               - Control wrapper for the text output window.
                                    This handles creating the text window,
                                    adding scroll bars and formatting the text
                                    so that errors are output in red
  GEVAFitness                    - For each fitness function specified in
                                    ff.config, store all the extra details
                                    about it, such as grammar, jars, and libs
                                    used by it
  GEVAJarHunter                  - ff.config specifies jars used by a fitness
                                    function by stating which directories to
                                    search in. This search can be recursive and
                                    time consuming. GEVAJarHunter performs this
                                    search asynchronously as well as handling
                                    blocking, when a request for jars is made
                                    when those jars have not yet been found and
                                    also, displaying a message to the user
                                    asking if they want to wait for the jars to
                                    be found, or cancel their last action.
                                    Currently, the only thing that causes this
                                    blocking is when the user attempts to run
                                    a fitness function, and the GEVA run needs
                                    to know which jars to pass on the command-
                                    line
  GEVAGUIStringResource          - Constant static display-strings. Change this
                                    to change languages, etc..
  GEVAControlLoader              - TODO - dynamic GUI control loader
  GEVAActionListener             - Interface. implement this to react to events
                                    generated by GEVAControls
  GEVAActionEvent                - Event details passed to the actionPerformed
                                    of the object implementing
                                    GEVAActionListener. Events include load,
                                    save, dirty, and valid events
  GEVAMessage                    - Helper that displays message boxes
  GEVAHelper                     - A little collection of useful functions
  GEVAControlGroup               - A collection of Controls that should all
                                    react to an event in a single way. e.g. to
                                    show/hide several controls at once
* GEVAControl                    - Base for all controls, enforces load/save,
  |                                 tooltip comments, etc
* |_GEVAContainerControl         - Base for all containers, implements
  | |                               load/save for all containers, includes add
  | |                               method
  | |_GEVABookContainer          - Container for collection of pages
  | |                               (implements a JTabbedPane)
  | |_GEVAPageContainer          - Container for collection of property
  | |                               containers (implements adding a tab to a
  | |                               page container's JTabbedPane)
  | |_GEVASpringContainer        - A container that contains nothing but empty
  | |                               space. When containers are added to a page,
  | |                               they will resize to fit the empty space of
  | |                               the page, causing gaps between containers.
  | |                               Adding a spring container forces all these
  | |                               gaps to appear at the spring container, so
  | |                               all the containers will pack together, with
  | |                               one big empty space at the spring container
  | |                               position (usually at the bottom)
* | |_GEVAPropertyContainer      - Base container for a collection of property
  |   |                             controls (implements a JPanel with titled
  |   |                             border and GridBoxLayout)
  |   |_GEVAPropertyRowContainer - Collects properties as name value pairs
  |   |                             from left to right. Each property added is
  |   |                             placed below the previous one
  |   |_GEVAPropertyColContainer - Collects properties as name for a title, and
  |                                 the whole body of the container is used for
  |                                 the value part. Only one property can be
  |                                 added
* |_GEVAPropertyControl          - Base for all controls in the form
    |                               name: [value]. This also handles validation
    |                               error reporting. Calling resetInvalidReason
    |                               at the start of valid, and then
    |                               addInvalidReason for each error encountered
    |                               will output those errors to the user
    |_GEVAStringProperty         - Input for general string values (implements
    |                               JTextField with custom regex validation)
    |_GEVANumberProperty         - Input for numeric values (implements
    |                               JTextField with custom numeric validation)
    |_GEVAChoiceProperty         - Input for choice value, (implements JSpinner
                                    or JComboBox)
