Trabalhando com abas em PHP-GTK (GtkNotebook)
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();
?>





