Tool - base class for tool objects
SYNOPSIS
#include <Unidraw/Tools/tool.h>
DESCRIPTION
Tool is an abstract base class for objects that support
direct manipulation of components. Tools employ animation
and other visual effects for immediate feedback to rein-
force the user's perception that he is dealing with real
objects. The user grasps and wields a tool to achieve a
desired effect. The effect may involve a change to one or
more components' internal state, or it may change the way
components are viewed, or there may be no effect at all
(if for example the tool is used in an inapropriate con-
text).
Conceptually, tools do their work within viewers, in which
graphical component views are displayed and manipulated.
Whenever a viewer receives an input event (such as a mouse
click or key press), it in turn asks the current tool
(defined by the enclosing editor object) to produce a
manipulator object. A tool implements its CreateManipula-
tor operation to create and initialize an appropriate
manipulator, which encapsulates the tool's manipulation
semantics by defining the three phases (grasp, wield,
effect) of the manipulation. Moreover, a tool can dele-
gate manipulator creation to one or more of the Graph-
icView objects in the viewer to allow component-specific
interaction. A tool's InterpretManipulator operation
accesses and analyzes information in the manipulator that
characterizes the manipulation and then creates a command
that carries out the desired effect. If a tool delegated
manipulator creation to a graphical view, then it must
delegate its interpretation to the same view.
PUBLIC OPERATIONS
virtual Manipulator* CreateManipulator(
Viewer*, Event&, Transformer*
)
virtual void InterpretManipulator(Manipulator*)
Operations that define how the tool reacts when it
is used and its ultimate effect. The tool can
defer manipulator creation and interpretation to a
GraphicView. This allows the same tool to behave
differently depending on the component it manipu-
lates.
CreateManipulator creates a manipulator that is
appropriate for the tool. It receives the viewer
sary, and the coordinate transformation that maps
canvas coordinates into the subject's coordinate
space. InterpretManipulator is called following
manipulation and defines how to construct a command
that carries out the manipulation's desired effect.
virtual void SetControlInfo(ControlInfo*)
virtual ControlInfo* GetControlInfo()
Tools use a ControlInfo object to store information
from which to build a user interface for engaging
the tool. These operations set and get the Con-
trolInfo object. SetControlInfo does not delete
the ControlInfo being replaced.
virtual Component* Copy()
Return a copy of the tool. Subclasses should rede-
fine this operation to return an instance of their
type.
virtual void Read(istream&)
virtual void Write(ostream&)
Read and write the tool's contents to a stream to
support catalog operations. Read and write typi-
cally call first the corresponding operations
defined by their parent class, and then they read
or write their class-specific state. Note that you
must ensure that the objects are read in the same
order they are written.
virtual ClassId GetClassId()
virtual boolean IsA(ClassId)
GetClassId returns the unique class identifier for
the Tool subclass, while IsA returns whether the
instance is of a class or subclass corresponding to
the given identifier. IsA typically checks the
given identifier against the instance's own (as
defined by its GetClassId operation) and, failing
that, calls its parent classes' IsA operation. All
subclasses must redefine GetClassId and IsA to
ensure that their identifiers are unique and that
instances are written and read properly.
PROTECTED OPERATIONS
Tool(ControlInfo* = nil)
The constructor is protected to prevent instatia-
tion of the abstract base class. The ControlInfo
object is optional, but only tools that have no
visible manifestion in the interface should omit
it.
ControlInfo* CopyControlInfo()
CopyControlInfo is a convenience function that sub-
it non-nil, simply checking for a nil argument
before calling the corresponding Copy on the Con-
trolInfo object.
SEE ALSO
Catalog(3U), Command(3U), ControlInfo(3U), Editor(3U),
Event(3I), GraphicView(3U), Manipulator(3U), Trans-
former(3I), Viewer(3U), classes(3U), istream(3C++),
ostream(3C++)
Man(1) output converted with
man2html