The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/perl -w

# A simple, contrived example of dealing with a TreeView/ListStore in
# multiple selection mode.

use Glib qw(TRUE);
use Gtk2 -init;

use constant STRING_COLUMN => 0;

sub fill_store {
	my $store = Gtk2::ListStore->new ('Glib::String');

	for ($i = 0 ; $i < 50 ; $i+=5) {
		my $iter = $store->append;
		$store->set ($iter, 0 => "$i");
	}

	return $store;
}


my $window = Gtk2::Window->new;
$window->set_size_request (150, 300);
$window->set_border_width (6);
$window->signal_connect (delete_event => sub { Gtk2->main_quit; TRUE });
my $vbox = Gtk2::VBox->new;
$window->add ($vbox);
my $sw = Gtk2::ScrolledWindow->new;
$sw->set_shadow_type ('etched-in');
$sw->set_policy ('automatic', 'automatic');
$vbox->pack_start ($sw, TRUE, TRUE, 0);


my $model = fill_store ();
my $tree_view = Gtk2::TreeView->new_with_model ($model);

$tree_view->set_reorderable (TRUE);
$model->signal_connect (rows_reordered => sub {print "rows reordered\n"});
$tree_view->get_selection->set_mode ('multiple');
$tree_view->get_selection->signal_connect (changed => sub {
	my @sel = $_[0]->get_selected_rows;
	print "changed "
	    . "[".$_[0]->count_selected_rows."] "
	    . "[".scalar(@sel)."] "
	    . join(",", map { $_->to_string } @sel)
	    . "\n"
});

$sw->add ($tree_view);

my $renderer = Gtk2::CellRendererText->new;
my $column = Gtk2::TreeViewColumn->new_with_attributes ("Some numbers", 
							$renderer, 
							text => 0);
$tree_view->append_column ($column);

$window->show_all;

Gtk2->main;