sim.display
Class SimpleController

java.lang.Object
  extended by sim.display.SimpleController
All Implemented Interfaces:
Controller

public class SimpleController
extends java.lang.Object
implements Controller


Field Summary
static int PS_PAUSED
          The play thread is presently paused.
static int PS_PLAYING
          The play thread is presently playing.
static int PS_STOPPED
          The play thread is presently stopped.
 
Constructor Summary
SimpleController(GUIState simulation)
           
SimpleController(GUIState simulation, boolean displayInspectors)
           
 
Method Summary
 void doChangeCode(java.lang.Runnable r)
          Deprecated.  
 void doClose()
          Closes the Controller and shuts down the simulation.
 boolean doNew()
          Calls forth the "New Simulation" window.
 java.util.ArrayList getAllFrames()
          Returns a list of all displays.
 java.util.ArrayList getAllInspectors()
          Returns a list of all current inspectors.
 boolean getIncrementSeedOnPlay()
          Deprecated. renamed to getIncrementSeedOnStop
 boolean getIncrementSeedOnStop()
           
 int getPlayState()
          Gets whether or not the current thread is PS_PLAYING, PS_STOPPED, or PS_PAUSED.
 void pressPause()
          Called when the user presses the pause button.
 void pressPlay()
          Called when the user presses the play button.
 void pressStop()
          Called when the user presses the stop button.
 void refresh()
          Lazily updates and redraws all the displays and inspectors.
 boolean registerFrame(javax.swing.JFrame frame)
          Simulations can call this to add a frame to be listed in the "Display list" of the console
 void registerInspector(Inspector inspector, Stoppable stopper)
          Registers an inspector to be Stopped if necessary in the future.
 void removeAllInspectors(boolean killDraggedOutWindowsToo)
          Stops and removes all inspectors.
 void setIncrementSeedOnPlay(boolean val)
          Deprecated. renamed to setIncrementSeedOnStop
 void setIncrementSeedOnStop(boolean val)
           
 void setInspectors(Bag inspectors, Bag names)
          Adds new inspectors to the Console's list, given the provided inspectors, their portrayals, and appropriate names for them.
 void stopAllInspectors(boolean killDraggedOutWindowsToo)
          Stops all inspectors.
 boolean unregisterAllFrames()
          Simulations can call this to clear out the "Display list" of the console
 boolean unregisterFrame(javax.swing.JFrame frame)
          Simulations can call this to remove a frame from the "Display list" of the console
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

PS_STOPPED

public static final int PS_STOPPED
The play thread is presently stopped.

See Also:
Constant Field Values

PS_PLAYING

public static final int PS_PLAYING
The play thread is presently playing.

See Also:
Constant Field Values

PS_PAUSED

public static final int PS_PAUSED
The play thread is presently paused.

See Also:
Constant Field Values
Constructor Detail

SimpleController

public SimpleController(GUIState simulation)

SimpleController

public SimpleController(GUIState simulation,
                        boolean displayInspectors)
Method Detail

getPlayState

public int getPlayState()
Gets whether or not the current thread is PS_PLAYING, PS_STOPPED, or PS_PAUSED.


doClose

public void doClose()
Closes the Controller and shuts down the simulation. Quits the program only if other simulations are not running in the same program. Called when the user clicks on the close button of the Console, or during a program-wide doQuit() process. Can also be called programmatically.


setIncrementSeedOnPlay

public void setIncrementSeedOnPlay(boolean val)
Deprecated. renamed to setIncrementSeedOnStop


getIncrementSeedOnPlay

public boolean getIncrementSeedOnPlay()
Deprecated. renamed to getIncrementSeedOnStop


setIncrementSeedOnStop

public void setIncrementSeedOnStop(boolean val)

getIncrementSeedOnStop

public boolean getIncrementSeedOnStop()

pressStop

public void pressStop()
Called when the user presses the stop button. You can call this as well to simulate the same.


pressPause

public void pressPause()
Called when the user presses the pause button. You can call this as well to simulate the same. Keep in mind that pause is a toggle.


pressPlay

public void pressPlay()
Called when the user presses the play button. You can call this as well to simulate the same. Keep in mind that play will change to step if pause is down.


registerFrame

public boolean registerFrame(javax.swing.JFrame frame)
Simulations can call this to add a frame to be listed in the "Display list" of the console

Specified by:
registerFrame in interface Controller

unregisterFrame

public boolean unregisterFrame(javax.swing.JFrame frame)
Simulations can call this to remove a frame from the "Display list" of the console

Specified by:
unregisterFrame in interface Controller

unregisterAllFrames

public boolean unregisterAllFrames()
Simulations can call this to clear out the "Display list" of the console

Specified by:
unregisterAllFrames in interface Controller

doChangeCode

public void doChangeCode(java.lang.Runnable r)
Deprecated. 

Description copied from interface: Controller
This method will interrupt the simulation (pause it), call your runnable, then continue (uninterrupt) the simulation. This allows you to guarantee a way to change the model from a separate thread -- for example, the Swing event thread -- in a synchronous, blocking fashion.

You have other options for updating the model from external threads. One option is to add a Steppable to GUIState's scheduleImmediate(...) queue. When the Steppable is stepped, it will be done so inside the model's thread. This is asynchronous (non-blocking), however.

Alternatively, you can synchronize on state.schedule and run your code. This is synchronous.

Specified by:
doChangeCode in interface Controller

refresh

public void refresh()
Description copied from interface: Controller
Lazily updates and redraws all the displays and inspectors. Do not call this method from the model thread -- only from the Swing event thread. This is an expensive procedure and should not be done unless necessary. Typically it's done in response to some event (a button press etc.) rather than in the model itself.

Specified by:
refresh in interface Controller

setInspectors

public void setInspectors(Bag inspectors,
                          Bag names)
Adds new inspectors to the Console's list, given the provided inspectors, their portrayals, and appropriate names for them. These bags must match in size, else an exception will be thrown.

Specified by:
setInspectors in interface Controller

registerInspector

public void registerInspector(Inspector inspector,
                              Stoppable stopper)
Registers an inspector to be Stopped if necessary in the future. This automatically happens if you call setInspectors(...).

Specified by:
registerInspector in interface Controller

stopAllInspectors

public void stopAllInspectors(boolean killDraggedOutWindowsToo)
Stops all inspectors. If killDraggedOutWindowsToo is true, then the detatched inspectors are stopped as well.


removeAllInspectors

public void removeAllInspectors(boolean killDraggedOutWindowsToo)
Stops and removes all inspectors. If killDraggedOutWindowsToo is true, then all inspector windows will be closed; else only the inspectors presently embedded in the console will be stopped and removed.


doNew

public boolean doNew()
Calls forth the "New Simulation" window.


getAllInspectors

public java.util.ArrayList getAllInspectors()
Returns a list of all current inspectors. Some of these inspectors may be stored in the SimpleController itself, and others may have been dragged out into their own JFrames. You will need to distinguish between these two on your own. Note that some of these inspectors are stored as weak keys in the SimpleController, so holding onto this list will prevent them from getting garbage collected. As a result, you should only use this list for temporary scans.

Specified by:
getAllInspectors in interface Controller

getAllFrames

public java.util.ArrayList getAllFrames()
Returns a list of all displays. You own the resulting list and can do what you like with it.

Specified by:
getAllFrames in interface Controller