<> <> <> <> <> <<>> DIRECTORY BiScrollers, Buttons, GGBasicTypes, AtomButtons, GGCircleCache, GGModelTypes, GGSegmentTypes, Imager, ImagerBackdoor, ImagerPixelMap, ImagerTransformation, IO, Menus, Rope, SlackProcess, TiogaButtons, ViewerClasses; GGInterfaceTypes: CEDAR DEFINITIONS = BEGIN BoundBox: TYPE = GGModelTypes.BoundBox; Circle: TYPE = GGBasicTypes.Circle; EntityGenerator: TYPE = GGModelTypes.EntityGenerator; ExtendMode: TYPE = GGModelTypes.ExtendMode; FeatureData: TYPE = GGModelTypes.FeatureData; GargoyleContainer: TYPE = Viewer; ImagerProc: TYPE = PROC [dc: Imager.Context]; Line: TYPE = GGBasicTypes.Line; Outline: TYPE = GGModelTypes.Outline; OutlineDescriptor: TYPE = GGModelTypes.OutlineDescriptor; Point: TYPE = GGBasicTypes.Point; Scene: TYPE = GGModelTypes.Scene; Segment: TYPE = GGSegmentTypes.Segment; SelectMode: TYPE = GGModelTypes.SelectMode; Sequence: TYPE = GGModelTypes.Sequence; Slice: TYPE = GGModelTypes.Slice; SliceDescriptor: TYPE = GGModelTypes.SliceDescriptor; TouchGroup: TYPE = GGSegmentTypes.TouchGroup; Traj: TYPE = GGModelTypes.Traj; Vector: TYPE = GGBasicTypes.Vector; Viewer: TYPE = ViewerClasses.Viewer; CaretOn: TYPE = {nothing, joint, cp, seg, slice, spare1, spare2}; Caret: TYPE = REF CaretObj; CaretObj: TYPE = RECORD [ exists: BOOL _ FALSE, point: Point _ [0.0,0.0], chair: REF ANY _ NIL, -- an OutlineDescriptor or SliceDescriptor attractor: REF ANY _ NIL, -- an OutlineDescriptor or SliceDescriptor onOverlay: BOOL _ FALSE ]; DisplayStyle: TYPE = GGModelTypes.DisplayStyle; QualityMode: TYPE = GGModelTypes.QualityMode; CameraData: TYPE = GGModelTypes.CameraData; DragData: TYPE = RECORD [ startPoint: Point _ [0.0, 0.0], currentPoint: Point _ [0.0, 0.0], -- maintained by MouseEvent Procs savedCaret: Caret, -- needed to recover from Abort operations seqInProgress: Sequence, boxInProgress: SliceDescriptor, -- needed by Start/During/End Box procs to pass along new box transform: ImagerTransformation.Transformation, selectState: SelectMode _ joint, -- what are we in the process of selecting? extendMode: ExtendMode _ joint, -- what are we extending to? outlineToExtend: OutlineDescriptor _ NIL, sliceToExtend: SliceDescriptor _ NIL ]; RefreshData: TYPE = RECORD [ suppressRefresh: BOOL _ FALSE, paintAction: ATOM, showColors: AtomButtons.TwoState, screenStyle: AtomButtons.EnumTypeRef, alignments: AtomButtons.TwoState, <> foregroundBitmap: ImagerBackdoor.Bitmap _ NIL, foregroundPixelMap: ImagerPixelMap.PixelMap, foregroundContext: Imager.Context _ NIL, -- derived from foregroundBitmap foregndBitmapOK: BOOL _ FALSE, backgroundBitmap: ImagerBackdoor.Bitmap _ NIL, backgroundPixelMap: ImagerPixelMap.PixelMap, backgroundContext: Imager.Context _ NIL, -- derived from background map backgndBitmapOK: BOOL _ FALSE, chunkingBitmap: ImagerBackdoor.Bitmap _ NIL, chunkingPixelMap: ImagerPixelMap.PixelMap, chunkingContext: Imager.Context _ NIL, -- derived from chunking map spotPoint: Point _ [0.0, 0.0], -- For Gravity Testing hitPoint: Point _ [0.0, 0.0], -- For Gravity Testing overlayList: LIST OF REF ANY, orderedOverlayList: LIST OF REF ANY, -- maintained by routines in GGRefreshImpl. NIL => must rebuild ordered list addedObject: REF ANY _ NIL, -- used to implement GGRefresh.FinishedAdding recentFeature: FeatureData _ NIL, -- maintained by DuringSelect routines. Most recently hit feature. Could be used for refresh optimization of ExtendSelection. startBoundBox: BoundBox _ NIL, <> textInProgress: Slice _ NIL -- text slice to be updated by AddChar if nonNil. Any mouse click makes this NIL, completing typein. A character typed when isNIL starts a new textInProgress ]; GravityType: TYPE = {strictDistance, innerCircle, off}; Filters: TYPE = REF FiltersObj; FiltersObj: TYPE = RECORD [ tolerance: REAL _ 25.0, -- the tolerance for hit testing criticalR: REAL _ 25.0, -- see GGGravity.Map innerR: REAL _ 12.0, -- see GGGravity.InnerCircle currentTriggerBag: TriggerBag, currentObjectBag: ObjectBag, sceneTriggerBag: TriggerBag, hitCount: NAT _ 0, gravityType: GravityType, gravityTypeMenu: AtomButtons.EnumTypeRef, -- initialized in GGWindowImpl gravityExtentButton: GraphicsState, gravButton: AtomButtons.TwoState, midpointButton: AtomButtons.TwoState, heuristicsButton: AtomButtons.TwoState, slopeHeader: AtomButtons.ScalarButtonHandle, slopeCount: NAT _ 0, <> angleHeader: AtomButtons.ScalarButtonHandle, angleCount: NAT _ 0, <> radiusHeader: AtomButtons.ScalarButtonHandle, radiusCount: NAT _ 0, <> radiusCircleCache: GGCircleCache.Cache, distanceHeader: AtomButtons.ScalarButtonHandle, distanceCount: NAT _ 0, <> scaleUnit: REAL _ 72.0, -- value of one scale unit, in screen dots. Initially set to 72.0 (1 inch) horizontalDegrees: REAL -- slope considered horizontal. Initialized to 0 degrees (screen horizontal) ]; MeasureData: TYPE = RECORD [ caret0: Point, caret1: Point, caret2Value: Point, caret2: Viewer, slopeViewValue: REAL, slopeView: Viewer, angleViewValue: REAL, angleView: Viewer, radiusViewValue: REAL, radiusView: Viewer, lineDistViewValue: REAL, lineDistView: Viewer ]; DebugData: TYPE = RECORD [ typescript: Viewer, typescriptIn: IO.STREAM, typescriptOut: IO.STREAM, lastMessage: Rope.ROPE _ NIL, logFileName: Rope.ROPE, logStream: IO.STREAM ]; SelectionClass: TYPE = GGSegmentTypes.SelectionClass; AbortFlags: TYPE = {refresh, playback, gravitytest, bags, spare2, spare3}; GargoyleData: TYPE = REF GargoyleDataObj; <> GargoyleDataObj: TYPE = RECORD [ outer: GargoyleContainer _ NIL, biScroller: BiScrollers.BiScroller, actionArea: Viewer _ NIL, -- the inner viewer of a BiScroller feedback: Viewer _ NIL, -- the textual feedback region (a label) height: CARDINAL _ 0, yBounded: LIST OF Viewer _ NIL, -- used in GGContainerImpl for viewer resizing. xBounded: LIST OF Viewer _ NIL, originalWDir: Rope.ROPE, currentWDir: Rope.ROPE, mouseMode: ATOM, -- mouseMode and state together form a hierarchical name space of states. state: ATOM, -- as in mouseMode/state scene: Scene, -- the collection of objects we are looking at. caret: Caret, anchor: Caret, camera: CameraData, drag: DragData, refresh: RefreshData, hitTest: Filters, measure: MeasureData, debug: DebugData, slackHandle: SlackProcess.SlackHandle, touching: LIST OF TouchGroup, aborted: PACKED ARRAY AbortFlags OF BOOL _ ALL[FALSE], -- has the Abort button been pushed recently? gravityPool: REF ANY, -- temporary storage pool for GGGravity multiGravityPool: REF ANY -- temporary storage pool for GGMultiGravity ]; <> GraphicsState: TYPE = REF GraphicsStateObj; GraphicsStateObj: TYPE = RECORD [ button: ViewerClasses.Viewer _ NIL, value: REAL, clientData: REF ANY, atom: ATOM ]; <> TriggerBag: TYPE = REF TriggerBagObj; TriggerBagObj: TYPE = RECORD [ outlines: LIST OF FeatureData, slices: LIST OF FeatureData, intersectionPoints: LIST OF FeatureData, anchor: FeatureData ]; ObjectBag: TYPE = REF ObjectBagObj; ObjectBagObj: TYPE = RECORD [ slopeLines: LIST OF FeatureData, angleLines: LIST OF FeatureData, radiiCircles: LIST OF FeatureData, distanceLines: LIST OF FeatureData, midpoints: LIST OF FeatureData, intersectionPoints: LIST OF FeatureData ]; AlignmentLine: TYPE = REF AlignmentLineObj; AlignmentLineObj: TYPE = RECORD [ line: Line, degrees: REAL, triggerPoints: LIST OF Point _ NIL ]; AlignmentCircle: TYPE = REF AlignmentCircleObj; AlignmentCircleObj: TYPE = RECORD [ circle: Circle, triggerPoints: LIST OF Point _ NIL ]; AlignmentPoint: TYPE = REF AlignmentPointObj; AlignmentPointObj: TYPE = RECORD [ point: Point, tangent: BOOL, -- is this a point of tangency? (for Describe purposes) curve1: FeatureData, curve2: FeatureData ]; SequencePart: TYPE = REF SequencePartObj; SequencePartObj: TYPE = RECORD [ segNum, jointNum, controlPointNum: INT ]; END.