next up previous contents
suivant: Utiliser l'usine à items monter: Les widgets précédent: Les boutons spin   Table des matières


Sous-sections

Les menus

Ce qui est considéré comme un menu par les utilisateurs est en fait composé de trois parties. Tout d'abord, il y a la barre de menus en haut de la fenêtre, puis à l'intérieur de la barre de menus, il y a plusieurs menus, enfin, chaque menu possède en général un ou plusieurs sous-menus.

Le menuShell

Les widgets Barre de Menu et Menu sont des sous-classes de MenuShell. Chaque MenuShell a la capacité d'ajouter à la fin, au début ou d'insérer un widget enfant.

Le MenuShell peut-être effacé de l'écran par :

Un enfant du MenuShell peut-être sélectionné par :

Un enfant du MenuShell peut-être activé par :

La Barre de Menus

Une barre de menu est créée par :

Les barres de menus sont habituellement placées en haut de la fenêtre. Normalement, vous devriez créer une VBox et l'ajouter à la fenêtre. Vous devriez ensuite placer le barre de menu en haut de la boîte verticale. La seule autre fonction concernant les barres de menus (et qui ne proviennent pas du MenuShell) déclare le type de l'ombre :

Ou $shadow_type est soit :

Les Menus

Les menus sont créés par :

Si vous voulez bouger un enfant d'une position à l'autre, vous pouvez le faire avec :

$child est l'enfant à bouger et $position est la nouvelle position.

Les menus peuvent avoir un titre associé. Ce titre est déclaré par :

L'état tear-off peut-être déclaré par ;

$tear_off est une valeur vraie ou fausse qui détermine si le menu peut être à l'état tear-off. Un menu est normalement affiché comme un cadre qui descend et qui persiste tant que le menu est actif, alors que le menu tear-off est dans une fenêtre qui persiste jusqu'à ce que la fenêtre soit fermée.

Enfin, si vous voulez que votre menu se comporte comme un menu popup, vous devrez appeler :

Ou $parent_menu_shell et $parent_menu_item seront indéfinis si le menu n'est pas associé à une barre de menus. Pour $activate_time, vous pouvez habituellement vous en débarrasser à l'aide de $event->{ 'time' }. Si vous désirez que le menu disparaisse quand vous relâchez le bouton de la souris, vous devrez mettre 1.

L'argument $button proviendra souvent de $event->{ 'button' }.

Enfin, \&menu_position_function est une référence à une fonction fournit par l'utilisateur, utilisée pour positionner le menu. La plupart des gens utilise undef qui définit la position en haut à gauche du menu à l'endroit du clic de la souris. @optional_data, s'il est inclus, est envoyé comme argument de \&menu_position_function.

Attendez-vous à ce que cette fonction change bientôt. On suppose qu'il y aura une interversion de $button et de $activate_time comme ceci :

Les Items de Menu

Créer des items de menus est aussi simples que d'appeler l'une des fonctions suivantes :

Vous pouvez sélectionner, déselectionner et activer un item de menu à l'aide de :

Si vous voulez faire d'un item de menu un sous-menu, vous pouvez utiliser :

Vous pouvez aussi enlever un sous-menu :

Enfin, si vous voulez que le menu soit justifié à droite dans la barre de menu, comme le sont souvent les menus d'aide, vous pouvez utiliser la fonction suivante avant de l'attacher à la barre de menus.

Créer des menus

Il y a deux manières de créer des menus : la facile et la difficile. Chacune a son usage mais vous pouvez habituellement utiliser l'usine à items ( ItemFactory, méthode facile ). La manière ``difficile'' est de créer directement tous les menus en utilisant les fonctions précédentes. La manière ``facile'' consiste à utiliser les appels de l'usine à items. C'est plus simple mais il y a des avantages et des inconvénients à chacune des approches.

L'usine à items est bien plus facile à utiliser et on peut y ajouter de nouveaux menus bien que d'écrire quelques fonctions en utilisant la méthode manuelle puisse être d'un grand secours. Avec l'usine à items, il n'est pas possible d'ajouter des images ou des caractères ``/'' aux menus.

Par pure tradition pédagogique, nous vous montrerons d'abord la méthode difficile. Le widget ItemFactory étant décrit ultérieurement.

Trois choses sont nécessaires pour créer une barre de menus et des sous-menus :

C'est légèrement compliqué du fait que le widget item de menu est utilisé pour deux choses différentes. Il y a à la fois le widget regroupé dans le menus et le widget regroupé dans la barre de menus, qui sélectionné ouvre le menu.

Quand un menu est créé, il n'est en fait jamais montré ( avec la fonction show()), c'est juste un conteneur pour les items de menus. J'espère que ceci deviendra plus clair en regardant les exemples ci-dessous.

Une fois que vous avez créé votre item de menu, vous devez le mettre dans un menu. On y parvient avec la fonction append() . Afin de capturer le moment ou l'item de menu est sélectionné par l'utilisateur, nous aurons besoin de connecter le signal 'activate'. Ainsi, si vous voulez créer un menu Fichier standard avec les fonctions Ouvrir, Sauver et Quitter, le code ressemblera à :

A ce moment, nous avons notre menu. Maintenant nous créons notre barre de menus et notre item menu pour l'entrée Fichier auquel nous ajoutons notre menu. On obtient :

Maintenant, on a besoin d'associer notre menu avec $fichier_menu. Cela est fait avec la fonction set_submenu(). Tout ce qui reste à faire est d'ajouter le menu à la barre de menus, ce qui est accompli avec le fonction append().

Voici un résumé des étapes nécessaires à la création d'une barre de menus avec des menus attachés :

Créer une menu popup se fait de la même manière. La différence est que le menu n'est pas placé ``automatiquement'' par la barre de menus mais explicitement en appelant la fonction popup() d'un évènement bouton pressé, par exemple. Les étapes sont donc :

Exemple

Regardons un petit exemple pour essayer de nous clarifier les idées.

Manual Menu Example


next up previous contents
suivant: Utiliser l'usine à items monter: Les widgets précédent: Les boutons spin   Table des matières
LE BORGNE Patrice 2001-01-11