Programmation GTK2 en Pascal/GtkMenu
Programmation GTK2 en Pascal |
|
Présentation
modifierLe contrôle GtkMenu est celui qui s'ouvre quand on clique sur un item de menu dans la barre de menu.
Hiérarchie
modifierHiérarchie |
GObject └─GtkObject └─GtkWidget └─GtkContainer └─GtkMenuShell └─GtkMenu |
Utilisation de base
modifierCréation
modifierLa fonction de création d'une barre de menu est simple :
function gtk_menu_new : PGtkWidget;
Ajout d'élément
modifierPour ajouter des éléments dans un GtkMenu
, il faut comme dans une GtkMenuBar
utiliser les fonctions du contrôle GtkMenuShell
:
procedure gtk_menu_shell_append(menu_shell : PGtkMenuShell; child : PGtkWidget); procedure gtk_menu_shell_prepend(menu_shell : PGtkMenuShell; child : PGtkWidget);
La première fonction ajoute les éléments de gauche à droite alors que la seconde les ajoute de droite à gauche. Le paramètre menu_shell
est le GtkMenu
dans laquelle nous voulons ajouter l'élément et le paramètre child
est l'élément à ajouter. Pour le premier paramètre, il faudra utiliser la fonction de conversion GTK_MENU_SHELL.
Ajout du menu
modifierPour ajouter un menu à une barre de menu, ou pour créer un sous-menu, il faut associer le menu avec un élément (de la barre de menu ou du menu parent) avec une fonction du contrôle GtkMenuItem
:
procedure gtk_menu_item_set_submenu(menu_item : PGtkMenuItem; submenu : PGtkWidget);
Cette fonction est étudié plus en détail dans le chapitre sur le contrôle GtkMenuItem
.
Programme exemple
modifierNous allons créer un menu « Fichier » qui contiendra un élément « Ouvrir » et un élément « Quitter ». L'élément « Quitter » ouvrira un autre menu qui proposera les options « OUI » et « NON ». Ce qui n'est pas très réaliste mais permet de voir un menu et un sous-menu.
Voilà le fichier gtk033.pas
:
program gtk033; uses glib2, gtk2; var pFenetre : PGtkWidget; pVBox : PGtkWidget; pBarreMenu : PGtkWidget; pMenuItemFichier : PGtkWidget; pMenuFichier : PGtkWidget; pMenuItemOuvrir : PGtkWidget; pMenuItemQuitter : PGtkWidget; pMenuQuitter : PGtkWidget; pMenuItemOui : PGtkWidget; pMenuItemNon : 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), 'Gtk033 : Menu et sous-menu'); gtk_signal_connect(pGTKOBJECT(pFenetre), 'destroy', GTK_SIGNAL_FUNC(@gtk_main_quit), NULL); // Création de la GtkVBox pVBox := gtk_vbox_new(FALSE, 0); 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 Fichier et rattachement à la barre de menu pMenuItemFichier := gtk_menu_item_new_with_label('Fichier'); gtk_menu_shell_append(GTK_MENU_SHELL(pBarreMenu), pMenuItemFichier); // Création du menu Fichier et rattachement à l'item Fichier pMenuFichier := gtk_menu_new; gtk_menu_item_set_submenu(GTK_MENU_ITEM(pMenuItemFichier), pMenuFichier); // Création de l'item Ouvrir et rattachement au menu Fichier pMenuItemOuvrir := gtk_menu_item_new_with_label('Ouvrir'); gtk_menu_shell_append(GTK_MENU_SHELL(pMenuFichier), pMenuItemOuvrir); // Création de l'item Quitter et rattachement au menu Fichier pMenuItemQuitter := gtk_menu_item_new_with_label('Quitter'); gtk_menu_shell_append(GTK_MENU_SHELL(pMenuFichier), pMenuItemQuitter); // Création du (sous-)menu Quitter et rattachement à l'item Quitter pMenuQuitter := gtk_menu_new; gtk_menu_item_set_submenu(GTK_MENU_ITEM(pMenuItemQuitter), pMenuQuitter); // Création de l'item Oui et rattachement au menu Quitter pMenuItemOui := gtk_menu_item_new_with_label('Oui'); gtk_menu_shell_append(GTK_MENU_SHELL(pMenuQuitter), pMenuItemOui); // Création de l'item Non et rattachement au menu Quitter pMenuItemNon := gtk_menu_item_new_with_label('Non'); gtk_menu_shell_append(GTK_MENU_SHELL(pMenuQuitter), pMenuItemNon); // Oui -> quitte l'application g_signal_connect(pGTKOBJECT(pMenuItemOui), 'activate', G_CALLBACK(@gtk_main_quit), NULL); gtk_widget_show_all(pFenetre); gtk_main; end.
Voilà ce que donne l'exécution du programme gtk033
après avoir cliquer sur le menu « Fichier » puis « Quitter » :
Menu : GtkMenuBar ~ GtkMenu ~ GtkMenuShell — GtkMenuItem ~ GtkImageMenuItem ~ GtkCheckMenuItem ~ GtkRadioMenuItem ~ GtkSeparatorMenuItem ~ GtkTearoffMenuItem |