Config-Model-CursesUI
view release on metacpan or search on metacpan
lib/Config/Model/CursesUI.pm view on Meta::CPAN
}
sub try_it {
my ($self,$sub) = @_ ;
eval {
&$sub ;
warn "try_it: call to sub succeeded\n" if $verb_wiz ;
} ;
my $e = $@;
if (ref($e) and $e -> isa('Config::Model::Exception::User')) {
my $oops = $e->full_message ;
$oops =~ s/\t//g;
chomp($oops) ;
$self->{cui}->error(-message => $oops ) ;
return undef;
}
elsif ($@) {
warn $@ ;
$self->{cui}->fatalerror("try_it: $@") ;
# does not return ...
}
}
sub display_enum {
my ($self,$node,$element,$index, $leaf) = @_ ;
my $win = $self->set_center_window("display_enum $element");
my $lb = $self->layout_enum_value($win,$node,$element,$index, $leaf) ;
my $but = { -label => '< OK >',
-onpress => sub {$self->back} } ;
$lb->focus ;
$self->add_std_button_with_help($win,$node,$element,$but) ;
$self->wrap_screen($node,$element,$index);
}
sub layout_enum_value {
my ($self,$win,$node,$element,$index, $leaf) = @_ ;
$self->add_debug_label($win) ;
my ($orig_value,$current_value_widget,$help) =
$self->value_info($win,$leaf, 40, 1) ;
$help -> text ($leaf->get_help_as_text($orig_value) ) ;
my $y = 0;
if ($leaf->value_type eq 'reference') {
$win -> add ( undef, 'Label',
'-y' => $y++,
-text => "Enum values are taken from:"
) ;
foreach my $c_obj ($leaf->reference_object->compute_obj) {
my $button ;
my $path = $c_obj -> user_formula ;
if (defined $path) {
my $target = $leaf->grab($path) ;
my $p_target = $target->parent ;
my $n_target = $target->element_name ;
my $go = sub { $self->scan('element',$p_target, $n_target) ; } ;
$button = { -label => "< go to '$path' >", -onpress => $go } ;
}
else {
my $go = sub {$self->{cui}->fatalerror( $c_obj->compute_info )} ;
$button = { -label => "< info on undef '$path' >",
-onpress => $go } ;
}
$win -> add ( undef, 'Buttonbox',
'-y' => $y++,
'-x' => 0 ,
-buttons => [ $button ] ,
) ;
}
$y ++ ;
}
$win -> add ( undef, 'Label',
'-y' => $y,
-text => "Select new value.\nPress </> for a"
. "'less'-like\nsearch through the choice list."
) ;
$y += 3 ;
my $listbox ;
my $value = $orig_value ;
my $lb_change = sub {
my ($new) = $listbox->get;
if (not defined $orig_value or $new ne $value) {
$self->set_leaf_value($leaf,$new);
$value = $new ;
$current_value_widget->text($new) ;
}
} ;
my $lb_sel_change = sub {
my ($new) = $listbox->get_active_value;
$help ->text($leaf->get_help_as_text($new)) ;
} ;
$listbox = $win -> add ( undef, 'Listbox',
'-y' => $y ,
-padbottom => 1,
-values => $leaf->choice,
-width => 35,
-border => 1,
-title => 'Enum choice',
-vscrollbar => 1,
-onchange => $lb_change ,
-onselchange => $lb_sel_change ,
) ;
return $listbox ;
}
( run in 0.737 second using v1.01-cache-2.11-cpan-13bb782fe5a )