ptolemy.actor.lib.gui
Class ArrowKeySensor

java.lang.Object
  extended by ptolemy.kernel.util.NamedObj
      extended by ptolemy.kernel.InstantiableNamedObj
          extended by ptolemy.kernel.Entity
              extended by ptolemy.kernel.ComponentEntity
                  extended by ptolemy.actor.AtomicActor
                      extended by ptolemy.actor.TypedAtomicActor
                          extended by ptolemy.actor.lib.gui.ArrowKeySensor
All Implemented Interfaces:
java.io.Serializable, java.lang.Cloneable, Actor, Executable, FiringsRecordable, Initializable, TypedActor, Changeable, Debuggable, DebugListener, Derivable, Instantiable, ModelErrorHandler, MoMLExportable, Moveable, Nameable
Direct Known Subclasses:
ArrowKeyProbe

public class ArrowKeySensor
extends TypedAtomicActor

Detect when the user presses or releases an arrow key and produce an integer on the corresponding output.

When this actor is preinitialized, it pops up a new JFrame window on the desktop, usually in the upper left hand corner of the screen. When this JFrame has the focus (such as when it has been clicked on) it is capable of sensing keystrokes.

This actor senses only the four non-numeric-pad arrow-key keystrokes. This actor responds to key releases as well as key presses. Upon each key press, the integer 1 is broadcast from the corresponding output. Upon each key release, the integer 0 is output.

This actor contains a private inner class which generated the JFrame. The frame sets up call-backs which react to the keystrokes. When called, these call the director's fireAt() method with the current time as argument. This causes the director to call fire() on the actor with the first valid time equal to the current time or later. The actor then broadcasts tokens from one or both outputs depending on which keystroke(s) have occurred since the actor was last fired. On key pressed a one will be send, on key release a zero will be send.

Since:
Ptolemy II 2.0
Version:
$Id: ArrowKeySensor.java 57040 2010-01-27 20:52:32Z cxh $
Author:
Winthrop Williams, Contributor: Bert Rodiers
See Also:
Serialized Form
Accepted Rating:
Red (winthrop)
Proposed Rating:
Red (winthrop)

Nested Class Summary
private static class ArrowKeySensor.ActionListenerExceptionCatcher
           
private  class ArrowKeySensor.MyFrame
           
 
Nested classes/interfaces inherited from class ptolemy.kernel.Entity
Entity.ContainedObjectsIterator
 
Field Summary
protected  boolean _downKeyPressed
          A flag indicating if the down arrow key has been pressed since the last firing of the actor.
protected  boolean _downKeyReleased
          A flag indicating if the down arrow key has been released since the last firing of the actor.
protected  boolean _leftKeyPressed
          A flag indicating if the left arrow key has been released since the last firing of the actor.
protected  boolean _leftKeyReleased
          A flag indicating if the left arrow key has been released since the last firing of the actor.
private  ArrowKeySensor.MyFrame _myFrame
          The JFrame that contains the arrow keys.
protected  boolean _rightKeyPressed
          A flag indicating if the right arrow key has been pressed since the last firing of the actor.
protected  boolean _rightKeyReleased
          A flag indicating if the right arrow key has been released since the last firing of the actor.
protected  boolean _upKeyPressed
          A flag indicating if the up arrow key has been pressed since the last firing of the actor.
protected  boolean _upKeyReleased
          A flag indicating if the up arrow key has been released since the last firing of the actor.
 TypedIOPort downArrow
          Output port, which has type IntToken.
 TypedIOPort leftArrow
          Output port, which has type IntToken.
 TypedIOPort rightArrow
          Output port, which has type IntToken.
 TypedIOPort upArrow
          Output port, which has type IntToken.
 
Fields inherited from class ptolemy.actor.AtomicActor
_actorFiringListeners, _initializables, _notifyingActorFiring, _stopRequested
 
Fields inherited from class ptolemy.kernel.util.NamedObj
_changeListeners, _changeLock, _changeRequests, _debugging, _debugListeners, _elementName, _isPersistent, _verbose, _workspace, ATTRIBUTES, CLASSNAME, COMPLETE, CONTENTS, DEEP, FULLNAME, LINKS
 
Fields inherited from interface ptolemy.actor.Executable
COMPLETED, NOT_READY, STOP_ITERATING
 
Constructor Summary
ArrowKeySensor(CompositeEntity container, java.lang.String name)
          Construct an actor with the given container and name.
 
Method Summary
 void fire()
          Broadcast the integer value 1 for each key pressed and 0 for each released.
 void initialize()
          Create the JFrame window capable of detecting the key-presses.
 void wrapup()
          Dispose of the JFrame, causing the window to vanish.
 
Methods inherited from class ptolemy.actor.TypedAtomicActor
_addPort, _fireAt, _fireAt, attributeTypeChanged, clone, newPort, typeConstraintList, typeConstraints
 
Methods inherited from class ptolemy.actor.AtomicActor
_actorFiring, _actorFiring, addActorFiringListener, addInitializable, clone, connectionsChanged, createReceivers, declareDelayDependency, getCausalityInterface, getDirector, getExecutiveDirector, getManager, inputPortList, isFireFunctional, isStrict, iterate, newReceiver, outputPortList, postfire, prefire, preinitialize, pruneDependencies, recordFiring, removeActorFiringListener, removeDependency, removeInitializable, setContainer, stop, stopFire, terminate
 
