Adicionando coluna com checkbox em um GtkTreeView

Explicação

A utilização de listas é uma coisa muito comum, principalmente se precisamos selecionar mais de um elemento entre tantos. O GtkTreeView é um widget muito bom para esta finalidade, principalmente por que podemos ter colunas de varias formas. Uma delas é o check, podemos fazer uma lista com um check, para seleção múltipla de elementos.

Imagem

Solução

Criar modelo TYPE_BOOLEAN, e o render da coluna sendo um GtkCellRendererToggle

Exemplo

widgets['trvTeste'] = new GtkTreeView($model);
			
			// Cria a coluna do checkbox
			$render = new GtkCellRendererToggle();
			$render->set_property("activatable", TRUE);
			$column = new GtkTreeViewColumn("", $render, "active", 0);
			$this->widgets['trvTeste']->append_column($column);
			$render->connect("toggled", array($this, "render_ontoggle"), $model);
			
			// Cria a coluna simples
			$render = new GtkCellRendererText();
			$column = new GtkTreeViewColumn("Modulo", $render, "text", 1);
			$this->widgets['trvTeste']->append_column($column);
			
			// Popula o model
			$model->append(array(FALSE, "Item 1"));
			$model->append(array(FALSE, "Item 2"));
			$model->append(array(TRUE, "Item 3"));
			$model->append(array(FALSE, "Item 4"));
			$model->append(array(FALSE, "Item 5"));
			
			// Cria a janela
			$this->widgets['frmTeste'] = new GtkWindow();
			$this->widgets['frmTeste']->set_size_request(200, 200);
			$this->widgets['frmTeste']->set_resizable(FALSE);
			$this->widgets['frmTeste']->set_title("Teste");
			$this->widgets['frmTeste']->add($this->widgets['trvTeste']);
			$this->widgets['frmTeste']->set_position(GTK::WIN_POS_CENTER);
			$this->widgets['frmTeste']->show_all();
			
			// Conecta o destroy
			$this->widgets['frmTeste']->connect_simple(
				"destroy", 
				array("Gtk", "main_quit")
			);
		}
		
		function render_ontoggle($render, $row, $model) 
		{
			$iter = $model->get_iter($row);
			$model->set($iter, 0, !$model->get_value($iter, 0));
		}
	}

	// Inicia a aplicação
	$teste = new Teste();
	gtk::main();

Referências

http://gtk.php.net/manual/en/gtk.gtktreeview.php
http://gtk.php.net/manual/en/gtk.gtkcellrenderertoggle.php