Como trabalhar com colunas double no GtkTreeView
Explicação
Trabalhar com as colunas do formato correto, muitas vezes pode facilitar bastante nossa vida. Para quem precisa criar uma coluna do tipo TYPE_DOUBLE, já percebeu que as casas decimais nunca estão no formato correto. Para podermos contornar isso temos um sinal da classe GtkCellLayout que é atribuído pelo método set_cell_data_func(). Com ele podemos executar uma função sempre que um novo valor for atribuído à uma celula. Assim podemos formatar o numero da maneira que o programador achar conveniente.
Solução
Utilizamos o método set_cell_data_func() da classe GtkCellLayout.
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);
// Cria a colunas
$render = new GtkCellRendererText();
$column = new GtkTreeViewColumn("Couna 1", $render, "text", 0);
$this->widgets['trvTeste']->append_column($column);
// Conecta a coluna ao sinal de renderização
$column->set_cell_data_func($render, array($this, "treeview_onRender"), 0);
$render = new GtkCellRendererText();
$column = new GtkTreeViewColumn("Coluna 2", $render, "text", 1);
$this->widgets['trvTeste']->append_column($column);
// Conecta a coluna ao sinal de renderização
$column->set_cell_data_func($render, array($this, "treeview_onRender"), 1);
// 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 de renderização do treeview
public function treeview_onRender($column, $cell, $model, $iter, $col)
{
// Busca o valor da celula
$value = $model->get_value($iter, $col);
// Verifica se é a coluna de valor para formatar
if($col == 1)
{
$cell->set_property("text", number_format($value, 2, ",", "."));
}
}
}
// Inicia a aplicação
$teste = new Teste();
gtk::main();
Referências
http://gtk.php.net/manual/en/gtk.gtkcelllayout.method.set_cell_data_func.php