sim.display
Class Console

java.lang.Object
  extended byjava.awt.Component
      extended byjava.awt.Container
          extended byjava.awt.Window
              extended byjava.awt.Frame
                  extended byjavax.swing.JFrame
                      extended bysim.display.Console
All Implemented Interfaces:
javax.accessibility.Accessible, Controller, java.awt.image.ImageObserver, java.awt.MenuContainer, javax.swing.RootPaneContainer, java.io.Serializable, javax.swing.WindowConstants

public class Console
extends javax.swing.JFrame
implements Controller

Console is an elaborate Controller which provides a variety of GUI niceties to control the basics of a simulation. Most significantly it provides:

Console maintains the underlying play thread of the model, and handles much of the complexities that come with doing threads.

Console generates a mammoth number of anonymous subclasses. Well, such is life with a complicated GUI I guess. Don't be daunted by them -- almost all of them are little tiny things like Runnables to pass into SwingUtilities.invokeLater(), or various anonymous listeners and adapters for buttons and text fields etc.

See Also:
Serialized Form

Nested Class Summary
 
Nested classes inherited from class javax.swing.JFrame
javax.swing.JFrame.AccessibleJFrame
 
Nested classes inherited from class java.awt.Frame
java.awt.Frame.AccessibleAWTFrame
 
Nested classes inherited from class java.awt.Window
java.awt.Window.AccessibleAWTWindow
 
Nested classes inherited from class java.awt.Container
java.awt.Container.AccessibleAWTContainer
 
Nested classes inherited from class java.awt.Component
java.awt.Component.AccessibleAWTComponent, java.awt.Component.BltBufferStrategy, java.awt.Component.FlipBufferStrategy
 
Field Summary
static javax.swing.ImageIcon I_PAUSE_OFF
           
static javax.swing.ImageIcon I_PAUSE_ON
           
static javax.swing.ImageIcon I_PLAY_OFF
           
static javax.swing.ImageIcon I_PLAY_ON
           
static javax.swing.ImageIcon I_STEP_OFF
           
static javax.swing.ImageIcon I_STEP_ON
           
static javax.swing.ImageIcon I_STOP_OFF
           
static javax.swing.ImageIcon I_STOP_ON
           
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.
 GUIState simulation
          Our simulation
 
Fields inherited from class javax.swing.JFrame
accessibleContext, EXIT_ON_CLOSE, rootPane, rootPaneCheckingEnabled
 
Fields inherited from class java.awt.Frame
CROSSHAIR_CURSOR, DEFAULT_CURSOR, E_RESIZE_CURSOR, HAND_CURSOR, ICONIFIED, MAXIMIZED_BOTH, MAXIMIZED_HORIZ, MAXIMIZED_VERT, MOVE_CURSOR, N_RESIZE_CURSOR, NE_RESIZE_CURSOR, NORMAL, NW_RESIZE_CURSOR, S_RESIZE_CURSOR, SE_RESIZE_CURSOR, SW_RESIZE_CURSOR, TEXT_CURSOR, W_RESIZE_CURSOR, WAIT_CURSOR
 
Fields inherited from class java.awt.Component
BOTTOM_ALIGNMENT, CENTER_ALIGNMENT, LEFT_ALIGNMENT, RIGHT_ALIGNMENT, TOP_ALIGNMENT
 
Fields inherited from interface javax.swing.WindowConstants
DISPOSE_ON_CLOSE, DO_NOTHING_ON_CLOSE, HIDE_ON_CLOSE
 
Fields inherited from interface java.awt.image.ImageObserver
ABORT, ALLBITS, ERROR, FRAMEBITS, HEIGHT, PROPERTIES, SOMEBITS, WIDTH
 
Constructor Summary
Console(GUIState simulation)
          Creates a Console, using the default initial start behavior (INITIAL_BEHAVIOR_START).
 
Method Summary
 void doChangeCode(java.lang.Runnable r)
          This method will interrupt the simulation (pause it), call your runnable, then continue (uninterrupt) the simulation.
 void doClose()
          Closes the Console and shuts down the simulation.
 void doNew()
          Pops up a window allowing the user to enter in a class name to start a new simulation.
 void doOpen()
          Reverts the current simulation to the simulation stored at a user-specified checkpoint filename.
 void doQuit()
          Quits the program.
 void doSave()
          Lets the user checkpoint out a simulation to the last checkpoint filename.
 void doSaveAs()
          Lets the user checkpoint out a simulation to a file with a given name.
