Programmation GTK2 en Pascal/GtkCheckMenuItem
Programmation GTK2 en Pascal |
|
Présentation
[modifier | modifier le wikicode]Le contrôle GtkCheckMenuItem est un élément de menu qui peut être coché, comme une case à cocher (GtkCheckButton
).
Hiérarchie
[modifier | modifier le wikicode]Hiérarchie |
GObject └─GtkObject └─GtkWidget └─GtkContainer └─GtkBin └─GtkItem └─GtkMenuItem ├─GtkImageMenuItem ├─GtkCheckMenuItem ─ GtkRadioMenuItem ├─GtkSeparatorMenuItem └─GtkTearoffMenuItem |
Utilisation de base
[modifier | modifier le wikicode]Création
[modifier | modifier le wikicode]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 | modifier le wikicode]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 | modifier le wikicode]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 | modifier le wikicode]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 |