Ikony paska zadań w środowisku AIR

Adobe AIR 1.0 i starsze wersje

Wiele systemów operacyjnych udostępnia pasek zadań, taki jak Dock w systemie Mac OS X, który może zawierać ikony reprezentujące aplikacje. Środowisko Adobe® AIR® udostępnia interfejs służący do interakcji z ikoną aplikacji na pasku zadań za pośrednictwem właściwości NativeApplication.nativeApplication.icon .

Informacje o ikonach paska zadań

Środowisko AIR automatycznie tworzy obiekt NativeApplication.nativeApplication.icon . Typem obiektu jest DockIcon albo SystemTrayIcon, w zależności od systemu operacyjnego. Korzystając z właściwości NativeApplication.supportsDockIcon i NativeApplication.supportsSystemTrayIcon , można określić, którą z tych podklas klasy InteractiveIcon środowisko AIR obsługuje w bieżącym systemie operacyjnym. Klasa bazowa InteractiveIcon udostępnia właściwości width , height i bitmaps , których można używać do zmiany obrazu ikony. Jednak próba dostępu do właściwości charakterystycznych dla klasy DockIcon lub SystemTrayIcon w niewłaściwym systemie operacyjnym spowoduje zgłoszenie błędu w czasie wykonywania.

Aby ustawić lub zmienić obraz ikony, należy utworzyć tablicę zawierającą jeden lub większą liczbę obrazów, i przypisać tę tablicę do właściwości NativeApplication.nativeApplication.icon.bitmaps . Rozmiary ikon paska narzędzi mogą być różne w różnych systemach operacyjnych. Aby uniknąć pogorszenia jakości obrazu wskutek skalowania, można dodać do tablicy bitmaps wiele obrazów o różnych rozmiarach. W wypadku udostępnienia więcej niż jednego obrazu środowisko AIR wybiera rozmiar najbliższy aktualnemu rozmiarowi wyświetlanej ikony paska zadań, a skaluje obraz tylko wtedy, gdy jest to konieczne. W poniższym przykładzie ustawiany jest obraz ikony paska narzędzi. Przypisywana jest tablica zawierająca dwa obrazy:

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

Aby zmienić obraz ikony, należy przypisać tablicę zawierającą nowy obraz lub obrazy do właściwości bitmaps . Możliwe jest animowanie ikony poprzez zmianę obrazu w odpowiedzi na zdarzenie enterFrame lub timer .

Aby usunąć ikonę z obszaru powiadomień w systemie Windows i Linux lub przywrócić domyślny wygląd ikony w systemie Mac OS X, należy przypisać właściwości bitmaps pustą tablicę:

NativeApplication.nativeApplication.icon.bitmaps = []; 

Ikony Docku

Środowisko AIR obsługuje ikony Docku, gdy właściwość NativeApplication.supportsDockIcon ma wartość true . Właściwość NativeApplication.nativeApplication.icon reprezentuje ikonę aplikacji w Docku (a nie ikonę okna w Docku).

Uwaga: Środowisko AIR nie umożliwia zmiany ikon okien w Docku w systemie Mac OS X. Ponadto zmiana ikony aplikacji w Docku obowiązuje tylko w czasie, gdy aplikacja jest uruchomiona — po zakończeniu działania aplikacji przywracany jest normalny wygląd ikony.

Menu ikon Docku

Istnieje możliwość dodawania poleceń do standardowego menu Docku. Należy w tym celu utworzyć obiekt NativeMenu zawierający polecenia i przypisać go do właściwości NativeApplication.nativeApplication.icon.menu . Elementy w menu będą wyświetlane powyżej standardowych elementów menu ikony Docku.

Podskakiwanie ikony w Docku

Można wymusić podskakiwanie ikony Docku, wywołując metodę NativeApplication.nativeApplication.icon.bounce() . W wypadku ustawienia parametru bounce() priority na wartość informational ikona podskoczy jeden raz. W wypadku ustawienia tego parametru na wartość cirtical, ikona będzie podskakiwać, dopóki użytkownik nie uaktywni aplikacji. Stałe dla parametru priority są zdefiniowane w klasie NotificationType.

Uwaga: Ikona nie podskakuje, jeśli aplikacja jest już aktywna.

Zdarzenia związane z ikonami Docku

Kliknięcie ikony Docku powoduje wywołanie zdarzenia invoke przez obiekt NativeApplication. Jeśli aplikacja nie działa, system ją uruchomi. W przeciwnym razie zdarzenie invoke zostanie dostarczone do działającej instancji aplikacji.

Ikony zasobnika systemowego

Środowisko AIR obsługuje ikony zasobnika systemowego, gdy właściwość NativeApplication.supportsSystemTrayIcon jest równa true . Ten warunek jest obecnie spełniony tylko w systemie Windows oraz w większości dystrybucji systemu Linux. W systemie Windows i Linux ikony zasobnika systemowego są wyświetlane w obszarze powiadomień na pasku zadań. Domyślnie ikona nie jest wyświetlana. Aby wyświetlić ikonę, należy przypisać tablicę zawierającą obiekty BitmapData do właściwości bitmaps ikony. Aby zmienić obraz ikony, należy przypisać tablicę zawierającą nowe obrazy do właściwości bitmaps . Aby usunąć ikonę, należy przypisać właściwości bitmaps wartość null .

Menu ikon zasobnika systemowego

Istnieje możliwość dodania menu do ikony zasobnika systemowego. W tym celu należy utworzyć obiekt NativeMenu i przypisać go do właściwości NativeApplication.nativeApplication.icon.menu (system operacyjny nie udostępnia menu domyślnego). Dostęp do menu ikony w zasobniku systemowym uzyskuje się, klikając ikonę prawym przyciskiem myszy.

