'From Squeak3.0 of 4 February 2001 [latest update: #3552] on 3 March 2001 at 1:06:49 am'! ComponentLikeModel subclass: #ScrollPane instanceVariableNames: 'scrollBar scroller retractableScrollBar scrollBarOnLeft getMenuSelector getMenuTitleSelector scrollBarHidden hasFocus totalScrollRange ' classVariableNames: '' poolDictionaries: '' category: 'Morphic-Windows'! !ScrollPane methodsFor: 'initialization' stamp: 'dew 3/3/2001 00:26'! setScrollDeltas "Set the ScrollBar deltas, value and interval, based on the current scroll pane size, offset and range. This method should be called whenever the size (height) of the contents has changed." | range delta | self resetTotalScrollRange. self hideOrShowScrollBar. scroller hasSubmorphs ifFalse: [scrollBar interval: 1.0. ^ self]. range _ self leftoverScrollRange. delta _ self scrollDeltaHeight. range = 0 ifTrue: [^ scrollBar scrollDelta: 0.02 pageDelta: 0.2; interval: 1.0]. "Set up for one line (for arrow scrolling), or a full pane less one line (for paging)." scrollBar scrollDelta: (delta / range) asFloat pageDelta: ((self innerBounds height - delta) / range) asFloat. scrollBar interval: ((self innerBounds height - delta) / self totalScrollRange) asFloat. scrollBar value: (scroller offset y / range) asFloat.! ! !ScrollPane methodsFor: 'geometry' stamp: 'dew 3/3/2001 00:23'! resetTotalScrollRange totalScrollRange _ nil! ! !ScrollPane methodsFor: 'geometry' stamp: 'dew 3/3/2001 00:49'! totalScrollRange "Return the entire scrolling range. (Cache this, because it can be somewhat expensive to calculate.)" totalScrollRange ifNil: [ | submorphBounds | submorphBounds _ scroller submorphBounds. submorphBounds ifNil: [^ nil]. totalScrollRange _ (submorphBounds encompass: 0@0) height]. ^ totalScrollRange! ! !ScrollPane methodsFor: 'geometry' stamp: 'dew 3/3/2001 00:49'! unadjustedScrollRange "Return the difference between the height extent of the receiver's submorphs and its own height extent (plus an extra 1/2 line height)." | totalRange | totalRange _ self totalScrollRange. totalRange ifNil: [^ 0]. ^ totalRange - bounds height + (self scrollDeltaHeight / 2) max: 0! ! !PluggableTextMorph methodsFor: 'geometry' stamp: 'dew 3/3/2001 00:55'! totalScrollRange | totalRange | totalRange _ super totalScrollRange. totalRange ifNil: [^ nil]. "a minor hack to see if the last character of text is a cr, so that it can be ignored" (self text isEmpty not and: [self text last == Character cr]) ifTrue: [^ totalRange - self scrollDeltaHeight]. ^ totalRange ! !