GraphicView, GraphicViews - base classes for graphical
component views
SYNOPSIS
#include <Unidraw/Components/grview.h>
DESCRIPTION
GraphicView is an abstract base class for graphical views
of GraphicComp objects. GraphicView is derived from Com-
ponentView and adds operations for manipulating its graph-
ical attributes. GraphicViews is a non-abstract subclass
of GraphicView for composite graphical component views.
GRAPHICVIEW PUBLIC OPERATIONS
virtual void Interpret(Command*)
virtual void Uninterpret(Command*)
GraphicView objects can (un)interpret the following
command:
AlignToGridCmd aligns the graphical component to
the grid that affects the view. Interpret uses
AlignToGridCmd::Align to carry out the alignment,
while Uninterpret uses AlignToGridCmd::Unalign to
reverse Interpret's effects.
virtual void DrawHandles()
virtual void RedrawHandles()
virtual void InitHandles()
virtual void EraseHandles()
Operations for displaying and hiding the view's
selection handles. All use CreateHandles
(described below) to create component-specific rub-
berbands that draw the handles if they do not
already exist. The rubberband is stored in the
_handles protected member. DrawHandles makes the
handles visible if they are not already visible.
RedrawHandles forces the handles to draw themselves
even if they are already drawn, which may make them
disappear if the rubberband draws them in XOR mode.
InitHandles deletes and recreates the rubberband
defining the handles if it existed when InitHandles
was called. EraseHandles erases the handles and
deletes the rubberband.
virtual Manipulator* CreateManipulator(
Viewer*, Event&, Transformer*, Tool*
)
virtual void InterpretManipulator(Manipulator*)
Operations that define how the GraphicView reacts
when it is manipulated by a tool and how the tool
affects that component following manipulation.
and interpretation to the view. This allows the
same tool to behave differently depending on the
component it manipulates.
CreateManipulator creates a manipulator that is
appropriate for the given tool. It receives the
viewer in which the manipulation will take place,
an event with which to initialize the manipulator
if necessary, 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. GraphicView objects create and
interpret manipulators for the following tools:
GraphicCompTool will let the user position a fixed-
sized outline reflecting the view's bounding box on
the screen. Interpretation will produce a command
that inserts a copy of the subject into the edi-
tor's component at the specified position. Place-
ment will be constrained by gravity, if active.
MoveTool will let the user move a fixed-sized out-
line reflecting the view's bounding box on the
screen. Interpretation will produce a command that
moves the subject to the specified position. Hold-
ing down the Shift key will constrain the movement
to purely horizontal or vertical, and movement will
be constrained by gravity.
ScaleTool will let the user drag a scaling rectan-
gular outline corresponding to the view's scale
following manipulation with the tool. Scaling will
be constrained by gravity.
StretchTool will let the user drag a variable-sized
rectangular outline corresponding to a two-dimen-
sional stretch that the component will undergo fol-
lowing manipulation. Holding the Shift key down
will constrain the stretch to one dimension.
Stretching will be constrained by gravity.
RotateTool will let the user rotate a fixed-sized
rectangular outline reflecting the view's bounding
box. The rotation of the outline corresponds to
the rotation that the component will undergo fol-
lowing manipulation. Rotation will be constrained
by gravity.
virtual Graphic* GetGraphic()
Return the graphic that defines the GraphicView's
virtual Viewer* GetViewer()
Return the viewer (if any) that displays the view.
GraphicComp* GetGraphicComp()
Return the view's subject.
boolean Includes(GraphicView*)
A convenience function that returns whether or not
the GraphicView includes the given view, that is,
whether the view is a child of this.
GraphicView* GetGraphicView(Component*)
A convenience function that returns the view of the
given component (if any) that appears in the same
viewer as this.
GraphicView* GetView(Iterator)
void SetView(GraphicView*, Iterator&)
These operations do nothing by default. Subclasses
that contain children should redefine them as fol-
lows: GetView should return the GraphicView to
which an iterator points. SetView should initial-
ize the iterator to point to a particular Graph-
icView in the list of children; it should initial-
ize the iterator to point to a nil instance if the
given GraphicView is not a child.
virtual Selection* SelectAll()
virtual Selection* ViewContaining(Coord, Coord)
virtual Selection* ViewsContaining(Coord, Coord)
virtual Selection* ViewIntersecting(Coord, Coord, Coord,
Coord)
virtual Selection* ViewsIntersecting(Coord, Coord, Coord,
Coord)
virtual Selection* ViewsWithin(Coord, Coord, Coord, Coord)
virtual ConnectorView* ConnectorIntersecting(
Coord, Coord, Coord, Coord
)
These convenience operations do nothing by default.
Subclasses containing children should redefine them
to do the following: SelectAll should return a
selection object containing (pointers to) all its
children; ViewContaining should return the last
(visibly topmost) child view containing the given
point, while ViewsContaining should return all
children containing the point; ViewIntersecting
should return the last (visibly topmost) child view
intersecting a rectangular area, while ViewsInter-
secting should return all such children;
ViewsWithin should return all the child views
falling strictly within a rectangular area; and
lar area.
GRAPHICVIEW PROTECTED OPERATIONS
GraphicView(GraphicComp* = nil)
The constructor is protected to guard against
instantiation. It takes the view's subject as an
optional argument, passing it to the ComponentView
constructor.
virtual void SetGraphic(Graphic*)
Set the GraphicView's graphic to the given one, and
store this in the graphic using Graphic::SetTag.
This makes it possible to obtain the GraphicView
that owns the graphic from the graphic itself,
e.g., after hit detection.
virtual void CreateHandles()
Initialize the _handles member with a rubberband
that will draw the appropriate handles. By
default, CreateHandles creates a RubberHandles
object with eight handles around the periphery of
the view's bounding box.
virtual int ClosestPoint(
Coord x[], Coord y[], int n, Coord px, Coord py
)
A convenience function that returns the index of
the point closest to (px, py) in an array of n
points.
GraphicView* View(UList*)
GraphicView* GetGraphicView(Graphic*)
Convenience functions that return the GraphicView
in a UList element and the GraphicView associated
with a graphic, respectively.
Manipulator* CreateGraphicCompManip(
Viewer*, Event&, Transformer*, Tool*
)
Manipulator* CreateStretchManip(
Viewer*, Event&, Transformer*, Tool*
)
Command* InterpretGraphicCompManip(Manipulator*)
Command* InterpretStretchManip(Manipulator*)
Helper functions used by CreateManipulator and
InterpretManipulator to create and interpret the
manipulators associated with GraphicCompTool and
StretchTool.
void AddDamage(Graphic*)
GraphicViews should incur damage in response to a
change in their appearance, which generally happens
in their Update function. AddDamage and IncurDam-
age produce damage by calling the related opera-
tions on the enclosing viewer's damage object.
Subclasses can use these functions for convenience
to avoid accessing the enclosing viewer's damage
object directly.
void Unselect(GraphicView*)
A convenience function that unselects the given
view, which entails erasing its handles and remov-
ing it from the enclosing editor's selection
object.
virtual void Add(GraphicView*)
virtual void Append(GraphicView*)
virtual void InsertBefore(Iterator, GraphicView*)
virtual void Remove(Iterator&)
virtual void DeleteView(Iterator&)
Unimplemented operations that composite subclasses
should redefine for modifying the their (concep-
tual) list of children. Note that subclasses
needn't necessarily store their children in a list
data structure, but a list maps closely to the
semantics of these operations. These operations
are not public because only the view itself knows
how to keep its structure consistent with that of
the subject and/or its semantics.
Add adds a GraphicView to the end of the list of
children. InsertBefore inserts a GraphicView
before the GraphicView pointed to by the iterator.
Remove removes a view to which the given iterator
refers from the list without deleting it, while
DeleteView removes it and deletes it. Remove and
DeleteView should advance the iterator to point to
the following view as a side effect.
GRAPHICVIEWS PUBLIC OPERATIONS
GraphicViews(GraphicComps* = nil)
virtual ~GraphicViews()
The constructor creates a GraphicViews, optionally
supplying the subject. The destructor deletes the
GraphicViews' children.
virtual void Interpret(Command*)
GraphicViews objects interpret the following com-
mand:
AlignToGridCmd aligns the graphical component to
the grid that affects the view. The overall align-
component to the grid and then moves all other sub-
components by the amount that the leaf moved.
virtual void Update()
Automatically update the GraphicViews' state and
structure to match the subject's. Update will not
necessarily detect restructurings or state modifi-
cations made to the subject's children more than
one level deep. Update uses GVUpdater to do its
work.
virtual Graphic* GetGraphic()
Return the GraphicViews' graphic, which (like its
subject's graphic) is a Picture.
GraphicComps* GetGraphicComps()
Return the subject.
GRAPHICVIEWS PROTECTED OPERATIONS
UList* Elem(Iterator)
A convenience function for extracting a UList from
an iterator.
SEE ALSO
Command(3U), ComponentView(3U), Connector(3U), Damage(3U),
GVUpdater(3U), GraphicComp(3U), GraphicCompTool(3U),
Grid(3U), Event(3I), Manipulator(3U), MoveTool(3U), Pic-
ture(3U), RotateTool(3U), Rubband(3I), ScaleTool(3U),
Selection(3U), StretchTool(3U), Transformer(3I),
Viewer(3U), align(3U)
Man(1) output converted with
man2html