SteppingSlider.st
author Claus Gittinger <cg@exept.de>
Fri, 09 Feb 1996 02:42:03 +0100
changeset 125 db1c1a8e0384
parent 86 4d7dbb5f1719
child 184 13a2f3677c68
permissions -rw-r--r--
oops - debugPrints

"
 COPYRIGHT (c) 1994 by Claus Gittinger
	      All Rights Reserved

 This software is furnished under a license and may be used
 only in accordance with the terms of that license and with the
 inclusion of the above copyright notice.   This software may not
 be provided or otherwise made available to, or used by, any
 other person.  No title to or ownership of the software is
 hereby transferred.
"

'From Smalltalk/X, Version:2.10.3 on 27-sep-1994 at 12:56:30'!

ScrollBar subclass:#SteppingSlider
	 instanceVariableNames:'stepIncrement'
	 classVariableNames:''
	 poolDictionaries:''
	 category:'Views-Interactors'
!

!SteppingSlider class methodsFor:'documentation'!

copyright
"
 COPYRIGHT (c) 1994 by Claus Gittinger
	      All Rights Reserved

 This software is furnished under a license and may be used
 only in accordance with the terms of that license and with the
 inclusion of the above copyright notice.   This software may not
 be provided or otherwise made available to, or used by, any
 other person.  No title to or ownership of the software is
 hereby transferred.
"
!

version
    ^ '$Header: /cvs/stx/stx/libwidg2/SteppingSlider.st,v 1.6 1995-11-11 16:29:26 cg Exp $'
!

documentation
"
    SteppingSliders are like Sliders, but add step-up and step-down
    buttons (which increment/decrement the value).
    (you can also think of them as a ScrollBar with a slider instead of
     a scroller as component)
"
!

examples 
"
    non model operation:

      |top sl|

      top := StandardSystemView extent:200@200.
      sl := SteppingSlider in:top.
      sl origin:(0.0@0.0) corner:(sl width@1.0).
      sl scrollAction:[:pos | Transcript showCr:pos].    
      top open


    change the step:

      |top sl|

      top := StandardSystemView extent:200@200.
      sl := SteppingSlider in:top.
      sl origin:(0.0@0.0) corner:(sl width@1.0).
      sl scrollAction:[:pos | Transcript showCr:pos].    
      sl stepIncrement:10.
      top open


    model operation (look at value in model):

      |model top sl fld|

      model := 0 asValue.

      top := StandardSystemView extent:200@200.
      top label:'slider on model'.
      sl := SteppingSlider in:top.
      sl origin:(0.0@0.0) corner:(sl width@1.0).
      sl model:model.
      top open.

      top := StandardSystemView extent:200@200.
      top label:'inputField on model'.
      fld := EditField in:top.
      fld origin:(0.0@0.0) corner:(1.0 @ fld height).
      fld model:model; converter:(PrintConverter new initForNumber).
      top open
"
! !

!SteppingSlider methodsFor:'initialization'!

createElements
    button1 := ArrowButton upIn:self.
    button1 name:'UpButton'.
    button2 := ArrowButton downIn:self.
    button2 name:'DownButton'.
    thumb := Slider in:self.
!

initialize
    super initialize.
    stepIncrement := 1.
    self scrollDownAction:[self scrollStepUp].
    self scrollUpAction:[self scrollStepDown].
! !

!SteppingSlider methodsFor:'accessing'!

model:aModel
    thumb model:aModel
!

stepIncrement:aNumber 
    "set the value used for stepping (defaults to 1)"

    stepIncrement := aNumber
!

step:aNumber
    "same as stepIncrement;
     set the value used for stepping (defaults to 1)"

    stepIncrement := aNumber
!

step
    ^ stepIncrement
!

start:start stop:stop step:step
    thumb start:start stop:stop.
    stepIncrement := step
! !

!SteppingSlider methodsFor:'events'!

keyPress:key x:x y:y
    key == #CursorRight ifTrue:[
	self scrollStepUp.
	^ self
    ].
    key == #CursorLeft ifTrue:[
	self scrollStepDown.
	^ self
    ].
    super keyPress:key x:x y:y
! !

!SteppingSlider methodsFor:'private'!

scrollStepUp
    |nO|

    nO := (thumb thumbOrigin + stepIncrement) min:thumb stop.         
    thumb thumbOrigin:nO.
    thumb tellOthers.
!

scrollStepDown
    |nO|

    nO := (thumb thumbOrigin - stepIncrement) max:thumb start.
    thumb thumbOrigin:nO.
    thumb tellOthers.
! !

!SteppingSlider methodsFor:'misc'!

doesNotUnderstand:aMessage
    ^ aMessage sendTo:thumb 
! !