ViewerConstraints.mesa
Copyright © 1986 by Xerox Corporation. All rights reserved.
Eric Nickell, October 17, 1986 1:41:14 pm PDT
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: REFNIL] RETURNS [class: ConstraintClass];
EnforceProc: TYPE ~ PROC [from, to: Values, classData, instanceData: REF];
EstablishConstraint: PROC [class: ConstraintClass, fetch: InitProc, instanceData: REFNIL] RETURNS [constraint: Constraint];
InitProc: TYPE ~ PROC [i: NAT, from: BOOL] RETURNS [e: Edge];
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.
EnforceConstraintSystem: PROC [v: Viewer];
Will enforce all constraints below the ancestor viewer, for v's ancestor.
PaintConstraintSystem: PROC [v: Viewer, fork: BOOLTRUE];
Will enforce all constraints below the ancestor viewer, for v's ancestor, and then paint everything necessary. Passing fork~FALSE is for wizards only.
BreakConstraint: PROC [constraint: Constraint];
Suspect: PROC [e: Edge];
Suspect that this edge has changed its value
WhatNeedsPainting: PROC [v: Viewer, clear: BOOLTRUE] RETURNS [l: LIST OF Viewer ← NIL];
Finds all the viewers q, such that Ancestor[q]=Ancestor[v], and which needs painting (according to ViewerConstraints).
Values: TYPE ~ REF ValuesRep;
ValuesRep: TYPE ~ RECORD [SEQUENCE n: NAT OF LASTINTEGER];
LASTINTEGER: TYPE ~ INTEGERINTEGER.LAST;
EdgeType: TYPE ~ {left, right, top, bottom};
Edge: TYPE ~ RECORD [v: Viewer, et: EdgeType];
END.