PHP-GTK2
Pablo Dall'Oglio
Adianti Solutions
www.adianti.com.br

Pablo Dall'Oglio [pablo@php.net]
PHP-GTK2
Pablo Dall'Oglio [pablo@php.net]
PHP-GTK2

+

=
TalkLog
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●

FISL - Porto Alegre, May 4, 2002;
SICOMP - Univates, April 11, 2002;
1ª sem. Informática, Urcamp, May, 27, 2002;
2ª sem. Informática, Urcamp, October, 18, 2002;
I SDSL, Unisinos, July, 17, 2003;
Tríade Acadêmica, Feevale, Oct, 2003;
Conf. SL Brasil, Curitiba, Nov, 6, 2003;
UniInfo, Unisinos, Nov, 14 2003;
II SDSL, Unicamp, Dec, 24, 2003;
I SCSL, Brasília, April, 29, 2004;
5 FISL, Porto Alegre, June, 3, 2004;
III SDSL, Univates, July, 20, 2004;
Criciúma, SC, Aug, 14, 2004;
UniInfo, Unisinos, Oct, 2004;
Fórum do Gnome, Foz do Iguaçu, Nov, 2004;
FURG, Rio Grande, Out, 2005;
Fórum do Gnome, Curitiba, Nov, 2005;
II Jornadas de Informática, Fac. Int. Itararé, Maio, 2006;
PHP Conference Brasil, Novembro, 2006;
PHP Road Show, Brasília, Maio, 2007;
PHP Now, Petrópolis-RJ, Novembro, 2007;

Pablo Dall'Oglio [pablo@php.net]
PHP-GTK2

+

=
O que é o PHP-GTK ?
●

Agenda;

●

Chat;

●

Grafico (jpgraph);

●

PhotoManager;

●

Excel;

●

Tulip;

●

Agata;

Pablo Dall'Oglio [pablo@php.net]
PHP-GTK2

+

=
História
PHP 1,2,3
▪ 1994 Rasmus Lerdorf (Personal Home Pages);
▪ Ferramenta para criar páginas dinâmicas;
▪ Voltada para web (comércio eletrônico, portais);
PHP 4
▪ Independência da Web;
▪ Scripts shell;
▪ PHP-GTK;
PHP 5
▪ Fortemente OO;
▪ Interfaces, visibilidade, membros estáticos,
abstract, final;
▪ Object Clonning, objetos como referência;
▪ Construtores, Destrutores, Manipulação de erros;
Pablo Dall'Oglio [pablo@php.net]
PHP-GTK2

+

=
Considerações
• Extremamente fácil de utilizar;
• Possivelmente a linguagem de script mais utilizada na
web;
• Vasta Bibliografia a respeito;
• Muitas funções (arquivos, arrays, strings, XML, Imagens,
ZIP, PDF, FTP, LDAP);
• Postgres, Oracle, Mysql, Sql$erver, SQLite, Firebird,
Sybase, Frontbase, Informix, ODBC, DBase, SapDB,
Adabas, DB2...
• Rápida, Flexível, não-rígida, tipagem dinâmica;
• Permite tanto abordagem Procedural quanto OO;
• A maioria de quem trabalha com PHP, não usa OO;
Pablo Dall'Oglio [pablo@php.net]
PHP-GTK2

+

=
GTK

Toolkit multi-plataforma para criar aplicações
gráficas;
Gtk+ foi desenvolvido para o GIMP, o GNU Image
Manipulation Program. Gtk+ significa GIMP Tool Kit.
O GTK+ tem crescido desde os primórdios e agora é
usado como parte central do Gnome, o ambiente
desktop GNU .
Gtk+ tem sido portado para o BeOS e Win32,
fazendo-se a escolha perfeita para ser usado como
base para uma extensão do PHP, mantendo o PHP
independente de plataforma e permitindo a criação
de aplicações "janelizadas" em PHP para linux, BeOS
e Windows.

