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 )