Gtk2::ComboBox
and Gtk2::ComboBoxEntry
Widgets This section will discuss the Gtk2::ComboBox
and Gtk2::ComboBoxEntry
widgets. It is discussed after Gtk2::TreeView
since it can also make use of the same Gtk2::TreeModel
implementations as Gtk2::TreeView
.
Gtk2::ComboBox
Widgets The Gtk2::ComboBox
replaces the OptionMenu with a powerful widget that uses a Gtk2::TreeModel
(usually a Gtk2::ListStore
) to provide the list items to display. The Gtk2::ComboBox
implements the Gtk2::CellLayout
interface that provides a number of methods for managing the display of the list items. One or more Gtk2::CellRenderer
s can be packed into a Gtk2::ComboBox
to customize the list item display.
Gtk2::ComboBox
Use The easy way to create and populate a Gtk2::ComboBox
is to use the convenience method:
widget = Gtk2::ComboBox->new_textThis method creates a
Gtk2::ComboBox
and its associated Gtk2::ListStore
and packs it with a Gtk2::CellRendererText
. The following convenience methods are used to populate or remove the contents of the Gtk2::ComboBox
and its Gtk2::ListStore
:
$combo_box->append_text ($text) * $text (string) $combo_box->insert_text ($position, $text) * $position (integer) * $text (string) $combo_box->prepend_text ($text) * $text (string) $combo_box->remove_text ($position) * $position (integer)In most cases the convenience methods are all you need.
To get the text displayed by the active item:
string = $combo_box->get_active_text
The index of the active item is retrieved using the method:
string = $combo_box->get_activeThe active item can be set using the method:
$combo_box->set_active ($index)If index is -1 there is no active item and the
Gtk2::ComboBox
display will be blank.
You can connect to the "changed"
signal of a Gtk2::ComboBox
to be notified when the active item has been changed.
The demo program 'gtk2_combo_box_basic.pl' demonstrates the use of the above methods.
Gtk2::ComboBox
Use Creating a Gtk2::ComboBox
using the "new_text"
method is roughly equivalent to the following code:
my $list_store = Gtk2::ListStore->new(qw/Glib::String/); my $combobox = Gtk2::ComboBox->new($list_store); my $renderer = Gtk2::CellRendererText->new(); $combobox->pack_start($renderer, TRUE); $combobox->add_attribute($renderer,'text',0);To make use of the power of the various
Gtk2::TreeModel
and Gtk2::CellRenderer
objects you need to construct a Gtk2::ComboBox
using the constructor:
widget = Gtk2::ComboBox->new ($model=undef) * $model (Gtk2::TreeModel)If you create a
Gtk2::ComboBox
without associating a Gtk2::TreeModel
, you can add one later using the method:
$combo_box->set_model ($model) * $model (Gtk2::TreeModel)The associated
Gtk2::TreeModel
can be retrieved using the method:
treemodel = $combo_box->get_modelSome of the things you can do with a
Gtk2::ComboBox
are:
Share the same Gtk2::TreeModel
with other Gtk2::ComboBox
es and Gtk2::TreeView
s.
Display images and text in the Gtk2::ComboBox
list items.
Use an existing Gtk2::TreeStore
or Gtk2::ListStore
as the model for the Gtk2::ComboBox
list items.
Use a Gtk2::TreeModelSort
to provide a sorted Gtk2::ComboBox
list.
Use a Gtk2::TreeModelFilter
to use a subtree of a Gtk2::TreeStore
as the source for a Gtk2::ComboBox
list items.
Use a Gtk2::TreeModelFilter
to use a subset of the rows in a Gtk2::TreeStore
or Gtk2::ListStore
as the Gtk2::ComboBox
list items.
Use a cell data function to modify or synthesize the display for list items.
Gtk2::TreeModel
and Gtk2::CellRenderer
objects is detailed in Chapter 14
The Gtk2::ComboBox
list items can be displayed in a grid if you have a large number of items to display. Otherwise the list will have scroll arrows if the entire list cannot be displayed. The following method is used to set the number of columns to display:
$combo_box->set_wrap_width ($width) * $width (integer)where $row_span is the number of columns of the grid displaying the list items.For example, the 'gtk2_combo_box_wrap.pl' program displays a list of 50 items in 5 columns.
In addition to the "get_active"
method described above, you can retrieve a Gtk2::TreeIter
pointing at the active row by using the method:
treeiter = $combo_box->get_active_iterYou can also set the active list item using a
Gtk2::TreeIter
with the method:
$combo_box->set_active_iter ($iter) * $iter (Gtk2::TreeIter)Since the
Gtk2::ComboBox
implements the Gtk2::CellLayout
interface which has similar capabilities as the Gtk2::TreeViewColumn
.Briefly, the interface provides:
$combobox->pack_start($renderer, TRUE); $combobox->pack_end($renderer, TRUE); $combobox->clear;The first two methods pack a
Gtk2::CellRenderer
into the Gtk2::ComboBox
and the clear
method clears all attributes from all Gtk2::CellRenderer
s.
The following methods:
$combobox->add_attribute($renderer, $attribute, $column); $combobox->set_attributes($renderer,.....);set attributes for the
Gtk2::CellRenderer
specified by $renderer. The "add_attribute"
method takes a string attribute name (e.g. 'text') and an integer column number of the column in the Gtk2::TreeModel
to use to set attribute. The additional arguments to the "set_attributes"
method are attribute=column pairs (e.g 'text'=>1).