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
1 resposta a “Adicionando coluna com checkbox em um GtkTreeView”