HorizontalSteppingSlider.st
author Claus Gittinger <cg@exept.de>
Thu, 12 Dec 1996 14:35:26 +0100
changeset 267 f534e60f85e3
parent 184 13a2f3677c68
child 400 d176fd820716
permissions -rw-r--r--
dont send change message, if nothing changed; added comments

"
 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.
"

HorizontalScrollBar subclass:#HorizontalSteppingSlider
	instanceVariableNames:'stepIncrement'
	classVariableNames:''
	poolDictionaries:''
	category:'Views-Interactors'
!

!HorizontalSteppingSlider 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.
"
!

documentation
"
    HorizontalSteppingSliders are like HorizontalSliders, but add step-up and step-down
    buttons (which increment/decrement the value).
"
!

examples 
"
    |top sl|

    top := StandardSystemView extent:200@200.
    sl := HorizontalSteppingSlider in:top.
    sl origin:(0.0@0.0) corner:(1.0@sl height).
    sl scrollAction:[:pos | Transcript showCR:pos].    
    top open
"
! !

!HorizontalSteppingSlider methodsFor:'accessing'!

model:aModel
    "set the model; this will get the thumbs origin
     via #value: messages"

    thumb model:aModel
!

start:start stop:stop step:step
    "set the range and stepIncrement"

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

step
    "retrieve the stepIncrement"

    ^ stepIncrement
!

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

    stepIncrement := aNumber
!

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

    stepIncrement := aNumber
! !

!HorizontalSteppingSlider methodsFor:'events'!

keyPress:key x:x y:y
    (key == #CursorRight or:[key == #CursorUp]) ifTrue:[
	self scrollStepUp.
	^ self
    ].
    (key == #CursorLeft or:[key == #CursorDown]) ifTrue:[
	self scrollStepDown.
	^ self
    ].
    super keyPress:key x:x y:y
! !

!HorizontalSteppingSlider methodsFor:'initialization'!

createElements
    button1 := ArrowButton leftIn:self.
    button1 name:'LeftButton'.
    button2 := ArrowButton rightIn:self.
    button2 name:'RightButton'.
    thumb := HorizontalSlider in:self.
!

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

!HorizontalSteppingSlider methodsFor:'misc'!

doesNotUnderstand:aMessage
    "delegate any unknown messages to my thumb"

    ^ aMessage sendTo:thumb 
! !

!HorizontalSteppingSlider methodsFor:'private'!

scrollStep:delta
    "step by some delta"

    |oldOrg newOrg|

    oldOrg := thumb thumbOrigin.
    newOrg := ((oldOrg + delta) max:thumb start) min:thumb stop.
    oldOrg ~= newOrg ifTrue:[
        thumb thumbOrigin:newOrg.
        thumb tellOthers.
    ]
!

scrollStepDown
    "stepDown"

    self scrollStep:stepIncrement negated
!

scrollStepUp
    "step up"

    self scrollStep:stepIncrement

! !

!HorizontalSteppingSlider class methodsFor:'documentation'!

version
    ^ '$Header: /cvs/stx/stx/libwidg2/HorizontalSteppingSlider.st,v 1.9 1996-12-12 13:35:26 cg Exp $'
! !