<> <> <> <<>> DIRECTORY Icons, Menus, ViewerClasses, ViewerConstraints; Constrainers: CEDAR DEFINITIONS ~ BEGIN Viewer: TYPE = ViewerClasses.Viewer; Constraint: TYPE ~ ViewerConstraints.Constraint; Constrainer: TYPE ~ Viewer; <> ConstrainerClass: TYPE = REF ConstrainerClassRep; ConstrainerClassRep: 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: ConstrainerClassRep] RETURNS [same: ATOM]; GetClass: PROC [viewerFlavor: ATOM] RETURNS [class: ConstrainerClass]; <> <> vanilla: ATOM; <> SeriesElement: TYPE ~ RECORD [viewer: Viewer, spaceBefore: INTEGER _ 0, keepSizeFixed: BOOL _ TRUE]; 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 ]; EdgeType: TYPE ~ ViewerConstraints.EdgeType; Rules: TYPE ~ ARRAY EdgeType OF Series; Create: PROC [viewerFlavor: ATOM, info: ViewerClasses.ViewerRec _ [], paint: BOOL _ TRUE] RETURNS [c: Constrainer]; <> ViewerIsConstrainer: PROC [Viewer] RETURNS [BOOL]; GetClientData: PROC [Constrainer] RETURNS [REF ANY]; ScrollOffset: PROC [Constrainer] RETURNS [offTop: INTEGER]; <> HScrollOffset: PROC [Constrainer] RETURNS [offLeft: INTEGER]; <> SetLayout: PROC [c: Constrainer, rules: Rules, paint, eliminateOldConstraints: BOOL _ TRUE]; Abut: PROC [c: Constrainer, child1, child2: Viewer, edge: EdgeType, 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. <> KeepSquare: PROC [v: Viewer, adjustEdge: EdgeType] RETURNS [c: Constraint]; <> Center: PROC [parent, child: Viewer, margin: INTEGER _ 0, horz: BOOL _ TRUE]; <> Wrap: PROC [parent: Viewer, children: LIST OF Viewer, margin: INTEGER _ 0]; <> END.