The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
# IUP application using LED specification from separate file

#XXX TODO - not sure what is the best way to use LED definition from perl (if it makes any sense at all)

use strict;
use warnings;

use IUP ':all';
use FindBin;

# callback handler
sub my_cb {
  IUP->Message("Test callback handler");
  return IUP_DEFAULT;
}

# callbacks - key names should correspond to element names used in LED definition
my $callbacks = {
  dlg => { K_ANY=>\&my_cb },
};

# hash for storing element references
my $elements = { };

# LED filename
my $led = "$FindBin::Bin/sample.led";
die "LED file '$led' does not exist\n" unless -f $led;
my $rv = IUP->LoadLED($led);
die "LED file '$led' load failed: $rv\n" if $rv;

# set callbacks
for my $name (keys %$callbacks) {
  for my $cb (keys %{$callbacks->{$name}}) {
    if (my $elem = IUP->GetByName($name)) {
      $elem->SetCallback($cb, $callbacks->{$name}->{$cb});
      #we have to keep reference to perl object - otherwise it gets completely DESTROYed
      $elements->{$name} = $elem;
    }
    else {
      warn "Warning: element name '$name' not loaded from LED definition\n";
    }
  }
}

# get the main window
my $dlg = IUP->GetByName('dlg') or die "Invalid main dialog name\n";

# start the application
$dlg->Show();
IUP->MainLoop();