Utilizando GtkCombo dentro de um GtkTreeView

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();