Página Inicial > Gtk/Gdk, GtkComboBox > Utilizando GtkComboBox com ID personalizado

Utilizando GtkComboBox com ID personalizado

Qual iniciante não ficou reclamando: "mais eu não quero esse contador estupido aqui, quero colocar o ID do meu cadasto" ^_^´

Bem, para ajudar um amigo da lista php-gtk brasil, eu escrevi um código simples e facil de entender, onde eu utilizo um model, e coloco o valor que eu quero la dentro. Simples não?

Bem, ai vai um código explicadinho:

<?php
   
   // Cria a janela
   $window = new GtkWindow();
   $window->set_size_request(250, 100);
   $fix = new GtkFixed();
   
   // Cria o combo
   $campos['idFornecedor'] = new GtkComboBox();
   $campos['midFornecedor'] = new GtkListStore(Gobject::TYPE_STRING, Gobject::TYPE_PHP_VALUE);
   $campos['idFornecedor']->set_size_request(200, 23);
   // Cria o conteudo do combo
   $render = new GtkCellRendererText();
   $campos['idFornecedor']->set_model($campos['midFornecedor']);
   $campos['idFornecedor']->pack_start($render);
   $campos['idFornecedor']->set_attributes($render,'text',0);
   
   // Cria o botao
   $campos['btnAdd'] = new GtkButton('Add');
   
   // Adiciona os campos
   $fix->put($campos['idFornecedor'], 8, 8);
   $fix->put($campos['btnAdd'], 8, 36);
   
   // Conecta os sinais
   $window->connect_simple('destroy', array('Gtk', 'main_quit'));
   $campos['btnAdd']->connect_simple('clicked', 'onclick');
   $campos['idFornecedor']->connect_simple('changed', 'onchange');
   
   // Mostra tudo e inicia a aplicação
   $window->add($fix);
   $window->show_all();
   gtk::main();

   // Ao clicar no botão
   function onclick()
   {
      global $campos;
      
      // Gera um ID random
      $id = rand(50, 200);
      $nome = $id . "° fornecedor";
      
      // Adiciona o fornecedor no combobox
      $campos['midFornecedor']->append(
         array($nome, $id)
      );

   }
   
   // Ao selecionar um valor no combobox
   function onchange()
   {
      global $campos;
      
      // Busca o valor selecionado
      $Iter = $campos['idFornecedor']->get_active_iter();
      printf("%s\n", $campos['midFornecedor']->get_value($Iter, 1));
   }
 

Bem, a idéia é criar um model, e coloca-lo no combobox, assim eu manipulo os dados do model e não do combobox =D

Valeu galera, espero ter ajudado =)

  1. Wendell Diniz
    7, novembro, 2008 em 07:36 | #1

    Perfeito. Trabalhar um GtkComboBox utilizando um model é muito parecido com o jeito que se lida com o GtkTreeView. Ambos usam o GtkListStore como modelo de dados, então se vc domina um, o outro sai naturalmente.

  2. Bruno Gonçalves
    7, novembro, 2008 em 08:13 | #2

    Isso ai Wendell =D

    Bom, nunca precisei, mas pela idéia, penso que seja assim que se coloca objetos dentro de combobox, como o checkbox.

    Sem duvidas, utilizar modelo de dados, acaba virando mais simples e flexivel quando se entende como utilizar.

  1. Nenhum trackback ainda.