Object +-- ItemFactory
Pour le moment, il n'y a que cet exemple. Une explication et des commentaires suivront plus tard.
#!/usr/bin/perl -wuse Gtk;
use strict;
init Gtk;
my $false = 0;
my $true = 1;
#Voici la structure GtkItemFactoryEntry utilisée pour générer de nouveaux
# menus.
# Item 1: L'arborescence du menu. La lettre après le caractère ``_'' indique
# un raccourci clavier une fois que le menu est ouvert.
# Item 2: Le raccourci clavier pour l'entrée.
# Item 3: La fonction de rappel.
# Item 4: L'action du rappel. Cela change les paramètres avec
# ceux de la fonction appelée. La valeur par défaut est 0.
# Item 5: Le type d'item, utilisé pour savoir de quel type d'item l s'agit.
# Voici les valeurs possibles.
# NULL -> "<Item>"
# "" -> "<Item>"
# "<Title>" -> crée un item titre
# "<Item>" -> crée un simple item
# "<CheckItem>" -> crée un item à cocher
# "<ToggleItem>" -> crée un item toggle
# "<RadioItem>" -> crée un item radio
# <path> -> endroit où relier l'item radio
# "<Separator>" -> crée un séparateur
# "<Branch>" -> crée un item qui contient des
# sous-items (optionel)
# "<LastBranch>" -> crée une branche justifiée à droite
my @menu_items = ( { path => '/_File', type => '<Branch>' }, { path => '/File/_New', accelerator => '<control>N', callback => \&print_hello }, { path => '/File/_Open', accelerator => '<control>O', callback => \&print_hello }, { path => '/File/_Save', accelerator => '<control>S', callback => \&print_hello }, { path => '/File/Save _As' }, { path => '/File/sep1', type => '<Separator>' }, { path => '/File/Quit', callback => sub { Gtk->exit( 0 ); } }, { path => '/_Options', type => '<Branch>' }, { path => '/Options/Test' }, { path => '/_Help', type => '<LastBranch>' }, { path => '/_Help/About' } );
my $window;
my $main_vbox;
my $menubar;
$window = new Gtk::Window( 'toplevel' );
$window->signal_connect( 'destroy', sub { Gtk->exit( 0 ); } );
$window->set_title( "Item Factory" );
$window->set_usize( 300, 200 );
$main_vbox = new Gtk::VBox( $false, 1 );
$main_vbox->border_width( 1 );
$window->add( $main_vbox );
$main_vbox->show();
$menubar = get_main_menu( $window );
$main_vbox->pack_start( $menubar, $false, $true, 0 );
$menubar->show();
$window->show();
main Gtk;
exit( 0 );
### Routines
# Rappel de base obligatoire
sub print_hello { print( "Hello World!\n" ); }
sub get_main_menu { my ( $window ) = @_; my $menubar; my $item_factory; my $accel_group; $accel_group = new Gtk::AccelGroup(); # Cette fonction initialise l'usine à items. # Param 1: Le type de menu - peut être 'Gtk::MenuBar', 'Gtk::Menu', # ou 'Gtk::OptionMenu'. # Param 2:L'arborescence du menu. # Param 3: Le groupe de raccourcis. L'usine à items crée la table # des raccourcis en générant les menus. $item_factory = new Gtk::ItemFactory( 'Gtk::MenuBar', '<main>', $accel_group ); # Cette fonction génère les items du menus. Passe à l'usine à items, # le nombre d'items dans l'alignement, l'alignement lui-même, et # des données pour les rappels des menus items. $item_factory->create_items( @menu_items ); # Attache le groupe des raccourcis à la fenêtre. $window->add_accel_group( $accel_group ); # Enfin, retourne l'actuelle barre de menu créée par l'usine à items. #*menubar = gtk_item_factory_get_widget (item_factory, "<main>"); return ( $item_factory->get_widget( '<main>' ) ); }