Skip to content

Instantly share code, notes, and snippets.

@alganet
Created February 11, 2013 18:42
Show Gist options
  • Save alganet/4756549 to your computer and use it in GitHub Desktop.
Save alganet/4756549 to your computer and use it in GitHub Desktop.
PHP GTK-2 was a reallity for me. SOAP as well. It was a really cool application.
<?php
error_reporting(E_ALL|E_STRICT);
class Cube_Service_Client
{
private static $_i = array();
private function __construct($url)
{
$this->handler = new SoapClient($url,
array(
'exceptions' =>TRUE,
'trace' => TRUE
)
);
}
public static function getInstance($url)
{
if (!isset(self::$_i[$url])) {
self::$_i[$url] = new self($url);
}
return self::$_i[$url]->handler;
}
}
class AcmeGtk extends Cube_Gtk
{
public function __construct($name = 'Acme', $autoshow = true)
{
parent::__construct($name, $autoshow);
}
public function on_toolbutton_cadastro_clicked()
{
$ficha = new FichaGtk;
$vendedor = new CadastrovendedorGtk;
$bicicleta = new CadastrobicicletaGtk;
$carreta = new CadastrobicicletaGtk;
$comprador = new CadastrocompradorGtk;
$this->replaceChild(
$ficha->hbox_cadastro_ficha_vendedor,
$vendedor->notebook_cadastro_vendedor
);
$this->replaceChild(
$ficha->hbox_cadastro_ficha_bicicleta,
$bicicleta->notebook_cadastro_bicicleta
);
$this->replaceChild(
$ficha->hbox_cadastro_ficha_carreta,
$carreta->notebook_cadastro_bicicleta
);
$this->replaceChild(
$ficha->hbox_cadastro_ficha_comprador,
$comprador->notebook_cadastro_comprador
);
}
public function on_toolbutton_sair_clicked()
{
$this->on_Acme_destroy();
}
public function on_toolbutton_aprovacao_clicked()
{
}
public function on_toolbutton_retorno_clicked()
{
}
public function on_toolbutton_consulta_clicked()
{
}
public function on_toolbutton_baixa_clicked()
{
}
public function on_Acme_destroy()
{
Gtk::main_quit();
}
}
class FichaGtk extends Cube_Gtk
{
public function __construct($name = 'cadastro_ficha', $autoshow = true)
{
parent::__construct($name, $autoshow);
$this->ws = Cube_Service_Client::getInstance('http://172.16.21.11/Acme/public/service/Acme/?wsdl');
$this->alimentarCombo($this->ws->listarModosDeConsulta(), 'dados->modo->nome');
}
}
class CadastrovendedorGtk extends Cube_Gtk
{
protected $ws;
public function __construct($name = 'cadastro_vendedor', $autoshow = false)
{
parent::__construct($name, $autoshow);
$enderecos = new EnderecosGtk;
$contatos = new ContatosGtk;
$this->replaceChild(
$this->cadastro_vendedor_enderecos,
$enderecos->enderecos_dados
);
$this->replaceChild(
$this->cadastro_vendedor_contatos,
$contatos->contatos_dados
);
$this->ws = Cube_Service_Client::getInstance('http://172.16.21.11/Acme/public/service/Acme/?wsdl');
$this->wse = Cube_Service_Client::getInstance('http://172.16.21.11/Acme/public/service/Enderecamento/?wsdl');
$this->alimentarCombo($this->ws->listarCategorias(), 'dados->categoria->nome');
$this->alimentarCombo($this->wse->listarEstadosPorPais('BR'), 'dados->documentoEstadual->ufEmissao->abreviacao');
$this->alimentarCombo($this->wse->listarPaises(), 'dados->naturalidade->estado->pais->abreviacao');
}
public function on_dados_naturalidade_estado_pais_abreviacao_changed($combo)
{
$texto = $combo->get_active_text();
if (empty($texto)) return;
$this->alimentarCombo(
$this->wse->listarEstadosPorPais($texto),
'dados->naturalidade->estado->abreviacao'
);
}
public function on_dados_naturalidade_estado_abreviacao_changed($combo)
{
$texto = $combo->get_active_text();
if (empty($texto)) return;
$this->alimentarCombo(
$this->wse->listarCidadesPorEstado(
$this->{'dados->naturalidade->estado->pais->abreviacao'}->get_active_text(),
$texto
),
'dados->naturalidade->nome'
);
}
}
class CadastrobicicletaGtk extends Cube_Gtk
{
public function __construct($name = 'cadastro_bicicleta', $autoshow = false)
{
parent::__construct($name, $autoshow);
}
}
class CadastrocompradorGtk extends Cube_Gtk
{
public function __construct($name = 'cadastro_comprador', $autoshow = false)
{
parent::__construct($name, $autoshow);
$enderecos = new EnderecosGtk;
$contatos = new ContatosGtk;
$this->replaceChild(
$this->cadastro_comprador_enderecos,
$enderecos->enderecos_dados
);
$this->replaceChild(
$this->cadastro_comprador_contatos,
$contatos->contatos_dados
);
}
}
class EnderecosGtk extends Cube_Gtk
{
protected $ws;
public function __construct($name = 'enderecos', $autoshow = false)
{
parent::__construct($name, $autoshow);
$this->ws = Cube_Service_Client::getInstance('http://172.16.21.11/Acme/public/service/Enderecamento/?wsdl');
$this->alimentarCombo($this->ws->listarPaises(), 'dados->pais->abreviacao');
}
public function on_dados_pais_abreviacao_changed($combo)
{
$texto = $combo->get_active_text();
if (empty($texto)) return;
$this->alimentarCombo(
$this->ws->listarEstadosPorPais($texto),
'dados->estado->abreviacao'
);
$this->{'dados->estado->abreviacao'}->get_child()->set_text('');
$this->{'dados->cidade->nome'}->get_child()->set_text('');
$this->{'dados->bairro->nome'}->get_child()->set_text('');
}
public function on_dados_estado_abreviacao_changed($combo)
{
$texto = $combo->get_active_text();
if (empty($texto)) return;
$this->alimentarCombo(
$this->ws->listarCidadesPorEstado(
$this->{'dados->pais->abreviacao'}->get_active_text(),
$texto
),
'dados->cidade->nome'
);
$this->{'dados->cidade->nome'}->get_child()->set_text('');
$this->{'dados->bairro->nome'}->get_child()->set_text('');
}
public function on_dados_cidade_nome_changed($combo)
{
$texto = $combo->get_active_text();
if (empty($texto)) return;
$this->alimentarCombo(
$this->ws->listarBairrosPorCidade(
$this->{'dados->pais->abreviacao'}->get_active_text(),
$this->{'dados->estado->abreviacao'}->get_active_text(),
$texto
),
'dados->bairro->nome'
);
$this->{'dados->bairro->nome'}->get_child()->set_text('');
}
}
class ContatosGtk extends Cube_Gtk
{
public function __construct($name = 'contatos', $autoshow = false)
{
parent::__construct($name, $autoshow);
}
}
class Cube_Gtk extends GtkBuilder
{
public function __construct($nome, $autoshow=false)
{
parent::__construct();
$this->nome = $nome;
$this->add_from_file($nome.".glade");
$this->connect_signals_instance($this);
$janela_principal = $this->getMainWindow();
if ($autoshow) {
$janela_principal->show();
}
}
public function __get($nome)
{
return $this->get_object($nome);
}
public function getMainWindow()
{
return $this->get_object($this->nome);
}
public function alimentarCombo($dados, $caminhos)
{
if (empty($dados)) return;
$propriedade = explode('->',$caminhos);
$propriedade = end($propriedade);
$combo = $this->{$caminhos};
if (is_null($combo->get_model())) {
$store = new GtkListStore(GObject::TYPE_STRING);
$combo->set_model($store);
if ($combo instanceof GtkComboBoxEntry) {
$combo->set_text_column(0);
$completion = new GtkEntryCompletion();
$completion->set_model($store);
$completion->set_minimum_key_length(1);
$completion->set_text_column(0);
$combo->get_child()->set_completion($completion);
} else {
$combo->pack_start($cellRenderer = new GtkCellRendererText());
$combo->set_attributes($cellRenderer, 'text', 0);
}
} else {
$store = $combo->get_model();
$store->clear();
}
foreach ($dados as $item) {
$store->append(array($item->$propriedade));
}
}
public function replaceChild($container, $child)
{
foreach ($container->get_children() as $c) {
$container->remove($c);
}
$child->get_parent()->remove(
$child
);
$container->pack_start(
$child, true, true
);
}
}
$Acme = new AcmeGtk();
Gtk::main();
<?xml version="1.0"?>
<interface>
<!-- interface-requires gtk+ 2.10 -->
<!-- interface-naming-policy project-wide -->
<object class="GtkListStore" id="liststore1"/>
<object class="GtkListStore" id="liststore2"/>
<object class="GtkWindow" id="cadastro_ficha">
<property name="title" translatable="yes">Cadastro de Ficha</property>
<property name="window_position">center-always</property>
<signal name="delete_event" handler="on_cadastro_ficha_delete_event"/>
<child>
<object class="GtkVBox" id="vbox72">
<property name="visible">True</property>
<property name="orientation">vertical</property>
<child>
<object class="GtkFrame" id="frame6">
<property name="visible">True</property>
<property name="border_width">4</property>
<property name="label_xalign">0</property>
<child>
<object class="GtkAlignment" id="alignment6">
<property name="visible">True</property>
<property name="left_padding">12</property>
<child>
<object class="GtkHBox" id="hbox26">
<property name="visible">True</property>
<child>
<object class="GtkVBox" id="vbox73">
<property name="visible">True</property>
<property name="orientation">vertical</property>
<child>
<object class="GtkVBox" id="vbox74">
<property name="visible">True</property>
<property name="orientation">vertical</property>
<child>
<object class="GtkLabel" id="label73">
<property name="visible">True</property>
<property name="label" translatable="yes">Empresa</property>
</object>
<packing>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkComboBoxEntry" id="comboboxentry10">
<property name="visible">True</property>
</object>
<packing>
<property name="position">1</property>
</packing>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkVBox" id="vbox75">
<property name="visible">True</property>
<property name="orientation">vertical</property>
<child>
<object class="GtkLabel" id="label74">
<property name="visible">True</property>
<property name="label" translatable="yes">Produto</property>
</object>
<packing>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkComboBox" id="dados-&gt;modo-&gt;nome">
<property name="visible">True</property>
</object>
<packing>
<property name="position">1</property>
</packing>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="position">1</property>
</packing>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">False</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkFrame" id="frame7">
<property name="visible">True</property>
<property name="border_width">4</property>
<property name="label_xalign">0</property>
<child>
<object class="GtkTreeView" id="treeview6">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="border_width">4</property>
<property name="model">liststore1</property>
<property name="headers_clickable">False</property>
<child>
<object class="GtkTreeViewColumn" id="treeviewcolumn33">
<property name="resizable">True</property>
<property name="title">Tipo</property>
<property name="expand">True</property>
<property name="clickable">True</property>
<property name="reorderable">True</property>
<property name="sort_indicator">True</property>
</object>
</child>
<child>
<object class="GtkTreeViewColumn" id="treeviewcolumn34">
<property name="resizable">True</property>
<property name="title">Nome</property>
<property name="expand">True</property>
<property name="clickable">True</property>
<property name="reorderable">True</property>
<property name="sort_indicator">True</property>
</object>
</child>
<child>
<object class="GtkTreeViewColumn" id="treeviewcolumn35">
<property name="resizable">True</property>
<property name="title">Contato</property>
<property name="expand">True</property>
<property name="clickable">True</property>
<property name="reorderable">True</property>
<property name="sort_indicator">True</property>
</object>
</child>
</object>
</child>
<child type="label">
<object class="GtkLabel" id="label75">
<property name="visible">True</property>
<property name="label" translatable="yes">&lt;b&gt;Retornos&lt;/b&gt;</property>
<property name="use_markup">True</property>
</object>
</child>
</object>
<packing>
<property name="position">1</property>
</packing>
</child>
</object>
</child>
</object>
</child>
<child type="label">
<object class="GtkLabel" id="label76">
<property name="visible">True</property>
<property name="label" translatable="yes">&lt;b&gt;Dados da Empresa&lt;/b&gt;</property>
<property name="use_markup">True</property>
</object>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">False</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkNotebook" id="notebook3">
<property name="visible">True</property>
<property name="can_focus">True</property>
<child>
<object class="GtkHBox" id="hbox_cadastro_ficha_profissional">
<property name="visible">True</property>
<child>
<object class="GtkLabel" id="label95">
<property name="visible">True</property>
<property name="label" translatable="yes">label</property>
</object>
<packing>
<property name="position">0</property>
</packing>
</child>
</object>
</child>
<child type="tab">
<object class="GtkLabel" id="label77">
<property name="visible">True</property>
<property name="label" translatable="yes">Profissional </property>
</object>
<packing>
<property name="tab_fill">False</property>
</packing>
</child>
<child>
<object class="GtkHBox" id="hbox_cadastro_ficha_veiculo">
<property name="visible">True</property>
<child>
<object class="GtkLabel" id="label96">
<property name="visible">True</property>
<property name="label" translatable="yes">label</property>
</object>
<packing>
<property name="position">0</property>
</packing>
</child>
</object>
<packing>
<property name="position">1</property>
</packing>
</child>
<child type="tab">
<object class="GtkLabel" id="label78">
<property name="visible">True</property>
<property name="label" translatable="yes">Ve&#xED;culo</property>
</object>
<packing>
<property name="position">1</property>
<property name="tab_fill">False</property>
</packing>
</child>
<child>
<object class="GtkHBox" id="hbox_cadastro_ficha_proprietario">
<property name="visible">True</property>
<child>
<object class="GtkLabel" id="label2">
<property name="visible">True</property>
<property name="label" translatable="yes">label</property>
</object>
<packing>
<property name="position">0</property>
</packing>
</child>
</object>
<packing>
<property name="position">2</property>
</packing>
</child>
<child type="tab">
<object class="GtkLabel" id="label1">
<property name="visible">True</property>
<property name="label" translatable="yes">Propriet&#xE1;rio</property>
</object>
<packing>
<property name="position">2</property>
<property name="tab_fill">False</property>
</packing>
</child>
<child>
<object class="GtkHBox" id="hbox_cadastro_ficha_carreta">
<property name="visible">True</property>
<child>
<object class="GtkLabel" id="label97">
<property name="visible">True</property>
<property name="label" translatable="yes">label</property>
</object>
<packing>
<property name="position">0</property>
</packing>
</child>
</object>
<packing>
<property name="position">3</property>
</packing>
</child>
<child type="tab">
<object class="GtkLabel" id="label79">
<property name="visible">True</property>
<property name="label" translatable="yes">Carreta</property>
</object>
<packing>
<property name="position">3</property>
<property name="tab_fill">False</property>
</packing>
</child>
<child>
<object class="GtkFrame" id="frame1">
<property name="visible">True</property>
<property name="border_width">6</property>
<property name="label_xalign">0</property>
<child>
<object class="GtkAlignment" id="alignment1">
<property name="visible">True</property>
<property name="left_padding">12</property>
<child>
<object class="GtkVBox" id="vbox76">
<property name="visible">True</property>
<property name="orientation">vertical</property>
<child>
<object class="GtkHBox" id="hbox28">
<property name="visible">True</property>
<property name="spacing">2</property>
<child>
<object class="GtkVBox" id="vbox77">
<property name="visible">True</property>
<property name="orientation">vertical</property>
<child>
<object class="GtkLabel" id="label80">
<property name="visible">True</property>
<property name="xalign">0</property>
<property name="yalign">0</property>
<property name="label" translatable="yes">Tipo</property>
</object>
<packing>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkEntry" id="entry30">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="invisible_char">&#x25CF;</property>
</object>
<packing>
<property name="position">1</property>
</packing>
</child>
</object>
<packing>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkVBox" id="vbox78">
<property name="visible">True</property>
<property name="orientation">vertical</property>
<child>
<object class="GtkLabel" id="label81">
<property name="visible">True</property>
<property name="xalign">0</property>
<property name="yalign">0</property>
<property name="label" translatable="yes">Valor</property>
</object>
<packing>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkEntry" id="entry31">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="invisible_char">&#x25CF;</property>
</object>
<packing>
<property name="position">1</property>
</packing>
</child>
</object>
<packing>
<property name="position">1</property>
</packing>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">False</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkHBox" id="hbox29">
<property name="visible">True</property>
<property name="spacing">2</property>
<child>
<object class="GtkVBox" id="vbox79">
<property name="visible">True</property>
<property name="orientation">vertical</property>
<child>
<object class="GtkLabel" id="label82">
<property name="visible">True</property>
<property name="xalign">0</property>
<property name="yalign">0</property>
<property name="label" translatable="yes">Origem</property>
</object>
<packing>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkHBox" id="hbox30">
<property name="visible">True</property>
<child>
<object class="GtkComboBox" id="combobox22">
<property name="visible">True</property>
</object>
<packing>
<property name="expand">False</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkComboBox" id="combobox23">
<property name="visible">True</property>
</object>
<packing>
<property name="expand">False</property>
<property name="position">1</property>
</packing>
</child>
<child>
<object class="GtkComboBox" id="combobox24">
<property name="visible">True</property>
</object>
<packing>
<property name="position">2</property>
</packing>
</child>
</object>
<packing>
<property name="position">1</property>
</packing>
</child>
</object>
<packing>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkVBox" id="vbox80">
<property name="visible">True</property>
<property name="orientation">vertical</property>
<child>
<object class="GtkLabel" id="label83">
<property name="visible">True</property>
<property name="xalign">0</property>
<property name="yalign">0</property>
<property name="label" translatable="yes">Destino</property>
</object>
<packing>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkHBox" id="hbox31">
<property name="visible">True</property>
<child>
<object class="GtkComboBox" id="combobox25">
<property name="visible">True</property>
</object>
<packing>
<property name="expand">False</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkComboBox" id="combobox26">
<property name="visible">True</property>
</object>
<packing>
<property name="expand">False</property>
<property name="position">1</property>
</packing>
</child>
<child>
<object class="GtkComboBox" id="combobox27">
<property name="visible">True</property>
</object>
<packing>
<property name="position">2</property>
</packing>
</child>
</object>
<packing>
<property name="position">1</property>
</packing>
</child>
</object>
<packing>
<property name="position">1</property>
</packing>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">False</property>
<property name="position">1</property>
</packing>
</child>
</object>
</child>
</object>
</child>
<child type="label">
<object class="GtkLabel" id="label3">
<property name="visible">True</property>
<property name="label" translatable="yes">&lt;b&gt;Dados da Carga&lt;/b&gt;</property>
<property name="use_markup">True</property>
</object>
</child>
</object>
<packing>
<property name="position">4</property>
</packing>
</child>
<child type="tab">
<object class="GtkLabel" id="label84">
<property name="visible">True</property>
<property name="label" translatable="yes">Carga</property>
</object>
<packing>
<property name="position">4</property>
<property name="tab_fill">False</property>
</packing>
</child>
<child>
<object class="GtkFrame" id="frame2">
<property name="visible">True</property>
<property name="border_width">6</property>
<property name="label_xalign">0</property>
<child>
<object class="GtkAlignment" id="alignment2">
<property name="visible">True</property>
<property name="left_padding">12</property>
<child>
<object class="GtkTreeView" id="treeview7">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="model">liststore2</property>
<child>
<object class="GtkTreeViewColumn" id="treeviewcolumn36">
<property name="resizable">True</property>
<property name="title">Pergunta</property>
<property name="expand">True</property>
<property name="clickable">True</property>
<property name="reorderable">True</property>
<property name="sort_indicator">True</property>
</object>
</child>
<child>
<object class="GtkTreeViewColumn" id="treeviewcolumn37">
<property name="resizable">True</property>
<property name="title">Resposta</property>
<property name="expand">True</property>
<property name="clickable">True</property>
<property name="reorderable">True</property>
<property name="sort_indicator">True</property>
</object>
</child>
</object>
</child>
</object>
</child>
<child type="label">
<object class="GtkLabel" id="label4">
<property name="visible">True</property>
<property name="label" translatable="yes">&lt;b&gt;Dados Complementares&lt;/b&gt;</property>
<property name="use_markup">True</property>
</object>
</child>
</object>
<packing>
<property name="position">5</property>
</packing>
</child>
<child type="tab">
<object class="GtkLabel" id="label85">
<property name="visible">True</property>
<property name="label" translatable="yes">Quest&#xF5;es</property>
</object>
<packing>
<property name="position">5</property>
<property name="tab_fill">False</property>
</packing>
</child>
</object>
<packing>
<property name="position">1</property>
</packing>
</child>
<child>
<object class="GtkHButtonBox" id="hbuttonbox4">
<property name="visible">True</property>
<property name="layout_style">spread</property>
<child>
<object class="GtkButton" id="button7">
<property name="label">gtk-save</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<property name="use_stock">True</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">False</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkButton" id="button8">
<property name="label">gtk-close</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<property name="use_stock">True</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">False</property>
<property name="position">1</property>
</packing>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">False</property>
<property name="padding">9</property>
<property name="position">2</property>
</packing>
</child>
</object>
</child>
</object>
</interface>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment