Exemplo Funcional em PHP-GTK2
O exemplo mostra como construir programas funcionais em PHP-GTK2.
O exemplo a seguir pressupõe-se que o leitor já saiba usar o glade, no caso, usei a versao 3, sistema operacional Ubuntu 7. Minha placa de vídeo e NVIDIA GeForce 6200 256 MB. Driver baixado: NVIDIA-Linux-x86-1.0-9746-pkg1.run. Lógico, existem outras versões que poderão ser testadas. Veja que e apenas uma adaptação dos ícones mágicos do Kurumin.
Utilizei o conteiner fixed. Nomeie o arquivo setup.glade.
Tentei faze-lo OO, mas ate o momento não consegui roda-lo adequadamente. Bem, o arquivo e um estudo, falta muita coisa para implementar. Altere-o. Lembre-se de me mandar as alterações.
Um abraço e ate a próxima.
Consulta:
PHP-GTK: Criando aplicações gráficas com PHP. Pablo Dall' Oglio, 2 ed. Sao Paulo: Novatec editora, 2007.
Kurumin Linux 7. Ícones mágicos. Carlo E. Morimoto, Guia do Hardware.Net.
arquivo: setup.glade
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE glade-interface SYSTEM "glade-2.0.dtd">
<!--Generated with glade3 3.2.0 on Sun Aug 26 17:46:01 2007 by elias@hiper-dcb-->
<glade-interface>
<widget class="GtkWindow" id="window1">
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="title" translatable="yes">Install NVIDIA</property>
<property name="resizable">False</property>
<property name="window_position">GTK_WIN_POS_CENTER</property>
<child>
<widget class="GtkFixed" id="fixed1">
<property name="visible">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<child>
<widget class="GtkImage" id="image1">
<property name="width_request">387</property>
<property name="height_request">120</property>
<property name="visible">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="pixbuf">geforce.jpeg</property>
</widget>
<packing>
<property name="x">30</property>
<property name="y">6</property>
</packing>
</child>
<child>
<widget class="GtkHSeparator" id="hseparator1">
<property name="width_request">430</property>
<property name="height_request">20</property>
<property name="visible">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
</widget>
<packing>
<property name="x">13</property>
<property name="y">130</property>
</packing>
</child>
<child>
<widget class="GtkTextView" id="textview1">
<property name="width_request">427</property>
<property name="height_request">195</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="wrap_mode">GTK_WRAP_WORD_CHAR</property>
<property name="justification">GTK_JUSTIFY_CENTER</property>
<property name="text" translatable="yes">O driver permite que você rode os games 3D e outros aplicativos usando todos os recursos da placa de vídeo. A instalação é basicamente automatizada. Lembre-se que este script só funciona se você estiver conectado.O driver da nVidia possui três versões distintas. A versão que vamos instalar é a mais 9746, destinada às Geforce 6100 em diante.
Instruçoes:
Ao ser desativado o modo gráfico, tecle Alt + F2, entre com o seu nome de usuário e senha. Va ate /opt (cd /opt) digite sudo ./nome do driver. E entre com o que se pede. Ao final da configuração, digite sudo gdm start, para entrar em modo grafico.</property>
</widget>
<packing>
<property name="x">7</property>
<property name="y">145</property>
</packing>
</child>
<child>
<widget class="GtkButton" id="button1">
<property name="width_request">100</property>
<property name="height_request">30</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="has_focus">True</property>
<property name="receives_default">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="label" translatable="yes">gtk-execute</property>
<property name="use_stock">True</property>
<signal name="clicked" handler="onInstall"/>
</widget>
<packing>
<property name="x">100</property>
<property name="y">355</property>
</packing>
</child>
<child>
<widget class="GtkButton" id="button2">
<property name="width_request">100</property>
<property name="height_request">30</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="label" translatable="yes">gtk-close</property>
<property name="use_stock">True</property>
<signal name="clicked" handler="gtk_main_quit" object="gtk::main_quit();"/>
</widget>
<packing>
<property name="x">253</property>
<property name="y">355</property>
</packing>
</child>
<child>
<widget class="GtkHSeparator" id="hseparator2">
<property name="width_request">430</property>
<property name="height_request">20</property>
<property name="visible">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
</widget>
<packing>
<property name="x">13</property>
<property name="y">340</property>
</packing>
</child>
</widget>
</child>
</widget>
</glade-interface>
Arquivo install.php
<?php
$glade = new GladeXML('setup.glade');
$glade->signal_autoconnect();
$janela = $glade->get_widget("window1");
$fixed = $glade->get_widget("fixed1");
$texto = $glade->get_widget("textview1");
$imglogo = $glade->get_widget("image1");
$hsep1 = $glade->get_widget("hseparator1");
$hsep2 = $glade->get_widget("hseparator2");
$btnInstall= $glade->get_widget("button1");
$btncancel = $glade->get_widget("button2");
$imgbtnok = $glade->get_widget("image2");
$imgbtcancel = $glade->get_widget("image3");
$expander = $glade->get_widget("expander1");
$lista = $glade->get_widget("list1");
$lblSep = $glade->get_widget("label1");
//fecha a janela =>fui
function gtk_main_quit()
{
gtk::main_quit();
}
//inicia o processo de instalação placa nvidia
function onInstall()
{
$cmdexec= exec('wget -c http://download.nvidia.com/XFree86/Linux-x86/1.0-9746/NVIDIA-Linux-x86-1.0-9746-pkg1.run');
if ($cmdexec =! 0)
{
echo ' Arquivo baixado. Espere...
';
exec('gksu chmod +x NVIDIA-Linux-x86-1.0-9746-pkg1.run');
exec('cp -i NVIDIA-Linux-x86-1.0-9746-pkg1.run /opt/');
$dialog = new GtkMessageDialog(null, Gtk::DIALOG_MODAL, Gtk::MESSAGE_INFO, Gtk::BUTTONS_OK, "Aviso! Para concluir a instalação, precisarei desativar temporariamente o ambiente gráfico. Ao clicar no OK, você irá para o prompt de login no modo texto. Para concluir a instalação, logue-se como 'root' (usando a senha definida durante a instalação) e siga as instruções do instalador.");
$ok_button = $dialog->add_button(Gtk::STOCK_CANCEL, Gtk::RESPONSE_CANCEL);
$response = $dialog->run();
if ($response == Gtk::RESPONSE_OK) {exec('gksudo /etc/init.d/gdm stop');};
if ($response == Gtk::RESPONSE_CANCEL) echo "Tente configura-lo depois";
$dialog->destroy();
}
else {
echo 'Erro! Tente novamente.';
exit;
};
}
//garante o fechamento da janela liberando memória
$janela->connect_simple('destroy', 'gtk_main_quit');
$janela->show_all();
Gtk::main();
?>





