• Artigos
  • Projetos
  • Download
  • Docs
  • Enviar Artigo
  • ?

Trabalhando com abas em PHP-GTK (GtkNotebook)

20/09/2009  Pablo DallOglio  Ler e Comentar

Neste exemplo, veremos um Notebook Horizontal com vários controles que demonstram as suas funcionalidades. Este exemplo consiste em uma janela contendo uma caixa vertical com um Notebook e abaixo três botões. O botão “voltar” exibe a página anterior, o botão “avançar” avança de página e o botão “excluir” apaga a página atual. Ainda temos uma ComboBox que altera o posicionamento das abas na tela (esquerda, topo, direita, abaixo). Ainda, aproveitando o exemplo de GtkNotebook, temos em cada aba, um GtkFrame com diferentes estilos de borda.



<?php
/*
 * classe ExemploNotebookHorizontal
 * Encapsula todo exemplo de Notebook horizontal
 * @author Pablo Dall'Oglio
 */
class ExemploNotebookHorizontal
{
    private 
$window;
    private 
$comboBox;
    
    
/**
     * Método construtor
     * Cria a janela principal
     */
    
public function __construct()
    {
        
// cria janela principal
        
$this->window = new GtkWindow;
        
$this->window->set_title('Testando Notebook');
        
$this->window->connect_simple('destroy', array(Gtk, 'main_quit'));
        
$this->window->set_default_size( 300, 280);
        
        
// cria notebook
        
$this->notebook = new GtkNotebook;
        
        
// cria caixa vertical
        
$vbox = new GtkVBox;
        
        
// cria caixa horizontal
        
$hbox = new GtkHBox;
        
        
// adiciona notebook e caixa horizontal à caixa vertical
        
$vbox->pack_start($this->notebook,  true, true);
        
$vbox->pack_start($hbox,            false, false);
        
        
// empacota botões de trás, avançar e delete
        
$hbox->pack_start($back = GtkButton::new_from_stock(Gtk::STOCK_GO_BACK),     false, false);
        
$hbox->pack_start($next = GtkButton::new_from_stock(Gtk::STOCK_GO_FORWARD),  false, false);
        
$hbox->pack_start($dele = GtkButton::new_from_stock(Gtk::STOCK_DELETE),      false, false);
        
        
// define as ações do botão
        
$back->connect_simple('clicked', array($this, 'onBack'));
        
$next->connect_simple('clicked', array($this, 'onNext'));
        
$dele->connect_simple('clicked', array($this, 'onDelete'));
        
        
// cria comboBox com posições (left, right, top, bottom)
        
$this->comboBox = GtkComboBox::new_text();
        
$hbox->pack_start($this->comboBox);
        
$this->comboBox->insert_text(Gtk::POS_LEFT,   'Left');
        
$this->comboBox->insert_text(Gtk::POS_RIGHT,  'Right');
        
$this->comboBox->insert_text(Gtk::POS_TOP,    'Top');
        
$this->comboBox->insert_text(Gtk::POS_BOTTOM, 'Bottom');
        
$this->comboBox->set_active(Gtk::POS_TOP);
        
$this->comboBox->connect_simple('changed', array($this, 'onChange'));
        
# 0 Gtk::POS_LEFT
        # 1 Gtk::POS_RIGHT
        # 2 Gtk::POS_TOP
        # 3 Gtk::POS_BOTTOM
        
        // adiciona caixa vertical à janela e exibe-a
        
$this->window->add($vbox);
        
$this->window->show_all();
    }

    
/**
     * Método onDelete
     * Apaga a página corrente
     */
    
function onDelete()
    {
        
// obtém a página corrente
        
$page = $this->notebook->get_current_page();
        
// remove a página corrente
        
$this->notebook->remove_page($page);
    }

    
/**
     * Método onChange
     * Altera a posição das abas com base na ComboBox
     */
    
function onChange()
    {
        
// obtem a posição da combo
        
$index = $this->comboBox->get_active();
        
// altera a posição do notebook
        
$this->notebook->set_tab_pos($index);
    }

    
/**
     * Método onBack
     * Vai para a aba anterior
     */
    
function onBack()
    {
        
// obtém a página corrente
        
$page = $this->notebook->get_current_page();
        
// retrocede uma página
        
$this->notebook->set_current_page($page - 1);
    }
    
    
/**
     * Método onNext
     * Vai para a próxima aba
     */
    
function onNext()
    {
        
// obtém a página corrente
        
$page = $this->notebook->get_current_page();
        
// avança uma página
        
$this->notebook->set_current_page($page + 1);
    }
    
    
/**
     * Método addPage
     * Adiciona uma página
     * @title   título da aba
     * @shadow  estilo da borda do frame
     * @content conteudo do frame
     */
    
function addPage($title, $shadow, $content)
    {
        
// cria um frame
        
$frame = new GtkFrame($title);
        
$frame->set_shadow_type($shadow);
        
$frame->set_border_width(6);
        
        
// cria um rótulo de texto
        
$rotulo = new GtkLabel($title);
        
        
// adiciona o conteúdo ao frame
        
$frame->add($content);
        
        
// adiciona página no notebook
        
$this->notebook->append_page($frame, $rotulo);
        
$this->window->show_all();
    }
}
// instancia Exemplo
$exemplo = new ExemploNotebookHorizontal;

// adiciona páginas de diferentes títulos, estilos e conteúdos...
$exemplo->addPage('Shadow IN',  GTK::SHADOW_IN,         new GtkLabel('content1'));
$exemplo->addPage('Shadow OUT', GTK::SHADOW_OUT,        new GtkLabel('content2'));
$exemplo->addPage('Etched IN',  GTK::SHADOW_ETCHED_IN,  new GtkLabel('content3'));
$exemplo->addPage('Etched OUT', GTK::SHADOW_ETCHED_OUT, new GtkLabel('content4'));
Gtk::main();
?>




Comentários

 Adicionar Comentário
 login
 Senha
 Título
 Comentário

Livros




    Outros

    Busque conteúdo no site
    Participe de nosso grupo no google

    [Grupo]  [Arquivos] [Mapa Usuários]

    Google

    Parceiros

 
Designed by Wolfgang Bartelme Designed by Wolfgang Bartelme

© 2006 Wordpress Themes | Theme (Not so) Fresh
XHTML CSS RSS