Programmation GTK2 en Pascal/GtkCheckMenuItem

Présentation.
Le contrôle GtkCheckMenuItem est un élément de menu qui peut être coché, comme une case à cocher (codice_1).
Utilisation de base.
Création.
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.
Il existe plusieurs fonctions pour modifier l'état d'un codice_2 :
 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 codice_3.
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 codice_2 :
 function gtk_check_menu_item_get_active(check_menu_item : PGtkCheckMenuItem) : gboolean;
Intercepter un clic de souris.
Pour savoir lorsqu'un codice_2 a été coché ou décoché, nous avons la possibilité de connecter le signal « codice_6 » qui sera émis à chaque fois que l'utilisateur modifiera l'état de l'item.
Programme exemple.
Nous allons créer un menu contenant un codice_2 permettant d'afficher ou de cacher une barre d'état.
Voilà le fichier codice_8 :
 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 codice_8 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 » :

Programmation GTK2 en Pascal/GtkRadioMenuItem