#!/usr/bin/perl -w
use Data::Dumper;
use Gtk2 '-init';
use Gtk2::SimpleList;
use constant TRUE => 1;
use constant FALSE => 0;
$window = Gtk2::Window->new;
$window->set_title ('SimpleList examples');
$window->signal_connect (delete_event => sub {Gtk2->main_quit; TRUE});
$window->set_default_size (320, -1);
$hbox = Gtk2::HBox->new;
$window->add ($hbox);
# a simple one-column list:
$categories = Gtk2::SimpleList->new ('Categories' => 'text');
@{$categories->{data}} = qw/Meat Beer Pizza Pasta Soda Juice Rabbitfood/;
$categories->signal_connect (row_activated => sub {
my ($treeview, $path, $column) = @_;
print "mmm, ".$categories->{data}[$_[1]->to_string][0]."\n";
});
$hbox->pack_start ($categories, FALSE, FALSE, 0);
$slist = Gtk2::SimpleList->new (
'Text Field' => 'text',
'Int Field' => 'int',
'Double Field' => 'double',
'Bool Field' => 'bool',
'Scalar Field' => 'scalar',
'Pixbuf Field' => 'pixbuf',
);
@{$slist->{data}} = (
[ 'text', 1, 1.1, TRUE, $window, $pixbuf ],
[ 'text', 2, 2.2, FALSE, $categories, $pixbuf ],
[ 'text', 3, 3.3, FALSE, $slist, $pixbuf ],
);
# (almost) anything you can do to an array you can do to
# $slist->{data} which is an array reference tied to the list model
push @{$slist->{data}}, [ 'text', 4, 4.4, TRUE, undef, undef ];
# mess with selections
$slist->get_selection->set_mode ('multiple');
$slist->get_selection->unselect_all;
$slist->select (1, 3, 5..9); # select rows by index
$slist->unselect (3, 8); # unselect rows by index
@sel = $slist->get_selected_indices;
# simple way to make text columns editable
$slist->set_column_editable (0, TRUE);
$slist->set_column_editable (1, TRUE);
# Gtk2::SimpleList is derived from Gtk2::TreeView, so you can
# do anything you'd do to a treeview.
$slist->set_rules_hint (TRUE);
$slist->set_reorderable (TRUE);
map { $_->set_resizable (TRUE) } $slist->get_columns;
# packed into a scrolled window...
$scrolled = Gtk2::ScrolledWindow->new;
$scrolled->set_policy ('automatic', 'automatic');
$scrolled->add ($slist);
$hbox->add ($scrolled);
# all in one go
$window->show_all;
Gtk2->main;