Manuel PHP-GTK
Lors de la connexion d'un signal, il est possible d'ajouter un paramètre personnalisé aux rappels. Cela peut être trés utile pour passer un objet en paramêtre et ainsi effectuer une action sur celle-ci.
Par exemple, quand on presse sur un bouton, on aimerait détruire l'instance de la fenetre GtkWindow qui contient l'instance du bouton GtkButton.
Il est possible d'ajouter un troisième paramêtre à la méthode connect() . Ce paramêtre sera passé comme dernier paramêtre à la fonction rappel.
Exemple 2.3. Utilisation des paramêtres personnalisés avec la méthode connect() .
- <?php
- function button_clicked($button, $window)
- {
- $window->destroy();
- gtk::main_quit();
- }
- $window = &new GtkWindow();
- $button = &new GtkButton("exit");
- $button->connect("clicked","button_clicked", $window);
- $window->add($button);
- $window->show_all();
- gtk::main();
- ?>
Vous pouvez passer autant de paramêtres que vous voulez.
En passant l'objet $button comme paramêtre principal et $window comme paramêtre personnalisé, on pourrait utiliser le même rappel pour plusieurs objets GtkButton sur plusieurs fenêtres GtkWindow. Il faut noter que les noms donnés aux paramêtres à l'intérieur du rappel ne sont pas effectifs à l'extérieur du rappel. PHP-GTK reprend les positions des paramètres de la méthode et passe ces derniers aux variables énumérées dans la déclaration du rappel sous la forme d'un tableau, ainsi les connections qui utilisent les mêmes paramêtres peuvent utiliser la même fonction rappel. Dans l'exemple suivant, vous pourrez voir le cas d'utilisation du meme rappel pour plusieurs objets avec un seul paramêtre supplémentaire mais cet exemple est valable pour plusieurs paramêtres supplémentaires.
Exemple 2.4. Utiliser le même rappel pour plusieurs fenêtres
- <?php
- function button_clicked($button, $window)
- {
- $window->set_title("titled");
- }
- $window1 = &new GtkWindow();
- $window1->connect_object("destroy", array("gtk",
- "main_quit"));
- $window2 = &new GtkWindow();
- $window2->connect_object("destroy", array("gtk",
- "main_quit"));
- $button1 = &new GtkButton("click me");
- $button2 = &new GtkButton("or me");
- $button1->connect("clicked", "button_clicked",
- $window1);
- $button2->connect("clicked", "button_clicked",
- $window2);
- $window1->add($button1);
- $window2->add($button2);
- $window1->show_all();
- $window2->show_all();
- gtk::main();
- ?>
les méthodes connect_object() et connect_object_after() vous permettent de remplacer l'objet qui appelle la méthode par un autre objet en tant que premier paramêtre du rappel. Ce qui est particulièrement utile lors de l'utilisation de fonction interne de PHP-GTK, par exemple la fonction gtk::main_quit():
Exemple 2.5. Utilisation de la méthode connect_object() pour spécifier une fonction interne comme rappel.
- <?php
- $window = &new GtkWindow();
- $window->connect_object("destroy", array("gtk",
- "main_quit"));
- $window->show();
- gtk::main();
- ?>
Cela signifie que vous pouvez gérer plusieurs signaux avec un seul rappel. Par exemple, vous pouvez créer une fenêtre qui contient (avec le conteneur approprié) une GtkMenuBar, une GtkToolbar et un GtkButton. Quand l'utilisateur choisit de quitter l'application à partir d'un des widgets, une fonction d'arrêt peut etre appelée en passant une instance d'objet GtkWindow comme premier paramêtre, permettant ainsi de détruire la fenêtre à partir de toutes les connexions. Par exemple:
Exemple 2.6. Utilisation de la méthode connect_object() pour passer un autre objet.
- <?php
- function destroy_window($window)
- {
- $window->destroy();
- gtk::main_quit();
- }
- $exit_button->connect_object("clicked",
- "destroy_window", $window);
- ?>
La méthode connect_after* permet d'éxécuter le rappel "aprés" le signal par défaut. Cela peut être utile dans certaines situations. Par exemple, si vous voulez détruire une seule fenêtre dans une certaine circonstance. Cependant, les methodes connect_after* ne marcheront que si le signal a été crée avec le flag GTK_RUN_LAST. Le signal destroy ainsi que tous les autres signaux 'événement' possèdent ce flag. Deux méthodes pour savoir si le signal possède ce flag: faire un test avec PHP-GTK ou alors lire le source de GTK.
Exemple 2.7. Utilisation de la méthode connect_after() .
- <?php
- function quit_routine($window)
- {
- print("Shutting down...\n");
- gtk::main_quit();
- }
- $window1 = &new GtkWindow();
- $window1->set_title("Quit the main loop");
- $window1->connect("destroy", "quit_routine");
- $window2 = &new GtkWindow();
- $window2->set_title("Destroy this window");
- $window2->connect_after("destroy", "quit_routine");
- $window1->show();
- $window2->show();
- gtk::main();
- ?>
See also: GtkObject, connect_after() connect_object() and connect_object_after() .
Remonter 