Pablo Dall'Oglio [pablo@php.net]
PHP-GTK2

+

=
Gimp

Pablo Dall'Oglio [pablo@php.net]
PHP-GTK2

+

=
Gnome

Pablo Dall'Oglio [pablo@php.net]
PHP-GTK2

+

=
Firefox

Pablo Dall'Oglio [pablo@php.net]
PHP-GTK2

+

=
Evolution

Pablo Dall'Oglio [pablo@php.net]
PHP-GTK2

+

=
Tudo Começou...

• PHP-GTK é uma extensão do PHP;
• Criado por Andrei Zmievski;
• Nasceu como um experimento;
• Desenvolvido no outono de 2000;
• Primeira versão em Março de 2001;
• 2006 => PHP-GTK2 (PHP5 com GTK2);

Pablo Dall'Oglio [pablo@php.net]
PHP-GTK2

+

=
Sistema de Biblioteca

Pablo Dall'Oglio [pablo@php.net]
PHP-GTK2

+

=
Web versus Client

Aplicações Web
• Dirigida à requisição de páginas;
• Execução procedural;
• Total integração com o servidor;

Aplicações Cliente
• Dirigidas à eventos;
• O programador cria a interface, e esta aguarda por
eventos ou sinais;
• Tem acesso aos recursos da máquina cliente, além
do servidor;
Pablo Dall'Oglio [pablo@php.net]
PHP-GTK2

+

=
Reuso

Pablo Dall'Oglio [pablo@php.net]
PHP-GTK2

+

=
Widgets

• Widgets é uma palavra derivada de “Windows” +
“Gadgets”. Um widget é um componente da
interface gráfica com o qual o usuário pode
interagir. Como uma caixa de texto, label,
frame;

Pablo Dall'Oglio [pablo@php.net]
PHP-GTK2

+

=
Instanciando Objetos
<?php
// criar janela
$janela = new GtkWindow;
// chamar método
$janela­>set_title('Título da Janela');
// criar botão
$botao = new GtkButton('Clique ME!');
// chamar método
$janela­>add($botao);
?> 

Pablo Dall'Oglio [pablo@php.net]
PHP-GTK2

+

=
Signals

• São notificações (mensagens) emitidas por
widgets. Quando se programa Interfaces Gráficas
(GUI) geralmente é necessário responder a ações
realizadas pelo usuário ou iniciadas dentro do
próprio programa. Quando um usuário clica em
um botão, um sinal é emitido.
•
•
•
•

destroy
row-activated
activate
pressed, released, clicked

Pablo Dall'Oglio [pablo@php.net]
PHP-GTK2

+

=
Callbacks

• São funções que são registradas pelo
programador para reagir a sinais emitidos por
widgets.
$widget­>connect('signal','callback');
Exemplo:
$button­>connect('clicked', 'alerta_usuario');

Pablo Dall'Oglio [pablo@php.net]
PHP-GTK2

+

=
Empacotamento

• Construção da interface através de Containers:
• GtkHBox, GtkVBox, GtkFrame, GtkNotebook;
Exemplo:
$janela = new GtkWindow;
$hbox   = new GtkHBox;
$janela­>add($hbox);
$hbox­>pack_start(new GtkLabel('Código...:'));
$hbox­>pack_start(new GtkEntry);

Pablo Dall'Oglio [pablo@php.net]
PHP-GTK2

+

=
Posições Fixas

Exemplo:
$janela = new GtkWindow;
$fixed  = new GtkFixed;
$janela­>add($fixed);
$label  = new GtkLabel('Código...:')
$fixed­>put($label, 10, 20);
Pablo Dall'Oglio [pablo@php.net]
PHP-GTK2

+

