<> <> <> <> <> <<>> DIRECTORY AtomButtonsTypes, BiScrollers, BufferedRefresh, Buttons, Feedback, FunctionCache, GGBasicTypes, GGCircleCache, GGFont, GGModelTypes, GGSegmentTypes, Imager, ImagerBackdoor, 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; FeedbackData: TYPE = AtomButtonsTypes.FeedbackData; FeatureData: TYPE = GGModelTypes.FeatureData; GargoyleContainer: TYPE = Viewer; ImagerProc: TYPE = PROC [dc: Imager.Context]; Line: TYPE = GGBasicTypes.Line; <> <> 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: SliceDescriptor, attractor: SliceDescriptor ]; 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? <> sliceToExtend: SliceDescriptor ]; RefreshData: TYPE = RECORD [ suppressRefresh: BOOL _ FALSE, paintAction: ATOM, showColors: AtomButtonsTypes.TwoState, screenStyle: AtomButtonsTypes.EnumTypeRef, alignments: AtomButtonsTypes.TwoState, sandwich: BufferedRefresh.Sandwich, clientToViewer: ImagerTransformation.Transformation, -- remembers BiScroller to allow reuse of sandwich when window opens anew lineCache: FunctionCache.Cache, -- remembers which lines have been drawn in Foreground dragInProgress: BOOL _ FALSE, caretIsMoving: BOOL _ FALSE, spotPoint: Point _ [0.0, 0.0], -- For Gravity Testing hitPoint: Point _ [0.0, 0.0], -- For Gravity Testing overlayList: LIST OF SliceDescriptor, orderedOverlayList: LIST OF SliceDescriptor, -- maintained by routines in GGRefreshImpl. NIL => must rebuild ordered list addedObject: Slice, -- used to implement GGRefresh.FinishedAdding recentFeature: FeatureData, -- maintained by DuringSelect routines. Most recently hit feature. Could be used for refresh optimization of ExtendSelection. startBoundBox: BoundBox, <> textInProgress: Slice, -- 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 areaFollowColorTool: BOOL _ FALSE, lineFollowColorTool: BOOL _ FALSE ]; 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 triggerBag: TriggerBag, oldTriggerBag: TriggerBag, alignBag: AlignBag, oldAlignBag: AlignBag, sceneBag: TriggerBag, oldSceneBag: TriggerBag, hitCount: NAT _ 0, gravityType: GravityType, gravityTypeMenu: AtomButtonsTypes.EnumTypeRef, -- initialized in GGWindowImpl gravityExtentButton: AtomButtonsTypes.GraphicsState, gravButton: AtomButtonsTypes.TwoState, midpointButton: AtomButtonsTypes.TwoState, heuristicsButton: AtomButtonsTypes.TwoState, slopeHeader: AtomButtonsTypes.ScalarButtonHandle, slopeCount: NAT _ 0, <> angleHeader: AtomButtonsTypes.ScalarButtonHandle, angleCount: NAT _ 0, <> radiusHeader: AtomButtonsTypes.ScalarButtonHandle, radiusCount: NAT _ 0, <> radiusCircleCache: GGCircleCache.Cache, distanceHeader: AtomButtonsTypes.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) ]; GravityExtentData: TYPE = REF GravityExtentDataObj; GravityExtentDataObj: TYPE = RECORD [ extent: REAL ]; 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, lastMessage: Rope.ROPE, logFileName: Rope.ROPE, logStream: IO.STREAM ]; DefaultData: TYPE = GGModelTypes.DefaultData; DefaultDataObj: TYPE = GGModelTypes.DefaultDataObj; SelectionClass: TYPE = GGSegmentTypes.SelectionClass; AbortFlags: TYPE = {refresh, playback, gravitytest, bags, spare2, spare3}; GGData: TYPE = REF GargoyleDataObj; <> GargoyleDataObj: TYPE = RECORD [ outer: GargoyleContainer, biScroller: BiScrollers.BiScroller, actionArea: Viewer, -- the inner viewer of a BiScroller feedback: FeedbackData, -- the textual feedback region (see Feedback.mesa) 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, defaults: DefaultData, 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 ]; <> TriggerBag: TYPE = REF TriggerBagObj; TriggerBagObj: TYPE = RECORD [ <> slices: LIST OF FeatureData, intersectionPoints: LIST OF FeatureData, anchor: FeatureData ]; AlignBag: TYPE = REF AlignBagObj; AlignBagObj: 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, anchor: 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.