Gtk2
view release on metacpan or search on metacpan
gtk-demo/stock_browser.pl view on Meta::CPAN
sub macro_set_func_text {
my ($tree_column, $cell, $model, $iter) = @_;
my ($info) = $model->get ($iter, 0);
$cell->set (text => $info->{macro});
}
sub macro_set_func_pixbuf {
my ($tree_column, $cell, $model, $iter) = @_;
my ($info) = $model->get ($iter, 0);
$cell->set (pixbuf => $info->{small_icon});
}
sub id_set_func {
my ($tree_column, $cell, $model, $iter) = @_;
my ($info) = $model->get ($iter, 0);
$cell->set (text => $info->{id});
}
sub accel_set_func {
my ($tree_column, $cell, $model, $iter) = @_;
my ($info) = $model->get ($iter, 0);
$cell->set (text => $info->{accel_str});
}
sub label_set_func {
my ($tree_column, $cell, $model, $iter) = @_;
my ($info) = $model->get ($iter, 0);
# items aren't required to have labels
$cell->set (text => $info->{item}{label} || '');
}
sub do {
if (!$window) {
$window = Gtk2::Window->new;
$window->set_title ("Stock Icons and Items");
$window->set_default_size (-1, 500);
$window->signal_connect (destroy => sub {$window = undef; 1});
$window->set_border_width (8);
my $hbox = Gtk2::HBox->new (FALSE, 8);
$window->add ($hbox);
my $sw = Gtk2::ScrolledWindow->new;
$sw->set_policy ('never', 'automatic');
$hbox->pack_start ($sw, FALSE, FALSE, 0);
my $model = create_model ();
my $treeview = Gtk2::TreeView->new_with_model ($model);
$sw->add ($treeview);
my $column = Gtk2::TreeViewColumn->new;
$column->set_title ("Macro");
my $cell_renderer = Gtk2::CellRendererPixbuf->new;
$column->pack_start ($cell_renderer, FALSE);
### this doesn't work for 2.0.x, because stock_id isn't an attribute for the
### renderer until 2.2.x
### $column->set_attributes ($cell_renderer, stock_id => 1);
$column->set_cell_data_func ($cell_renderer, \¯o_set_func_pixbuf);
$cell_renderer = Gtk2::CellRendererText->new;
$column->pack_start ($cell_renderer, TRUE);
$column->set_cell_data_func ($cell_renderer, \¯o_set_func_text);
$treeview->append_column ($column);
$cell_renderer = Gtk2::CellRendererText->new;
$treeview->insert_column_with_data_func (-1,
"Label",
$cell_renderer,
\&label_set_func);
$cell_renderer = Gtk2::CellRendererText->new;
$treeview->insert_column_with_data_func (-1,
"Accel",
$cell_renderer,
\&accel_set_func);
$cell_renderer = Gtk2::CellRendererText->new;
$treeview->insert_column_with_data_func (-1,
"ID",
$cell_renderer,
\&id_set_func);
my $align = Gtk2::Alignment->new (0.5, 0.0, 0.0, 0.0);
$hbox->pack_end ($align, FALSE, FALSE, 0);
my $frame = Gtk2::Frame->new ("Selected Item");
$align->add ($frame);
my $vbox = Gtk2::VBox->new (FALSE, 8);
$vbox->set_border_width (4);
$frame->add ($vbox);
my $display = {
type_label => Gtk2::Label->new,
macro_label => Gtk2::Label->new,
id_label => Gtk2::Label->new,
label_accel_label => Gtk2::Label->new,
icon_image => Gtk2::Image->new_from_pixbuf (undef), # empty image
};
$treeview->{stock_display} = $display;
$vbox->pack_start ($display->{type_label}, FALSE, FALSE, 0);
$vbox->pack_start ($display->{icon_image}, FALSE, FALSE, 0);
$vbox->pack_start ($display->{label_accel_label}, FALSE, FALSE, 0);
$vbox->pack_start ($display->{macro_label}, FALSE, FALSE, 0);
$vbox->pack_start ($display->{id_label}, FALSE, FALSE, 0);
my $selection = $treeview->get_selection;
$selection->set_mode ('single');
( run in 1.401 second using v1.01-cache-2.11-cpan-df04353d9ac )