Toggle.st
changeset 119 59758ff5b841
parent 105 3d064ba4a0cc
child 121 4e63bbdb266a
--- a/Toggle.st	Wed May 03 02:30:14 1995 +0200
+++ b/Toggle.st	Wed May 03 02:39:07 1995 +0200
@@ -14,7 +14,7 @@
 
 Button subclass:#Toggle
 	 instanceVariableNames:'showLamp lampColor lampWidth lampHeight'
-	 classVariableNames:''
+	 classVariableNames:'DefaultShowLamp DefaultLampColor'
 	 poolDictionaries:''
 	 category:'Views-Interactors'
 !
@@ -23,7 +23,7 @@
 COPYRIGHT (c) 1989 by Claus Gittinger
 	      All Rights Reserved
 
-$Header: /cvs/stx/stx/libwidg/Toggle.st,v 1.14 1995-03-18 05:16:19 claus Exp $
+$Header: /cvs/stx/stx/libwidg/Toggle.st,v 1.15 1995-05-03 00:38:26 claus Exp $
 '!
 
 !Toggle class methodsFor:'documentation'!
@@ -44,7 +44,7 @@
 
 version
 "
-$Header: /cvs/stx/stx/libwidg/Toggle.st,v 1.14 1995-03-18 05:16:19 claus Exp $
+$Header: /cvs/stx/stx/libwidg/Toggle.st,v 1.15 1995-05-03 00:38:26 claus Exp $
 "
 !
 
@@ -66,10 +66,14 @@
 
 
     instance variables:
-	showLamp    <Boolean>       true if a lamp should be displayed
-	lampColor   <Color>         color of the lamp
-	lampWidth   <Integer>       width of the lamp in pixel
-	lampHeight  <Integer>       height of the lamp in pixel
+	showLamp          <Boolean>     true if a lamp should be displayed
+	lampColor         <Color>       color of the lamp
+	lampWidth         <Integer>     width of the lamp in pixel
+	lampHeight        <Integer>     height of the lamp in pixel
+
+    styleSheet values:
+	toggleShowLamp    <Boolean>     if true, a lamp is shown; default:false.
+	toggleLampColor   <Color>       lamps color; default:yellow.
 "
 !
 
@@ -79,36 +83,46 @@
 	Try these, to see what is possible.
 
 	(notice, that these examples are meant to show what can be done;
-	 usually, all style-related stuff id preinitialized - you should not
+	 usually, all style-related stuff is preinitialized - you should not
 	 normally play around with onLevel, offLevel, showLamp: etc)
 
       simple:
 
 	|v t|
 
-	v := View new.
+	v := StandardSystemView new extent:200@200.
+	t := Toggle label:'press here' in:v.
+	t origin:10 @ 10.
+	t action:[:value | Transcript show:'toggle state: '; showCr:value.].
+	v open
+
+      separate press/release actions:
+
+	|v t|
+
+	v := StandardSystemView new extent:200@200.
 	t := Toggle label:'press here' in:v.
 	t origin:10 @ 10.
 	t pressAction:[Transcript showCr:'toggle pressed'.].
 	t releaseAction:[Transcript showCr:'toggle released'.].
-	v realize
+	v open
 
       changing logo:
 
 	|v t|
 
-	v := View new.
+	v := StandardSystemView new extent:200@200.
 	t := Toggle label:'eat me' in:v.
 	t origin:10 @ 10.
 	t pressAction:[Transcript showCr:'smaller'. t label:'drink me'].
 	t releaseAction:[Transcript showCr:'larger'. t label:'eat me'].
-	v realize
+	v open
 
       changing logo and freezing size (looks better):
 
 	|v t|
 
-	v := View new.
+	v := StandardSystemView new extent:200@200.
 	'create with large logo; freeze; change to small logo'.
 	t := Toggle label:'drink me' in:v. 
 	t sizeFixed:true.
@@ -117,51 +131,77 @@
 	t origin:10 @ 10.
 	t pressAction:[Transcript showCr:'smaller'. t label:'drink me'].
 	t releaseAction:[Transcript showCr:'larger'. t label:'eat me'].
