Class
#categories!
accessing!
private!
initialization!
selection!
displaying!
notification!
event processing!
input focus!
glyph access!
restricted-to session! !
localDisplayOn:!
5282222!
displaying!
0Canvas:! !
selectionIsEmpty!
5281622!
selection!
0Boolean! !
boundaryClosestTo:onLine:!
5248688!
accessing!
0Int:Int:Int! !
selectionEnd!
5257379!
accessing!
0Point! !
highlighted!
5251843!
accessing!
0Boolean! !
character:focus:event:!
5282758!
event processing!
0Character:Visual:UIEvent:Boolean! !
selectionStartVisualBounds!
5272839!
private!
1Rect! !
deleteGlyphs!
5285269!
glyph access!
0SeqCltn[SeqCltn[Glyph]]! !
continueSelectingAt:!
5261244!
private!
1Point:! !
nonEmptyMultiLineSelectionRectsFrom:to:do:!
5268260!
private!
1Point:Point:[Rect]:! !
keyDownHandler!
5252569!
accessing!
0[Symbol,Visual,UIEvent,^Boolean]! !
selectionShowBounds!
5271677!
private!
1Rect! !
glyphsFrom:to:!
5286331!
glyph access!
0Point:Point:SeqCltn[SeqCltn[Glyph]]! !
glyphAt:ifAbsent:!
5251319!
accessing!
2Point:[^X def]:Glyph|X! !
setSelection:reanchor:!
5273605!
private!
1Tuple[Point,Point]:Boolean:! !
invalidateSelection!
5266504!
private!
1! !
selectionStartCol!
5258769!
accessing!
0Int! !
keyDown:focus:event:!
5283204!
event processing!
0Symbol:Visual:UIEvent:Boolean! !
elementAt:!
5250288!
accessing!
0Point:VisualGlyph! !
adaptPainterTo:ifCannot:!
5260604!
private!
1Visual:[]:! !
#branded!
true! !
adaptPainter!
5259709!
private!
1! !
makeSelectionVisible!
5267436!
private!
1! !
lineAt:!
5252911!
accessing!
0Int:GlyphRow! !
newCarriageReturn!
5267885!
private!
1CharacterGlyph! !
selectionEndCol!
5257757!
accessing!
0Int! !
charHandler!
5249014!
accessing!
0[Character,Visual,UIEvent,^Boolean]! !
elementBoundsAt:!
5250861!
accessing!
0Point:Rect! !
reanchor!
5269956!
private!
1! !
selectionStartLineBounds!
5272457!
private!
1Rect! !
lineAt:ifAbsent:!
5253090!
accessing!
2Int:[^X def]:GlyphRow|X! !
linearIndexValid:!
5254012!
accessing!
0Int:Boolean! !
selectionEndVisualBounds!
5270820!
private!
1Rect! !
xAnchor:!
5275864!
private!
1Int:! !
xAnchor!
5275741!
private!
1Int! !
setSelection:!
5259068!
accessing!
0Tuple[Point,Point]:! !
displaySelectionOn:!
5261711!
private!
1Canvas:! !
#revision!
$Revision: 1.6 $! !
isFocusCandidate!
5252269!
accessing!
0Boolean! !
replaceFrom:to:withGlyphs:!
5287365!
glyph access!
0Point:Point:SeqCltn[SeqCltn[Glyph]]:SeqCltn[SeqCltn[Glyph]]! !
enterGlyph:!
5285895!
glyph access!
0Glyph:SeqCltn[SeqCltn[Glyph]]! !
selectionWhileSelecting:!
5273043!
private!
1TextSelection:! !
blinkDeferCount:!
5261099!
private!
1Int:! !
#superclassTypeString!
VisualWrapper! !
downArrow!
5276571!
selection!
0! !
selectionStartVisual!
5272672!
private!
1Visual! !
makeVisibleAsFocus!
5267740!
private!
1! !
isFocusCandidate:!
5252416!
accessing!
0Boolean:! !
part:!
5257199!
accessing!
0Visual:! !
selection:!
5278358!
selection!
0Tuple[Point,Point]:! !
painter:!
5257064!
accessing!
0Painter:! !
#comment!
Lines show visuals lain out in rows in a single column.
Selection functionality is handled here, but keyboard events
are delegated elsewhere

