Para reaccionar a una señal debes conectarla especificando una función callback para que PHP-GTK la llame cuando la señal se emita.
Al conectar una función a una señal se logra llamar el metodo connect() del objeto.
La función que pones como callback para una señal debe tener su prototipo correcto. Podes encontrar el prototipo que deberia tener en las sección de referencia de este manual.
Por ejemplo, si yo quisiera conectar una señal "clicked" de una instancia de GtkButton deberia definir una función que acepte un parametro, el cual sera el boton que se presiono.
El codigo debajo muetsra como se crea una ventana, se agrega un boton a ella y se espera por si se presiona. Cuando se presiona el boton, se abre una nueva GtkWindow conteniendo un mensaje.
Ejemplo 2.1. Señales y Callbacks
<?php function shutdown() { print("Shutting down...\n"); gtk::main_quit(); } function you_clicked($button) { $window = &new GtkWindow(); $label = &new GtkLabel("You clicked the button"); $window->add($label); $window->connect("destroy","shutdown"); $window->show_all(); return false; } $window = &new GtkWindow(); $window->connect("destroy", "shutdown"); $window->set_border_width(10); $button = &new GtkButton("Click Me!!"); $button->connect("clicked", "you_clicked"); $window->add($button); $window->show_all(); gtk::main(); ?> |
La parte importante aqui es donde llamamos $button->connect(); El metodo de conección aqyi registra la función you_clicked() como el callback que será invocado cuando la señal "clicked" sea emitida por el widget GtkButton. Nosotros ademas registramos la función shutdown() como manejador de la señal "destroy" para ambas ventanas asi podemos cerrar la aplicación correctamente.
Con PHP-GTK podes registar mas deuna función para ser invocada cuando una señal sea emitida por un widget. Esto te permite poner un conjunto de funciones para ser llamadas en respuesta un acción esperada.
Cuando mas de una función se conecta a una señal, las funciones son llamadas en el orden en que fueron registradas cuando la señal sea emitida.
Ejemplo 2.2. Ordenes Callback de señales
<?php function first($button) { print "First function has been called\n"; } function second($button) { print "Second function has been called\n"; } $window = &new GtkWindow(); $window->connect_object("destroy", array("gtk", "main_quit")); $button = &new GtkButton("Click Me!!"); $button->connect("clicked","first"); $button->connect("clicked","second"); $window->add($button); $window->show_all(); gtk::main(); ?> |
La saluda de este programa seria:
First function has been called.
Second function has been called.