Página Inicial > Gtk/Gdk, GtkTreeView > Como trabalhar com colunas double no GtkTreeView

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

<?php
   // 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

Categories: Gtk/Gdk, GtkTreeView Tags:
  1. Nenhum comentário ainda.
  1. Nenhum trackback ainda.