The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#! perl -w
# 
# Test Grid method
#   - Default cell setting
#   - font method
#

use strict;
use warnings;

use FindBin();

use Win32::GUI();
use Win32::GUI::Grid;

# main Window
my $Window = new Win32::GUI::Window (
    -title => "Win32::GUI::Grid test 3",
    -pos   => [100, 100],
    -size  => [400, 400],
    -name  => "Window",
) or die "new Window";

# Grid Window
my $Grid = $Window->AddGrid (
    -name => "Grid",
    -pos  => [0, 0],
) or die "new Grid";

# Image list
my $IL = new Win32::GUI::ImageList(16, 16, 24, 3, 10);
$IL->Add("$FindBin::Bin/one.bmp");
$IL->Add("$FindBin::Bin/two.bmp");
$IL->Add("$FindBin::Bin/three.bmp");

# Attach ImageList to grid
$Grid->SetImageList($IL);

# Set default cell style
$Grid->SetDefCellTextColor(0,0, '#FF0000');
$Grid->SetDefCellTextColor(1,0, '#00FF00');
$Grid->SetDefCellTextColor(0,1, '#0000FF');

$Grid->SetDefCellBackColor(0,0, '#0000FF');
$Grid->SetDefCellBackColor(1,0, '#FF0000');
$Grid->SetDefCellBackColor(0,1, '#00FF00');

$Grid->SetDefCellFormat(0, 0, DT_RIGHT|DT_VCENTER|DT_SINGLELINE|DT_END_ELLIPSIS|DT_NOPREFIX);
$Grid->SetDefCellFormat(0, 1, DT_RIGHT|DT_VCENTER|DT_SINGLELINE|DT_END_ELLIPSIS|DT_NOPREFIX);
$Grid->SetDefCellFormat(1, 0, DT_LEFT|DT_WORDBREAK);

# Change default font
my %font = $Grid->GetDefCellFont(0,0);
$font {-bold} = 1;
$font {-height} = 10;
$Grid->SetDefCellFont(0,0, %font);

# Create Cells after set default style. (required for format ONLY)
$Grid->SetRows(50);
$Grid->SetColumns(10);
$Grid->SetFixedRows(1);
$Grid->SetFixedColumns(1);

# Fill Grid
for my $row (0..$Grid->GetRows()) {
    for my $col (0..$Grid->GetColumns()) {
        if ($row == 0) {
            $Grid->SetCellText($row, $col,"Column : $col");
            $Grid->SetCellImage($row, $col, 0); # Add bitmap
        }
        elsif ($col == 0) {
            $Grid->SetCellText($row, $col, "Row : $row");
            $Grid->SetCellImage($row, $col, 1); # Add bitmap
        }
        else {
            $Grid->SetCellText($row, $col, "Cell : ($row,$col)");
            $Grid->SetCellImage($row, $col, 2); # Add bitmap
        }
    }
}

# Set Cell font
$Grid->SetCellFont(0, 0, -name   => 'Arial' ,
                         -size   => 12,
                         -italic => 1,
                         -bold   => 1);

# Set font from a Win32::GUI::Font
my $F = new Win32::GUI::Font(
    -name => "MS Sans Serif",
    -size => 10,
    -bold => 1,
);
$Grid->SetCellFont(0, 1, $F->Info());

# Resize Grid Cell
$Grid->AutoSize();

# Event loop
$Window->Show();
Win32::GUI::Dialog();
exit(0);

# Main window event handler
sub Window_Terminate {
    return -1;
}

sub Window_Resize {
    my ($width, $height) = ($Window->GetClientRect)[2..3];
    $Grid->Resize ($width, $height);
}

sub Grid_Click {
    my ($row, $col) = @_;

    # Get font information
    print "\nFont for cell ($row, $col) :\n";
    my %font = $Grid->GetCellFont($row, $col);
    for my $key (keys %font) {
        print $key, " => ", $font{$key}, "\n";
    }
}