Значки панели задач AIR

Adobe AIR 1.0 и более поздних версий

Многие операционные системы имеют панель задач, например док Mac OS X, на которой может отображаться значок приложения. Adobe® AIR® предоставляет интерфейс для взаимодействия со значком приложения на панели задач через свойство NativeApplication.nativeApplication.icon .

О значках панели задач

AIR создает объект NativeApplication.nativeApplication.icon автоматически. Объект имеет тип DockIcon или SystemTrayIcon в зависимости от операционной системы. Определить, какой из этих подклассов InteractiveIcon поддерживается AIR в данной операционной системе, можно при помощи свойств NativeApplication.supportsDockIcon и NativeApplication.supportsSystemTrayIcon . Базовый класс InteractiveIcon содержит свойства width , height и bitmaps , при помощи которых можно изменить изображение значка. Однако при попытке получить доступ к свойствам DockIcon или SystemTrayIcon не в той операционной системе возникает ошибка времени выполнения.

Для установки или изменения изображения значка создайте массив, содержащий одно или несколько изображений, и присвойте его свойству NativeApplication.nativeApplication.icon.bitmaps . Размер значков панели задач может отличаться в зависимости от операционной системы. Во избежание снижения качества изображения из-за масштабирования можно добавить в массив bitmaps несколько размеров изображения. При наличии нескольких изображений AIR выбирает размер, ближайший к текущему размеру отображения значка панели задач, применяя масштабирование лишь при необходимости. Следующий пример кода задает изображение для значка панели задач, выбирая из двух изображений:

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

Для изменения изображения значка присвойте массив, содержащий новое изображение или изображения, свойству bitmaps . Можно анимировать значок, изменив изображение в ответ на событие enterFrame или timer .

Чтобы удалить значок из области уведомления в Windows и Linux или восстановить вид значка по умолчанию в Mac OS X, задайте для bitmaps пустой массив.

NativeApplication.nativeApplication.icon.bitmaps = []; 

Значки дока

AIR поддерживает значки дока, если NativeApplication.supportsDockIcon имеет значение true . Свойство NativeApplication.nativeApplication.icon представляет значок приложения в доке (а не значок дока окна).

Примечание. AIR не поддерживает изменение значков окна в доке в операционной системе Mac OS X. Кроме того, изменения значка приложения в доке применяются только на время выполнения приложения — при завершении работы приложения значок принимает свой обычный вид.

Меню значков дока

В стандартное меню дока можно добавить команды, создав объект NativeMenu, содержащий эти команды, и присвоив его свойству NativeApplication.nativeApplication.icon.menu . Добавленные пункты меню отображаются поверх стандартных пунктов меню значков дока.

Оповещения дока

Подпрыгивание значка дока достигается при помощи метода NativeApplication.nativeApplication.icon.bounce() . Если для параметра bounce() priority задано значение informational, значок прыгает один раз. Если для него задано значение critical, значок прыгает до тех пор, пока пользователь не активирует приложение. Константы для параметра priority определены в классе NotificationType.

Примечание. Значок не прыгает, если приложение уже активно.

События значков дока

При нажатии на значок дока объект NativeApplication отправляет событие invoke . Если приложение еще не запущено, система запускает его. В противном случае событие invoke отправляется экземпляру выполняющегося приложения.

Значки области уведомлений

AIR поддерживает значки области уведомлений, если для свойства NativeApplication.supportsSystemTrayIcon задано значение true , что справедливо в настоящее время только для Windows и большинства дистрибутивов Linux. В Windows и Linux значки области уведомлений отображаются в области уведомлений панели задач. По умолчанию не отображается ни один значок. Для отображения значка присвойте массив, содержащий объекты BitmapData, свойству bitmaps значка. Для изменения изображения значка присвойте массив, содержащий новые изображения, свойству bitmaps . Для удаления значка задайте для bitmaps значение null .

Меню значков области уведомлений

Можно добавить меню к значку области уведомлений, создав объект NativeMenu и присвоив его свойству NativeApplication.nativeApplication.icon.menu (операционная система не предоставляет меню по умолчанию). Доступ к меню значка области уведомлений осуществляется щелчком правой кнопки мыши.

Всплывающие подсказки значков области уведомлений

Можно добавить к значку всплывающую подсказку, задав свойство tooltip:

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