static java.lang.String ensureFileEndsWith(java.lang.String filename, java.lang.String ending)
          Returns a filename which is guaranteed to end with the given ending.
 long getPlaySleep()
          Gets how long we should sleep between each step in the play thread (in milliseconds).
 javax.swing.JTabbedPane getTabPane()
          Simulations can call this to get access to the tabPane -- to add tabbed panes as they like.
 int getThreadPriority()
          Get when the simulation should end.
 long getWhenShouldEnd()
          Get when the simulation should end.
 long getWhenShouldPause()
          Get when the simulation should pause.
 void informOfError(java.lang.Throwable error, java.lang.String errorDescription)
          Pops up an error dialog box.
 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 removeAllInspectors(boolean killDraggedOutWindowsToo)
          Removes all inspectors.
 void setInspectors(Bag inspectors, Bag names)
          Adds new inspectors, given the provided inspectors, their portrayals, and appropriate names for them.
 void setPlaySleep(long sleep)
          Sets (in milliseconds) how long we should sleep between each step in the play thread.
 void setThreadPriority(int val)
          Set when the simulation should end.
 void setTicksPerSecond(double val)
          Sets the frame rate.
 void setTime(long val)
          Sets the time.
 void setWhenShouldEnd(long val)
          Set when the simulation should end.
 void setWhenShouldPause(long val)
          Sets when the simulation should pause.
 void toggleShowsTime()
          Shows or hides the time and frame rate.
 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 javax.swing.JFrame
addImpl, createRootPane, frameInit, getAccessibleContext, getContentPane, getDefaultCloseOperation, getGlassPane, getJMenuBar, getLayeredPane, getRootPane, isDefaultLookAndFeelDecorated, isRootPaneCheckingEnabled, paramString, processWindowEvent, remove, setContentPane, setDefaultCloseOperation, setDefaultLookAndFeelDecorated, setGlassPane, setJMenuBar, setLayeredPane, setLayout, setRootPane, setRootPaneCheckingEnabled, update
 
Methods inherited from class java.awt.Frame
addNotify, finalize, getCursorType, getExtendedState, getFrames, getIconImage, getMaximizedBounds, getMenuBar, getState, getTitle, isResizable, isUndecorated, remove, removeNotify, setCursor, setExtendedState, setIconImage, setMaximizedBounds, setMenuBar, setResizable, setState, setTitle, setUndecorated
 
Methods inherited from class java.awt.Window
addPropertyChangeListener, addPropertyChangeListener, addWindowFocusListener, addWindowListener, addWindowStateListener, applyResourceBundle, applyResourceBundle, createBufferStrategy, createBufferStrategy, dispose, getBufferStrategy, getFocusableWindowState, getFocusCycleRootAncestor, getFocusOwner, getFocusTraversalKeys, getGraphicsConfiguration, getInputContext, getListeners, getLocale, getMostRecentFocusOwner, getOwnedWindows, getOwner, getToolkit, getWarningString, getWindowFocusListeners, getWindowListeners, getWindowStateListeners, hide, isActive, isFocusableWindow, isFocusCycleRoot, isFocused, isShowing, pack, postEvent, processEvent, processWindowFocusEvent, processWindowStateEvent, removeWindowFocusListener, removeWindowListener, removeWindowStateListener, setCursor, setFocusableWindowState, setFocusCycleRoot, setLocationRelativeTo, show, toBack, toFront
 
Methods inherited from class java.awt.Container
add, add, add, add, add, addContainerListener, applyComponentOrientation, areFocusTraversalKeysSet, countComponents, deliverEvent, doLayout, findComponentAt, findComponentAt, getAlignmentX, getAlignmentY, getComponent, getComponentAt, getComponentAt, getComponentCount, getComponents, getContainerListeners, getFocusTraversalPolicy, getInsets, getLayout, getMaximumSize, getMinimumSize, getPreferredSize, insets, invalidate, isAncestorOf, isFocusCycleRoot, isFocusTraversalPolicySet, layout, list, list, locate, minimumSize, paint, paintComponents, preferredSize, print, printComponents, processContainerEvent, remove, removeAll, removeContainerListener, setFocusTraversalKeys, setFocusTraversalPolicy, setFont, transferFocusBackward, transferFocusDownCycle, validate, validateTree
 
Methods inherited from class java.awt.Component
action, add, addComponentListener, addFocusListener, addHierarchyBoundsListener, addHierarchyListener, addInputMethodListener, addKeyListener, addMouseListener, addMouseMotionListener, addMouseWheelListener, bounds, checkImage, checkImage, coalesceEvents, contains, contains, createImage, createImage, createVolatileImage, createVolatileImage, disable, disableEvents, dispatchEvent, enable, enable, enableEvents, enableInputMethods, firePropertyChange, firePropertyChange, firePropertyChange, getBackground, getBounds, getBounds, getColorModel, getComponentListeners, getComponentOrientation, getCursor, getDropTarget, getFocusListeners, getFocusTraversalKeysEnabled, getFont, getFontMetrics, getForeground, getGraphics, getHeight, getHierarchyBoundsListeners, getHierarchyListeners, getIgnoreRepaint, getInputMethodListeners, getInputMethodRequests, getKeyListeners, getLocation, getLocation, getLocationOnScreen, getMouseListeners, getMouseMotionListeners, getMouseWheelListeners, getName, getParent, getPeer, getPropertyChangeListeners, getPropertyChangeListeners, getSize, getSize, getTreeLock, getWidth, getX, getY, gotFocus, handleEvent, hasFocus, imageUpdate, inside, isBackgroundSet, isCursorSet, isDisplayable, isDoubleBuffered, isEnabled, isFocusable, isFocusOwner, isFocusTraversable, isFontSet, isForegroundSet, isLightweight, isOpaque, isValid, isVisible, keyDown, keyUp, list, list, list, location, lostFocus, mouseDown, mouseDrag, mouseEnter, mouseExit, mouseMove, mouseUp, move, nextFocus, paintAll, prepareImage, prepareImage, printAll, processComponentEvent, processFocusEvent, processHierarchyBoundsEvent, processHierarchyEvent, processInputMethodEvent, processKeyEvent, processMouseEvent, processMouseMotionEvent, processMouseWheelEvent, removeComponentListener, removeFocusListener, removeHierarchyBoundsListener, removeHierarchyListener, removeInputMethodListener, removeKeyListener, removeMouseListener, removeMouseMotionListener, removeMouseWheelListener, removePropertyChangeListener, removePropertyChangeListener, repaint, repaint, repaint, repaint, requestFocus, requestFocus, requestFocusInWindow, requestFocusInWindow, reshape, resize, resize, setBackground, setBounds, setBounds, setComponentOrientation, setDropTarget, setEnabled, setFocusable, setFocusTraversalKeysEnabled, setForeground, setIgnoreRepaint, setLocale, setLocation, setLocation, setName, setSize, setSize, setVisible, show, size, toString, transferFocus, transferFocusUpCycle
 
