CDApplications.mesa (A Chipndale module)
Copyright © 1983 by Xerox Corporation. All rights reserved.
by Christian Jacobi May 12, 1983 12:22 pm
last edited by Christian Jacobi November 5, 1984 10:16:22 am PST
--Procedures with vanilla stuff around applications
DIRECTORY
CD,
CDBasics,
CDOrient;
CDApplications: CEDAR DEFINITIONS
IMPORTS CDBasics, CDOrient =
BEGIN
--be carefull, ApplicationList's are lists of pointers, distinguish between:
--procedures which modify the application list, from procedures which don't
--procedures which modify the applications pointed to, from procedures which don't
--procedures which modify an application list, from procedures which modify the applications
--procedures around one application
HighPosO: PROC [aptr: CD.ApplicationPtr] RETURNS [CD.DesignPosition] =
INLINE {RETURN [CDBasics.AddSize[aptr.location,
CDOrient.OrientedSize[aptr.ob.size, aptr.orientation]]]};
PointToO: PROC [pos: CD.DesignPosition, aptr: CD.ApplicationPtr] RETURNS [BOOLEAN] =
--returns "pos points to the application aptr"
INLINE {RETURN [
CDBasics.OrderedIncreasing[aptr.location, pos] AND
CDBasics.OrderedIncreasing[pos, HighPosO[aptr]]]};
ARectO: PROC [aptr: CD.ApplicationPtr] RETURNS [CD.DesignRect] =
INLINE {RETURN [CDOrient.RectAt[aptr.location, aptr.ob.size, aptr.orientation]]};
HighPosI: PROC [aptr: CD.ApplicationPtr] RETURNS [p: CD.DesignPosition] =
INLINE {d: CD.DesignRect ← ARectI[aptr]; RETURN [CD.DesignPosition[d.x2, d.y2]]};
PointToI: PROC [pos: CD.DesignPosition, aptr: CD.ApplicationPtr] RETURNS [BOOLEAN] =
--returns "pos points to the application aptr", using its virtual coordinates
INLINE {RETURN [aptr.ob.p.hitInside[aptr, CDBasics.RectAt[pos, [0, 0]]]]};
ARectI: PROC [aptr: CD.ApplicationPtr] RETURNS [CD.DesignRect] =
INLINE BEGIN
RETURN [
CDOrient.MapRect[
itemInCell: aptr.ob.p.insideRect[aptr.ob],
cellSize: aptr.ob.size,
cellInstOrient: aptr.orientation,
cellInstPos: aptr.location
]
]
END;
NewApplicationI: PROC [ob: CD.ObPtr,
location: CD.DesignPosition←[0,0], orientation: CD.Orientation𡤀,
selected: BOOLEANFALSE, properties: CD.Properties←NIL] RETURNS [CD.ApplicationPtr];
--creates a new application, does neither draw nor include it into any world
--modifies location such that ob...insideRect is at original location
Transform: PROC [aptr: CD.ApplicationPtr,
cellRect: CD.DesignRect, transformation: CD.Orientation];
--performs "transformation" to "aptr"; the transformation occurs to the rect "cellRect".
--"cellRect" and "aptr" in the same coordinate system
--transformation group NOT abelsch
Translate: PROC [aptr: CD.ApplicationPtr, offset: CD.DesignPosition] =
--translates aptr^ by offset; aptr, offset in same coordinate system
INLINE {aptr.location ← CDBasics.AddPoints[aptr.location, offset]};
--procedures inspecting an application list
AplicationAt: PROC [al: CD.ApplicationList, pos: CD.DesignPosition, selectedOnly: BOOLFALSE] RETURNS [CD.ApplicationPtr];
--returns a reference to an application at location pos (or NIL if there is none)
--uses inner area's
BoundingRect: PROC[list: CD.ApplicationList, selectedOnly: BOOLEANFALSE]
RETURNS [CD.DesignRect];
--real coordinates
--uses outer area's
--procedures which modify the applications referenced by a list
TransformList: PROC[al: CD.ApplicationList,
cellRect: CD.DesignRect, transformation: CD.Orientation];
TranslateList: PROC[al: CD.ApplicationList, offset: CD.DesignPosition];
DeSelectList: PROC [list: CD.ApplicationList];
AppendToList: PROC [app, to: CD.ApplicationList] RETURNS [CD.ApplicationList];
--composes the lists "app" and "to"
--the original list "to" might be destroyed and must be replaced by the returned list
--the original list "app" is not touched
--procedures which handle the application list but don't modify the applications
SplitPointed: PROC [from: CD.ApplicationList, pos: CD.DesignPosition] RETURNS [pointed, others: CD.ApplicationList];
--copyes the pointed application references from "from" to "pointed"
--finds maximal 1 pointed application
--copyes the non-pointed application references from "from" to "others"
--does not make copies of the real applications
SplitSelected: PROC [from: CD.ApplicationList] RETURNS [selected, others: CD.ApplicationList];
--copyes the selected application references from "from" to "selected"
--copyes the non-selected application references from "from" to "others"
--returns new lists but same applications
OnlySelected: PROC[al: CD.ApplicationList] RETURNS [selected: CD.ApplicationList];
--returns new list but same applications
--procedures which create a new application list, with new applications
CopyList: PROC[al: CD.ApplicationList] RETURNS [CD.ApplicationList];
--creates a new list with new applications
ComposedCopy: PROC[al: CD.ApplicationList,
cellPos, cellSize: CD.DesignPosition, cellOrient: CD.Orientation] RETURNS [CD.ApplicationList];
--makes a copy of "al" with world coordinates assumed that "al" has cell coordinates
--cellSize in cell coordinates, cellPos in world cordinates
--the new list points to new applications
DeComposedCopy: PROC[al: CD.ApplicationList,
cellPos, cellSize: CD.DesignPosition, cellOrient: CD.Orientation] RETURNS [CD.ApplicationList];
--makes a copy of "al" with cell coordinates assumed al has world coordinates
--cellSize in cell coordinates
--cellPos, cellOrient in world coordinates
--the new list points to new applications
END.