Création de menus natifs (AIR)

Adobe AIR 1.0 et les versions ultérieures

Cette rubrique explique comment créer les différents types de menus natifs pris en charge par AIR.

Création d’un objet menu racine

Pour créer un objet NativeMenu en tant que racine du menu, utilisez le constructeur NativeMenu :

var root:NativeMenu = new NativeMenu(); 

Dans les menus d’application et de fenêtre, le menu racine représente la barre de menus et doit uniquement contenir des éléments donnant accès à des sous-menus. Les menus en incrustation et les menus contextuels ne possèdent pas de barre de menus. Le menu racine peut donc contenir des commandes et des séparateurs, ainsi que des sous-menus.

Une fois le menu créé, vous pouvez lui ajouter des éléments de menu. Les éléments figurent dans le menu dans l’ordre dans lequel vous les ajoutez, à moins que vous ne les ajoutiez à un index spécifique à l’aide de la méthode addItemAt() d’un objet menu.

Affectez le menu en tant que menu d’application, de fenêtre, d’icône ou contextuel ou affichez-le en tant que menu en incrustation, comme indiqué dans les sections suivantes :

Définition d’un menu d’application ou de fenêtre

Le code doit prendre en charge à la fois les menus d’application (gérés sous Mac OS) et les menus de fenêtre (gérés sous d’autres systèmes d’exploitation).

var root:NativeMenu = new NativeMenu(); 
if (NativeApplication.supportsMenu) 
{ 
    NativeApplication.nativeApplication.menu = root; 
} 
else if (NativeWindow.supportsMenu) 
{ 
    nativeWindow.menu = root; 
}
Remarque : Mac OS définit, pour chaque application, un menu contenant des éléments standard. L’affectation d’un nouvel objet NativeMenu à la propriété menu de l’objet NativeApplication remplace le menu standard. Libre à vous de conserver ce menu standard plutôt que de le remplacer.

Adobe Flex contient une classe FlexNativeMenu qui permet de créer facilement des menus pris en charge sur toutes les plateformes. Si vous utilisez Flex Framework, faites appel aux classes FlexNativeMenu au lieu de la classe NativeMenu.

Définition d’un menu contextuel associé à un objet interactif

interactiveObject.contextMenu = root;

Définition d’un menu d’icône du Dock ou d’un menu d’icône de la barre d’état système

Le code doit prendre en charge à la fois les menus d’application (gérés sous Mac OS) et les menus de fenêtre (gérés sous d’autres systèmes d’exploitation).

if (NativeApplication.supportsSystemTrayIcon) 
{ 
    SystemTrayIcon(NativeApplication.nativeApplication.icon).menu = root; 
} 
else if (NativeApplication.supportsDockIcon) 
{ 
    DockIcon(NativeApplication.nativeApplication.icon).menu = root; 
}
Remarque : Mac OS X définit un menu standard pour l’icône du Dock d’une application. Lorsque vous affectez un nouvel objet NativeMenu à la propriété menu de l’objet DockIcon, les éléments de ce menu sont affichés au-dessus des éléments standard. Il est impossible de supprimer ou de modifier les éléments standard ou d’y accéder.

Affichage d’un menu en incrustation

root.display(stage, x, y); 

Création d’un sous-menu

Pour créer un sous-menu, vous ajoutez un objet NativeMenuItem au menu parent, puis vous affectez l’objet NativeMenu définissant le sous-menu sur la propriété submenu de l’élément. AIR vous propose deux méthodes de création des éléments de sous-menu et de l’objet menu associé :

Vous pouvez créer un élément de menu et son objet menu associé en une seule opération à l’aide de la méthode addSubmenu() :

var editMenuItem:NativeMenuItem = root.addSubmenu(new NativeMenu(), "Edit"); 

Vous pouvez aussi créer l’élément de menu et ensuite seulement affecter l’objet menu à sa propriété submenu :

var editMenuItem:NativeMenuItem = root.addItem("Edit", false); 
editMenuItem.submenu = new NativeMenu(); 

Création d’une commande de menu

Pour créer une commande de menu, ajoutez un objet NativeMenuItem à un menu et ajoutez un écouteur d’événement référençant la fonction qui met en œuvre la commande de menu :

var copy:NativeMenuItem = new NativeMenuItem("Copy", false); 
copy.addEventListener(Event.SELECT, onCopyCommand); 
editMenu.addItem(copy);

Vous pouvez écouter l’événement select sur l’élément commande même (comme illustré dans l’exemple) ou sur un objet menu parent.

Remarque : les éléments de menu qui représentent des sous-menus et des séparateurs ne distribuent pas d’événements select et vous ne pouvez donc pas les utiliser en tant que commandes.

Création d’un séparateur de menu

Pour créer un séparateur, créez un objet NativeMenuItem, en définissant le paramètre isSeparator sur true dans le constructeur. Ajoutez ensuite le séparateur au menu à l’emplacement approprié :

var separatorA:NativeMenuItem = new NativeMenuItem("A", true); 
editMenu.addItem(separatorA);

Le libellé spécifié pour le séparateur, le cas échéant, n’est pas affiché.