Curses-UI-Grid
view release on metacpan or search on metacpan
examples/grid-demo.pl view on Meta::CPAN
}
}
);
$w{3}->add(undef, 'Label',-text=>'Country :',-x=>48,-y=>3,-width=>9);
$w{3}->add(undef, 'Label',-text=>'Product :',-x=>48,-y=>4,-width=>9);
$w{3}->add(undef, 'Label',-text=>'Sale :',-x=>48,-y=>5,-width=>9);
$w{3}->add('COUNTRY', 'TextEntry',-x=>57,-y=>3,-sbborder=>1);
$w{3}->add('PROD', 'TextEntry',-x=>57,-y=>4,-sbborder=>1);
$w{3}->add('SALE', 'TextEntry',-x=>57,-y=>5,-sbborder=>1);
$grid->add_cell("COUNTRY"
,-width=>8
,-label=>"Country" );
$grid->add_cell("PROD"
,-width=>20
,-label=>"Product" );
$grid->add_cell("SALE"
,-width=>15
,-align=>'R'
,-label=>"Sale"
,-bg=>'green'
,-fg=>'yellow');
$grid->layout_content;
for my $i (0 .. $#data) {
my $ret=$grid->add_row(undef,
,-fg=>'black'
,-bg=>'yellow'
,-cells=>{ %{$data[$i]} } );
last unless defined $ret;
}
my $file_menu = [
{ -label => 'Quit program', -value => sub {exit(0)} },
],
my $demo_menu = [
{ -label => 'Editable Grid', -value => sub{select_demo(1)} },
{ -label => 'Frozen Grid', -value => sub{select_demo(2)} },
{ -label => 'Browser', -value => sub{select_demo(3)} },
];
my $menu = [
{ -label => 'File', -submenu => $file_menu },
{ -label => 'Select demo', -submenu => $demo_menu },
];
$cui->add('menu', 'Menubar', -menu => $menu);
# ----------------------------------------------------------------------
# Setup bindings and focus
# ----------------------------------------------------------------------
sub goto_next_demo()
{
$current_demo++;
$current_demo = 3 if $current_demo > 3;
$w{$current_demo}->focus;
}
sub goto_prev_demo()
{
$current_demo--;
$current_demo = 1 if $current_demo < 1;
$w{$current_demo}->focus;
}
# Bind <CTRL+Q> to quit.
$cui->set_binding( sub{ exit }, "\cQ" );
$cui->set_binding( \&goto_next_demo, "\cN" );
$cui->set_binding( \&goto_prev_demo, "\cP" );
# Bind <CTRL+X> to menubar.
$cui->set_binding( sub{ shift()->root->focus('menu') }, "\cX" );
sub select_demo($;)
{
my $nr = shift;
$current_demo = $nr;
$w{$current_demo}->focus;
}
sub fill_data($;) {
my $offset=shift;
my $limit=shift;
my $data=shift;
my $grid=shift;
for my $i (0 .. $limit) {
my $row=$grid->get_row( $grid->{_rows}[$i+1] );
next unless ref($row);
if($#{$data} <= $offset+$i) {
$row->hide;
$row->{-focusable}=0;
next;
}
$row->show;
$row->{-focusable}=1;
$row->set_values( %{$$data[$offset+$i]} );
( run in 1.719 second using v1.01-cache-2.11-cpan-cdf2f3d4e48 )