=
Exemplo
<?
function onClick()
{
    echo "Você clicou no botãon";
}
function onExit()
{
    echo "Você fechou o programan";
    Gtk::main_quit();
}
$janela = new GtkWindow;
$janela­>connect('destroy', 'onExit');
$botao = new GtkButton(' Click here ! ');
$botao­>connect('clicked', 'onClick');
$janela­>add($botao);
$janela­>show_all();
Gtk::main();
?>
Pablo Dall'Oglio [pablo@php.net]
PHP-GTK2

+

=
Glade

O Glade é uma ferramenta para
acelerar a construção da interface da
aplicação, os projetos desenvolvidos
nele são gravados no formato XML.

Pablo Dall'Oglio [pablo@php.net]
PHP-GTK2

+

=
Glade
<?php
$glade = new GladeXML('exemplo.glade');
$botao = $glade­>get_widget('botao');
$entry = $glade­>get_widget('caixa_texto');
$botao­>connect('clicked', 'hello_world');
function hello_world()
{
    global $entry;
    $entry­>set_text('Hello World');
}
Gtk::Main();
?> 

Pablo Dall'Oglio [pablo@php.net]
PHP-GTK2

+

=
Text Markup
<?
$window = new GtkWindow;
$window­>set_default_size(200,200);
$vbox = new GtkVBox;
$label = new GtkLabel();
$label­>set_markup('<b><i><u>
negrito,
italico e
sublinhado</u></i></b>');
$vbox­>pack_start($label);
$label = new GtkLabel();
$label­>set_markup('<span foreground="blue" background="gray">
<b>Texto: Azul fundo cinza</b></span>');
$vbox­>pack_start($label);
//...
$window­>add($vbox);
$window­>show_all();
gtk::main();
?>
Pablo Dall'Oglio [pablo@php.net]
PHP-GTK2

+

=
Stock Items
<?
// cria nova janela
$window = new GtkWindow;
$window­>set_default_size(120,100);
// cria caixa vertical
$vbox = new GtkVBox;
// cria botão a partir do estoque, usando
// uma constante para representar...
$button = GtkButton::new_from_stock(Gtk::STOCK_OK);
$vbox­>pack_start($button);
$button = GtkButton::new_from_stock(Gtk::STOCK_CANCEL);
$vbox­>pack_start($button);
$button = GtkButton::new_from_stock(Gtk::STOCK_FLOPPY);
$vbox­>pack_start($button);
// adiciona caixa vertical à janela e a exibe
$window­>add($vbox);
$window­>show_all();
gtk::main();
?>
Pablo Dall'Oglio [pablo@php.net]
PHP-GTK2

+

=
Diálogos
<?php
$dialog = new GtkMessageDialog(null, Gtk::DIALOG_MODAL,
      Gtk::MESSAGE_QUESTION, Gtk::BUTTONS_YES_NO,
      'Deseja continuar ?');
$response = $dialog­>run();
var_dump($response);
if ($response == Gtk::RESPONSE_YES)
    echo 'sim';
if ($response == Gtk::RESPONSE_DELETE_EVENT)
    echo 'fechou';
$dialog­>destroy();
?> 

Pablo Dall'Oglio [pablo@php.net]
PHP-GTK2

+

=
TreeView

Pablo Dall'Oglio [pablo@php.net]
PHP-GTK2

+

=
TreeView
$list = new GtkTreeView;
$model = new GtkListStore(Gtk::TYPE_STRING, Gtk::TYPE_STRING);
$list­>set_model($model);
$column1 = new GtkTreeViewColumn('Name');
$column2 = new GtkTreeViewColumn('Points');
$cell_renderer1 = new GtkCellRendererText();
$cell_renderer2 = new GtkCellRendererText();
$column1­>pack_start($cell_renderer1, true);
$column2­>pack_start($cell_renderer2, true);
$list­>append_column($column1);
$list­>append_column($column2);
$dados[] = array('Gustavo Kuerten','3258 pontos');
$dados[] = array('Andre Agassi',   '2986 pontos');
foreach ($dados as $jogador)
{
    $iter = $model­>append($jogador);
}
Pablo Dall'Oglio [pablo@php.net]
PHP-GTK2

+

=
TextView

Pablo Dall'Oglio [pablo@php.net]
PHP-GTK2

+

=
Interface

Pablo Dall'Oglio [pablo@php.net]
PHP-GTK2

+

=
SQLite

• Embutido no PHP5;
• Iniciado no ano de 2000
por Richard Hipp;
• Banco de Dados composto
por simples arquivos;
• Subselect, triggers,
transações, views, 2-3x
mais rápido que MySQL,
limite de 2 Terabytes,
views são read-only, sem
foreign keys;

Pablo Dall'Oglio [pablo@php.net]
PHP-GTK2

+

=
SQLite
<?php
// Abre o BD (cria se não existir);
$db = sqlite_open("cidades.db"); 
// Consultas
$result = sqlite_query($db, "SELECT * from cidades"); 
// Retornando os dados
while ($row = sqlite_fetch_array($result))
{
    print_r($row); 
}
// Fecha a conexão
sqlite_close($db);
?> 

Pablo Dall'Oglio [pablo@php.net]
PHP-GTK2

+

=
SQLite
<?php
$janela = new GtkWindow;
$vbox   = new GtkVBox;
$label1 = new GtkLabel('Código');
$label2 = new GtkLabel('Nome');
$codigo = new GtkEntry;
$nome   = new GtkEntry;
$vbox­>pack_start($label1);
$vbox­>pack_start($codigo);
$vbox­>pack_start($label2);
$vbox­>pack_start($nome);
$botao = GtkButton::new_from_stock(GTK::STOCK_OK);
$botao­>connect('clicked', 'onClick');
$vbox­>pack_start($botao);
$janela­>add($vbox);
$janela­>show_all();

Pablo Dall'Oglio [pablo@php.net]
PHP-GTK2

+

=
SQLite

function onClick()
{
    global $codigo, $nome;
    // obtém valores dos campos
    $texto_codigo = $codigo­>get_text();
    $texto_nome   = $nome­>get_text();
    $db = sqlite_open("pessoas.db");
    sqlite_query($db, "insert into pessoas (codigo, nome)
                values ('$texto_codigo', '$texto_nome')");
    sqlite_close($db);
    $codigo­>set_text('');
    $nome­>set_text('');
}
Gtk::Main();
?>  
Pablo Dall'Oglio [pablo@php.net]
PHP-GTK2

+

=
Adianti Studio G2

Pablo Dall'Oglio [pablo@php.net]
PHP-GTK2

+

=
Agata

Pablo Dall'Oglio [pablo@php.net]
PHP-GTK2

+

=
Linux Stock

Pablo Dall'Oglio [pablo@php.net]
PHP-GTK2

+

=
Referências

Pablo Dall'Oglio [pablo@php.net]
PHP-GTK2

+

=
Obrigado!

E-Mail
pablo@php.net
pablo@dalloglio.net

URL
http://www.php-gtk.com.br
http://www.adianti.com.br
http://www.pablo.blog.br

Pablo Dall'Oglio [pablo@php.net]
PHP-GTK2

+

=
Creative Commons

Estes slides estão disponíveis sob a licença não comercial da
creative commons 1.0;
• Você pode distribuir, copiar, exibir e realizar outros trabalhos
seguindo estas condições:
▪ Atribuição: Você deve dar os créditos ao autor original;
▪ Não-Comercial: Você não pode utilizar este trabalho para
propósitos comerciais;
▪ Não derivar trabalhos: Você não pode alterar, transformar, ou
construir algo sobre este trabalho.
▪ Para todo reuso ou distribuição, você deve deixar explícito para
os outros, os termos da licença deste trabalho;
▪ Estas condições podem ser alteradas se você obter permissão do
autor;
• O uso justo e outros direitos não são afetados pelas condições
acima.
•

Pablo Dall'Oglio [pablo@php.net]
PHP-GTK2

+

=

Criando aplicações com PHP-GTK