The User Interface
We need the user interface to include both the display of the environments and allow for user interaction with the environment.
Displaying and Navigating the Environment
The environment can be simulated as a square or rectangular region on the screen. Navigating the environment if its bigger than the displayed area could involve using something similar to the Photoshop navigator (moving around a subrectangle of the total rectangle.) We also need zoom settings.
Displaying Cells
Each cell needs to have a way to display its current state. This could involve a call to a method of Element which will do the requisite drawing, and each cell having its own method of displaying its state, including vector drawing or image rendering.
Time Management
We need an interface for executing the simulation. This should include parameters for speed (time between timesteps, after processing is done), starting and pausing and reset.
Manage Elements
The user needs to be able to pause the simulation and set up the environment by themselves -- picking cells, placing them and changing any properties which can be changed. The simulation may need a particular Simulation Set which then makes available certain Elements (otherwise, interactions between elements may be undefined.) This can be in the form of a palette and a property page if the elements have any user-defined properties. The user needs to be able to click on Elements in the environment to select them, or select multiple elements if possible. This should be modifiable inline.
Saving and Loading Environments
The user should be able to save and load the state of an environment at any timestep, possibly through the user of Serialization or some other data format.
Markup
A a first draft of the structure (I'm doing it with IntelliJ which includes a form designer, so whatever I have is also in code already but not on SVN yet...)