Podpowiedzi narzędzi ikony zasobnika systemowego

Aby dodać do ikony podpowiedź narzędzia, należy ustawić jej właściwość tooltip:

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

Zdarzenia związane z ikonami zasobnika systemowego

Obiekt SystemTrayIcon, do którego odwołuje się właściwość NativeApplication.nativeApplication.icon, wywołuje zdarzenie ScreenMouseEvent w odpowiedzi na zdarzenia click , mouseDown , mouseUp , rightClick , rightMouseDown i rightMouseUp . Można wykorzystać te narzędzia, wraz z menu ikony, aby stworzyć użytkownikom możliwość interakcji z aplikacją, gdy aplikacja nie wyświetla widocznych okien.

Przykład: tworzenia aplikacji bez okien

W poniższym przykładzie tworzona jest aplikacja AIR, która ma ikonę w zasobniku systemowym, ale nie ma widocznych okien. (Właściwości visible aplikacji nie należy ustawiać na true w deskryptorze aplikacji, gdyż spowodowało by to uwidocznienie okna aplikacji od razu po jej uruchomieniu).

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]; 
        } 
    } 
} 
Uwaga: Korzystając z komponentu Flex WindowedApplication, należy ustawić atrybut visible znacznika WindowedApplication na false . Ten atrybut przesłania ustawienie określone w deskryptorze aplikacji.
Uwaga: W przykładzie przyjęto, że w podkatalogu icons aplikacji istnieją pliki obrazów o nazwach AIRApp_16.png i AIRApp_128.png . (Przykładowe pliki ikon, które można skopiować do własnego folderu projektu, są dołączone do pakietu AIR SDK).

Ikony i przyciski okien na pasku zadań

W obszarze okien na pasku zadań lub Docku wyświetlane są zazwyczaj ikonograficzne reprezentacje okien, które umożliwiają użytkownikom szybki dostęp do tła lub zminimalizowanych okien. W Docku systemu Mac OS X wyświetlane są ikony aplikacji oraz ikony wszystkich zminimalizowanych okien. Na paskach zadań systemu Microsoft Windows i Linux wyświetlane są przyciski wszystkich zwykłych okien aplikacji. Każda ikona zawiera ikonę programu i tytuł okna.

Podświetlanie przycisku okna na pasku zadań

Gdy okno znajduje się w tle, można poinformować użytkownika o zajściu zdarzenia związanego z tym oknem. W systemie Mac OS X takie powiadomienie użytkownika jest realizowane poprzez wywołanie podskakiwania ikony aplikacji w Docku (co opisano w sekcji Podskakiwanie ikony w Docku ). W systemie Windows i Linux można podświetlić przycisk okna na pasku narzędzi, wywołując metodę notifyUser() instancji klasy NativeWindow. Parametr type przekazany do metody określa, jak pilne jest powiadomienie:

  • NotificationType.CRITICAL : ikona okna miga, dopóki użytkownik nie przeniesie okna na pierwszy plan.

  • NotificationType.INFORMATIONAL : ikona okna jest podświetlana poprzez zmianę koloru.

    Uwaga: W systemie Linux obsługiwany jest jedynie typ informacyjny powiadomień. Przekazanie innej wartości typu do funkcji notifyUser() wywoła ten sam efekt.

    Poniższa instrukcja podświetla przycisk okna na pasku zadań:

    stage.nativeWindow.notifyUser(NotificationType.CRITICAL); 

    Wywołanie metody NativeWindow.notifyUser() w systemie operacyjnym, który nie obsługuje powiadamiania na poziomie okien, nie odnosi żadnego skutku. Aby sprawdzić, czy powiadamianie jest obsługiwane, należy skorzystać z właściwości NativeWindow.supportsNotification .

Tworzenie okien bez przycisków lub ikon na pasku zadań

W systemie operacyjnym Windows okna, przy których tworzeniu zadeklarowano typ utility lub lightweight , nie są widoczne na pasku zadań. Na pasku zadań nie pojawiają się także okna niewidoczne.

Ponieważ pierwsze okno aplikacji zawsze jest typu normal , aby utworzyć aplikację bez widocznych okien na pasku zadań, należy zamknąć pierwsze okno lub pozostawić je w stanie niewidocznym. Aby zamknąć wszystkie okna aplikacji, nie kończąc jej działania, należy ustawić właściwość autoExit obiektu NativeApplication na false przed zamknięciem ostatniego okna. Aby zapobiec uwidacznianiu pierwszego okna aplikacji, wystarczy dodać wpis <visible>false</visible> do elementu <initalWindow> w pliku deskryptora aplikacji (i nie ustawiać właściwości visible na true ani nie wywoływać metody activate() okna).

W nowych oknach otwieranych przez aplikację należy przypisywać właściwości type obiektu NativeWindowInitOption przekazanego do konstruktora okna wartość NativeWindowType.UTILITY lub NativeWindowType.LIGHTWEIGHT .

W systemie Mac OS X okna zminimalizowane są wyświetlane na pasku zadań w Docku. Można zapobiec wyświetlaniu ikon okien zminimalizowanych, ukrywając okna, zamiast je minimalizować. Poniższy przykład ilustruje wykrywanie zdarzeń zamiany nativeWindowDisplayState i anulowanie zdarzenia, jeśli okno jest minimalizowane. Program obsługi ustawia natomiast właściwość visible okna na false :

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

Jeśli okno jest zminimalizowane do Docku systemu Mac OS X, to po ustawieniu właściwości visible na false ikona z Docku nie jest usuwana. Użytkownik może kliknąć ikonę i spowodować ponowne wyświetlenie okna.