# IUP::ProgressBar example use strict; use warnings; use IUP ':all'; my $increment = 0.01; my $pixmap_play = [ [2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2], [2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2], [2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2], [2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2], [2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2], [2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2], [2,2,2,2,2,2,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2], [2,2,2,2,2,2,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2], [2,2,2,2,2,2,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2], [2,2,2,2,2,2,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2], [2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2], [2,2,2,2,2,2,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2], [2,2,2,2,2,2,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2], [2,2,2,2,2,2,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2], [2,2,2,2,2,2,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2], [2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2], [2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2], [2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2], [2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2], [2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2], [2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2], [2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2], ]; my $pixmap_restart = [ [2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2], [2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2], [2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2], [2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2], [2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2], [2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2], [2,2,2,2,1,1,2,2,2,2,2,2,2,2,1,1,2,2,2,2,2,2], [2,2,2,2,1,1,2,2,2,2,2,2,1,1,1,1,2,2,2,2,2,2], [2,2,2,2,1,1,2,2,2,2,1,1,1,1,1,1,2,2,2,2,2,2], [2,2,2,2,1,1,2,2,1,1,1,1,1,1,1,1,2,2,2,2,2,2], [2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2], [2,2,2,2,1,1,2,2,1,1,1,1,1,1,1,1,2,2,2,2,2,2], [2,2,2,2,1,1,2,2,2,2,1,1,1,1,1,1,2,2,2,2,2,2], [2,2,2,2,1,1,2,2,2,2,2,2,1,1,1,1,2,2,2,2,2,2], [2,2,2,2,1,1,2,2,2,2,2,2,2,2,1,1,2,2,2,2,2,2], [2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2], [2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2], [2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2], [2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2], [2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2], [2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2], [2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2], ]; my $pixmap_rewind = [ [2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2], [2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2], [2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2], [2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2], [2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2], [2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2], [2,2,2,2,2,2,2,2,2,1,2,2,2,2,1,2,2,2,2,2,2,2], [2,2,2,2,2,2,2,2,1,1,2,2,2,1,1,2,2,2,2,2,2,2], [2,2,2,2,2,2,2,1,1,1,2,2,1,1,1,2,2,2,2,2,2,2], [2,2,2,2,2,2,1,1,1,1,2,1,1,1,1,2,2,2,2,2,2,2], [2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2], [2,2,2,2,2,2,1,1,1,1,2,1,1,1,1,2,2,2,2,2,2,2], [2,2,2,2,2,2,2,1,1,1,2,2,1,1,1,2,2,2,2,2,2,2], [2,2,2,2,2,2,2,2,1,1,2,2,2,1,1,2,2,2,2,2,2,2], [2,2,2,2,2,2,2,2,2,1,2,2,2,2,1,2,2,2,2,2,2,2], [2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2], [2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2], [2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2], [2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2], [2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2], [2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2], [2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2], ]; my $pixmap_forward = [ [2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2], [2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2], [2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2], [2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2], [2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2], [2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2], [2,2,2,2,2,2,2,1,2,2,2,2,1,2,2,2,2,2,2,2,2,2], [2,2,2,2,2,2,2,1,1,2,2,2,1,1,2,2,2,2,2,2,2,2], [2,2,2,2,2,2,2,1,1,1,2,2,1,1,1,2,2,2,2,2,2,2], [2,2,2,2,2,2,2,1,1,1,1,2,1,1,1,1,2,2,2,2,2,2], [2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2], [2,2,2,2,2,2,2,1,1,1,1,2,1,1,1,1,2,2,2,2,2,2], [2,2,2,2,2,2,2,1,1,1,2,2,1,1,1,2,2,2,2,2,2,2], [2,2,2,2,2,2,2,1,1,2,2,2,1,1,2,2,2,2,2,2,2,2], [2,2,2,2,2,2,2,1,2,2,2,2,1,2,2,2,2,2,2,2,2,2], [2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2], [2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2], [2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2], [2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2], [2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2], [2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2], [2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2], ]; my $pixmap_pause = [ [2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2], [2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2], [2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2], [2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2], [2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2], [2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2], [2,2,2,2,2,2,2,1,1,2,2,1,1,2,2,2,2,2,2,2,2,2], [2,2,2,2,2,2,2,1,1,2,2,1,1,2,2,2,2,2,2,2,2,2], [2,2,2,2,2,2,2,1,1,2,2,1,1,2,2,2,2,2,2,2,2,2], [2,2,2,2,2,2,2,1,1,2,2,1,1,2,2,2,2,2,2,2,2,2], [2,2,2,2,2,2,2,1,1,2,2,1,1,2,2,2,2,2,2,2,2,2], [2,2,2,2,2,2,2,1,1,2,2,1,1,2,2,2,2,2,2,2,2,2], [2,2,2,2,2,2,2,1,1,2,2,1,1,2,2,2,2,2,2,2,2,2], [2,2,2,2,2,2,2,1,1,2,2,1,1,2,2,2,2,2,2,2,2,2], [2,2,2,2,2,2,2,1,1,2,2,1,1,2,2,2,2,2,2,2,2,2], [2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2], [2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2], [2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2], [2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2], [2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2], [2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2], [2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2], ]; # some elements needs to be declared before callback that make use of them my $img_restart = IUP::Image->new( pixels=>$pixmap_restart, 1=>"0 0 0", 2=>"BGCOLOR" ); my $img_play = IUP::Image->new( pixels=>$pixmap_play, 1=>"0 0 0", 2=>"BGCOLOR" ); my $img_forward = IUP::Image->new( pixels=>$pixmap_forward, 1=>"0 0 0", 2=>"BGCOLOR" ); my $img_rewind = IUP::Image->new( pixels=>$pixmap_rewind, 1=>"0 0 0", 2=>"BGCOLOR" ); my $img_pause = IUP::Image->new( pixels=>$pixmap_pause, 1=>"0 0 0", 2=>"BGCOLOR" ); my $timer = IUP::Timer->new( ACTION_CB=>\&time_cb, TIME=>100 ); my $progressbar1 = IUP::ProgressBar->new( EXPAND=>"YES", DASHED=>"NO", MARQUEE=>"YES" ); #xxxFIXME MARQUEE not working my $progressbar2 = IUP::ProgressBar->new( ORIENTATION=>"VERTICAL", BGCOLOR=>"255 0 128", FGCOLOR=>"0 128 0", RASTERSIZE=>"30x100", MAX=>50, VALUE=>25 ); my $btn_restart = IUP::Button->new( IMAGE=>$img_restart, ACTION=>\&btn_restart_cb ); my $btn_pause = IUP::Button->new( IMAGE=>$img_pause, TIP=>"Play/Pause", TIP=>"Restart", ACTION=>\&btn_pause_cb ); my $btn_accelerate = IUP::Button->new( IMAGE=>$img_forward, TIP=>"Accelerate", ACTION=>\&btn_accelerate_cb ); my $btn_decelerate = IUP::Button->new( IMAGE=>$img_rewind, TIP=>"Decelerate", ACTION=>\&btn_decelerate_cb ); my $btn_show1 = IUP::Button->new( TITLE=>"Dashed", TIP=>"Dashed or Continuous", ACTION=>\&btn_show1_cb ); my $btn_show2 = IUP::Button->new( TITLE=>"Marquee", TIP=>"Marquee or Defined", ACTION=>\&btn_show2_cb ); sub time_cb { my $value; $value = $progressbar1->VALUE; $value += $increment; $value = 0 if $value > 1; # start over $progressbar1->VALUE($value); $value = $progressbar2->VALUE; $value += $increment*50; $value = 0 if $value > 50; # start over $progressbar2->VALUE($value); return IUP_DEFAULT; } sub btn_pause_cb { if (uc($timer->RUN) ne "YES") { $timer->RUN("YES"); $btn_pause->IMAGE($img_pause); } else { $timer->RUN("NO"); $btn_pause->IMAGE($img_play); } return IUP_DEFAULT; } sub btn_restart_cb { $progressbar1->VALUE(0); $progressbar2->VALUE(0); return IUP_DEFAULT; } sub btn_accelerate_cb { $increment *= 2; return IUP_DEFAULT; } sub btn_decelerate_cb { $increment /= 2; return IUP_DEFAULT; } sub btn_show1_cb { warn "DASHED=", $progressbar1->DASHED, "\n"; #NOTE: DASHED is creation only in Windows (so no effect) if (uc($progressbar1->DASHED) ne "YES") { $progressbar1->DASHED("YES"); } else { $progressbar1->DASHED("NO"); } return IUP_DEFAULT; } sub btn_show2_cb { warn "MARQUEE=", $progressbar1->MARQUEE || '', "\n"; #xxxFIXME returns undef if (uc($progressbar1->MARQUEE) ne "YES") { $progressbar1->MARQUEE("YES"); } else { $progressbar1->MARQUEE("NO"); } return IUP_DEFAULT; } my $hbox = IUP::Hbox->new( child=>[ IUP::Fill->new(), $btn_pause, $btn_restart, $btn_decelerate, $btn_accelerate, $btn_show1, $btn_show2, IUP::Fill->new()] ); my $vbox = IUP::Hbox->new( child=>[ IUP::Vbox->new([$progressbar1, $hbox]), $progressbar2 ], MARGIN=>"10x10", GAP=>5 ); my $dlg = IUP::Dialog->new( child=>$vbox, TITLE=>"IUP::ProgressBar Test"); $dlg->ShowXY(IUP_CENTER, IUP_CENTER); $timer->RUN("YES"); IUP->MainLoop();