Methods inherited from class ptolemy.kernel.ComponentEntity
_adjustDeferrals, _checkContainer, _getContainedObject, _propagateExistence, getContainer, instantiate, isAtomic, isOpaque, moveDown, moveToFirst, moveToIndex, moveToLast, moveUp, propagateExistence, setName
 
Methods inherited from class ptolemy.kernel.Entity
_description, _exportMoMLContents, _removePort, _validateSettables, connectedPortList, connectedPorts, containedObjectsIterator, getAttribute, getPort, getPorts, linkedRelationList, linkedRelations, portList, removeAllPorts, setClassDefinition, uniqueName
 
Methods inherited from class ptolemy.kernel.InstantiableNamedObj
_setParent, exportMoML, getChildren, getElementName, getParent, getPrototypeList, isClassDefinition, isWithinClassDefinition
 
Methods inherited from class ptolemy.kernel.util.NamedObj
_addAttribute, _adjustOverride, _attachText, _cloneFixAttributeFields, _debug, _debug, _debug, _debug, _debug, _getIndentPrefix, _isMoMLSuppressed, _markContentsDerived, _propagateValue, _recordDecoratedAttributes, _removeAttribute, _splitName, _stripNumericSuffix, addChangeListener, addDebugListener, attributeChanged, attributeList, attributeList, deepContains, depthInHierarchy, description, description, event, executeChangeRequests, exportMoML, exportMoML, exportMoML, exportMoML, exportMoMLPlain, getAttribute, getAttributes, getChangeListeners, getClassName, getDecoratorAttribute, getDecoratorAttributes, getDerivedLevel, getDerivedList, getDisplayName, getFullName, getModelErrorHandler, getName, getName, getSource, handleModelError, isDeferringChangeRequests, isOverridden, isPersistent, lazyContainedObjectsIterator, message, propagateValue, propagateValues, removeChangeListener, removeDebugListener, requestChange, setClassName, setDeferringChangeRequests, setDerivedLevel, setDisplayName, setModelErrorHandler, setPersistent, setSource, sortContainedObjects, toplevel, toString, validateSettables, workspace
 
Methods inherited from class java.lang.Object
equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 
Methods inherited from interface ptolemy.actor.Actor
createReceivers, getCausalityInterface, getDirector, getExecutiveDirector, getManager, inputPortList, newReceiver, outputPortList
 
Methods inherited from interface ptolemy.actor.Executable
isFireFunctional, isStrict, iterate, postfire, prefire, stop, stopFire, terminate
 
Methods inherited from interface ptolemy.actor.Initializable
addInitializable, preinitialize, removeInitializable
 
Methods inherited from interface ptolemy.kernel.util.Nameable
description, getContainer, getDisplayName, getFullName, getName, getName, setName
 
Methods inherited from interface ptolemy.kernel.util.Derivable
getDerivedLevel, getDerivedList, propagateValue
 

Field Detail

upArrow

public TypedIOPort upArrow
Output port, which has type IntToken.


leftArrow

public TypedIOPort leftArrow
Output port, which has type IntToken.


rightArrow

public TypedIOPort rightArrow
Output port, which has type IntToken.


downArrow

public TypedIOPort downArrow
Output port, which has type IntToken.


_downKeyPressed

protected boolean _downKeyPressed
A flag indicating if the down arrow key has been pressed since the last firing of the actor. Pressed and Released are are not allowed to both be true for the same key (Though both may be false). The most recent action (press or release) takes precedence.


_downKeyReleased

protected boolean _downKeyReleased
A flag indicating if the down arrow key has been released since the last firing of the actor.


_leftKeyPressed

protected boolean _leftKeyPressed
A flag indicating if the left arrow key has been released since the last firing of the actor.


_leftKeyReleased

protected boolean _leftKeyReleased
A flag indicating if the left arrow key has been released since the last firing of the actor.


_rightKeyPressed

protected boolean _rightKeyPressed
A flag indicating if the right arrow key has been pressed since the last firing of the actor.


_rightKeyReleased

protected boolean _rightKeyReleased
A flag indicating if the right arrow key has been released since the last firing of the actor.


_upKeyPressed

protected boolean _upKeyPressed
A flag indicating if the up arrow key has been pressed since the last firing of the actor.


_upKeyReleased

protected boolean _upKeyReleased
A flag indicating if the up arrow key has been released since the last firing of the actor.


_myFrame

private ArrowKeySensor.MyFrame _myFrame
The JFrame that contains the arrow keys.

Constructor Detail

ArrowKeySensor

public ArrowKeySensor(CompositeEntity container,
                      java.lang.String name)
               throws NameDuplicationException,
                      IllegalActionException
Construct an actor with the given container and name.

Parameters:
container - The container.
name - The name of this actor.
Throws:
IllegalActionException - If the actor cannot be contained by the proposed container.
NameDuplicationException - If the container already has an actor with this name.
Method Detail

fire

public void fire()
          throws IllegalActionException
Broadcast the integer value 1 for each key pressed and 0 for each released.

Specified by:
fire in interface Executable
Overrides:
fire in class AtomicActor
Throws:
IllegalActionException - Not thrown in this base class.

initialize

public void initialize()
Create the JFrame window capable of detecting the key-presses.

Specified by:
initialize in interface Initializable
Overrides:
initialize in class AtomicActor

wrapup

public void wrapup()
Dispose of the JFrame, causing the window to vanish.

Specified by:
wrapup in interface Initializable
Overrides:
wrapup in class AtomicActor