Re: CellRendererCombo
- From: muppet <scott asofyet org>
- To: Dan <dan entropy homelinux org>
- Cc: gtk-perl-list gnome org
- Subject: Re: CellRendererCombo
- Date: Sat, 21 May 2005 16:13:39 -0400
On May 19, 2005, at 9:34 PM, Dan wrote:
Back at it again ...
From the man page, there are only 3 properties:
- has-entry
- model
- text-column
But don't forget that CellRendererCombo inherits a whole slew of other
properties from its parent class, CellRendererText.
Is the renderer supposed to automatically select the right row by
comparing the value in the treestore's model with the value in the
combo's model, or am I supposed to write something that does that? I'm
a
little lost at the moment.
No. Until the user starts editing the cell, a CellRendererCombo is no
different from a CellRendererText. To choose the text to display in
the cell, set the "text" property. The additional functionality of
CellRendererCombo isn't even enabled unless you set "editable" => TRUE,
and then the model only gives you a list of things from which to
choose.
An tiny example?
#!/usr/bin/perl -w
use strict;
use Gtk2 -init;
use Glib ':constants';
# some things from which to choose...
my @choices = qw(one two three four five six seven eight nine ten);
# in a format that CellRendererCombo can understand:
my $popupmodel = Gtk2::ListStore->new ('Glib::String');
foreach (@choices) {
$popupmodel->set ($popupmodel->append, 0, $_);
}
# and now some random data for the treeview:
my $model = Gtk2::ListStore->new ('Glib::String');
foreach (1..5) {
$model->set ($model->append, 0, $choices[ int rand scalar
@choices ]);
}
#
# a combo cell:
#
my $renderer = Gtk2::CellRendererCombo->new;
$renderer->set (editable => TRUE, # user can choose... without this,
# the rest of the settings are
ignored.
model => $popupmodel, # this list of choices
text_column => 0, # in this column of $popupmodel
has_entry => FALSE); # and cannot use write-in choices
#
# if we want the user's selection from the combo to stick, we have to
hook
# things up to make that happen.
#
$renderer->signal_connect (edited => sub {
my ($renderer, $text_path, $new_string) = @_;
$model->set ($model->get_iter_from_string ($text_path), 0,
$new_string);
});
#
# we treat the renderer like a text renderer when adding it to the view.
# tell the view column to fetch the text to display in the cell from
column
# 0 of the model.
#
my $treeview = Gtk2::TreeView->new ($model);
$treeview->insert_column_with_attributes (-1, 'Stuff', $renderer, text
=> 0);
#
# for illustration, allow the user to toggle whether the cell allows
# write-in votes.
#
my $toggle = Gtk2::CheckButton->new ('has-entry');
$toggle->signal_connect (toggled => sub {
$renderer->set (has_entry => $toggle->get_active);
});
# the rest is boilerplate.
my $vbox = Gtk2::VBox->new;
$vbox->add ($treeview);
$vbox->pack_start ($toggle, FALSE, FALSE, 0);
my $window = Gtk2::Window->new;
$window->signal_connect (destroy => sub { Gtk2->main_quit });
$window->add ($vbox);
$window->show_all;
Gtk2->main;
--
If I lived in Teletubby Land, the homicide rate would be four.
-- elysse
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]