#!/usr/bin/perl =doc This example shows one way to colorize rows in a SimpleList. The basic approach is to add a color attribute to the columns in the TreeView (remember that a SimpleList is a TreeView), and store the color information in a hidden column in the model. Since the Glib type system will be used to fetch the color attribute, the hidden column must be of type Gtk2::Gdk::Color, which requires us to add a custom column type to SimpleList. =cut use strict; use warnings; use Glib qw/TRUE FALSE/; use Gtk2 -init; use Gtk2::SimpleList; # in gtk+ 2.0.x, the cell renderers don't have the cell_background_gdk # property, so this test doesn't work right and spews messages. object # properties require no extra binding glue, so if you've upgraded to # gtk+ 2.2.x or newer after installing Gtk2-Perl, this test will magically # start to work. thus, this is one of those rare times when we need to # use the lower-case runtime version check. my $msg = Gtk2->check_version (2,2,0); die "This example requires gtk+ 2.2.0, but we're linked against " . join (".", Gtk2->get_version_info)."\n" . "$msg\n" if $msg; # add a new hidden column that holds a Gtk2::Gdk::Color. Gtk2::SimpleList->add_column_type( 'color', type => 'Gtk2::Gdk::Color', renderer => 'Gtk2::CellRendererText', attr => 'hidden', ); my $slist = Gtk2::SimpleList->new ( 'Text Field' => 'text', 'Int Field' => 'int', 'Bool Field' => 'bool', 'row color' => 'color', ); # # add a color attribute to each column, getting the color information # from the hidden column. # foreach my $col ($slist->get_columns) { foreach my $cell ($col->get_cell_renderers) { $col->add_attribute ($cell, cell_background_gdk => 3); } } # # now put some data into the list; note the data for the hidden column. # we'll leave a couple of rows uncolored. # @{$slist->{data}} = ( [ 'Red', 1, FALSE, Gtk2::Gdk::Color->new (0xFFFF, 0, 0) ], [ 'Green', 2, TRUE, Gtk2::Gdk::Color->new (0, 0xFFFF, 0) ], [ 'Blue', 3, FALSE, Gtk2::Gdk::Color->new (0, 0, 0xFFFF) ], [ 'Cyan', 4, TRUE, Gtk2::Gdk::Color->new (0, 0xFFFF, 0xFFFF) ], [ 'Magenta', 5, FALSE, Gtk2::Gdk::Color->new (0xFFFF, 0, 0xFFFF) ], [ 'Yellow', 6, TRUE, Gtk2::Gdk::Color->new (0xFFFF, 0xFFFF, 0) ], [ 'plain', 7, FALSE, undef ], [ 'plain', 8, TRUE, undef ], ); # the rest is uninteresting. my $win = Gtk2::Window->new; $win->set_title ('Colorizing A List'); $win->set_border_width (6); $win->signal_connect (delete_event => sub { Gtk2->main_quit; }); $win->add ($slist); $win->show_all; Gtk2->main;