A
tool defines a mode of a
DrawingEditor. All input events
targeted to the active
DrawingView of the drawing editor are
forwarded to its current tool.
Tools inform listeners when they are done with an interaction by calling
the ToolListener's toolDone() method. The Tools are created once and reused.
They are initialized/deinitialized with activate()/deactivate().
Tools are used for user interaction. Unlike figures, a tool works with
the user interface coordinates of the DrawingView. The user interface
coordinates are expressed in integer pixels.
A Tool forwards UndoableEdit events to the Drawing object onto which it
is performing changes.
If a tool does not handle a specific keyboard event, it looks up the
InputMap of the drawing editor and then invokes the
corresponding action in the
ActionMap of the drawing editor.
A tool can have an InputMap and ActionMap of its own which take precedence
over the ones provided by the drawing editor.
Design Patterns
Framework
The following interfaces define the contracts of a framework for structured
drawing editors:
Contract:
Drawing,
Figure,
DrawingView,
DrawingEditor,
org.jhotdraw.draw.handle.Handle and
Tool.
Mediator
DrawingEditor acts as a mediator for coordinating drawing tools
and drawing views:
Mediator:
DrawingEditor; Colleagues:
DrawingView,
Tool.
Mediator
DrawingEditor acts as a mediator for coordinating keyboard input from
Tools and Swing action objects:
Mediator:
DrawingEditor; Colleagues:
Tool, javax.swing.Action.
Observer
State changes of tools can be observed by other objects. Specifically
DrawingEditor observes area invalidations of tools and repaints
its active drawing view accordingly.
Subject:
Tool; Observer:
ToolListener; Event:
org.jhotdraw.draw.event.ToolEvent; Concrete Observer:
DrawingEditor.