Icônes de la barre des tâches dans AIR

Adobe AIR 1.0 et les versions ultérieures

La plupart des systèmes d’exploitation disposent d’une barre des tâches, comme le Dock de Mac OS X, pouvant contenir une icône en vue de représenter une application. Adobe® AIR® dispose d’une interface permettant d’interagir avec l’icône de la barre des tâches de l’application par le biais de la propriété NativeApplication.nativeApplication.icon.

A propos des icônes de la barre des tâches

AIR crée l’objet NativeApplication.nativeApplication.icon automatiquement. Selon le système d’exploitation, le type d’objet est soit DockIcon soit SystemTrayIcon. Les propriétés NativeApplication.supportsDockIcon et NativeApplication.supportsSystemTrayIcon vous permettent de déterminer les sous-classes InteractiveIcon prises en charge par AIR sur le système d’exploitation actuel. La classe de base InteractiveIcon fournit les propriétés width, height et bitmaps, qui vous permettent de modifier l’image utilisée pour l’icône. En revanche, l’accès aux propriétés spécifiques à l’objet DockIcon ou SystemTrayIcon sur le mauvais système d’exploitation génère une erreur d’exécution.

Pour définir ou modifier l’image utilisée pour une icône, créez un tableau contenant une ou plusieurs images, puis affectez-le à la propriété NativeApplication.nativeApplication.icon.bitmaps. La taille des icônes de la barre des tâches peut varier d’un système d’exploitation à l’autre. Pour éviter la dégradation de l’image provoquée par la mise à l’échelle, vous pouvez ajouter plusieurs tailles d’image au tableau bitmaps. Si vous fournissez plusieurs images, AIR sélectionne la taille la plus proche de la taille d’affichage actuelle de l’icône de la barre des tâches et, le cas échéant, met ces images à l’échelle. Dans l’exemple suivant, l’image d’une icône de la barre des tâches est définie à l’aide de deux images :

NativeApplication.nativeApplication.icon.bitmaps =  
            [bmp16x16.bitmapData, bmp128x128.bitmapData]; 

Pour modifier l’image d’une icône, affectez un tableau contenant la ou les nouvelles images à la propriété bitmaps. Vous pouvez animer l’icône en modifiant l’image en réponse à un événement enterFrame ou timer.

Pour supprimer l’icône de la zone de notification sous Windows et Linux, ou pour restaurer l’apparence de l’icône par défaut sous Mac OS X, définissez bitmaps sur un tableau vide :

NativeApplication.nativeApplication.icon.bitmaps = []; 

Icônes du Dock

AIR prend en charge les icônes du Dock lorsque la propriété NativeApplication.supportsDockIcon est définie sur true. La propriété NativeApplication.nativeApplication.icon représente l’icône de l’application sur le Dock (et non l’icône de la fenêtre).

Remarque : AIR ne permet pas de modifier les icônes de fenêtre sur le Dock sous Mac OS X. Par ailleurs, les modifications apportées à l’icône du Dock de l’application ne sont appliquées que lorsqu’une application est en cours d’exécution ; l’icône retrouve son aspect normal lorsque vous quittez l’application.

Menus d’icônes du Dock

Vous pouvez ajouter des commandes au menu du Dock standard en créant un objet NativeMenu contenant les commandes, puis en l’affectant à la propriété NativeApplication.nativeApplication.icon.menu. Les éléments du menu s’affichent au-dessus des options de menu de l’icône du Dock standard.

Rebond de l’icône du Dock

Vous pouvez faire rebondir l’icône du Dock en appelant la méthode NativeApplication.nativeApplication.icon.bounce(). Si vous définissez le paramètre bounce() priority sur informational, l’icône rebondit une fois. Si vous définissez ce paramètre sur critical, l’icône rebondit jusqu’à ce que l’utilisateur active l’application. Les constantes du paramètre priority sont définies dans la classe NotificationType.

Remarque : l’icône ne rebondit pas si l’application est déjà active.

Evénements de l’icône du Dock

Lorsque vous cliquez sur l’icône du Dock, l’objet NativeApplication distribue un événement invoke. Si l’application n’est pas en cours d’exécution, le système lance l’application. Sinon, l’événement invoke est renvoyé à l’occurrence de l’application en cours d’exécution.

Icônes de la barre d’état système

