Programmation GTK2 en Pascal/GtkCheckMenuItem
Programmation GTK2 en Pascal |
|
Présentation Modifier
Le contrôle GtkCheckMenuItem est un élément de menu qui peut être coché, comme une case à cocher (GtkCheckButton
).
Hiérarchie Modifier
Hiérarchie |
GObject └─GtkObject └─GtkWidget └─GtkContainer └─GtkBin └─GtkItem └─GtkMenuItem ├─GtkImageMenuItem ├─GtkCheckMenuItem ─ GtkRadioMenuItem ├─GtkSeparatorMenuItem └─GtkTearoffMenuItem |
Utilisation de base Modifier
Création Modifier
Les fonctions de création sont :
function gtk_check_menu_item_new : PGtkWidget; function gtk_check_menu_item_new_with_label(_label : Pgchar) : PGtkWidget; function gtk_check_menu_item_new_with_mnemonic(_label : Pgchar) : PGtkWidget;
Ces fonctions étant classiques, nous n'en dirons pas plus.
Modification de l'état Modifier
Il existe plusieurs fonctions pour modifier l'état d'un GtkCheckMenuItem
:
procedure gtk_check_menu_item_set_active(check_menu_item : PGtkCheckMenuItem; is_active : gboolean); procedure gtk_check_menu_item_toggled(check_menu_item : PGtkCheckMenuItem);
La première fonction modifie l'état de l'item en fonction du paramètre is_active
.
La deuxième fonction inverse tout simplement l'état de l'item.
Nous disposons également d'une fonction associée pour récupérer l'état d'un GtkCheckMenuItem
:
function gtk_check_menu_item_get_active(check_menu_item : PGtkCheckMenuItem) : gboolean;
Intercepter un clic de souris Modifier
Pour savoir lorsqu'un GtkCheckMenuItem
a été coché ou décoché, nous avons la possibilité de connecter le signal « toggle
» qui sera émis à chaque fois que l'utilisateur modifiera l'état de l'item.
Programme exemple Modifier
Nous allons créer un menu contenant un GtkCheckMenuItem
permettant d'afficher ou de cacher une barre d'état.
Voilà le fichier gtk035.pas
:
program gtk035; uses glib2, gtk2; procedure OnMenuItemClic(APWidget : PGtkwidget; AData : pgpointer); cdecl; var pBarreEtat : PGtkWidget; Coche : gboolean; begin pBarreEtat := GTK_WIDGET(AData); // Récuperation de l'état du menu Coche := gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(APWidget)); // Selon le résultat, on affiche où pas la barre d'état if Coche then begin gtk_widget_show(pBarreEtat); end else begin gtk_widget_hide(pBarreEtat); end; end; var pFenetre : PGtkWidget; pVBox : PGtkWidget; pBarreMenu : PGtkWidget; pMenuItemAffichage : PGtkWidget; pMenuAffichage : PGtkWidget; pMenuItemBarreEtat : PGtkWidget; pBarreEtat : PGtkWidget; begin gtk_init(@argc, @argv); pFenetre := gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_window_set_position(GTK_WINDOW(pFenetre), GTK_WIN_POS_CENTER); gtk_window_set_default_size(GTK_WINDOW(pFenetre), 320, 200); gtk_window_set_title(GTK_WINDOW(pFenetre), 'Gtk035 : Élément de menu cochable'); gtk_signal_connect(pGTKOBJECT(pFenetre), 'destroy', GTK_SIGNAL_FUNC(@gtk_main_quit), NULL); // Création de la GtkVBox pVBox := gtk_vbox_new(FALSE, 5); gtk_container_add(GTK_CONTAINER(pFenetre), pVBox); // Création de la barre de menu pBarreMenu := gtk_menu_bar_new; gtk_box_pack_start(GTK_BOX(pVBox), pBarreMenu, FALSE, FALSE, 0); // Création de l'item Affichage et rattachement à la barre de menu pMenuItemAffichage := gtk_menu_item_new_with_label('Affichage'); gtk_menu_shell_append(GTK_MENU_SHELL(pBarreMenu), pMenuItemAffichage); // Création du menu Affichage et rattachement à l'item Affichage pMenuAffichage := gtk_menu_new; gtk_menu_item_set_submenu(GTK_MENU_ITEM(pMenuItemAffichage), pMenuAffichage); // Création de l'item Barre d'état et rattachement au menu Affichage pMenuItemBarreEtat := gtk_check_menu_item_new_with_label('Barre d''état'); gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(pMenuItemBarreEtat), TRUE); gtk_menu_shell_append(GTK_MENU_SHELL(pMenuAffichage), pMenuItemBarreEtat); // Ajout de la barre d'état pBarreEtat := gtk_statusbar_new; gtk_box_pack_end(GTK_BOX(pVBox), pBarreEtat, FALSE, FALSE, 0); // Signal du menu affichage de la barre d'état g_signal_connect(pGTKOBJECT(pMenuItemBarreEtat), 'toggled', G_CALLBACK(@OnMenuItemClic), pBarreEtat); gtk_widget_show_all(pFenetre); gtk_main; end.
Voilà ce que donne l'exécution du programme gtk035.pas
après le lancement après avoir cliqué sur le menu « Affichage » et placer le curseur de la souris au dessus de « Barre d'état » :
Puis après avoir cliqué sur « Barre d'état » et à nouveau resélectionner le menu « Affichage » :
Menu : GtkMenuBar ~ GtkMenu ~ GtkMenuShell — GtkMenuItem ~ GtkImageMenuItem ~ GtkCheckMenuItem ~ GtkRadioMenuItem ~ GtkSeparatorMenuItem ~ GtkTearoffMenuItem |