Como recuperar valor em GtkTreeView com 2 cliques
Explicação
Algumas vezes precisamos efetuar uma determinada ação em nosso sistema assim que damos 2 cliques em uma linha de um GtkTreeView. Para isso temos um signal da classe GtkWidget chamado button-press-event. Com ele podemos disparar um evento quando qualquer botão do mouse for pressionado em nosso treeview.
Solução
Utilizamos o signal button-press-event da classe GtkWidget;
Verificamos se o signal emitido é um duplo clique;
Buscamos a seleção do treeview.
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, GObject::TYPE_DOUBLE);
// Creia o treeview
$this->widgets['trvTeste'] = new GtkTreeView($model);
$this->widgets['trvTeste']->connect("button-press-event", array($this, "trvTeste_buttonPress"));
// Cria a colunas
$render = new GtkCellRendererText();
$column = new GtkTreeViewColumn("Couna 1", $render, "text", 0);
$this->widgets['trvTeste']->append_column($column);
$render = new GtkCellRendererText();
$column = new GtkTreeViewColumn("Coluna 2", $render, "text", 1);
$this->widgets['trvTeste']->append_column($column);
// Popula o model
$model->append(array("Valor 1", 1.0));
$model->append(array("Valor 2", 2.2));
$model->append(array("Valor 3", 3.6));
$model->append(array("Valor 4", 4.1));
$model->append(array("Valor 5", 5.3));
// 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 que captura os cliques do treeview
public function trvTeste_buttonPress($widget, $event)
{
// Verifica se é o duplo clique
if($event->type == Gdk::_2BUTTON_PRESS)
{
// Busca a seleção/model/iter da selecao
$selection = $widget->get_selection();
list($model, $iter) = $selection->get_selected();
// Busca o valor da segunda coluna
$value = $model->get_value($iter, 1);
echo $value . "\n";
}
}
}
// Inicia a aplicação
$teste = new Teste();
gtk::main();
Referências
http://gtk.php.net/manual/en/gtk.gtkwidget.signal.button-press-event.php
http://gtk.php.net/manual/en/gtk.gtktreeview.php