[Resolvido] exemplo [ como usar ]
opa!!!
galera baixei um exemplo mas não sei executar!
o que devo fazer, como devo proceder
abraço
<?php
/*
* classe Agenda
* Pablo Dall'Oglio
* Adianti Solutions
* 27/03/2007
*/
class Agenda extends GtkWindow
{
private $calendar;
/*
* método construtor
* instancia a janela e posiciona elementos
*/
public function __construct()
{
// instancia janela
parent::__construct();
// define posicionamento
parent::set_default_size(700,500);
parent::set_position(GTK::WIN_POS_CENTER);
// conecta sinal de destroy
parent::connect_simple('destroy', array(Gtk, 'main_quit'));
parent::set_title('pAgenda!');
// cria Fixed, para posicionar widgets
$fixed = new GtkFixed;
parent::add($fixed);
// cria objeto calendário
$this->calendar = new GtkCalendar;
// conecta sinais de mudança de dia e mês
$this->calendar->connect_simple('day-selected', array($this, 'onDaySelected'));
$this->calendar->connect_simple('month-changed', array($this, 'onMonthChanged'));
$fixed->put($this->calendar, 10,10);
// cria campos de digitação para
// data, hora, título e descrição
$this->data = new GtkEntry;
$this->hora = new GtkEntry;
$this->titulo = new GtkEntry;
$this->descr = new GtkTextView;
// define tamanho dos campos
$this->data->set_size_request(100,-1);
$this->hora->set_size_request(100,-1);
$this->titulo->set_size_request(240,-1);
// cria janela de rolagem para campo descrição
$scroll = new GtkScrolledWindow;
$scroll->set_size_request(240,100);
$scroll->add($this->descr);
// cria e posiciona rótulos de texto
$fixed->put(new GtkLabel('Data'), 10, 200);
$fixed->put(new GtkLabel('Hora'), 140, 200);
$fixed->put(new GtkLabel('Título'), 10, 250);
$fixed->put(new GtkLabel('Descrição'), 10, 300);
// posiciona campos de digitação
$fixed->put($this->data, 10, 220);
$fixed->put($this->hora, 140, 220);
$fixed->put($this->titulo,10, 270);
$fixed->put($scroll, 10, 320);
// cria botão de salvar
$botao = GtkButton::new_from_stock(GTK::STOCK_SAVE);
$botao->connect_simple('clicked', array($this, 'onSave'));
$fixed->put($botao, 160, 440);
// cria botão de deletar
$botao = GtkButton::new_from_stock(GTK::STOCK_DELETE);
$botao->connect_simple('clicked', array($this, 'onDelete'));
$fixed->put($botao, 560, 440);
// cria listagem de tarefas
$this->createTaskList();
// coloca listagem dentro de uma janela de rolagem
$scroll = new GtkScrolledWindow;
$scroll->add($this->list);
$fixed->put($scroll, 280, 10);
// cria banco de dados
$this->createDatabase();
// atualiza lista de tarefas
$this->onMonthChanged();
}
/*
* método createDatabase
* cria banco de dados, se ele não existir
*/
function createDatabase()
{
// verifica se existe o banco
if (!file_exists('agenda.db'))
{
// conecta ao banco (cria se não existir)
$this->conn = new PDO('sqlite:agenda.db');
// cria a tabela
$this->conn->Query('create table agenda (data, hora, titulo, descricao)');
}
else
{
// conecta ao banco
$this->conn = new PDO('sqlite:agenda.db');
}
}
/*
* método createTaskList
* cria a listagem de tarefas
*/
function createTaskList()
{
// cria objeto treeview
$this->list = new GtkTreeView;
// cria modelo de dados com 4 posições
$this->model = new GtkListStore(Gtk::TYPE_STRING, Gtk::TYPE_STRING, Gtk::TYPE_STRING, Gtk::TYPE_STRING);
$this->list->set_model($this->model);
// cria 4 colunas
$column1 = new GtkTreeViewColumn('Data');
$column2 = new GtkTreeViewColumn('Hora');
$column3 = new GtkTreeViewColumn('Título');
$column4 = new GtkTreeViewColumn('Descrição');
// cria 4 renderizadores de texto
$renderer1 = new GtkCellRendererText();
$renderer2 = new GtkCellRendererText();
$renderer3 = new GtkCellRendererText();
$renderer4 = new GtkCellRendererText();
// empacota os renderizadores
$column1->pack_start($renderer1, true);
$column2->pack_start($renderer2, true);
$column3->pack_start($renderer3, true);
$column4->pack_start($renderer4, true);
// define a largura dos renderizadores
$renderer1->set_property('width', 80);
$renderer2->set_property('width', 40);
$renderer3->set_property('width', 120);
$renderer4->set_property('width', 200);
// corresponde a qual coluna do modelo
$column1->set_attributes($renderer1, 'text', 0);
$column2->set_attributes($renderer2, 'text', 1);
$column3->set_attributes($renderer3, 'text', 2);
$column4->set_attributes($renderer4, 'text', 3);
// adiciona as colunas na treeview
$this->list->append_column($column1);
$this->list->append_column($column2);
$this->list->append_column($column3);
$this->list->append_column($column4);
// define dimensões da treeview
$this->list->set_size_request(400,400);
}
/*
* método onDaySelected
* executado sempre que o usuário
* seleciona outra data
*/
function onDaySelected()
{
// obtém a data selecionada
$date = $this->calendar->get_date();
$ano = $date[0];
$mes = str_pad($date[1] +1, 2, '0', STR_PAD_LEFT);
$dia = str_pad($date[2],2, '0', STR_PAD_LEFT);
// limpa os campos de digitaçao
$this->data->set_text("$dia/$mes/$ano");
$this->hora->set_text('');
$this->titulo->set_text('');
$buffer = $this->descr->get_buffer();
$buffer->delete($buffer->get_start_iter(), $buffer->get_end_iter());
}
/*
* método onMonthChanged
* executado sempre que o usuário
* altera o mês do calendário
*/
function onMonthChanged()
{
// limpa a lista de tarefas
$this->model->clear();
$date = $this->calendar->get_date();
$mes = str_pad($date[1] +1, 2, '0', STR_PAD_LEFT);
// carrega todos compromissos do mês selecionado
$result = $this->conn->Query("select * from agenda where strftime('%m', data)='{$mes}' order by data, hora");
foreach ($result as $row)
{
$dados = array($row['data'], $row['hora'], $row['titulo'], $row['descricao']);
$this->model->append($dados);
}
}
/*
* método onSave
* Salva um compromisso
*/
function onSave()
{
// obtem os dados digitados
$data = $this->data->get_text();
$hora = $this->hora->get_text();
$titulo = $this->titulo->get_text();
$buffer = $this->descr->get_buffer();
$descricao = $buffer->get_text($buffer->get_start_iter(), $buffer->get_end_iter());
// converte o formato da data
$pieces = explode('/', $data);
$dia = $pieces[0];
$mes = $pieces[1];
$ano = $pieces[2];
$data_usa = "{$ano}-{$mes}-{$dia}";
// insere no banco de dados
$this->conn->Query("INSERT INTO agenda VALUES ('$data_usa', '$hora', '$titulo', '$descricao')");
// recarrega as tarefas do mes
$this->onMonthChanged();
}
/*
* método onDelete
* Exclui um compromisso
*/
function onDelete()
{
// obtem o registro selecionado
$selection = $this->list->get_selection();
list ($model, $iter) = $selection->get_selected();
// sel há seleção
if ($iter)
{
// obtém a data e hora
$data = $model->get_value($iter, 0);
$hora = $model->get_value($iter, 1);
// pergunta ao usuário
$dialog = new GtkMessageDialog(null, 0, Gtk::MESSAGE_QUESTION, Gtk::BUTTONS_YES_NO, 'Deseja excluir a tarefa ?');
$resposta = $dialog->run();
if ($resposta == Gtk::RESPONSE_YES)
{
// exclui registro
$this->conn->Query("DELETE FROM agenda WHERE data='$data' and hora='$hora'");
}
// fecha diálogo
$dialog->destroy();
}
// recarrega as tarefas do mes
$this->onMonthChanged();
}
/*
* método __destruct
* Executado quando janela for destruída
*/
function __destruct()
{
// fecha conexão PDO
unset($this->conn);
}
}
$app = new Agenda;
$app->show_all();Gtk::Main()
?>
Discussão (5)
Carregando comentários...