<> <> DIRECTORY Icons, Menus, ViewerClasses; Abutters: CEDAR DEFINITIONS = { Viewer: TYPE = ViewerClasses.Viewer; AbutterClass: TYPE = REF AbutterClassPrivate; AbutterClassPrivate: TYPE = RECORD [ destroy: ViewerClasses.DestroyProc _ NIL, copy: ViewerClasses.CopyProc _ NIL, set: ViewerClasses.SetProc _ NIL, get: ViewerClasses.GetProc _ NIL, init: ViewerClasses.InitProc _ NIL, save: ViewerClasses.SaveProc _ NIL, caption: ViewerClasses.CaptionProc _ NIL, menu: Menus.Menu _ NIL, icon: Icons.IconFlavor _ document ]; RegisterClass: PROC [viewerFlavor: ATOM, class: AbutterClassPrivate] RETURNS [same: ATOM]; GetClass: PROC [viewerFlavor: ATOM] RETURNS [class: AbutterClass]; <> vanilla: ATOM; <> Abutter: TYPE = REF AbutterRep; <> <> AbutterRep: TYPE; Create: PROC [viewerFlavor: ATOM, info: ViewerClasses.ViewerRec _ [], paint: BOOL _ TRUE] RETURNS [abutter: Abutter]; <> QuaViewer: PROC [Abutter] RETURNS [Viewer]; QuaAbutter: PROC [Viewer] RETURNS [Abutter]; ViewerIsAbutter: PROC [Viewer] RETURNS [BOOL]; IsAbutter: PROC [REF ANY] RETURNS [BOOL]; Narrow: PROC [REF ANY] RETURNS [Abutter]; GetClientData: PROC [Abutter] RETURNS [REF ANY]; GetClientDataFromViewer: PROC [Viewer--which is an Abutter--] RETURNS [REF ANY]; ScrollOffset: PROC [Abutter] RETURNS [offTop: INTEGER]; <> Edge: TYPE = {left, right, top, bottom}; SeriesElement: TYPE = RECORD [viewer: Viewer, spaceBefore: INTEGER _ 0]; Parallel: TYPE = LIST OF Series; Series: TYPE = RECORD [ rigid: LIST OF SeriesElement, end: SELECT kind: * FROM none => [spaceAfter: INTEGER _ 0, setParentSize: BOOL _ FALSE], parallel => [p: Parallel], stretch => [se: SeriesElement], ENDCASE ]; Rules: TYPE = ARRAY Edge OF Series; SetLayout: PROC [a: Abutter, rules: Rules, paint: BOOL _ TRUE]; Abut: PROC [a: Abutter, child1, child2: Viewer, edge: Edge, space: INTEGER _ 0, stretch: BOOL _ FALSE, paint: BOOL _ TRUE]; parentSide: Viewer; --pass this as child1 to abut against a side of the parent, rather than another Viewer. SetSizeBy: PROC [a: Abutter, child: Viewer, edge: Edge, space: INTEGER _ 0, paint: BOOL _ TRUE]; <> }.