The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
# IUP::Item Example

use strict;
use warnings;

use IUP ':all';

# create the main application windows (dialog)

my $text = IUP::Text->new( VALUE=>"This is an initial text", MULTILINE=>"YES", VISIBLECOLUMNS=>15, VISIBLELINES=>15 );

my $item_save     = IUP::Item->new( TITLE=>"Save\tCtrl+S", ACTIVE=>"NO" );
my $item_autosave = IUP::Item->new( TITLE=>"Auto Save\tCtrl+A", VALUE=>"ON" );
my $item_exit     = IUP::Item->new( TITLE=>"Exit\tAlt+X" );

my $menu_file = IUP::Menu->new( child=>[$item_save, $item_autosave, $item_exit] );

my $submenu_file = IUP::Submenu->new( TITLE=>"File", child=>$menu_file );

my $menu = IUP::Menu->new( child=>$submenu_file );

my $dlg = IUP::Dialog->new( child=>$text, TITLE=>"IUP::Item", MENU=>$menu );

# setup callbacks
$item_exit->ACTION(\&hide_cb);
$item_autosave->ACTION(\&autosave_cb);
$dlg->K_ANY(\&key_cb);

sub hide_cb {
  # not so common exit handler
  $dlg->Hide();
  return IUP_DEFAULT;
}

sub save_cb {
  IUP->Message("Save not implemented");
  return IUP_DEFAULT;
}

sub autosave_cb {
  if ( $item_autosave->VALUE eq "ON" ) {
    IUP->Message("Auto Save", "OFF");
    $item_autosave->VALUE("OFF");
  }
  else {
    IUP->Message("Auto Save", "ON");
    $item_autosave->VALUE("ON");
  }
  return IUP_DEFAULT;
}

sub key_cb {
  my ($self, $c) = @_;
  return save_cb     if $c == K_cS; #ctrl+S
  return autosave_cb if $c == K_cA; #ctrl+A
  return hide_cb     if $c == K_mX; #alt+X
}

# start the main loop
$dlg->ShowXY(IUP_CENTER, IUP_CENTER);
IUP->MainLoop;