5.8 Scales

A scale widget allows to select a number from a certain range by moving a slider. Each time the slider is moved, an action attached to the slider is invoked with a single argument giving the current number value of the slider.

In Figure 5.9 an example is shown which allows to display a color determined by three sliders for the intensity of the base colors red, green, and blue. The object F stores the intensity for each base color in an attribute. Whenever the method bg is executed it changes the intensity for one of the base colors and changes the background color to the combination of all three base colors.

L ={New class $ from Tk.listener 
           attr red:0 green:0 blue:0
           meth bg(C I)
              C := I {F tk(configure bg:c(@red @green @blue))}
        end tkInit}
F ={New Tk.frame tkInit(parent:W height:2#c)}
Ss={Map [red green blue]
    fun {$ C}
       {New Tk.scale tkInit(parent:W orient:horizontal length:8#c
                            label:C 'from':0 to:255
                            action: L # bg(C)
                            args:   [int])}
{Tk.send pack(b(Ss) F fill:x)}

Figure 5.9: Scales to configure a frame's background color.

The sliders are configured with the label option to display the name of the base color as their labels. The other options besides of action and args are self explanatory, more information on them can be found in scale.

The value for the args option must be a type specification similar to that used for the specification of argument types in event bindings (see Section 5.5.2. The only difference is that no event argument specification is required. Invoking the action is also similar. For instance, if the scale for the color red changes its value to 10, the message bg(red 10) will eventually be served by the listener L.

Christian Schulte
Version 1.4.0 (20080702)