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

Captura_de_tela-Teste

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

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

Referências

http://gtk.php.net/manual/en/gtk.gtkwidget.php