File: SVViewerToolImpl.mesa
Last edited by Bier on February 2, 1987 6:50:03 pm PST
Copyright © 1984 by Xerox Corporation. All rights reserved.
Created on March 22, 1983 2:29 pm
My very own container-type class for solid viewers
DIRECTORY
Icons, SV2d, SVInterfaceTypes, SVViewersOnScene, SVViewerTool, ViewerClasses, ViewerOps;
SVViewerToolImpl: CEDAR PROGRAM
IMPORTS Icons, SVViewersOnScene, ViewerOps
SHARES ViewerOps =
BEGIN OPEN ViewerClasses;
Point2d: TYPE = SV2d.Point2d;
SVData: TYPE = SVInterfaceTypes.SVData;
SolidViewerToolPaint: PRIVATE PaintProc = TRUSTED {
svData: SVData ← NARROW[self.data];
v: Viewer;
update: BOOLFALSE;
hdiff, wdiff: INTEGER;
FOR l: LIST OF Viewer ← svData.xBounded, l.rest UNTIL l=NIL DO
v ← l.first;
IF v.destroyed THEN {update ← TRUE; LOOP};
wdiff ← v.ww-v.cw;
v.ww ← MAX[v.parent.cw-v.wx-1, 5];
v.cw ← v.ww-wdiff;
ENDLOOP;
FOR l: LIST OF Viewer ← svData.yBounded, l.rest UNTIL l=NIL DO
v ← l.first;
IF v.destroyed THEN {update ← TRUE; LOOP};
hdiff ← v.wh-v.ch;
v.wh ← MAX[v.parent.ch-v.wy-1, 5];
v.ch ← v.wh-hdiff;
ENDLOOP;
IF update THEN {
oldx: LIST OF Viewer ← svData.xBounded;
oldy: LIST OF Viewer ← svData.yBounded;
svData.xBounded ← svData.yBounded ← NIL;
FOR l: LIST OF Viewer ← oldx, l.rest UNTIL l=NIL DO
IF ~l.first.destroyed
THEN svData.xBounded ← CONS[l.first, svData.xBounded];
ENDLOOP;
FOR l: LIST OF Viewer ← oldy, l.rest UNTIL l=NIL DO
IF ~l.first.destroyed
THEN svData.yBounded ← CONS[l.first, svData.yBounded];
ENDLOOP;
};
};
SolidViewerToolDestroy: PRIVATE DestroyProc = TRUSTED {
SVViewersOnScene.NotifyDestroy[self];
};
SolidViewerToolSet: PRIVATE SetProc = TRUSTED {
svData: SVData ← NARROW[self.data];
child: Viewer = NARROW[data];
IF child.parent#self THEN ERROR;
IF op=$YBound THEN svData.yBounded ← CONS[child, svData.yBounded]
ELSE IF op=$XBound THEN svData.xBounded ← CONS[child, svData.xBounded]
ELSE ERROR;
};
SolidViewerToolInit: PRIVATE InitProc = CHECKED {};
solidViewerToolClass: ViewerClasses.ViewerClass ← NEW[ViewerClasses.ViewerClassRec ← [
init: SolidViewerToolInit,
paint: SolidViewerToolPaint,
destroy: SolidViewerToolDestroy,
set: SolidViewerToolSet,
topDownCoordSys: TRUE,
icon: Icons.NewIconFromFile["SolidViews.icons", 0]
]];
ViewerOps.RegisterViewerClass[$SolidViewerTool, solidViewerToolClass];-- plug in to Viewers
END.