PHP-GTK: Criando Aplicações Gráficas com PHP Adianti Framework para PHP PHP Programando com Orientação a Objetos Criando Relatórios com PHP


[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[phpgtk] Re: Função que reconhece sinais ou eventos???



Bom dia galera... Obrigado pela ajuda bruno P. g., vamos dizer que era
isso que eu queria, no entanto de uma forma mais detalhada, pois o
tipo (tupe) diz se o widget alterou o foco, porém não detalha se o
foco é in ou out. Apesar dos apesares, resolvi a situação... e antes
de mais nada gostaria de dizer que o glade tem o evento "event" sim,
mas vou postar o que q eu queria via php gtk puro msm.

é o seguinte, aí vai a classe que eu criei e posteriormente vou
melhora-la, se alguem se manifestar em ajudar na melhor, fique a
vontade. Embora seja algo "besta", vai eliminar trabalho e repetição
de códigos. A classe altera o "css" (cor - layout) das caixas de texto
no modo in e out de modo fácil e agil, e pode ser aplicado a outros
widgets também, lógico na pendencia da ampliação da classe. Segue uma
síntese abaixo do codigo e a classe por inteira:

Arquivo: principal.php (sintese - o importante é o passo 5, o restante
é apenas sintese do que deve ser feito)

1 - Crie um, dois ou mais GtkEntry ex: (cx_login, cx_senha);

2 - Requira a classe que esta no arquivo css.class.php
        require_once(css.class.php)

3 - Inicie a classe Css (ou extenda - extends)
        $css = new Css();

4 - Defina o nome dos objetos que devem sofrer as alterações de cor:
      4.1 - criados pelo glade:
     		$cx_login = $this->glade->get_widget('cx_login');
		$cx_senha = $this->glade->get_widget('cx_senha');
      4.2 - pelo php gtk:
               $cx_login = new GtkEntry();
               $cx_senha = new GtkEntry();

5 - E por ultimo basta chamar o metodo da classe passando como
parametro em array os objetos (widgets) que deseja aplicar os efeitos
de cor, sem se preocupar em setar o evento ou o estado do foco:
		$css->setEventCss(array($this->cx_login,$this->cx_senha));

                OU

		$arr = array($this->cx_login,$this->cx_senha);
		$css->setEventCss($arr);

Arquivo: css.class.php

<?php

class Css {

	//dados de focus_in
	private $cx_base_in = "#F8F2F1";
	private $cx_text_in = "#ff0000";
	//dados de focus_out
	private $cx_base_out = "#ffffff";
	private $cx_text_out = "#000000";
        //pode-se criar um arquivo texto ou xml com os dados acima
        //editavel pelo proprio programa posteriormente

	public function setEventCss($arr) {
		for($t=0;$t<sizeof($arr);$t++) {
			$arr[$t]->connect('event',array($this,'event_css'));
		}
	}

	public function event_css($widget,$event,$arr) {
		if($event->type == 12) {
			$pos = $widget->is_focus();
			$this->cx_edit($widget,$pos);
		}
	}

	private function cx_edit($obj,$pos) {
		switch($pos) {
			case 1:
				$base = $this->cx_base_in;
				$text = $this->cx_text_in;
				break;
			case 0:
				$base = $this->cx_base_out;
				$text = $this->cx_text_out;
				break;
			default:
				$base = $this->cx_base_out;
				$text = $this->cx_text_out;
				break;
		}
		// fundo
		$obj->modify_base(Gtk::STATE_NORMAL, GdkColor::parse($base));
		// letra
		$obj->modify_text(Gtk::STATE_NORMAL, GdkColor::parse($text));
	}
}

?>

Bom, espero que sirva de alguma coisa pra quem frequenta o grupo...
simples e funcional...


On 17 out, 22:22, Bruno P. Gonçalves <scorni...@gmail.com> wrote:
> eu de novo ^^*
>
> não sei se o glade tem um evento chamado "event"
>
> se não tiver faça assim:
>
> $meuwidget = $this->glade->get_widget("meuwidget");
> $meuwidget->connect("event", array($this, "meuwidget_onEvent));
>
> public function meuwidget_onEvent($widget, $event)
> {
>     echo $event->type . "\n";
>
> }
>
> Assim, faça interações para descobrir qual o numero do evento que voce
> precisa, coloca um switch no tipo, e faça o que precisa fazer no evento.
>
> pode dar uma consultada aqui, só não sei se as constantes batem
>
> http://gtk.php.net/manual/en/gdk.enum.eventtype.php
>
> - - -
> Bruno Pitteli Gonçalves
> Desenvolvedor SAP Business One / WEB
> scorni...@gmail.com
> +55 018 97958674
>
> - - -
> ScornInPC -http://blog.scorninpc.com/
> Browse Happy -http://browsehappy.com/
>
> 2009/10/17 Bruno Ipexy <br.br...@hotmail.com>
>
>
>
> > Bom pessoal, pra terminar o que estou tentado fazer preciso saber se
> > existe alguma função que reconheça sinais ou eventos??? ex.:
>
> > $cx_txt->connect('focus-in-event',array($this,'click'));
> > $cx_txt->connect('focus-out-event',array($this,'click'));
>
> > function click($obj) {
> >    if($obj->METODO_PROCURADO == "focus_in_event") {
> >        echo "a caixa foi selecionada";
> >    }
> >    else ´{
> >        echo "a caixa nao esta mais selecionada";
> >    }
> > }
>
> > estou a procura deste metodo alguem se aventura? vocês devem se
> > perguntar o pq de fazer desta forma, eu digo, pra evitar a repetição
> > de codigos e fazer uma classe que faça a mesma coisa para todas as
> > caixas de texto. Dessa forma o programador so precisaria saber o nome
> > do metodo "click" e nao se ele foi clicado ou nao. Bom, no final das
> > contas posto tb aqui a classe td pronta...
--~--~---------~--~----~------------~-------~--~----~
Grupo PHP-GTK Brasil (http://www.php-gtk.com.br)
Para enviar mensagens, o e-mail é phpgtk@googlegroups.com
Para cancelar a sua inscrição, o e-mail é phpgtk+unsubscribe@googlegroups.com
Mais opções na página do grupo: http://groups.google.com.br/group/phpgtk?hl=pt-BR
-~----------~----~----~----~------~----~------~--~---