<*PRAGMA LL*>A
TSplit.T
is a parent window that giving its entire screen to
one child at a time. The child being displayed is called the {\it
current child}. The current child can be NIL
, in which case the
TSplit
ignores all events.
INTERFACEThe callTSplit ; IMPORT VBT, Split; TYPE T <: Public; Private <: Split.T; Public = Private OBJECT METHODS <* LL.sup <= VBT.mu *> init(fickle := TRUE): T END;
v.init(fickle)
initialize v
as an empty TSplit
.
If fickle
is TRUE
, then the shape of v
will be the shape of
its current child, or a VBT
's default shape if the current child
is NIL
. If fickle
is FALSE
, then in each axis the size range
of v
will be the intersection of the size ranges of its children (if
this intersection is empty, the children's maxsizes are increased
until the intersection is non-empty). The preferred size of v
is
the the maximum of the preferred sizes of its children, projected
into v
's size range. If v
has no children, its shape is a
VBT
's default shape.
PROCEDURE SetCurrent(v: T; ch: VBT.T) RAISES {Split.NotAChild}; <* LL.sup = VBT.mu *>
Set the current child ofv
to bech
and markv
for redisplay.
PROCEDURE GetCurrent(v: T): VBT.T; <* LL.sup = VBT.mu *>
Return the current child of v
.
PROCEDURE Cons(ch0, ch1, ch2, ch3, ch4: VBT.T := NIL; fickle := TRUE): T; <* LL.sup = VBT.mu *>
Create aTSplit
with childrench0
,ch1
, ....
Cons
is equivalent to
v := NEW(T).init(fickle); Split.AddChild(v, ch0, ch1, ch2, ch3, ch4); IF ch0 # NIL THEN SetCurrent(v, ch0) END; RETURN v
END TSplit.