Como utilizar um GtkTreeView para gerenciar módulos
Explicação
Utilizar um treeview para listar os módulos presentes na aplicação pode facilitar bastante a interação entre a aplicação e o usuário. O código abaixo mostra exatamente isso: Listar e capturar a abertura dos módulos.
Imagem
Solução
Cria um GtkTreeView();
Listar os módulos;
Conectar treeview aos eventos;
Capturar o duplo clique;
Verificar o módulo selecionado e abri-lo.
Exemplo
// Classe de testes
class Teste
{
// Vetor que armazena todos os widgets da interface
public $widgets = array();
// Construtor da classe
public function __construct()
{
// Cria o modelo
$model = new GtkListStore(GObject::TYPE_STRING);
// Cria o treeview
$this->widgets['trvTeste'] = new GtkTreeView($model);
// Conecta o treeview aos eventos
$this->widgets['trvTeste']->connect("event", array($this, "trvTeste_onEvent"));
// Cria a colunas
$render = new GtkCellRendererText();
$column = new GtkTreeViewColumn("Modulo", $render, "text", 0);
$this->widgets['trvTeste']->append_column($column);
// Popula o model
$model->append(array("Modulo 1"));
$model->append(array("Modulo 2"));
$model->append(array("Modulo 3"));
$model->append(array("Modulo 4"));
$model->append(array("Modulo 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")
);
}
// Método de eventos do treeview
public function trvTeste_onEvent($widget, $event)
{
// Verifica qual o evento
switch($event->type)
{
// Double click
case 5:
// Busca o item selecionado
$selection = $this->widgets['trvTeste']->get_selection();
// Busca o iter selecionado
list($model, $iter) = $selection->get_selected();
// Busca o valor selecionado
$modulo = $model->get_value($iter, 0);
// Verifica qual o modulo abrir
switch($modulo)
{
// Abre o modulo 1
case "Modulo 1":
echo "Abrir Modulo 1";
break;
}
break;
}
}
}
// Inicia a aplicação
$teste = new Teste();
gtk::main();
