Explicação
A utilização de combos box dentro de colunas de um treeview é uma pratica comum, quando se precisa deixar algumas opções para o usuário, e sua utilização é bastante simples.
Imagem
Exemplo
connect_simple("destroy", array("Gtk", "main_quit"));
$vbox = new GtkVBox();
// Model
if(defined("GObject::TYPE_STRING"))
{
$model = new GtkListStore(GObject::TYPE_STRING, GObject::TYPE_STRING);
}
else
{
$model = new GtkListStore(Gtk::TYPE_STRING, Gtk::TYPE_STRING);
}
// Treeview
$treeview = new GtkTreeView($model);
// Coluna normal
$column = new GtkTreeViewColumn("Propriedade", new GtkCellRendererText(), "text", 0);
$column->set_min_width(200);
$treeview->append_column($column);
// Model do combo
if(defined("GObject::TYPE_STRING"))
{
$combomodel = new GtkListStore(GObject::TYPE_STRING);
}
else
{
$combomodel = new GtkListStore(Gtk::TYPE_STRING);
}
$combomodel->append(array("Categoria 1"));
$combomodel->append(array("Categoria 2"));
// Coluna com combo
$comborenderer = new GtkCellRendererCombo();
$column = new GtkTreeViewColumn("Valor", $comborenderer, "text", 1);
$treeview->append_column($column);
$comborenderer->set_property('editable', true);
$comborenderer->set_property('has-entry', true);
$comborenderer->set_property('text-column', 0);
$comborenderer->connect('edited', "frmCombo", $model);
function frmCombo($renderer, $path, $selection, $model)
{
$iter = $model->get_iter($path);
$model->set($iter, 1, $selection);
}
// Adiciona os valores
$comborenderer->set_property('model', $combomodel);
$model->append(array("Teste", "Categoria 1"));
$model->append(array("Teste", "Categoria 1"));
$model->append(array("Teste", "Categoria 1"));
// Show all
$vbox->pack_start($treeview);
$window->set_size_request(550, 500);
$window->add($vbox);
$window->show_all();
Gtk::main();