## version2.tcl
##
## This demo uses most features of the table widget
##
## jeff.hobbs@acm.org
## Converted to perl/tk by John Cerney
use Tk;
use Tk::TableMatrix;
my ($rows,$cols) = (25,20); # number of rows/cols
my $top = MainWindow->new;
# Sub to fill the array variable
sub fill{
my ($array,$x,$y) = @_;
my ($i,$j);
for( $i = -$x; $i<$x; $i++){
for( $j = -$y; $j<$y; $j++){
$array->{"$i,$j"} = "r$i,c$j";
}
}
}
## Test out the use of a callback to define tags on rows and columns
sub colSub{
my $col = shift;
return "OddCol" if( $col > 0 && $col%2) ;
}
my $label = $top->Label(-text => "TableMatrix v2 Example");
my $arrayVar = {};
fill($arrayVar, $rows,$cols); # fill up the array variable
my $t = $top->Scrolled('TableMatrix', -rows => $rows, -cols => $cols,
-variable => $arrayVar,
-width => 6, -height => 8,
-titlerows => 1, -titlecols => 2,
-roworigin => -5, -colorigin => -2,
-coltagcommand => \&colSub,
-selectmode => 'extended',
-selecttitles => 0,
-drawmode => 'single',
);
my $button = $top->Button( -text => "Exit", -command => sub{ $top->destroy});
$label->pack( -expand => 1, -fill => 'both');
$t->pack(-expand => 1, -fill => 'both');
$button->pack(-expand => 1, -fill => 'both');
# hideous Color definitions here:
$t->tagConfigure('OddCol', -bg => 'brown', -fg => 'pink');
$t->tagConfigure('title', -bg => 'red', -fg => 'blue', -relief => 'sunken');
$t->tagConfigure('dis', -state => 'disabled');
my $i = -1;
my $first = $t->cget(-colorigin);
my $anchor;
foreach $anchor( qw/ n s e w nw ne sw se c /){
$t->tagConfigure($anchor, -anchor => $anchor);
$t->tagRow($anchor, ++$i);
$t->set( "$i,$first",$anchor);
}
$top->fontCreate('courier', -family => 'courier', -size => 10);
$t->tagConfigure('s', -font => 'courier', -justify => 'center');
# $initWindow->Label(-image => $top->Photo(-file => Tk->findINC('Xcamel.gif')))->pack;
my $perltkLogo = $top->Photo(-file => Tk->findINC('Xcamel.gif'));
$t->tagConfigure('logo', -image => $perltkLogo, -showtext => 1);
$t->tagCell('logo', '1,2', '2,3', '4,1');
$t->tagCell('dis', '2,1', '1,-1', '3,0');
$t->colWidth(qw/ -2 8 -1 9 0 12 4 14/);
$t->set( '1,1' => "multi-line\ntext\nmight be\ninteresting" ,
'3,2' => "more\nmulti-line\nplaying\n" ,
'2,2' => "null\0byte" );
$i = -1;
# This is in the row span
my $l = $top->Label(-text => "Window s", -bg => 'yellow');
$t->windowConfigure("6,0", -sticky => 's', -window => $l);
# This is in the row titles
$l = $top->Label(-text => "Window ne", -bg => 'yellow');
$t->windowConfigure("4,-1", -sticky => 'ne', -window => $l);
# This will get swallowed by a span
$l = $top->Label(-text => "Window ew", -bg => 'yellow');
$t->windowConfigure("5,3", -sticky => 'ew', -window => $l);
# This is in the col titles
$l = $top->Label(-text => "Window nsew", -bg => 'yellow');
$t->windowConfigure("-5,1", -sticky => 'nsew', -window => $l);
$l = $t->parent->Label(-text => "Sibling l", -bg => 'orange');
$t->windowConfigure("5,1", -sticky => 'nsew', -window => $l);
$t->spans( '-1,-2' => '0,3', '1,2' => '0,5','3,2' => '2,2', '6,0' => '4,0');
Tk::MainLoop;