DIRECTORY Imager USING [Context], Rope USING [ROPE], Tioga USING [Location, Node, Span], TEditDocument USING [Selection, SelectionGrain, SelectionId, SelectionPoint, TEditDocumentData], ViewerClasses USING [ModifyProc, Viewer]; TEditSelection: CEDAR DEFINITIONS ~ BEGIN OPEN TEditDocument; ROPE: TYPE ~ Rope.ROPE; Viewer: TYPE ~ ViewerClasses.Viewer; pSel: READONLY Selection; sSel: READONLY Selection; fSel: READONLY Selection; oldSel: READONLY Selection; nilSel: READONLY Selection; Create: PROC RETURNS [Selection]; Alloc: PROC RETURNS [Selection]; Free: PROC [Selection]; Copy: PROC [source, dest: Selection]; PushOrExchangeSelections: PROC; MakePrimary: PROC; MakeSecondary: PROC; CancelPrimary: PROC; CancelSecondary: PROC; CancelFeedback: PROC; CallWithSelAndDocAndTddLocks: PROC [viewer: Viewer, id: SelectionId ¬ primary, proc: PROC [tdd: TEditDocumentData, tSel: Selection]]; UnlockDocAndPSel: PROC [root: Tioga.Node]; LockSel: PROC [selection: SelectionId, who: ROPE]; UnlockSel: PROC [selection: SelectionId]; LockBothSelections: PROC [who: ROPE]; -- locks primary, then secondary UnlockBothSelections: PROC; MakeSelection: PROC [new: Selection ¬ NIL, selection: SelectionId ¬ primary, startValid, endValid: BOOL ¬ FALSE, forkPaint: BOOL ¬ TRUE]; CaretVisible: PROC RETURNS [BOOL]; IsDown: PROC [id: SelectionId] RETURNS [BOOL]; ForceDown: PROC [id: SelectionId]; ShowSelection: PROC [id: SelectionId, self: Viewer, context: Imager.Context]; TakeDownForRedisplay: PROC [id: SelectionId, self: Viewer, context: Imager.Context]; FixUpAfterDisplay: PROC [id: SelectionId, self: Viewer, context: Imager.Context, caret: BOOL]; AdjustSelStates: PROC [self: Viewer]; TakeSelectionDown: PROC [id: SelectionId, self: Viewer, context: Imager.Context]; PutSelectionUp: PROC [id: SelectionId, self: Viewer, context: Imager.Context]; FakeSecondary: PROC [sel: Selection]; -- change sSel without showing it Deselect: PROC [selection: SelectionId ¬ primary]; MarkSelection: PROC [dc: Imager.Context, viewer: Viewer, selection: Selection, id: SelectionId]; ExtendSelection: PROC [dc: Imager.Context, viewer: Viewer, old, new: Selection, id: SelectionId, updateEnd: BOOL]; CannotFindIt: ERROR; ComputeSpanLines: PROC [viewer: Viewer, span: Tioga.Span] RETURNS [start, end: INTEGER, startClipped, endClipped: BOOL]; ComputePosLine: PROC [ viewer: Viewer, pos: Tioga.Location, firstLine: INTEGER ¬ 0] RETURNS [line: INTEGER, clipped: BOOL]; ComputePosPoint: PROC [ viewer: Viewer, pos: Tioga.Location, firstLine: INTEGER ¬ 0, lineOnly: BOOL ¬ FALSE] RETURNS [sp: SelectionPoint]; FixupSelection: PROC [selection: Selection, viewer: Viewer, start, end: BOOL ¬ TRUE]; FixupCaret: PROC [selection: Selection]; KillSelection: PROC; -- including resetting inputFocus MakePointSelection: PROC [selection: Selection, pos: Tioga.Location]; InputModify: ViewerClasses.ModifyProc; SelectEverything: PROC; -- expand to include everything GrowSelectionToBlanks: PROC; GrowSelectionToSomething: PROC [left, right: PROC [CHAR] RETURNS [BOOL]]; GrowSelection: PROC; PendingDeleteSelection: PROC; NotPendingDeleteSelection: PROC; CaretBeforeSelection: PROC; CaretAfterSelection: PROC; SelectProc: TYPE = PROC [viewer: Viewer, tdd: TEditDocumentData, x, y: INTEGER, sel: SelectionId, pDel: BOOL]; SelectPoint: SelectProc; SelectChar: SelectProc; SelectWord: SelectProc; SelectNode: SelectProc; SelectBranch: SelectProc; Update: SelectProc; LevelChange: TYPE = {reduce, expand, same}; Extend: PROC [viewer: Viewer, tdd: TEditDocumentData, x, y: INTEGER, sel: SelectionId, pDel: BOOL, changeLevel: LevelChange, saveEnds: BOOL]; SelectionRoot: PROC [s: Selection ¬ pSel] RETURNS [root: Tioga.Node]; InsertionPoint: PROC [s: Selection ¬ pSel] RETURNS [ip: Tioga.Location]; GetSelectionGrain: PROC [sel: Selection] RETURNS [SelectionGrain]; Position: PROC [viewer: Viewer]; FindWhere: TYPE = { forwards, backwards, anywhere }; Find: PROC [ viewer: Viewer, findWhere: FindWhere ¬ anywhere, def, word: BOOL ¬ FALSE, id: SelectionId ¬ primary, case: BOOL ¬ TRUE -- case => case of characters is significant -- ]; FindRope: PROC [viewer: Viewer, rope: ROPE, findWhere: FindWhere ¬ anywhere, def, word: BOOL ¬ FALSE, id: SelectionId ¬ primary, case: BOOL ¬ TRUE -- case => case of characters is significant -- ]; DoFind: PROC [viewer: Viewer, rope: ROPE, findWhere: FindWhere ¬ anywhere, def, word: BOOL ¬ FALSE, id: SelectionId ¬ primary, case: BOOL ¬ TRUE -- case => case of characters is significant -- ] RETURNS [found: BOOL]; SetSelLooks: PROC [sel: Selection]; ShowPosition: PROC[viewer: Viewer, skipCommentNodes: BOOL ¬ TRUE]; END. ’ TEditSelection.mesa Copyright Σ 1985, 1986, 1991, 1992 by Xerox Corporation. All rights reserved. Edited by Paxton on December 29, 1982 10:31 am Doug Wyatt, January 30, 1992 7:17 pm PST Selection Access and Allocating pSel and sSel are the global primary and secondary selections fSel is the global feedback selection oldSel is old secondary selection saved for Repeats nilSel is for deselecting to create a selection record gets it from a small cache returns it to the cache. ok if fail to return. disaster if return twice the approved way to access selection records No one should do pSel^ _ tSel^ or vice versa ... call Copy instead. It's monitored. Selection Display and Control lock the selection so that no other process can change it give up lock on the selection start and end valid are if metrics were precomputed and can be trusted by the selection display code. forkPaint is false for selection display code; true for edit ops and others. Take down the selection without giving up the input focus. can be raised by ComputeSpanLines, ComputePosLine, or ComputePosPoint grows until procs return true. Making and Extending selections Misc functions Κ(–(cedarcode) style•NewlineDelimiter ™codešœ™Kšœ ΟeœC™NKšœ.™.K™(—K˜šΟk ˜ Kšœžœ ˜Kšœžœžœ˜Kšœžœ˜#KšœžœM˜`Kšœžœ˜)—K˜š Οnœžœž œžœžœ˜=K˜Kšžœžœžœ˜Kšœžœ˜$—headšœ™Kšœžœ ˜Kšœžœ ˜Kšœžœ ˜Kšœžœ ˜šœžœ ˜Kšœ=™=Kšœ%™%Kšœ3™3Kšœ™K˜—šŸœžœžœ ˜!Kšœ™—K˜šŸœžœžœ ˜ Kšœ™—K˜šŸœžœ ˜KšœI™I—K˜šŸœžœ˜%Kšœ,™,K™TK˜——šœ™KšŸœžœ˜KšŸ œžœ˜KšŸ œžœ˜KšŸ œžœ˜KšŸœžœ˜šŸœžœ˜K˜—šŸœžœ4žœ,˜†K˜—KšŸœžœ˜*K˜šŸœžœžœ˜2K™9—K˜šŸ œžœ˜)K™K™—KšŸœžœžœΟc ˜FK˜KšŸœžœ˜K˜šŸ œžœžœ#˜LKš œžœžœ žœžœ˜K˜—šŸœžœ˜Kšœ0žœ˜