Programmation GTK/Boutons commutateurs
Les boutons commutateurs ressemblent beaucoup aux boutons normaux, sauf qu'ils seront toujours alternativement dans un état ou dans un autre. Le changement d'état s'effectue par un click. Ils peuvent être enfoncés et, lorsqu'on clique dessus, ils se relèvent. Re-cliquez, et ils se renfoncent.
Les boutons commutateurs sont la base des cases à cocher ou des boutons radio, donc la plupart des appels utilisés pour les boutons commutateurs sont hérités par les cases à cocher et les boutons radio. J'insisterai là dessus quand nous les aborderons.
Création d'un bouton commutateur :
GtkWidget* gtk_toggle_button_new (void);
GtkWidget* gtk_toggle_button_new_with_label (gchar *label);
Comme vous pouvez l'imaginer, elles fonctionnent comme celles des boutons normaux. La première crée un bouton commutateur vide et la deuxième un bouton commutateur contenant déjà un label.
Pour récupérer l'état d'un commutateur et cela comprend aussi les cases à cocher et les boutons radio, on utilise une macro comme nous le montrons dans l'exemple qui suit et qui teste l'état du commutateur dans une fonction de rappel. Le signal qui nous intéresse et qui est émis par les boutons commutateurs (ce qui comprend aussi les cases à cocher et les boutons radio), est le signal "toggled". Pour vérifier l'état de ces boutons, on configure un gestionnaire de signal qui capture "toggled" et utilise la macro pour déterminer l'état. La fonction de rappel ressemblera à ceci :
void rappel_bouton_commutateur (GtkWidget *widget, gpointer data)
{
if (GTK_TOGGLE_BUTTON(widget)->active)
{
/* Si l'on est ici, c'est que le bouton est relâché. */
} else {
/* le bouton est enfoncé */
}
}
L'appel qui suit peut être utilisé pour configurer l'état d'un bouton commutateur et de ses descendants, les cases à cocher et les boutons radio. On lui passe notre bouton en premier paramètre et TRUE
ou FALSE
pour spécifier s'il doit être relâché ou enfoncé. Par défaut, il est relâché (FALSE
).
void gtk_toggle_button_set_state (GtkToggleButton *toggle_button,
gint state);
On notera que lorsqu'on utilise cette fonction, et que l'état est modifié, cela force le bouton à émettre un signal "clicked".
void gtk_toggle_button_toggled (GtkToggleButton *toggle_button);
Cet appel ne fait que commuter le bouton et émettre le signal "toggled".