eXept Software AG Logo

Smalltalk/X Webserver

Documentation of class 'Toggle':

Home

Documentation
www.exept.de
Everywhere
for:
[back]

Class: Toggle


Inheritance:

   Object
   |
   +--GraphicsMedium
      |
      +--DisplaySurface
         |
         +--SimpleView
            |
            +--View
               |
               +--Label
                  |
                  +--Button
                     |
                     +--Toggle
                        |
                        +--CheckToggle
                        |
                        +--ComboBoxButton
                        |
                        +--RadioButton

Package:
stx:libwidg
Category:
Views-Interactors
Version:
rev: 1.62 date: 2017/01/24 22:25:06
user: cg
file: Toggle.st directory: libwidg
module: stx stc-classLibrary: libwidg
Author:
Claus Gittinger

Description:


this button changes state whenever clicked upon and stays down (pressed) 
until clicked again. All the main action is in Button and the controller
(ToggleController).

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

whenever the Toggle changes its change, it will evaluate one of
pressAction or releaseAction.

For ST-80 compatibility, if the model is nonNil, this one gets a new
value and is sent a changed message. Also, the toggle will follow changes 
in the model and update its display as appropriate.
If nonNil, the model is supposed to be a ValueHolder holding true or false.


[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

[styleSheet values:]
    toggleShowLamp    <Boolean>     if true, a lamp is shown; default:false.
    toggleLampColor   <Color>       lamps color; default:yellow.


    
    


Related information:

    Button
    RadioButton
    [introduction to view programming]

Class protocol:

defaults
o  updateStyleCache
extract values from the styleSheet and cache them in class variables


Instance protocol:

accessing-look
o  lampColor
returns the color of the toggle-lamp

o  lampColor: aColor
change the color of the toggle-lamp

o  lampHeight

o  lampHeight: something

o  lampWidth

o  lampWidth: something

o  showLamp
return true, if I show a lamp

o  showLamp: aBoolean
enable/disable drawing of the lamp

accessing-mvc
o  model: aModel

change & update
o  update: something with: parameter from: changedObject

initialization
o  defaultControllerClass

o  fetchDeviceResources
fetch device colors, to avoid reallocation at redraw time

o  initStyle
setup viewStyle specifics

private
o  computeLabelOrigin
compute the origin of the form/text.
redefined to move label to the right if there is a lamp.

o  getValueFromModel
fetch my boolean value from the model (if there is a model around)
by sending it the aspectMessage, and update my look as required

o  lampImageHeight

o  lampImageWidth

o  rawLabelSizeOf: aLogo
compute the extent needed to hold the label plus the lamp

redrawing
o  drawToggleImage
drawing of the lamp is done here.

o  drawWith: fg and: bg
redraw myself with fg/bg. Use super to draw the label,
drawing of the lamp is done here.


Examples:


Examples: Try all, to see what is possible. (notice, that these examples are meant to show what can be done; usually, all style-related stuff is preinitialized - you should not normally play around with onLevel, offLevel, showLamp: etc) simple:
    |v t|

    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 open
changing logo:
    |v t|

    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 open
changing logo:
    |v t|

    v := StandardSystemView new extent:200@200.
    t := Toggle in:v.
    t logo:(Form width:16 height:14 fromArray:#(
                                                    2r00000000 2r00000000
                                                    2r00000000 2r00000000
                                                    2r00000000 2r00000000
                                                    2r00000111 2r11100000
                                                    2r00001100 2r00000000
                                                    2r00011000 2r00000000
                                                    2r00011000 2r00000000
                                                    2r00011000 2r00000000
                                                    2r00011000 2r00000000
                                                    2r00001100 2r00000000
                                                    2r00000111 2r11100000
                                                    2r00000000 2r00000000
                                                    2r00000000 2r00000000
                                                    2r00000000 2r00000000)).
    t origin:10 @ 10.
    v open
uhh - changing logos and getting bg-colors from the image:
    |v t i|

    v := StandardSystemView new extent:200@200.
    t := Toggle in:v.
    t origin:10 @ 10.
    t showLamp:false.
    t activeLogo:(i := Image fromFile:'red-ball.gif').
    t passiveLogo:(Image fromFile:'green-ball.gif').
    t backgroundColor:(i at:0@0).
    t enteredBackgroundColor:(t backgroundColor).
    t activeBackgroundColor:(t backgroundColor).
    v open
changing logo and freezing size (looks better):
    |v t|

    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.
    t label:'eat me'.

    t origin:10 @ 10.
    t pressAction:[Transcript showCR:'smaller'. t label:'drink me'].
    t releaseAction:[Transcript showCR:'larger'. t label:'eat me'].
    v open
adding a lamp (in some view styles, this is the default anyway):
    |v t|

    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 open
changing lamps color:
    |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 open
lamp and freezing size of the label (looks better):
    |v t|

    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 open
another variation:
    |v t|

    v := StandardSystemView new extent:200@200.
    t := Toggle label:'off' in:v.
    t showLamp:true.
    t sizeFixed: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 open
and another one:
    |v t|

    v := StandardSystemView new extent:200@200.
    t := Toggle label:'off' in:v.
    t showLamp:true.
    t sizeFixed:true.

    t showLamp:false.
    t offLevel:3.
    t onLevel:3.
    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 open
another font:
    |v t|

    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 open
another font (no, I don't know what it means :-):
    |v t|

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

    t origin:10 @ 10.
    t pressAction:[Transcript showCR:'on'.].
    t releaseAction:[Transcript showCR:'off'.].
    v open
using a model (look at 'value' in the 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
two toggles on the same model:
    |m v t|

    m := true asValue.

    v := StandardSystemView new extent:200@200.
    t := Toggle label:'press here' in:v.
    t origin:10 @ 10.
    t model:m.

    t := Toggle label:'or here' in:v.
    t origin:10 @ 50.
    t model:m.
    v open


ST/X 7.1.0.0; WebServer 1.663 at exept.de:8081; Wed, 24 Jul 2019 01:11:28 GMT