-	v realize
+	v open
 
-      adding lamp (on by default in some view styles):
+      adding a lamp (in some view styles, this is the default anyway):
 
 	|v t|
 
-	v := View new.
+	v := StandardSystemView new extent:200@200.
 	t := Toggle label:'off' in:v.
 	t showLamp:true.
 	t origin:10 @ 10.
 	t pressAction:[Transcript showCr:'on'. t label:'on'].
 	t releaseAction:[Transcript showCr:'off'. t label:'off'].
-	v realize
+	v open
 
-      lamp only - no 'going-in'
+      changing lamps color:
 
 	|v t|
 
-	v := View new.
+	v := StandardSystemView new extent:200@200.
+	t := Toggle label:'off' in:v.
+	t showLamp:true.
+	t lampColor:Color red.
+	t origin:10 @ 10.
+	t pressAction:[Transcript showCr:'on'. t label:'on'.].
+	t releaseAction:[Transcript showCr:'off'. t label:'off'.].
+	v open
+
+      changing lamps color & size:
+
+	|v t|
+
+	v := StandardSystemView new extent:200@200.
+	t := Toggle label:'off' in:v.
+	t showLamp:true.
+	t lampColor:Color red.
+	t origin:10 @ 10.
+	t pressAction:[Transcript showCr:'on'. t label:'on'.].
+	t releaseAction:[Transcript showCr:'off'. t label:'off'.].
+	v open
+
+      lamp only - no '3D going-in' (this is the default with IRIS style)
+
+	|v t|
+
+	v := StandardSystemView new extent:200@200.
 	t := Toggle label:'off' in:v.
 	t showLamp:true.
 	t onLevel:(t offLevel).
 	t origin:10 @ 10.
 	t pressAction:[Transcript showCr:'on'. t label:'on'].
 	t releaseAction:[Transcript showCr:'off'. t label:'off'].
-	v realize
+	v open
 
       lamp and freezing size of the label (looks better):
 
 	|v t|
 
-	v := View new.
+	v := StandardSystemView new extent:200@200.
 	t := Toggle label:'off' in:v.
 	t showLamp:true.
 	t sizeFixed:true.
 	t origin:10 @ 10.
 	t pressAction:[Transcript showCr:'on'. t label:'on'].
 	t releaseAction:[Transcript showCr:'off'. t label:'off'].
-	v realize
+	v open
 
       another variation:
 
 	|v t|
 
-	v := View new.
+	v := StandardSystemView new extent:200@200.
 	t := Toggle label:'off' in:v.
 	t showLamp:true.
 	t sizeFixed:true.
@@ -169,13 +209,13 @@
 	t origin:10 @ 10.
 	t pressAction:[Transcript showCr:'on'. t label:'on'].
 	t releaseAction:[Transcript showCr:'off'. t label:'off'].
-	v realize
+	v open
 
       and another one:
 
 	|v t|
 
-	v := View new.
+	v := StandardSystemView new extent:200@200.
 	t := Toggle label:'off' in:v.
 	t showLamp:true.
 	t sizeFixed:true.
@@ -186,26 +226,26 @@
 	t origin:10 @ 10.
 	t pressAction:[Transcript showCr:'on'. t showLamp:true. t label:'on'].
 	t releaseAction:[Transcript showCr:'off'. t showLamp:false. t label:'off'].
-	v realize
+	v open
 
       another font:
 
 	|v t|
 
-	v := View new.
+	v := StandardSystemView new extent:200@200.
 	t := Toggle label:'off' in:v.
 	t font:(Font family:'times' face:'bold' style:'roman' size:24).
 	t label:'hello'.
 	t origin:10 @ 10.
 	t pressAction:[Transcript showCr:'on'.].
 	t releaseAction:[Transcript showCr:'off'.].
-	v realize
+	v open
 
       another font (no, I dont know what it means :-):
 
 	|v t|
 
-	v := View new.
+	v := StandardSystemView new extent:200@200.
 	t := Toggle label:'off' in:v.
 	t font:(Font family:'k14' face:nil style:nil size:nil).
 	t label:(TwoByteString with:(Character value:16r3021)).
