Tray - compose interactors into arbitrary or constrained
layouts
SYNOPSIS
#include <InterViews/tray.h>
DESCRIPTION
A tray is a scene of interactors that overlap, tile, or
have other constraints on their alignment relative to each
other. One of the interactors in a tray can serve as a
background for the other interactors.
Constraints on the layout of interactors are made by
aligning interactors to each other. Two interactors are
aligned by specifying which edges coincide. For example,
the lower left corner of one interactor may be aligned to
the upper right of another. TGlue objects can be used to
introduce transparent space between aligned interactors.
TGlue has a natural size, shrinkability, and stretchabil-
ity (though TGlue objects are not interactors). Trays
stretch or shrink the TGlue along with the aligned inter-
actors to satisfy the alignment constraints.
The tray adopts the shape of the background interactor if
there is one; otherwise, the tray's shape depends on the
shapes of its components and potentially on their align-
ments. By default, a tray without a background takes on a
width and height equal to the largest of the widths and
heights of its components. However, alignments involving
the tray can in effect override this default.
For example, if the left and right sides of a particular
component are aligned to the tray's left and right sides,
respectively, then the tray's sides are constrained to
coincide with the component's sides. Thus the tray will
adopt the width, horizontal shrinkability, and horizontal
stretchability of that component. Another example: To
ensure that a tray circumscribes a collection of (mutually
aligned) components, align the outer edges of the compo-
nents on the periphery of the collection to the outer
edges of the tray, thereby constraining the tray to assume
the shape of the collection.
TGLUE PUBLIC OPERATIONS
TGlue(int w = 0, int h = 0, int hstretch = hfil, int
vstretch = vfil);
Define TGlue of a minimum size. The TGlue can
stretch from the given size but cannot shrink.
TGlue(int, int, int hshrink, int hstretch, int
vshrink, int vstretch);
Define general TGlue with a given natural size
TRAY PUBLIC OPERATIONS
Tray(Interactor* background = nil)
Create a new tray, optionally having an interactor
as a background.
void Align(Alignment, Interactor*, TGlue* = nil)
void Align(Alignment, Interactor*, Alignment, Interactor*,
TGlue* = nil)
Align an interactor to another interactor (the tray
itself by default), optionally with TGlue between
them. Align operations insert interactors into the
tray if they have not been inserted already.
void Align(Alignment, Interactor*, ..., Interactor* = nil)
Apply an alignment to a set of interactors. This
operation is shorthand for aligning the interactors
to each other explicitly. For example, Align(Left,
i1, i2, i3, i4) aligns the left sides of interac-
tors i1 through i4. Two to seven interactors can
be aligned at once.
void HBox(Interactor*, ..., Interactor* = nil)
void VBox(Interactor*, ..., Interactor* = nil)
The HBox and VBox operations align the specified
interactors such that they tile left-to-right and
top-to-bottom, respectively. These operations
align in one dimension only. Two to seven interac-
tors can be aligned at once. If the first (last)
component is the tray or the background interactor,
then the leftmost (rightmost) component will be
aligned with the left (right) side of the tray.
void Insert(Interactor*)
Insert an interactor into the tray without an
alignment. The interactor will appear in the lower
left corner of the tray.
void Change(Interactor*)
Notify the tray that the given interactor's shape
has changed. The tray will recompute the layout of
its component interactors to satisfy any align-
ments. If the tray does not contain a background,
then a change in the shape of one of its components
may in turn change the tray's shape. If the tray
has a background, then the tray's shape will change
only if the shape of the background changes.
void Remove(Interactor*)
Take an interactor out of a tray and eliminate any
alignments that have been made to it.
Interactor(3I), Scene(3I), Shape(3I)
Man(1) output converted with
man2html