AIR prend en charge les icônes de la barre d’état système lorsque la propriété NativeApplication.supportsSystemTrayIcon est définie sur true, ce qui n’est actuellement le cas que sous Windows et la plupart des distributions Linux. Sous Windows et Linux, les icônes de la barre d’état système s’affichent dans la zone de notification de la barre des tâches. Par défaut, aucune icône n’est affichée. Pour afficher une icône, affectez un tableau contenant des objets BitmapData à la propriété bitmaps de l’icône. Pour modifier l’image d’une icône, affectez un tableau contenant les nouvelles images à la propriété bitmaps. Pour supprimer l’icône, définissez la propriété bitmaps sur null.

Menus de l’icône de la barre d’état système

Vous pouvez ajouter un menu à l’icône de la barre d’état système en créant un objet NativeMenu, puis en l’affectant à la propriété NativeApplication.nativeApplication.icon.menu (le système d’exploitation ne fournit aucun menu par défaut). Pour accéder au menu de l’icône de la barre d’état système, cliquez sur l’icône avec le bouton droit de la souris.

Info-bulles de l’icône de la barre d’état système

Pour ajouter une info-bulle à une icône, définissez la propriété tooltip :

NativeApplication.nativeApplication.icon.tooltip = "Application name"; 

Evénements de l’icône de la barre d’état système

L’objet SystemTrayIcon référencé par la propriété NativeApplication.nativeApplication.icon distribue un événement ScreenMouseEvent pour les événements click, mouseDown, mouseUp, rightClick, rightMouseDown et rightMouseUp. Vous pouvez utiliser ces événements, ainsi que le menu d’une icône, pour autoriser les utilisateurs à interagir avec votre application lorsque celle-ci ne dispose pas de fenêtres visibles.

Exemple : Création d’une application ne disposant d’aucune fenêtre

L’exemple suivant crée une application AIR qui dispose d’une icône de la barre d’état système, mais d’aucune fenêtre visible. (Ne définissez pas la propriété visible de l’application sur true dans le descripteur d’application, sous peine que la fenêtre ne soit visible au démarrage de l’application.)

package 
{ 
    import flash.display.Loader; 
    import flash.display.NativeMenu; 
    import flash.display.NativeMenuItem; 
    import flash.display.NativeWindow; 
    import flash.display.Sprite; 
    import flash.desktop.DockIcon; 
    import flash.desktop.SystemTrayIcon; 
    import flash.events.Event; 
    import flash.net.URLRequest; 
    import flash.desktop.NativeApplication; 
 
    public class SysTrayApp extends Sprite 
    { 
        public function SysTrayApp():void{ 
            NativeApplication.nativeApplication.autoExit = false; 
            var icon:Loader = new Loader(); 
            var iconMenu:NativeMenu = new NativeMenu(); 
            var exitCommand:NativeMenuItem = iconMenu.addItem(new NativeMenuItem("Exit")); 
                exitCommand.addEventListener(Event.SELECT, function(event:Event):void { 
                    NativeApplication.nativeApplication.icon.bitmaps = []; 
                    NativeApplication.nativeApplication.exit(); 
                }); 
 
            if (NativeApplication.supportsSystemTrayIcon) { 
                NativeApplication.nativeApplication.autoExit = false; 
                icon.contentLoaderInfo.addEventListener(Event.COMPLETE, iconLoadComplete); 
                icon.load(new URLRequest("icons/AIRApp_16.png")); 
                 
                var systray:SystemTrayIcon =  
                    NativeApplication.nativeApplication.icon as SystemTrayIcon; 
                systray.tooltip = "AIR application"; 
                systray.menu = iconMenu; 
            } 
 
            if (NativeApplication.supportsDockIcon){ 
                icon.contentLoaderInfo.addEventListener(Event.COMPLETE,iconLoadComplete); 
                icon.load(new URLRequest("icons/AIRApp_128.png")); 
                var dock:DockIcon = NativeApplication.nativeApplication.icon as DockIcon;  
                dock.menu = iconMenu; 
            } 
        } 
         
        private function iconLoadComplete(event:Event):void 
        { 
            NativeApplication.nativeApplication.icon.bitmaps = 
                [event.target.content.bitmapData]; 
        } 
    } 
} 
Remarque : si vous utilisez le composant WindowedApplication de Flex, vous devez définir l’attribut visible de la balise WindowedApplication sur false. Cet attribut prime sur le paramètre défini dans le descripteur d’application.
Remarque : dans cet exemple, nous supposons qu’il existe des fichiers image nommés AIRApp_16.png et AIRApp_128.png dans un sous-répertoire icons de l’application. (Les fichiers d’icône d’exemple, que vous pouvez copier dans le dossier de votre projet, sont inclus dans le kit de développement AIR.)

