Adicionando imagens em um GtkTreeview

Com a simplicidade de exibição de dados do Gtktreeview, muitos programadores utilizam este widget em quase todas as suas aplicações. Uma técnica que pode facilitar muito a exibição dos dados que contem imagens, é adicionar imagens em um GtkTreeview. Desta forma tambem é possivel conseguir boas interfaces para facilidade de visualização do usuário

Imagem

PHP-GTK - Adicionando imagens ao Gtktreeview

Exemplo

/**
 * Seta a codificação do programa
 */
ini_set("php-gtk.codepage", "UTF-8");


/**
 * Classe de exemplo
 * 
 * @name Demo
 * @author Bruno P. Gonçalves <http: //bruno.pitteli.com.br></http:>
 * @download <http: //code.google.com/p/fabulafw></http:>
 */
class Demo {
	/**
	 * Armazena os widgets necessarios
	 * 
	 * @access private
	 * @property array $widgets
	 */
	public $widgets = array();
	
	/**
	 * Armazena os valores do radio
	 * 
	 * @access private
	 * @property array $values
	 */
	private $values = array();
	
	/**
	 * @name __construct()
	 * @return Demo
	 */
	public function __construct() {
		// Cria a janela
		$this->widgets['frmDemo'] = new GtkWindow();
		$this->widgets['frmDemo']->set_size_request(550, 350);
		$this->widgets['frmDemo']->set_resizable(FALSE);
		$this->widgets['frmDemo']->set_title("Demo");
		$this->widgets['frmDemo']->set_position(GTK::WIN_POS_CENTER);
		$this->widgets['frmDemo']->connect("destroy", array($this, "frmDemo_unload"));
		
		// Cria o modelo
		$model = new GtkListStore(GObject::TYPE_STRING, GObject::TYPE_STRING);

		// Cria o treeview
		$this->widgets['trvDemo'] = new GtkTreeView($model);
		$this->widgets['trvDemo']->set_headers_visible(FALSE);

		// Cria a coluna da imagem
		$render = new GtkCellRendererPixbuf(); 
		// Configura o tamanho da imagem
		$render->set_fixed_size(160, 120);
		$column = new GtkTreeViewColumn("Coluna 1");
		$column->pack_start($render);
		$this->widgets['trvDemo']->append_column($column);
		$column->set_cell_data_func($render, array($this, "trvDemo_onrender"), 0);

		// Cria a coluna do texto
		$render = new GtkCellRendererText();
		$column = new GtkTreeViewColumn("", $render, "text", 1);
		$this->widgets['trvDemo']->append_column($column);
		$column->set_cell_data_func($render, array($this, "trvDemo_onrender"), 1);

		// Inicia a aplicação
		$this->widgets['frmDemo']->add($this->widgets['trvDemo']);
		$this->frmDemo_onload();
	}
	
	/**
	 * Método do carregamento do formulario
	 * 
	 * @name frmDemo_onload()
	 */
	public function frmDemo_onload() {
		// Popula o model
		$this->widgets['trvDemo']->get_model()->append(array("/home/scorninpc/Fotos/Viagens/Carnaval 2012/DSC02808.JPG", "Carnaval 2012\nTirada em 18/02/2012"));
		$this->widgets['trvDemo']->get_model()->append(array("/home/scorninpc/Fotos/Viagens/Carnaval 2012/DSC02642.JPG", "Carnaval 2012\nTirada em 18/02/2012"));
		$this->widgets['trvDemo']->get_model()->append(array("/home/scorninpc/Fotos/Viagens/Carnaval 2012/DSC02662.JPG", "Carnaval 2012\nTirada em 18/02/2012"));
		$this->widgets['trvDemo']->get_model()->append(array("/home/scorninpc/Fotos/Viagens/Carnaval 2012/DSC02735.JPG", "Carnaval 2012\nTirada em 18/02/2012"));
		
		// Inicia a aplicação
		$this->widgets['frmDemo']->show_all();
		Gtk::main();
	}
	
	/**
	 * Método do descarregamento do formulario
	 * 
	 * @name frmDemo_unload()
	 */
	public function frmDemo_unload() {
		// Encerra a aplicação
		Gtk::main_quit();
		exit(0);
	}

	/**
	 * Método que estiliza o treeview
	 * 
	 * @name trvDemo_ontoggle
	 * @param GtkWidget $widget Widget clicado
	 * @param int $row Numedo da linha
	 * @param int $value Valor clicado
	 */
	public function trvDemo_onrender($column, $cell, $model, $iter, $column) {
		// Verifica a coluna
		if($column == 0) {
			// Cria o pixbuf da imagem
			$val = $model->get_value($iter, 0);
			$pixbuf = GdkPixbuf::new_from_file_at_size($val, 160, 120); 
			
			// Adiciona o pixbuf
			$cell->set_property("pixbuf", $pixbuf);
		}
	}
}
	
/**
 * Inicia o demo
 */
new Demo();

Referências

http://gtk.php.net/manual/en/gtk.gtkcellrendererpixbuf.php
http://gtk.php.net/manual/en/gtk.gtkcellrenderertext.php
http://gtk.php.net/manual/en/gtk.gtktreeviewcolumn.php
http://gtk.php.net/manual/en/gtk.gtkliststore.php
http://gtk.php.net/manual/en/gtk.gtktreeview.php
http://gtk.php.net/manual/en/gdk.gdkpixbuf.php