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.

Imagem

Solução

Utilizamos o método set_cell_data_func() da classe GtkCellLayout.

Exemplo

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