#!/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;