-- mig objectdefs
-- Griffin object types and manipulating routines
-- Stone April 1, 1981 10:51 PM
DIRECTORY
PointDefs: FROM "PointDefs",
EncodingDefs: FROM "EncodingDefs",
StyleDefs: FROM "StyleDefs",
XFormDefs: FROM "XFormDefs",
SplineDefs: FROM "SplineDefs",
GriffinFontDefs: FROM "GriffinFontDefs";
ObjectDefs: DEFINITIONS =
BEGIN
ObjectType: TYPE = {shape,caption,token, menu};
ObjectHandle: TYPE = POINTER TO Object;
TokenType: TYPE = {CP,open, center, hgrid, vgrid, selected};
View: TYPE = {main,alternate};
MenuOrientation: TYPE = {horizontal, vertical};
ClusterID: TYPE = [0..1023];
selW: PUBLIC INTEGER;
OpenCluster: ClusterID = 1;
DisplayFnc: TYPE = {write,erase};
Object: TYPE = RECORD
[
link: ObjectHandle,
backLink: ObjectHandle,
style: StyleDefs.StyleHandle,
cluster: ClusterID,
view: View,
deleted,visible: BOOLEAN,
selected: BOOLEAN,
cull: {inside,outside,partial},
-- part of encoding, but are here since true for all variants
validEncoding: BOOLEAN,
tl,br: PointDefs.ScrPt,
body: SELECT objectType: ObjectType FROM
shape =>
[
closed: BOOLEAN,
trajectory: Trajectory,
chainEncoding: POINTER TO EncodingDefs.ChainEncoding, --for the traj
areaEncoding: POINTER TO EncodingDefs.AreaEncoding
],
caption =>
[
p0: PointDefs.ObjPt,
text: STRING
],
token =>
[
tokenType: TokenType,
p0: PointDefs.ObjPt,
selected: ObjectHandle
],
menu =>
[
orientation: MenuOrientation,
head: POINTER
],
ENDCASE
];
Trajectory: TYPE = RECORD
[splineType: SplineDefs.SplineType,
traj: SELECT type:* FROM
linked => [links: POINTER TO Link],
cyclic => [knots: DESCRIPTOR FOR ARRAY OF PointDefs.ObjPt],
ENDCASE
];
Link: TYPE = RECORD
[link: POINTER TO Link,
degree: {D0,D1,D2,D3},
knots: DESCRIPTOR FOR ARRAY OF PointDefs.ObjPt
];
ObjectProc: TYPE = PROCEDURE [obj: ObjectHandle];
--procedures implemented by objectfns
GetCurrentView: PUBLIC PROCEDURE RETURNS [View];
SetCurrentView: PROCEDURE[view: View];
Visible: PROCEDURE[object: ObjectHandle] RETURNS[BOOLEAN];
GetNextClusterID: PROCEDURE RETURNS[id: ClusterID];
GetNextObject: PROCEDURE [obj: ObjectHandle] RETURNS [ObjectHandle];
ForAllObjects: PROCEDURE [proc: ObjectProc];
ForAllPictureObjects: PROCEDURE [proc: ObjectProc];
ForAllVisibleObjects: PROCEDURE [proc: ObjectProc] ;
ForAllVisiblePictureObjects: PROCEDURE [proc: ObjectProc] ;
ForAllObjectsThroughObject: PROCEDURE [proc: ObjectProc,
lastObj: ObjectHandle];
GetTopPictureObj: PROCEDURE RETURNS [ObjectHandle];
ForAllInBoxDo: PROCEDURE[tl,br: PointDefs.ScrPt,proc: ObjectProc]
RETURNS [BOOLEAN];
ForAllPictureObjectsInBoxDo: PROCEDURE[tl,br: PointDefs.ScrPt,proc:
ObjectProc] RETURNS [BOOLEAN];
ForAllInCluster: PROCEDURE [id: ClusterID,proc: ObjectProc] ;
GetObjectHandle: PROCEDURE [pt: PointDefs.ScrPt] RETURNS [ObjectHandle];
GetObjectHandleBetweenObjects: PROCEDURE
[pt: PointDefs.ScrPt,topObject,bottomObject: ObjectHandle] RETURNS [ObjectHandle] ;
ReplotAllObjects: PROCEDURE;
ReplotBox: PROCEDURE [tl,br: PointDefs.ScrPt];
ReplotBoxFromObject: PROCEDURE [tl,br: PointDefs.ScrPt,object: ObjectHandle];
StartObject: PROCEDURE[type: ObjectType] RETURNS [ObjectHandle];
AddLink: PROCEDURE[obj: POINTER TO shape Object,link: POINTER TO Link];
DeleteLink: PROCEDURE[obj: POINTER TO shape Object,link: POINTER TO Link];
CopyObject: PROCEDURE [object: ObjectHandle] RETURNS [ObjectHandle];
DeleteObject: PROCEDURE[object: ObjectHandle]RETURNS [next: ObjectHandle];
ExpungeObjects: PROCEDURE;
FloatObject: PROCEDURE [object: ObjectHandle];
SinkObject: PROCEDURE [object: ObjectHandle];
FlipUpObject: PROCEDURE [object: ObjectHandle];
FlipDownObject: PROCEDURE [object: ObjectHandle];
AddToken: PROCEDURE[pt: PointDefs.ScrPt,type: TokenType] ;
SelectCP: PUBLIC PROCEDURE[pt: PointDefs.ScrPt];
DeSelectCP: PUBLIC PROCEDURE[pt: PointDefs.ScrPt];
MoveToken: PUBLIC PROCEDURE[from,to: PointDefs.ScrPt];
DeleteSelectedCPs: PROCEDURE;
DeleteAllCPs: PROCEDURE;
ReadCPs: PROCEDURE RETURNS[array: DESCRIPTOR FOR ARRAY OF PointDefs.ObjPt];
SelectObject: PUBLIC PROCEDURE[obj: ObjectHandle] RETURNS [ObjectHandle];
DeSelectObject: PROCEDURE [object: ObjectHandle];
SelectCluster: PROCEDURE[id: ClusterID] RETURNS [ObjectHandle];
DeSelectCluster: PUBLIC PROCEDURE[id: ClusterID];
ReturnSelected: PUBLIC PROCEDURE[object: ObjectHandle] RETURNS[ObjectHandle];
ForAllSelectedDo: PUBLIC PROCEDURE[proc: PROCEDURE[ObjectHandle]];
EmergencyDeleteEncodings: PROCEDURE; --when out of space
--procedures implemented by showobjects
ReplotFromObject: PROCEDURE[startObj: ObjectHandle];
PlotOneObject: PROCEDURE [object: ObjectHandle, function:DisplayFnc];
WriteObject: PROCEDURE [object: ObjectHandle];
EraseObject: PROCEDURE [object: ObjectHandle];
WriteLink: PROCEDURE[obj: POINTER TO shape Object,link: POINTER TO Link];
EraseLink: PROCEDURE[obj: POINTER TO shape Object,link: POINTER TO Link];
GridOn: PROCEDURE;
GridOff: PROCEDURE;
--implemented by PressObjs
PressAllObjects: PROCEDURE[s: STRING];
MigPressAllObjects: PROCEDURE[s: STRING];
--implemented by Text
DisplayCaption: PROCEDURE[POINTER TO caption Object];
DisplayString: PROCEDURE [string: STRING, screenpt: PointDefs.ScrPt,
anchor: StyleDefs.Anchor, torient: StyleDefs.Orientation,
fd: GriffinFontDefs.FontDescriptor];
--implemented by ObjectXForms
MoveObject: PROCEDURE[object: ObjectHandle, from,to: PointDefs.ScrPt];
XFormObject: PROCEDURE[object: ObjectHandle, matrix: XFormDefs.XFMDescriptor];
END.