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