package Lire::UI::PolyListWidget;
use strict;
use base qw/ Lire::UI::CompoundListWidget /;
# List API
sub add_contained_widgets {
my $self = $_[0];
$self->add( 'type_widget', 'Curses::UI::Popupmenu' );
$self->update_type_popupmenu();
$self->SUPER::add_contained_widgets();
return;
}
sub extra_widget_height {
return 1;
}
sub layout_contained_objects {
my $self = $_[0];
my $popup = $self->getobj( 'type_widget' );
return $self unless $popup;
$popup->{'-width'} = $self->canvaswidth() - 2;
$popup->{'-x'} = 1;
$popup->{'-y'} = $self->canvasheight() - 2;
return $self->SUPER::layout_contained_objects();
}
sub update_type_popupmenu {
my $self = $_[0];
my %menu = ();
foreach my $comp ( $self->{'value'}->spec()->components() ) {
$menu{ $comp->summary() } = $comp;
}
my $popup = $self->getobj( 'type_widget' );
$popup->{'-values'} = [ map { $menu{$_} } sort keys %menu ];
$popup->{'-labels'} = { map { $menu{$_} => $_ } sort keys %menu };
return;
}
sub new_value {
my $self = $_[0];
my $spec = $self->getobj( 'type_widget' )->get();
return $spec ? $spec->instance() : undef;
}
1;
syntax highlighted by Code2HTML, v. 0.9.1