Icônes et boutons de la barre des tâches de la fenêtre

Les icônes des fenêtres s’affichent normalement dans une zone de la fenêtre, appelée barre des tâches ou Dock, pour permettre aux utilisateurs d’accéder aisément à l’arrière-plan ou aux fenêtre minimisées. Le Dock de Mac OS X affiche l’icône correspondant à votre application, ainsi qu’une icône pour chaque fenêtre minimisée. Les barres des tâches de Microsoft Windows et Linux affichent un bouton contenant l’icône et le titre du programme de chaque fenêtre standard dans votre application.

Mise en surbrillance du bouton de la fenêtre dans la barre des tâches

Lorsqu’une fenêtre se trouve dans le chrome, vous pouvez informer l’utilisateur qu’un événement important ayant trait à la fenêtre s’est produit. Sous Mac OS X, vous pouvez informer l’utilisateur en faisant rebondir l’icône de l’application du Dock (comme décrit à la section Rebond de l’icône du Dock). Sous Windows et Linux, vous pouvez mettre en surbrillance le bouton de la barre des tâches de la fenêtre en appelant la méthode notifyUser() de l’occurrence de NativeWindow. Le paramètre type transmis à la méthode détermine l’urgence de la notification :

  • NotificationType.CRITICAL : l’icône de la fenêtre clignote jusqu’à ce que l’utilisateur ramène la fenêtre au premier plan.

  • NotificationType.INFORMATIONAL : l’icône de la fenêtre est mise en surbrillance et change de couleur.

    Remarque : sous Linux, seul le type de notification informationnel est pris en charge. La transmission de la valeur du type à la fonction notifyUser() a le même effet.

    L’instruction suivante met en surbrillance le bouton de la barre des tâches d’une fenêtre :

    stage.nativeWindow.notifyUser(NotificationType.CRITICAL); 

    L’appel de la méthode NativeWindow.notifyUser() d’un système d’exploitation qui ne prend pas en charge la notification au niveau de la fenêtre n’a aucun effet. Utilisez la propriété NativeWindow.supportsNotification pour déterminer si la notification de fenêtres est prise en charge.

Création de fenêtres sans icônes ni boutons dans la barre des tâches

Sous Windows, les fenêtres de type utilitaire ou légère ne s’affichent pas dans la barre des tâches. Les fenêtres invisibles n’apparaissent pas non plus dans la barre des tâches.

Etant donné que la fenêtre initiale est nécessairement de type normale, pour créer une application dont aucune fenêtre ne s’affiche dans la barre des tâches, vous devez fermer la fenêtre initiale ou la laisser invisible. Pour fermer toutes les fenêtres de votre application sans quitter l’application, définissez la propriété autoExit de l’objet NativeApplication sur false avant de fermer la dernière fenêtre. Pour simplement éviter que la fenêtre initiale soit visible, ajoutez <visible>false</visible> à l’élément <initalWindow> du fichier descripteur d’application (et ne définissez pas la propriété visible sur true, ni n’appelez la méthode activate() de la fenêtre).

Dans les nouvelles fenêtres ouvertes par l’application, définissez la propriété type de l’objet NativeWindowInitOption transmis au constructeur de fenêtres sur NativeWindowType.UTILITY ou sur NativeWindowType.LIGHTWEIGHT.

Sous Mac OS X, les fenêtres minimisées apparaissent sur la barre des tâches du Dock. Vous pouvez désactiver l’affichage de l’icône minimisée en masquant la fenêtre au lieu de la minimiser. L’exemple suivant écoute un événement de changement nativeWindowDisplayState et l’annule si la fenêtre est minimisée. Le gestionnaire définit la propriété visible de la fenêtre sur false :

private function preventMinimize(event:NativeWindowDisplayStateEvent):void{ 
    if(event.afterDisplayState == NativeWindowDisplayState.MINIMIZED){ 
        event.preventDefault(); 
        event.target.visible = false; 
    } 
} 

Sous Mac OS X, si une fenêtre est minimisée sur le Dock lorsque vous définissez la propriété visible sur false, l’icône du Dock n’est pas supprimée. L’utilisateur peut toujours cliquer sur l’icône pour faire réapparaître la fenêtre.