<*PRAGMA LL*> INTERFACEThe callJoinParent ; IMPORT ETAgent, JoinedVBT, VBT, Rect, ScrnCursor; TYPE Join = JoinedVBT.Public OBJECT parents: T := NIL END; TYPE T <: Public; Public = ETAgent.T OBJECT <* LL >= {JoinedVBT.T child of T, VBT.mu} *> link: T METHODS <* LL.sup <= VBT.mu *> init (join: JoinedVBT.T): T; END;
v.init(join, north, west)
initializes v
as a
JoinParent.T
with child join
, and returns v
.
The northwest corner of the parent's domain is positioned at
point (north, west)
in Joined
's domain; this will be
maintained as the parent is reshaped or rescreened.
PROCEDURE New (v: JoinedVBT.T): T; <* LL.sup <= VBT.mu *>
New(...)
is equivalent toNEW(ParentT).init(...)
.
PROCEDURE Rem (prnt: T); <* LL = VBT.mu *>
Cause the child of prnt to lose parent prnt
, and mark it for
redisplay.
PROCEDURE Child (prnt: T): JoinedVBT.T; <* LL = VBT.mu *>
Return theJoinedVBT
for whichprnt
is a parent.
PROCEDURE Succ (v: JoinedVBT.T; prnt: T): T; <* LL.sup = VBT.mu OR LL.sup = v *>
Return the successor to parentprnt
ofv
. It is a checked runtime error ifprnt
is not a parent ofv
. As withSplit.Succ
, the successor ofNIL
is the first parent; the successor the last parent isNIL
; and the successor ofNIL
isNIL
ifv
has no parents.
PROCEDURE Current(v: JoinedVBT.T): T; <* LL.sup = v OR LL.sup = VBT.mu *> PROCEDURE SetInput(v: JoinedVBT.T; prnt: T); <* LL.sup = VBT.mu *> PROCEDURE NeedsRescreen(v: JoinedVBT.T): BOOLEAN; <* LL.sup = VBT.mu *> PROCEDURE ST(v: JoinedVBT.T): VBT.ScreenType; <* LL.sup = VBT.mu *> PROCEDURE Domain(v: JoinedVBT.T): Rect.T; <* LL.sup = VBT.mu *> PROCEDURE SetCursor(v: T; cs: ScrnCursor.T); <* LL.sup = JoinedVBT child of v *> END JoinParent.