События значков области уведомлений

Объект SystemTrayIcon, на который указывает свойство NativeApplication.nativeApplication.icon, отправляет ScreenMouseEvent для событий click , mouseDown , mouseUp , rightClick , rightMouseDown и rightMouseUp . Эти события, а также меню значков, позволяют пользователям взаимодействовать с приложением при отсутствии его видимых окон.

Пример: создание приложения без окон

Следующий пример создает приложение AIR, которое имеет значки в области уведомлений, но не имеет видимых окон. (Для свойства visible приложения не должно быть установлено значение true в дескрипторе приложения; в противном случае окно будет видимо при запуске приложения.)

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]; 
        } 
    } 
} 
Примечание. При использовании компонента Flex WindowedApplication необходимо задать для атрибута visible тега WindowedApplication значение false . Этот атрибут заменяет настройку в дескрипторе приложения.
Примечание. Этот пример предполагает использование файлов изображений с именами AIRApp_16.png и AIRApp_128.png в подкаталоге icons приложения. (Файлы с образцами значков, которые можно копировать в папку проекта, включены в пакет AIR SDK.)

Кнопки и значки окон на панели задач

Значки окон, как правило, отображаются на панели задач в области отображения ярлыков открытых окон, или доке, чтобы пользователи могли легко получить доступ к окнам фонового режима или свернутым окнам. Док операционной системы Mac OS X отображает значок приложения, а также значки свернутых окон. На панелях задач в Microsoft Windows и Linux отображаются кнопка со значком программы и заголовки для каждого окна обычного типа в приложении.

Подсветка кнопок окон на панели задач

Если окно открыто в фоновом режиме, можно уведомить пользователя о том, что произошло ожидаемое событие, связанное с окном. В Mac OS X оповещение пользователя может осуществляться за счет прыгающего значка приложения в доке (как описано в разделе Оповещения дока ). В Windows и Linux можно подсветить кнопку окна на панели задач, вызвав метод notifyUser() экземпляра NativeWindow. Параметр type , передаваемый этому методу, определяет срочность оповещения:

  • NotificationType.CRITICAL : значок окна мигает до тех пор, пока пользователь не активирует окно.

  • NotificationType.INFORMATIONAL : значок окна подсвечивается, изменяя цвет.

    Примечание. В Linux поддерживается только информационный тип уведомлений. Передача значения любого типа в функцию notifyUser() создаст точно такой же эффект.

    Следующее выражение подсвечивает кнопку окна на панели задач:

    stage.nativeWindow.notifyUser(NotificationType.CRITICAL); 

    Вызов метода NativeWindow.notifyUser() в операционной системе, не поддерживающей оповещение на уровне окон, не действует. При помощи свойства NativeWindow.supportsNotification можно определить, поддерживается ли оповещение на уровне окон.

Создание окон без кнопок или значков на панели задач

В операционной системе Windows окна типов utility или lightweight не отображаются на панели задач. Невидимые окна также не отображаются на панели задач.

Поскольку начальное окно всегда относится к типу normal , для создания приложения, окна которого не должны отображаться на панели задач, необходимо либо закрыть исходное окно, либо сделать его невидимым. Чтобы закрыть все окна приложения, не завершая работу самого приложения, задайте для свойства autoExit объекта NativeApplication значение false перед закрытием последнего окна. Чтобы сделать начальное окно постоянно невидимым, вставьте <visible>false</visible> в элемент <initalWindow> файла дескриптора приложения (не задавайте для свойства visible значение true и не вызывайте метод activate() окна).

Для новых окон, открытых в приложении, установите свойство type объекта NativeWindowInitOption, передаваемого конструктору окна, на значение NativeWindowType.UTILITY или NativeWindowType.LIGHTWEIGHT .

В Mac OS X свернутые окна отображаются на панели задач дока. Чтобы значок свернутого окна не отображался, рекомендуется скрыть окно, а не сворачивать его. Следующий пример прослушивает событие изменения nativeWindowDisplayState и отменяет его при сворачивании окна. Вместо этого обработчик задает для свойства visible значение false :

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

При сворачивании окна в док Mac OS X при установке свойства visible на значение false значок дока не удаляется. Пользователь может щелкнуть значок, чтобы снова отобразить окно.