NAME
Tickit::Widget::GridBox
- lay out a set of child widgets in a grid
SYNOPSIS
use Tickit;
use Tickit::Widget::GridBox;
use Tickit::Widget::Static;
my $gridbox = Tickit::Widget::GridBox->new(
style => {
col_spacing => 2,
row_spacing => 1,
},
children => [
[ Tickit::Widget::Static->new( text => "top left" ),
Tickit::Widget::Static->new( text => "top right" ) ],
[ Tickit::Widget::Static->new( text => "bottom left" ),
Tickit::Widget::Static->new( text => "bottom right" ) ],
],
);
Tickit->new( root => $gridbox )->run;
DESCRIPTION
This container widget holds a set of child widgets distributed in a regular grid shape across rows and columns.
STYLE
The default style pen is used as the widget pen.
The following style keys are used:
- col_spacing => INT
-
The number of columns of spacing between columns
- row_spacing => INT
-
The number of rows of spacing between rows
CONSTRUCTOR
$gridbox = Tickit::Widget::GridBox->new( %args )
Constructs a new Tickit::Widget::GridBox
object.
Takes the following named arguments:
- children => ARRAY[ARRAY[Tickit::Widget]]
-
Optional. If present, should be a 2D ARRAYref of ARRAYrefs containing the
Tickit::Widget
children to display in the grid. They are all added with no additional options.
METHODS
$count = $gridbox->rowcount
$count = $gridbox->colcount
Returns the number of rows or columns in the grid.
$gridbox->add( $row, $col, $child, %opts )
Sets the child widget to display in the given grid cell. Cells do not need to be explicitly constructed; the grid will automatically expand to the size required. This method can also be used to replace an existing child at the given cell location. To remove a cell entirely, use the remove
method.
The following options are recognised:
- col_expand => INT
- row_expand => INT
-
Values for the
expand
setting for this column or row of the table. The largestexpand
setting for any cell in a given column or row sets the value used to distribute space to that column or row.
$gridbox->remove( $row, $col )
Removes the child widget on display in the given cell. May shrink the grid if this was the last child widget in the given row or column.
$child = $gridbox->get( $row, $col )
Returns the child widget at the given cell in the grid. If the row or column index are beyond the bounds of the grid, or if there is no widget in the given cell, returns undef
.
@children = $gridbox->get_row( $row )
@children = $gridbox->get_col( $col )
Convenient shortcut to call get
on an entire row or column of the grid.
$gridbox->insert_row( $before_row, [ @children ] )
Inserts a new row into the grid by moving the existing rows after it lower down. Any child widgets in the referenced array will be set on the cells of the new row, at an column corresponding to its index in the array. A child of undef
will be skipped over.
$gridbox->insert_col( $before_col, [ @children ] )
Inserts a new column into the grid by moving the existing columns after it to the right. Any child widgets in the referenced array will be set on the cells of the new column, at a row corresponding to its index in the array. A child of undef
will be skipped over.
$gridbox->append_row( [ @children ] )
Shortcut to inserting a new row after the end of the current grid.
$gridbox->append_col( [ @children ] )
Shortcut to inserting a new column after the end of the current grid.
$gridbox->delete_row( $row )
Deletes a row of the grid by moving the existing rows after it higher up.
$gridbox->delete_col( $col )
Deletes a column of the grid by moving the existing columns after it to the left.
TODO
Add
move_{row,col}
methods for re-ordering existing rows or columnsMake
{insert,append,delete,move}
operations more efficient by deferring thechildren_changed
call until they are done.
AUTHOR
Paul Evans <leonerd@leonerd.org.uk>