diff -r 9ef599238fea -r ac872628ef2d Toggle.st --- a/Toggle.st Sat Jan 08 18:27:56 1994 +0100 +++ b/Toggle.st Sat Jan 08 18:30:02 1994 +0100 @@ -11,7 +11,7 @@ " Button subclass:#Toggle - instanceVariableNames:'' + instanceVariableNames:'showLamp lampColor lampWidth lampHeight' classVariableNames:'' poolDictionaries:'' category:'Views-Interactors' @@ -22,13 +22,81 @@ COPYRIGHT (c) 1989 by Claus Gittinger All Rights Reserved +$Header: /cvs/stx/stx/libwidg/Toggle.st,v 1.5 1994-01-08 17:30:02 claus Exp $ +written spring/summer 89 by claus +'! + +!Toggle class methodsFor:'documentation'! + +documentation +" this button changes state whenever pressed and stays pressed until pressed again. All the main action is in Button, Toggle just redefines buttonpress/ release behavior. +The toggle may optionally display a little kind-of-lamp (or LED), which +is turned on when the toggle is pressed. (i.e. as in the Interviews toolkit). -$Header: /cvs/stx/stx/libwidg/Toggle.st,v 1.4 1993-12-11 01:50:32 claus Exp $ -written spring/summer 89 by claus -'! +instance variables: + showLamp true if a lamp should be displayed + lampColor color of the lamp + lampWidth width of the lamp in pixel + lampHeight height of the lamp in pixel +" +! ! + +!Toggle methodsFor:'initialization'! + +initStyle + super initStyle. + + showLamp := resources name:'SHOW_LAMP' default:false. + showLamp ifTrue:[ + onLevel := offLevel. + lampColor := resources name:'LAMP_COLOR' + default:(Color red:100 green:100 blue:0). "yellow" + lampWidth := (device horizontalPixelPerMillimeter * 1.8) rounded. + lampHeight := (device verticalPixelPerMillimeter * 3.5) rounded. + + "dont know, if I like this ..." + " + activeBgColor := bgColor + " + ]. +! ! + +!Toggle methodsFor:'accessing'! + +lampColor:aColor + "change the color of the toggle-lamp" + + lampColor := aColor. + (shown and:[showLamp and:[pressed]]) ifTrue:[ + self redraw + ] +! ! + + +!Toggle methodsFor:'private'! + +computeLabelOrigin + "compute the origin of the form/text. + redefined to move label to the right if there is a lamp." + + super computeLabelOrigin. + showLamp ifTrue:[ + labelOriginX := labelOriginX + hSpace + lampWidth + hSpace. + ] +! + +computeLabelSize + "compute the extent needed to hold the label plus the lamp" + + super computeLabelSize. + showLamp ifTrue:[ + labelWidth := labelWidth + hSpace + lampWidth + hSpace. + labelHeight := labelHeight max: lampHeight + ] +! ! !Toggle methodsFor:'changing state'! @@ -42,7 +110,9 @@ ] ifFalse:[ self level:offLevel. ]. - self redraw + shown ifTrue:[ + self redraw + ] ! toggle @@ -76,3 +146,26 @@ ]. "ignore" ! ! + +!Toggle methodsFor:'redrawing'! + +drawWith:fg and:bg + "redraw myself with fg/bg. Use super to draw the label, + drawing of the lamp here." + + |x y| + + super drawWith:fg and:bg. "this draws the text" + + showLamp ifTrue:[ + x := hSpace + margin. + y := (height - lampHeight) // 2. + self drawEdgesForX:x y:y width:lampWidth height:lampHeight level:-1. + pressed ifTrue:[ + self paint:lampColor. + ] ifFalse:[ + self paint:bgColor. + ]. + self fillRectangleX:x+2 y:y+2 width:lampWidth - 4 height:lampHeight - 4 + ] +! !