Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

programador php

[Resolvido] exemplo [ como usar ]

Recommended Posts

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()
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

uia...

 

Estou com a mesma dúvida, mais creio eu que se renomear-mos essa página para main.php e baixar o main.exe que o pessoal da GTK-Brasil desponibilizu, e jogar-mos o main.php dentro da página do gtk, e executar-mos o main, acho que ele irá executar essa página...

Compartilhar este post


Link para o post
Compartilhar em outros sites

se você estiver no Linux, acrecente a seginte linha no começo do arquivo:

#!/usr/local/bin/php-gtk
<?php
...
depois use no shell:

chmod +x nome-do-arquivo.php
agora o arquivo é um executavel...

 

se você estiver no Windows:

Assuma q o diretorio do PHP-GTK é C:\php-gtk...

e q o nome do arquivo seja arquivo.php...

entao...

abra o Menu Executar (WinKey + R), digite cmd, depois digite:

cd C:\php-gtk
C:
php arquivo.php

no se der certo a aplicação sera executada, se der errado, sera exibido no prompt os erros retornados...

se você ainda sim tiver problemas, mente aqui qual foi o problema retornado no prompt...

Abraços

Compartilhar este post


Link para o post
Compartilhar em outros sites

opa!!

 

consegui...

 

este script deu erro na linha 122 TYPE_STRING

 

http://gtk.php.net

 

 

tem um exemplo bem legal lá no alo mundo avançado

 

abraço

http://forum.imasters.com.br/public/style_emoticons/default/grin.gif

é sim mano, ajudou bastante, valeu !

 

abraço.

Compartilhar este post


Link para o post
Compartilhar em outros sites

gente boa me diga uma coisa, isso quer dizer que tenho sempre que salvar os probramas dentro da pasta php-gtk,

ou posso salvar em qualquer pasta.

Como seria o comando neste caso

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.