abstract class ViewFrame[Model] extends ViewImpl.ViewFrame[Model] with ControlDefaults[Model]
This class provides a framework for building simple GUIs. Each instance of the class is a graphical
view to objects that represent the states of a domain model; those states can be (but are not required
to be) immutable objects. A ViewFrame
displays the model as graphics within a GUI frame.
Note to students: this is not the view class that we commonly use in O1 but an alternative
implementation. For the usual View
, see here.
The key method in the class is makePic, which the view calls automatically and repeatedly to determine which Pic to display in the frame at each moment in time. Concrete view objects must add an implementation for this abstract method.
A view listens to GUI events within the frame, but it doesn’t really do anything when notified
of an event; concrete instances of the class can override this behavior by overriding one of the
“on methods” (onClick
, onMouseMove
, etc.). The view also runs an internal clock and can react
to the passing of time (onTick
).
Just creating a view object is not enough to display it onscreen and start the clock; see the start method.
Please note that even though this class is designed to work with immutable model states, the
actual ViewFrame
is not itself immutable.
- Model
the type of the states of the model
- Alphabetic
- By Inheritance
- ViewFrame
- ControlDefaults
- TooltipDefaults
- ViewFrame
- Controls
- AnyRef
- Any
- Hide All
- Show All
- Public
- Protected
Instance Constructors
- new ViewFrame(initialState: Model, tickRate: Double)
An alternative constructor.
An alternative constructor. Takes in just the initial state and the tick rate; uses the defaults for all the other parameters. Please see the multi-parameter constructor for details.
- initialState
the initial state of the model to be displayed in the view
- tickRate
the clock of the view will tick roughly this many times per second
- new ViewFrame(initialState: Model, title: String)
An alternative constructor.
An alternative constructor. Takes in just the initial state and the title; uses the defaults for all the other parameters. Please see the multi-parameter constructor for details.
- initialState
the initial state of the model to be displayed in the view
- title
a string to be displayed in the frame’s title bar
- new ViewFrame(initialState: Model, tickRate: Double = TicksPerSecondDefault, title: String = "", initialDelay: Int = 600, terminateOnClose: Boolean = true, closeWhenDone: Boolean = false, refreshPolicy: RefreshPolicy = Always)
- initialState
the initial state of the model to be displayed in the view (the only required parameter). This class has been designed to work conveniently with immutable model objects (cf. o1.gui.mutable.ViewFrame).
- tickRate
the clock of the view will tick roughly this many times per second (optional; defaults to 24)
- title
a string to be displayed in the frame’s title bar (optional)
- initialDelay
an additional delay in milliseconds between calling start and the clock starting (optional; defaults to 600)
- terminateOnClose
whether the entire application should exit when the
ViewFrame
is closed (optional; defaults totrue
)- closeWhenDone
whether the
ViewFrame
should be hidden and its clock stopped once the view has reached a “done state” (as per isDone) (optional; defaults tofalse
)- refreshPolicy
a policy for how eagerly the view should try to update the graphical representation of its model (optional; changing this may improve efficiency in some circumstances)
Type Members
- final class Traced[TraceData] extends ViewFrame[Model] with TraceGeneratingDefaults[Model, TraceData]
A view that wraps around another, collecting a log or trace of events while delegating its actual event-handling to the wrapped view.
A view that wraps around another, collecting a log or trace of events while delegating its actual event-handling to the wrapped view. Provides additional methods for accessing such traces: trace, simulateAndGet, and startAndGet. A few examples of using these methods are given below.
simulate
500 clock ticks on the trace-collecing view and print the trace of clock ticks accompanied by descriptions of the view’äsmodel
.for((traceItem, traceEvent) <- myTracedView.simulateAndGet(500)) { println(traceEvent + ": " + traceItem) }
Or, equivalently:
myTracedView.simulate(500) for((traceItem, traceEvent) <- myTracedView.trace) { println(traceEvent + ": " + traceItem) }
Alternatively, start the trace-collecting view and run it interactively until it is done or a tick limit is reached. Then print the trace of ticks and GUI events accompanied with descriptions of the view’s
model
.val futureTrace = myTracedView.startAndGet(tickLimit=100) recover { case Aborted(message, partialTrace) => partialTrace } for(trace <- futureTrace; (traceItem, traceEvent) <- trace) { println(traceEvent + ": " + traceItem) }
- TraceData
the type of the model-state descriptions in the trace
Abstract Value Members
- abstract def makePic(state: Model): Pic
Returns a Pic that graphically represents the given state of the view’s model.
Returns a Pic that graphically represents the given state of the view’s model. This method is automatically invoked by the view after GUI events and clock ticks. Left abstract by this class so any concrete view needs to add a custom implementation.
For best results, all invocations of this method on a single view object should return
Pic
s of equal dimensions.- state
a state of the model to be displayed
- Definition Classes
- ControlDefaults → Controls
Concrete Value Members
- final def !=(arg0: Any): Boolean
- Definition Classes
- AnyRef → Any
- final def ##(): Int
- Definition Classes
- AnyRef → Any
- final def ==(arg0: Any): Boolean
- Definition Classes
- AnyRef → Any
- final def adjustSpeed(newTickRate: Double): Unit
Sets a new tick rate for the view, replacing any previously set by the constructor or this method.
Sets a new tick rate for the view, replacing any previously set by the constructor or this method.
- Definition Classes
- ViewFrame
- final def asInstanceOf[T0]: T0
- Definition Classes
- Any
- def clone(): AnyRef
- Attributes
- protected[lang]
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.CloneNotSupportedException]) @native() @HotSpotIntrinsicCandidate()
- final def close(): Unit
Closes the view: stops it (as per stop), does any onClose effects, hides the GUI window, and possibly terminates the entire application (as per the constructor parameter).
- val closeWhenDone: Boolean
- Definition Classes
- ViewFrame
- final def eq(arg0: AnyRef): Boolean
- Definition Classes
- AnyRef
- def equals(arg0: AnyRef): Boolean
- Definition Classes
- AnyRef → Any
- final def getClass(): Class[_ <: AnyRef]
- Definition Classes
- AnyRef → Any
- Annotations
- @native() @HotSpotIntrinsicCandidate()
- def hashCode(): Int
- Definition Classes
- AnyRef → Any
- Annotations
- @native() @HotSpotIntrinsicCandidate()
- def icon: Option[Pic]
The icon to be displayed in the title bar of this view’s GUI frame.
The icon to be displayed in the title bar of this view’s GUI frame.
- Definition Classes
- ViewFrame
- final def icon_=(icon: Pic): Unit
Sets the icon to be displayed in the title bar of this view’s GUI frame.
Sets the icon to be displayed in the title bar of this view’s GUI frame.
- icon
a picture to be used as the icon
- Definition Classes
- ViewFrame
- final def icon_=(icon: Option[Pic]): Unit
Sets the icon to be displayed in the title bar of this view’s GUI frame.
Sets the icon to be displayed in the title bar of this view’s GUI frame.
- icon
a picture to be used as the icon; if
None
, en empty icon image will be displayed
- Definition Classes
- ViewFrame
- def isDone(state: Model): Boolean
Determines if the given state is a “done state” for the view.
Determines if the given state is a “done state” for the view. By default, this is never the case, but that behavior can be overridden.
Once done, the view stops reacting to events and updating its graphics and may close its GUi window, depending on the constructor parameters of the view.
- state
a state of the model (possibly a done state)
- Definition Classes
- ControlDefaults → Controls
- final def isInstanceOf[T0]: Boolean
- Definition Classes
- Any
- def isPaused: Boolean
Indicates whether the view is paused.
Indicates whether the view is paused. By default, always returns
false
.- Definition Classes
- ControlDefaults → Controls
- See also
- final def ne(arg0: AnyRef): Boolean
- Definition Classes
- AnyRef
- final def notify(): Unit
- Definition Classes
- AnyRef
- Annotations
- @native() @HotSpotIntrinsicCandidate()
- final def notifyAll(): Unit
- Definition Classes
- AnyRef
- Annotations
- @native() @HotSpotIntrinsicCandidate()
- def onClick(state: Model, event: event.MouseClicked): Model
Determines what state should follow the given one when a mouse button is clicked (pressed+relesed, possibly multiple times in sequence) above the view.
Determines what state should follow the given one when a mouse button is clicked (pressed+relesed, possibly multiple times in sequence) above the view. By default, just returns the unchanged state, but this can be overridden.
If you don’t need much information about the GUI event, you may find it simpler to implement the other method of the same name instead of this one.
- state
the state of the model at the time of the click event
- event
the GUI event that caused this handler to be called
- Definition Classes
- ControlDefaults → Controls
- def onClick(state: Model, position: Pos): Model
Determines what state should follow the given one when a mouse button is clicked (pressed+relesed, possibly multiple times in sequence) above the view.
Determines what state should follow the given one when a mouse button is clicked (pressed+relesed, possibly multiple times in sequence) above the view. By default, just returns the unchanged state, but this can be overridden.
If the desired behavior depends on detailed information about the GUI event, you may want to implement the other method of the same name instead of this one.
- state
the state of the model at the time of the click event
- position
the position of the mouse cursor relative to the view’s top left-hand corner
- Definition Classes
- ControlDefaults → Controls
- def onClose(): Unit
Causes an effect when the view’s GUI window is closed for any reason.
Causes an effect when the view’s GUI window is closed for any reason. By default, this method does nothing.
- Definition Classes
- ViewFrame
- def onKeyDown(state: Model, event: event.KeyPressed): Model
Determines what state should follow the given one when a key on the keyboard is pressed down while the view has the keyboard focus.
Determines what state should follow the given one when a key on the keyboard is pressed down while the view has the keyboard focus. By default, just returns the unchanged state, but this can be overridden.
If you don’t need much information about the GUI event, you may find it simpler to implement the other method of the same name instead of this one.
- state
the state of the model at the time of the keyboard event
- event
the GUI event that caused this handler to be called
- Definition Classes
- ControlDefaults → Controls
- def onKeyDown(state: Model, key: Key): Model
Determines what state should follow the given one when a key on the keyboard is pressed down while the view has the keyboard focus.
Determines what state should follow the given one when a key on the keyboard is pressed down while the view has the keyboard focus. By default, just returns the unchanged state, but this can be overridden.
If the desired behavior depends on detailed information about the GUI event, you may want to implement the other method of the same name instead of this one.
- state
the state of the model at the time of the keyboard event
- key
the key that was pressed down
- Definition Classes
- ControlDefaults → Controls
- def onKeyUp(state: Model, event: event.KeyReleased): Model
Determines what state should follow the given one when a key on the keyboard is released while the view has the keyboard focus.
Determines what state should follow the given one when a key on the keyboard is released while the view has the keyboard focus. By default, just returns the unchanged state, but this can be overridden.
If you don’t need much information about the GUI event, you may find it simpler to implement the other method of the same name instead of this one.
- state
the state of the model at the time of the keyboard event
- event
the GUI event that caused this handler to be called
- Definition Classes
- ControlDefaults → Controls
- def onKeyUp(state: Model, key: Key): Model
Determines what state should follow the given one when a key on the keyboard is released while the view has the keyboard focus.
Determines what state should follow the given one when a key on the keyboard is released while the view has the keyboard focus. By default, just returns the unchanged state, but this can be overridden.
If the desired behavior depends on detailed information about the GUI event, you may want to implement the other method of the same name instead of this one.
- state
the state of the model at the time of the keyboard event
- key
the key that was released
- Definition Classes
- ControlDefaults → Controls
- def onMouseDown(state: Model, event: event.MousePressed): Model
Determines what state should follow the given one when a mouse button is pressed down above the view.
Determines what state should follow the given one when a mouse button is pressed down above the view. By default, just returns the unchanged state, but this can be overridden.
If you don’t need much information about the GUI event, you may find it simpler to implement the other method of the same name instead of this one.
- state
the state of the model at the time of the mouse event
- event
the GUI event that caused this handler to be called
- Definition Classes
- ControlDefaults → Controls
- def onMouseDown(state: Model, position: Pos): Model
Determines what state should follow the given one when a mouse button is pressed down above the view.
Determines what state should follow the given one when a mouse button is pressed down above the view. By default, just returns the unchanged state, but this can be overridden.
If the desired behavior depends on detailed information about the GUI event, you may want to implement the other method of the same name instead of this one.
- state
the state of the model at the time of the mouse event
- position
the position of the mouse cursor relative to the view’s top left-hand corner
- Definition Classes
- ControlDefaults → Controls
- def onMouseDrag(state: Model, event: event.MouseDragged): Model
Determines what state should follow the given one when the mouse cursor is dragged above the view.
Determines what state should follow the given one when the mouse cursor is dragged above the view. By default, just returns the unchanged state, but this can be overridden.
If you don’t need much information about the GUI event, you may find it simpler to implement the other method of the same name instead of this one.
- state
the state of the model at the time of the drag event
- event
the GUI event that caused this handler to be called
- Definition Classes
- ControlDefaults → Controls
- def onMouseDrag(state: Model, position: Pos): Model
Determines what state should follow the given one when the mouse cursor is dragged above the view.
Determines what state should follow the given one when the mouse cursor is dragged above the view. By default, just returns the unchanged state, but this can be overridden.
If the desired behavior depends on detailed information about the GUI event, you may want to implement the other method of the same name instead of this one.
- state
the state of the model at the time of the drag event
- position
the position of the mouse cursor relative to the view’s top left-hand corner
- Definition Classes
- ControlDefaults → Controls
- def onMouseEnter(state: Model, event: event.MouseEntered): Model
Determines what state should follow the given one when the mouse cursor enters the view.
Determines what state should follow the given one when the mouse cursor enters the view. By default, just returns the unchanged state, but this can be overridden.
- state
the state of the model at the time of the mouse event
- event
the GUI event that caused this handler to be called
- Definition Classes
- ControlDefaults → Controls
- def onMouseExit(state: Model, event: event.MouseExited): Model
Determines what state should follow the given one when the mouse cursor exits the view.
Determines what state should follow the given one when the mouse cursor exits the view. By default, just returns the unchanged state, but this can be overridden.
- state
the state of the model at the time of the mouse event
- event
the GUI event that caused this handler to be called
- Definition Classes
- ControlDefaults → Controls
- def onMouseMove(state: Model, event: event.MouseMoved): Model
Determines what state should follow the given one when the mouse cursor moves above the view.
Determines what state should follow the given one when the mouse cursor moves above the view. By default, just returns the unchanged state, but this can be overridden.
If you don’t need much information about the GUI event, you may find it simpler to implement the other method of the same name instead of this one.
- state
the state of the model at the time of the move event
- event
the GUI event that caused this handler to be called
- Definition Classes
- ControlDefaults → Controls
- def onMouseMove(state: Model, position: Pos): Model
Determines what state should follow the given one when the mouse cursor moves above the view.
Determines what state should follow the given one when the mouse cursor moves above the view. By default, just returns the unchanged state, but this can be overridden.
If the desired behavior depends on detailed information about the GUI event, you may want to implement the other method of the same name instead of this one.
- state
the state of the model at the time of the move event
- position
the position of the mouse cursor relative to the view’s top left-hand corner
- Definition Classes
- ControlDefaults → Controls
- def onMouseUp(state: Model, event: event.MouseReleased): Model
Determines what state should follow the given one when a mouse button is released above the view.
Determines what state should follow the given one when a mouse button is released above the view. By default, just returns the unchanged state, but this can be overridden.
If you don’t need much information about the GUI event, you may find it simpler to implement the other method of the same name instead of this one.
- state
the state of the model at the time of the mouse event
- event
the GUI event that caused this handler to be called
- Definition Classes
- ControlDefaults → Controls
- def onMouseUp(state: Model, position: Pos): Model
Determines what state should follow the given one when a mouse button is released above the view.
Determines what state should follow the given one when a mouse button is released above the view. By default, just returns the unchanged state, but this can be overridden.
If the desired behavior depends on detailed information about the GUI event, you may want to implement the other method of the same name instead of this one.
- state
the state of the model at the time of the mouse event
- position
the position of the mouse cursor relative to the view’s top left-hand corner
- Definition Classes
- ControlDefaults → Controls
- def onStop(): Unit
Causes an additional effect when the view is stopped (with
stop()
).Causes an additional effect when the view is stopped (with
stop()
). By default, this method does nothing.- Definition Classes
- ControlDefaults → Controls
- def onTick(previousState: Model, time: Long): Model
Determines what state should follow the given one on a tick of the view’s internal clock.
Determines what state should follow the given one on a tick of the view’s internal clock. By default, just returns the unchanged state, but this can be overridden.
If you don’t need the number of the clock tick, you may find it simpler to implement the other method of the same name instead of this one.
- previousState
the state of the model before the clock tick
- time
the running number of the clock tick (the first tick being number 1, the second 2, etc.)
- Definition Classes
- ControlDefaults → Controls
- def onTick(previousState: Model): Model
Determines what state should follow the given one on a tick of the view’s internal clock.
Determines what state should follow the given one on a tick of the view’s internal clock. By default, just returns the unchanged state, but this can be overridden.
- previousState
the state of the model before the clock tick
- Definition Classes
- ControlDefaults → Controls
- def onType(state: Model, event: event.KeyTyped): Model
Determines what state should follow the given one when a key on the keyboard is typed (pressed+released) while the view has the keyboard focus.
Determines what state should follow the given one when a key on the keyboard is typed (pressed+released) while the view has the keyboard focus. By default, just returns the unchanged state, but this can be overridden.
If you don’t need much information about the GUI event, you may find it simpler to implement the other method of the same name instead of this one.
- state
the state of the model at the time of the keyboard event
- event
the GUI event that caused this handler to be called
- Definition Classes
- ControlDefaults → Controls
- def onType(state: Model, character: Char): Model
Determines what state should follow the given one when a key on the keyboard is typed (pressed+released) while the view has the keyboard focus.
Determines what state should follow the given one when a key on the keyboard is typed (pressed+released) while the view has the keyboard focus. By default, just returns the unchanged state, but this can be overridden.
If the desired behavior depends on detailed information about the GUI event, you may want to implement the other method of the same name instead of this one.
- state
the state of the model at the time of the keyboard event
- character
the key that was typed
- Definition Classes
- ControlDefaults → Controls
- def onWheel(state: Model, event: event.MouseWheelMoved): Model
Determines what state should follow the given one when the mouse wheel is rotated above the view.
Determines what state should follow the given one when the mouse wheel is rotated above the view. By default, just returns the unchanged state, but this can be overridden.
If you don’t need much information about the GUI event, you may find it simpler to implement the other method of the same name instead of this one.
- state
the state of the model at the time of the wheel event
- event
the GUI event that caused this handler to be called
- Definition Classes
- ControlDefaults → Controls
- def onWheel(state: Model, rotation: Int): Model
Determines what state should follow the given one when the mouse wheel is rotated above the view.
Determines what state should follow the given one when the mouse wheel is rotated above the view. By default, just returns the unchanged state, but this can be overridden.
If the desired behavior depends on detailed information about the GUI event, you may want to implement the other method of the same name instead of this one.
- state
the state of the model at the time of the wheel event
- rotation
the number of steps the wheel rotated (negative means up, positive down)
- Definition Classes
- ControlDefaults → Controls
- final def refresh(): Unit
Programmatically requests an update to the graphics of the view (even though no clock tick or triggering GUI event occurred).
Programmatically requests an update to the graphics of the view (even though no clock tick or triggering GUI event occurred).
- Definition Classes
- ViewFrame
- val refreshPolicy: RefreshPolicy
- Definition Classes
- ViewFrame
- final def simulate(tickLimit: Int = Int.MaxValue): Unit
Runs the view as if by calling start except that it runs “headless”, with no actual GUI window visible and independently of a real-time clock.
Runs the view as if by calling start except that it runs “headless”, with no actual GUI window visible and independently of a real-time clock. A number of simulated clock ticks are immediately sent to the view; this continues until either the view determines it is done or a predetermined maximum number of ticks has been reached.
- tickLimit
the maximum number of ticks to simulate;
Int.MaxValue
(which is the default) means there is no such limit
- Definition Classes
- ViewFrame → Controls
- def sound(state: Model): Option[sound.sampled.Sound]
Determines whether the view should play a sound, given a state of its model.
Determines whether the view should play a sound, given a state of its model. By default, no sounds are played.
- state
a state of the model
- returns
a Sound that the view should play;
None
if no sound is appropriate for the given state
- Definition Classes
- ControlDefaults → Controls
- final def start(): Unit
Starts the view: loads the model in the GUI window, makes the window visible oncreen, and starts the clock.
Starts the view: loads the model in the GUI window, makes the window visible oncreen, and starts the clock. Cf. simulate.
- Definition Classes
- ViewFrame → Controls
- final def stop(): Unit
Stops the view: stops the clock, stops listening to events, and disposes of the GUI window.
Stops the view: stops the clock, stops listening to events, and disposes of the GUI window. A stopped view cannot be restarted.
- Definition Classes
- ViewFrame
- final def synchronized[T0](arg0: => T0): T0
- Definition Classes
- AnyRef
- val terminateOnClose: Boolean
- Definition Classes
- ViewFrame
- val title: String
- Attributes
- protected
- Definition Classes
- ViewFrame
- def toString: String
Returns a brief textual description of the view.
Returns a brief textual description of the view.
- Definition Classes
- ViewFrame → AnyRef → Any
- final def tooltip: String
the tooltip text to be displayed while the mouse overs on the view
the tooltip text to be displayed while the mouse overs on the view
- Definition Classes
- ViewFrame
- final def tooltip_=(newText: String): Unit
Sets the tooltip text to be displayed while the mouse overs on the view.
Sets the tooltip text to be displayed while the mouse overs on the view.
- Definition Classes
- ViewFrame
- final def traced: Traced[Model]
Returns a
View
that stores a trace of the ticks and GUI events that its event handlers process.Returns a
View
that stores a trace of the ticks and GUI events that its event handlers process. This parameterless method stores, at each event, the (immutable) state of theView
’s model. This is equivalent to calling tracedWith and passing inidentity
.- Definition Classes
- ControlDefaults
- final def tracedPics: Traced[Pic]
Returns a
View
that stores a pictorial trace of the ticks and GUI events that theView
’s event handlers process.Returns a
View
that stores a pictorial trace of the ticks and GUI events that theView
’s event handlers process. This is equivalent to calling tracedWith and passing in theView
’smakePic
method.- Definition Classes
- ControlDefaults
- final def tracedWith[TraceData](extractTrace: (Model) => TraceData): Traced[TraceData]
Returns a view that collects of the ticks and GUI events that the
View
’s event handlers process, using the given function to generate that trace.Returns a view that collects of the ticks and GUI events that the
View
’s event handlers process, using the given function to generate that trace. That trace-collecting view, which an instance of the Traced subclass, delegates the actual event handling to this original view but provides an additional interface for tracing.- TraceData
the type of the model-state descriptions in the trace
- extractTrace
a function that determines how to describe a model state in the generated trace
- Definition Classes
- ViewFrame → ControlDefaults
- See also
- final def visible: Boolean
whether this view’s GUI frame is visible onscreen
whether this view’s GUI frame is visible onscreen
- Definition Classes
- ViewFrame
- final def visible_=(desiredVisibility: Boolean): Unit
Sets whether this view’s GUI frame is visible onscreen.
Sets whether this view’s GUI frame is visible onscreen.
- Definition Classes
- ViewFrame
- final def wait(arg0: Long, arg1: Int): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.InterruptedException])
- final def wait(arg0: Long): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.InterruptedException]) @native()
- final def wait(): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.InterruptedException])
Deprecated Value Members
- def finalize(): Unit
- Attributes
- protected[lang]
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.Throwable]) @Deprecated @deprecated
- Deprecated
(Since version ) see corresponding Javadoc for more information.