DIRECTORY ViewerClasses, Rope USING [ROPE]; ViewerConstraints: CEDAR DEFINITIONS ~ BEGIN ROPE: TYPE ~ Rope.ROPE; Viewer: TYPE ~ ViewerClasses.Viewer; ConstraintClass: TYPE ~ REF ConstraintClassRep; ConstraintClassRep: TYPE; Constraint: TYPE ~ REF ConstraintRep; ConstraintRep: TYPE; Error: ERROR [type: ErrorType, reason: ROPE]; ErrorType: TYPE ~ {invalidConstraintClass, invalidConstraint, constraintConflict}; CreateConstraintClass: PROC [enforce: EnforceProc, nFrom, nTo: NAT, classData: REF _ NIL] RETURNS [class: ConstraintClass]; EnforceProc: TYPE ~ PROC [from, to: Values, classData, instanceData: REF]; EstablishConstraint: PROC [class: ConstraintClass, fetch: InitProc, instanceData: REF _ NIL] RETURNS [constraint: Constraint]; InitProc: TYPE ~ PROC [i: NAT, from: BOOL] RETURNS [e: Edge]; EnforceConstraintSystem: PROC [v: Viewer]; PaintConstraintSystem: PROC [v: Viewer, fork: BOOL _ TRUE]; BreakConstraint: PROC [constraint: Constraint]; Suspect: PROC [e: Edge]; WhatNeedsPainting: PROC [v: Viewer, clear: BOOL _ TRUE] RETURNS [l: LIST OF Viewer _ NIL]; Values: TYPE ~ REF ValuesRep; ValuesRep: TYPE ~ RECORD [SEQUENCE n: NAT OF LASTINTEGER]; LASTINTEGER: TYPE ~ INTEGER _ INTEGER.LAST; EdgeType: TYPE ~ {left, right, top, bottom}; Edge: TYPE ~ RECORD [v: Viewer, et: EdgeType]; END. ΎViewerConstraints.mesa Copyright c 1986 by Xerox Corporation. All rights reserved. Eric Nickell, October 17, 1986 1:41:14 pm PDT ViewerConstraints will place a call on fetch for each slot in the class. The Contraint returned may be discarded, but may be kept to Break the constraint at a later time. Will enforce all constraints below the ancestor viewer, for v's ancestor. Will enforce all constraints below the ancestor viewer, for v's ancestor, and then paint everything necessary. Passing fork~FALSE is for wizards only. Suspect that this edge has changed its value Finds all the viewers q, such that Ancestor[q]=Ancestor[v], and which needs painting (according to ViewerConstraints). ΚY˜™Icodešœ Οmœ1™