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 (); ?>