The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
# IUP::Val example
#
# Creates two Valuator controls, exemplifying the two possible types.
# When manipulating the Valuator, the label's value changes.

use strict;
use warnings;

use IUP ':all';

# xxxTODO.ASKIUP xxx iuplabel does not accept attribute TYPE
my $lbl_v = IUP::Label->new( TITLE=>"VALUE=n.a.", SIZE=>70, TYPE=>"1" );
my $lbl_h = IUP::Label->new( TITLE=>"VALUE=n.a.", SIZE=>70, TYPE=>"2" );

sub fbuttonpress {
  my ($self) = @_;
  if ($self->TYPE == "VERTICAL") {
    $lbl_v->FGCOLOR("255 0 0");
  }
  else {
    $lbl_h->FGCOLOR("255 0 0");
  }
  return IUP_DEFAULT;
}

sub fbuttonrelease {
  my ($self) = @_;
  if ($self->TYPE == "VERTICAL") {
    $lbl_v->FGCOLOR = "0 0 0";
  }
  else {
    $lbl_h->FGCOLOR = "0 0 0";
  }
  return IUP_DEFAULT;
}

sub cb_change {
  my $self = shift;  
  my $val = $self->VALUE || 0;
  my $buffer = sprintf("VALUE=%.2f", $val);
  if ($self->TYPE eq "VERTICAL") {
    $lbl_v->TITLE($buffer);
  }
  else {
    $lbl_h->TITLE($buffer);
  }
  return IUP_DEFAULT;
}

my $val_v = IUP::Val->new( TYPE=>"VERTICAL", MIN=>0.0, MAX=>1.0, VALUE=>0.3,
                           VALUECHANGED_CB=>\&cb_change );

my $val_h = IUP::Val->new( TYPE=>"HORIZONTAL", MIN=>0.0, MAX=>1.0, VALUE=>0,
                           VALUECHANGED_CB=>\&cb_change );

my $dlg_val = IUP::Dialog->new( TITLE=>"Valuator Test", child=>
                IUP::Hbox->new( child=>[
                  IUP::Frame->new( child=>IUP::Vbox->new( child=>[$val_v, $lbl_v] ) ),
                  IUP::Frame->new( child=>IUP::Vbox->new( child=>[$val_h, $lbl_h] ) ),
                ] )
              );

$dlg_val->Show();

IUP->MainLoop;