Methods inherited from class java.lang.Object
clone, equals, getClass, hashCode, notify, notifyAll, wait, wait, wait
 
Methods inherited from interface java.awt.MenuContainer
getFont, postEvent
 

Field Detail

simulation

public GUIState simulation
Our simulation


I_PLAY_ON

public static final javax.swing.ImageIcon I_PLAY_ON

I_PLAY_OFF

public static final javax.swing.ImageIcon I_PLAY_OFF

I_STOP_ON

public static final javax.swing.ImageIcon I_STOP_ON

I_STOP_OFF

public static final javax.swing.ImageIcon I_STOP_OFF

I_PAUSE_ON

public static final javax.swing.ImageIcon I_PAUSE_ON

I_PAUSE_OFF

public static final javax.swing.ImageIcon I_PAUSE_OFF

I_STEP_ON

public static final javax.swing.ImageIcon I_STEP_ON

I_STEP_OFF

public static final javax.swing.ImageIcon I_STEP_OFF

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

Console

public Console(GUIState simulation)
Creates a Console, using the default initial start behavior (INITIAL_BEHAVIOR_START). Sets the simulation's controller to point to this Console.

Method Detail

setThreadPriority

public void setThreadPriority(int val)
Set when the simulation should end.


getThreadPriority

public int getThreadPriority()
Get when the simulation should end.


setWhenShouldEnd

public void setWhenShouldEnd(long val)
Set when the simulation should end.


getWhenShouldEnd

public long getWhenShouldEnd()
Get when the simulation should end.


setWhenShouldPause

public void setWhenShouldPause(long val)
Sets when the simulation should pause.


getWhenShouldPause

public long getWhenShouldPause()
Get when the simulation should pause.


setPlaySleep

public void setPlaySleep(long sleep)
Sets (in milliseconds) how long we should sleep between each step in the play thread. This method is run as a doChangeCode so it can interrupt the possibly sleeping thread and give it a new interval.


getPlaySleep

public long getPlaySleep()
Gets how long we should sleep between each step in the play thread (in milliseconds).


getTabPane

public javax.swing.JTabbedPane getTabPane()
Simulations can call this to get access to the tabPane -- to add tabbed panes as they like.


informOfError

public void informOfError(java.lang.Throwable error,
                          java.lang.String errorDescription)
Pops up an error dialog box. error should be the error proper, and errorDescription should be some user-informative item that's shown first (the user must explicitly ask to be shown the raw error itself). The error is also printed to the console.


ensureFileEndsWith

public static java.lang.String ensureFileEndsWith(java.lang.String filename,
                                                  java.lang.String ending)
Returns a filename which is guaranteed to end with the given ending.


doQuit

public void doQuit()
Quits the program. Called by the Quit menu option.


doClose

public void doClose()
Closes the Console 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.


doNew

public void doNew()
Pops up a window allowing the user to enter in a class name to start a new simulation.


doSaveAs

public void doSaveAs()
Lets the user checkpoint out a simulation to a file with a given name.


doSave

public void doSave()
Lets the user checkpoint out a simulation to the last checkpoint filename.


doOpen

public void doOpen()
Reverts the current simulation to the simulation stored at a user-specified checkpoint filename.


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.


toggleShowsTime

public void toggleShowsTime()
Shows or hides the time and frame rate. Called when the user clicks on the time or frame rate labels. Why would you want to hide the time/frame rate? Because on MacOS X, context switches to windows is expensive, so avoiding changing the time and redrawing can speed up the system considerably.


setTicksPerSecond

public void setTicksPerSecond(double val)
Sets the frame rate. If val is negative, the ticks per second won't show anything


setTime

public void setTime(long val)
Sets the time. If val is negative, the ticks per second won't show anything


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)
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, 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

removeAllInspectors

public void removeAllInspectors(boolean killDraggedOutWindowsToo)
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 removed.