Académique Documents
Professionnel Documents
Culture Documents
PROGRAMAO
Hora de construir
Enquanto o uso das classes de PHP-GTK cria interfaces rpidas, o Glade pode tornar a tarefa ainda mais fcil. por Pablo DallOglio
o primeiro artigo desta srie[1], conhecemos o PHPGTK, extenso da linguagem de programao PHP, que nos permite desenvolver aplicaes grcas standalone. Neste segundo artigo,
iremos estudar as diversas formas de se construir uma interface. A biblioteca GTK formada por um conjunto de classes, organizadas hierarquicamente e que disponibilizam uma interface totalmente orientada a objetos. Isso permite o reaproveitamento de cdigo atravs de mecanismos como a herana. A grande maioria das classes descende da superclasse GtkObject. Toda classe-lha herda automaticamente o comportamento (mtodos e propriedades) da classe pai. Para exemplicarmos, todas as classes descendentes de GtkBin so contineres que podem conter um elemento em seu interior. J as classes descendentes de GtkBox podem conter vrios.
de, e uma caixa vertical no centro, sendo que essa caixa vertical contm outros trs objetos do tipo GtkLabel (rtulos de texto). Observe que podemos construir a interface recursivamente, colocando objetos dentro de objetos. Quem considera complexo demais projetar o visual do aplicativo com base no empacotamento pode dispor da construo baseada em posies xas. O GTK possui um continer chamado GtkFixed, que proporciona uma rea na qual os objetos podem ser ancorados em coordenadas absolutas denidas em pixels. No exemplo 2, criamos um objeto chamado $fixed_area, que justamente um objeto do tipo GtkFixed dentro da janela. A partir disso, colocamos vrios objetos em seu interior (figura 2), sempre denindo a posio em termos de coluna e linha, por meio do mtodo put().
Posies Fixas
A primeira forma de construirmos a interface grca atravs do empacotamento de objetos, ou seja, colocando uns objetos dentro de outros. Para tal, necessrio entender quais objetos permitem que se adicione contedo (contineres) e quais no. Em princpio, objetos descendentes da classe GtkContainer podem conter outros elementos dentro de si. No exemplo 1, iremos construir uma janela (GtkWindow) e adicionar uma caixa horizontal em seu interior. Dentro da caixa horizontal, vamos adicionar trs objetos, conforme a gura 1: dois rtulos de texto (GtkLabel), sendo um em cada extremida-
Empacotamento
Glade
At o momento, construmos o visual do aplicativo via programao. Essa forma de desenvolvimento melhora o desempenho do aplicativo, mas, por outro lado, no to produtiva para programadores acostumados com ambientes RAD. Para situaes em que precisamos de maior agilidade no desenvolvimento visual do aplicativo, podemos utilizar o Glade.
76
http://www.linuxmagazine.com.br
O Glade uma ferramenta criada especialmente para desenho visual de aplicativos GTK. Ele pode ser utilizado em conjunto com todas as linguagens que suportam o GTK. Essa ferramenta disponibiliza ao programador uma paleta de com-
ponentes e uma janela de propriedades que propiciam a construo de interfaces por meio de recursos como clicar-e-arrastar, entre outros. O resultado nal do arquivo salvo pelo Glade um documento XML com a extenso .glade. No exemplo 3, utilizamos uma interfaExemplo 2: Janela com mltiplos ce criada no Glade. elementos Veja que para inter01 <?php pretar o documen02 // cria a janela to Glade precisamos 03 $janela = new GtkWindow; fazer uso da classe 04 $janela->set_size_request(300,200); 05 $janela->set_border_width(20); GladeXML. Essa classe 06 $janela->set_title(Ttulo da Janela); retorna um objeto 07 $glade, que disponi08 // cria fixed biliza acesso a todos 09 $fixed_area= new GtkFixed; 10 os objetos contidos 11 // adiciona rea fixa na janela dentro do documen12 $janela->add($fixed_area); to. Para obtermos tais 13 objetos, precisamos 14 // instancia diversos objetos 15 $rotulo1 = new GtkLabel(elemento1); executar o mtodo 16 $rotulo2 = new GtkLabel(elemento2); get_widget() , que 17 $botao = new GtkButton(clique aqui); recebe o nome do 18 $check = new GtkCheckButton(checkbutto n); objeto (exibido na 19 $radio = new GtkRadioButton(null, janela de proprieradiobutton); dades) e retorna o 20 $combo = new GtkCombo; objeto corresponden21 22 // coloca objetos na rea fixa te, como se ele fosse 23 $fixed_area->put($rotulo1, 10, 10); instanciado naquele 24 $fixed_area->put($rotulo2, 140, 10); momento. 25 $fixed_area->put($botao, 10, 50);
26 27 28 29 30 31 32 33 34 $fixed_area->put($check, $fixed_area->put($radio, $fixed_area->put($combo, // exibe a janela $janela->show_all(); Gtk::Main(); ?> 120, 50); 120, 80); 0, 120);
vamos estudar como se d a programao de eventos, que nos permitir escrever funes que reagem s aes tomadas pelo usurio frente aplicao.
Mais informaes
[1] Pablo DallOglio, Sempre Nativo. Linux Magazine 37, dezembro de 2007, pg. 70. [2] PHP-GTK Brasil: http://www.php-gtk.com.br [3] Site do autor: http://www.pablo.blog.br [4] Livro PHP-GTK: http://www.php-gtk. com.br/book
Sobre o autor
Pablo DallOglio (pablo@php.net) graduado em Anlise de Sistemas, autor de um livro sobre PHP-GTK e programa em PHP-GTK desde sua criao em 2001. membro da equipe de documentao e criador da comunidade brasileira de PHP-GTK. Atualmente, diretor de tecnologia e proprietrio da Adianti Solutions, onde atua como consultor de tecnologia e engenheiro de software.
Concluso
Neste artigo, apenas vimos como construir uma interface inanimada. No prximo artigo da srie,
77