@@ -213,10 +253,47 @@
 	t origin:10 @ 10.
 	t pressAction:[Transcript showCr:'on'.].
 	t releaseAction:[Transcript showCr:'off'.].
-	v realize
+	v open
+
+    using a model (look at value of model in inspector):
+
+	|m v t|
+
+	m := ValueHolder newBoolean.
+	m inspect.
+
+	v := StandardSystemView new extent:200@200.
+	t := Toggle label:'press here to change value' in:v.
+	t origin:10 @ 10.
+	t model:m.
+	v open
+
+    using a model with different changeSelector:
+
+	|m v t|
+
+	m := Plug new.
+	m respondTo:#setValue1: with:[:value | Transcript show:'value 1 changed to: '; showCr:value].
+	m respondTo:#setValue2: with:[:value | Transcript show:'value 2 changed to: '; showCr:value].
+
+	v := StandardSystemView new extent:200@200.
+	t := Toggle label:'press here for value1' in:v.
+	t origin:10 @ 10.
+	t model:m; change:#setValue1:.
+	t := Toggle label:'press here for value2' in:v.
+	t origin:10 @ 50.
+	t model:m; change:#setValue2:.
+	v open
 "
 ! !
 
+!Toggle class methodsFor:'defaults'!
+
+updateStyleCache
+    DefaultShowLamp := StyleSheet at:'toggleShowLamp' default:false.
+    DefaultLampColor := StyleSheet colorAt:'toggleLampColor' default:Color yellow.
+! !
+
 !Toggle methodsFor:'initialization'!
 
 defaultControllerClass
@@ -226,7 +303,7 @@
 initStyle
     super initStyle.
 
-    showLamp := StyleSheet at:#toggleShowLamp default:false.
+    showLamp := DefaultShowLamp.
     showLamp ifTrue:[
 	onLevel := offLevel.
 
@@ -236,9 +313,17 @@
 	"
     ].
 
-    lampColor := StyleSheet at:#toggleLampColor default:Color yellow.
+    lampColor := DefaultLampColor on:device.
     lampWidth := (device horizontalPixelPerMillimeter * 1.8) rounded.
     lampHeight := (device verticalPixelPerMillimeter * 3.5) rounded.
+!
+
+realize
+    "/
+    "/ get my initial state from the model (if there is one)
+    "/
+    self getValueFromModel.
+    super realize
 ! !
 
 !Toggle methodsFor:'accessing'!
@@ -272,6 +357,12 @@
 
 !Toggle methodsFor:'private'!
 
+getValueFromModel
+    (model notNil and:[aspectMsg notNil]) ifTrue:[
+	controller pressed:(model perform:aspectMsg)
+    ].
+!
+
 computeLabelOrigin
     "compute the origin of the form/text.
      redefined to move label to the right if there is a lamp."
@@ -315,44 +406,3 @@
 	self fillRectangleX:x+2 y:y+2 width:lampWidth - 4 height:lampHeight - 4
     ]
 ! !
-
-!Toggle methodsFor:'changing state'!
-
-toggleNoAction
-    "toggle, but do NOT perform any action - can be used to change a toggle
-     under program control (i.e. turn one toggle off from another one)"
-
-    |newLevel pressed|
-
-    pressed := controller pressed not.
-    controller pressed:pressed.
-    pressed ifTrue:[
-	newLevel := onLevel.
-    ] ifFalse:[
-	newLevel := offLevel.
-    ].
-    self level:newLevel.
-
-    shown ifTrue:[
-	self redraw
-    ].
-!
-
-toggle
-    "toggle and perform the action"
-
-    |action pressed sym|
-
-    controller enabled ifTrue:[
-        self toggleNoAction.
-        (pressed := controller pressed) ifTrue:[
-            action := controller pressAction
-        ] ifFalse:[
-            action := controller releaseAction
-        ].
-        action notNil ifTrue:[action value].
-        self sendChangeMessageWith:pressed.
-        self changed:#toggle with:pressed
-    ]
-! !
-