Entry Widgets

The next example introduces entry widgets:

 
$Spc::res_h{ blsc} = "volts";
$Spc::res_h{ volts_title} = { text => "Voltages"}; 

foreach my $i( qw( 1 2 3 4))
{
    $Spc::res_h{ "volts_io" . $i} = 
    { 
     label => { name => "U$i", 
                width => 12,      # optional
                get => sub { get_volts( "U$i");},
                unit => "V"},
     entry => { set => sub { set_volts( "U$i", $_[0]);}}};
}
#
# the callback functions
#
sub get_volts
{
    my ( $u) = @_; 
    my $ret = Util::P6( Spectra::random()); 
    print " reading $u: $ret \n";
    $ret;
}
sub set_volts
{
    my ( $u, $value) = @_;  
    print " setting $u to $value\n";
}

The widget is displayed in figure 14.3.

Figure 14.3: The Voltages Interface
Image blsc_volts

 $Spc::res_h{ "volts_io" . $i} = { ...};
The letters 'io' select the IO widget. An IO widget is a composite widget, which is optionally made of labels, checkbuttons, selectbuttons and entry widgets.

 label => { name => "U$i", get => sub { get_volts( "U$i");}}
Creates a label widget, which has a name and an associated callback function that returns a value which is displayed by the widget. Notice that in this example 4 rows are created. Each has a different callback function. The functions differ by the values of $i.

 entry => { set => sub { set_volts( "U$i", $_[0]);}}
Creates an entry widget. The contents is passed to the 'set' function, once the 'Exec' button is pressed.