(c) 1995-1997 Sun Microsystems, Inc. ALL RIGHTS RESERVED. 
Use and distribution of this software is subject to the terms of the attached source license.   $Revision: 1.6 $! !
initialize!
6003751!
initialization!
0! !
extendSelectionAt:!
5263514!
private!
1Point:! !
isFocusBlock:!
5252122!
accessing!
0[Boolean]:! !
cutGlyphs!
5284972!
glyph access!
0SeqCltn[SeqCltn[Glyph]]! !
column!
5249350!
accessing!
0GlyphColumn! !
blinkDeferCount!
5260960!
private!
1Int! !
finishSelectingAt:!
5264081!
private!
1Point:! !
selectionRectsFrom:to:do:!
5271020!
private!
1Point:Point:[Rect]:! !
#group!
ui! !
leftArrow!
5277014!
selection!
0! !
mouseEvent:at:event:!
5283652!
event processing!
0Symbol:Point:UIEvent:Boolean! !
adaptEndCr!
5259346!
private!
1! !
selecting!
5270172!
private!
1Boolean! !
emptySelectionRectOver:!
5263260!
private!
1Rect:Rect! !
slackBlock!
5275229!
private!
1[^Int]! !
selectionEndLineBounds!
5270446!
private!
1Rect! !
endSpot!
5251144!
accessing!
0Point! !
rightArrow!
5277576!
selection!
0! !
emptySelectionDelete!
5262198!
private!
1SeqCltn[SeqCltn[Glyph]]! !
doubleClickHandler!
5249944!
accessing!
0[Point,UIEvent,^Boolean]! !
layout!
5267179!
private!
1! !
finishSelecting!
5263922!
private!
1! !
#extensionsAreSubtypes!
true! !
setupRow:!
5274638!
private!
1GlyphRow:GlyphRow! !
selectionStart!
5258387!
accessing!
0Point! !
newLine!
6004328!
private!
1GlyphRow! !
selectionStartLine!
5258918!
accessing!
0Int! !
linearElementAt:ifAbsent:!
5253316!
accessing!
2Int:[^X def]:VisualGlyph|X! !
locationOfElementClosestTo:!
5961187!
accessing!
0Point:Point! !
linearSpotAt:ifAbsent:!
7864963!
accessing!
2Int:[^X def]:Point|X! !
blinkFocus:!
5289669!
restricted-to session!
0Boolean:! !
slack!
5274983!
private!
1Int! !
invalidateLinesFrom:to:!
5265682!
private!
1Int:Int:! !
leftMargin!
5267316!
private!
1Int! !
elementAt:ifAbsent:!
5250551!
accessing!
2Point:[^X def]:VisualGlyph|X! !
lostGrab!
5282601!
notification!
0! !
keyDownHandler:!
5252737!
accessing!
0[Symbol,Visual,UIEvent,^Boolean]:! !
gridFor:!
5251583!
accessing!
0Point:Rect! !
selection!
5278149!
selection!
0Tuple[Point,Point]! !
painter!
5256935!
accessing!
0Painter! !
jumpScrolling!
5266852!
private!
1Boolean! !
generalReplaceFrom:to:withLines:!
5264305!
private!
1Point:Point:SeqCltn[SeqCltn[Glyph]]:SeqCltn[SeqCltn[Glyph]]! !
selectionGlyphs!
5289410!
glyph access!
0SeqCltn[SeqCltn[Glyph]]! !
#instanceVariableString!
column <GlyphColumn>
selection <Tuple[Point,Point]>
			"first element is the selection start, second element is the selection end"
highlighted <Boolean>
			"if true, the receiver draws the selection in a highlighted fashion,
				for example, to indicate the input focus."
isFocusCandidate <Boolean>
			"If this is true, then this receiver can be the input focus, and a primary
				mouse button click will aquire it"
xAnchor <Int>
			"Used to keep the cursor from drifting when using the up/down arrow keys"
selecting <Boolean>
			"If true, the user is dragging through the selection, we are grabbing
				events, and the second element of the selection is the anchor"

keyDownHandler <[Symbol,Visual,UIEvent,^Boolean]>
charHandler <[Character,Visual,UIEvent,^Boolean]>
doubleClickHandler <[Point, UIEvent,^Boolean]>
isFocusBlock <[Boolean]>
			"This block will be evaluated whenever the focus state changes for
				the receiver, with the new state"
painter <Painter>
slackBlock <[^Int]>
			"Block that returns the cached slack value, which is how much extra space
				to put at the end of each line when they are growing."
slack <Int>
blinkDeferCount <Int>
			"This is set to 2 when the text is changed, and decremented if > 0 on each blink.  The cursor
				always is shown when > 0.  Used to keep cursor from disappearing during use"
		! !
doubleClickHandler:!
5250113!
accessing!
0[Point,UIEvent,^Boolean]:! !
selectionEndVisual!
5270657!
private!
1Visual! !
startSelectingAt:!
5275425!
private!
1Point:! !
nonEmptySingleLineSelectionRectFrom:to:!
5269562!
private!
1Point:Point:Rect! !
singleSelectionWidth!
5274853!
private!
1Int! !
column:!
6002119!
accessing!
0GlyphColumn:! !
isFocusBlock!
5251981!
accessing!
0[Boolean]! !
detaching!
5282416!
notification!
0! !
upArrow!
5281792!
selection!
0! !
#subtype!
true! !
linearIndexFor:!
5253678!
accessing!
0Point:Int! !
selection:reanchor:!
5278531!
selection!
0Tuple[Point,Point]:Boolean:! !
#abstract!
false! !
boundaryClosestTo:!
5248014!
accessing!
0Point:Point! !
charHandler:!
5249179!
accessing!
0[Character,Visual,UIEvent,^Boolean]:! !
isFocus:!
5284730!
input focus!
0Boolean:! !
selecting:!
5270303!
private!
1Boolean:! !
selectionEndLine!
5257902!
accessing!
0Int! !
replaceSelectionWithGlyphs:!
5288774!
glyph access!
0SeqCltn[SeqCltn[Glyph]]:SeqCltn[SeqCltn[Glyph]]! !
selectionShownEdge!
5258048!
accessing!
0Point! !
emptySelectionRectAt:!
5263059!
private!
1Point:Rect! !
