GGState.tioga
A Catalog of Gargoyle's State
This is a tour of the GargoyleData record. My purpose is to understand how much of Gargoyle's state is hidden from the user. State which is not visible is shown crossed out. State which is not visible and should be is shown bold crossed out. Items which are implementation details are shown in small font.
How the User Interface is to be Viewed
(height, yBounded, xBounded).
The Buttons on the control panel.
How The Model is to be Viewed
The BiScroller Window. (gargoyleData.biScroller).
The Action Area (gargoyleData.actionArea).
CameraData. Whether to shoot for quality or speed.
Refresh On or Off. (gargoyleData.refresh.suppressRefresh). Used for fast play back of session logs. This mode is visible insofar as the FastPlay button is gray.
Double Buffer.
BitMaps (foregroundBitmap, foregroundContext, backgroundBitmap, backgroundContext, chunkingBitmap, chunkingContext). Intermediate steps in rendering. Not really hidden state.
Start BoundBox. Intermediate steps in rendering.
Overlay. gargoyleData.refresh.overlayList. The objects which are moving (may be different from those which are selected).
State associated with the rest of Cedar
The original and current working directories.
Transient Modes (The FSM)
mouseMode/state form a hierarchical name for an FSM state (is shown by behavior over time).
drag.selectState. Allows parts of the FSM to be reused.
The initial position of the caret. (gargoyleData.drag.startPoint) This should be shown.
CurrentPoint. Shown by caret. This variable is a real fine point. It stores the last position of the caret before the mouse button went up.
Crucial Interface State
Selections. These are hidden on purpose during drag operations. Either the selected objects are moving (shown by action), or are irrelevant. Otherwise, selections are shown.
Text In Progress. Will the next character typed be added to an existing cluster? If so, which cluster? This could be shown by blinking the caret, or changing its shape.
Gravity Type. tolerance, gravityType, gravityTypeMenu, gravityExtentButton, gravButton are clearly shown. tolerance, criticalR, innerR are not. These last three can be considered the inner workings of gravity. Perhaps, they should not be in gargoyleData.
Sensitive Objects. (gargoyleData.hitTest.sensitiveTriggerBag). Since all objects are sensitive, except those which are moving, this information is shown.
Active Triggers, Hot Objects. activeTriggerBag. hotObjectBag. Will be shown with the new rendering scheme.
Alignment Line Rules. midpointButton, heuristicsButton, slopeHeader, slopeButtons, slopeCount, radiusHeader, radiusButtons, radiusCount, distanceHeader, distanceButtons, distanceCount.
Results of Measurement. slopeText, radiusText, distanceText, caret0, caret1, caret2. Shown textually.
The Scale Unit. Shown textually.
The Horizon Angle. To be shown textually.
Soft Modes
Current Positions: The Caret, The Anchor.
Restricted Modes (Effect a small subset of all possible operations)
extendMode. If I do an extend operation now, at what level will I extend? This mode should be made visible.
trajToExtend, segToExtendNum, jointToExtendNum. If I extend now, what will I extend from. This has much the same flavor as a caret, but it is not visible.
Checkpoints for Abort
Saved Selections. The selections in force when this transient mode began. They become visible if they are needed. Alternatively, they were once visible.
Saved Caret. The caret that once was.
New Outline. Did the outline to which we are adding exist before this operation?
The Model
The Scene.
The touching relationships. Showing these is really tricky.
A detailed analysis of the internals of the scene will be done soon.
Should Not Be In GargoyleData (Implementation Details)
gargoyleData.drag.transform.
gargoyleData.drag.state.
gargoyleData.refresh.paintAction.
gargoyleData.refresh.spotPoint.
gargoyleData.refresh.hitPoint.
gargoyleData.hitTest.hitCount. -- internal state of the TestGravity command.
gargoyleData.hitTest.colinearLinesState. Obsolete.
gargoyleData.hitTest.responsibleFor. Obsolete.
gargoyleData.aborted. This should be included in the FSM model.