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 )