Archive

Posts Tagged ‘DockIcon’

Working with the Dock and the System tray in AIR

December 21, 2010 Leave a comment

Giving a SystemTray menu or a Dock menu option to your user can be proved a very many option.

For Windows its known as a SystemTray and in Mac it’s known as a Dock menu.With a built in support for NativeApplication.nativeApplication.icon in ADOBE Air, it becomes very easy to add a taskbar support.

NativeApplication.nativeApplication.icon object can be either type of DockIcon or SystemTrayIcon depending on the operating system.

Following is a peace of code with a class name SustemTray, which first checks whether the native Operating System supports SystemTray or Dock and add appropriate event listeners which can be bubbled back to the application.

package com.chatApplication.view.components.util
{
import flash.desktop.DockIcon;
import flash.desktop.NativeApplication;
import flash.desktop.SystemTrayIcon;
import flash.display.Loader;
import flash.display.NativeMenu;
import flash.display.NativeMenuItem;
import flash.display.Sprite;
import flash.events.Event;
import flash.net.URLRequest;
import mx.core.Application;
public class SystemTrayApp extends Sprite
{
     public function SystemTrayApp()
     {
     }
     public function loadSystemTray():void
     {
          NativeApplication.nativeApplication.autoExit = false;
          var icon:Loader = new Loader();
          var iconMenu:NativeMenu = new NativeMenu();
          var openCommand : NativeMenuItem = iconMenu.addItem(new NativeMenuItem("Open Your Application"));
          openCommand.addEventListener(Event.SELECT, function(event:Event):void
          {
               dispatchEvent(new SystemTrayAppEvent(SystemTrayAppEvent.SHOW_GROUP_CHAT_VIEW));
          });
          var signOutCommand : NativeMenuItem = iconMenu.addItem(new NativeMenuItem("Sign Out"));
          signOutCommand.addEventListener(Event.SELECT, function(event:Event):void
          {
               iconMenu.removeItem(openCommand);
               iconMenu.removeItem(signOutCommand);
               dispatchEvent(new SystemTrayAppEvent(SystemTrayAppEvent.SIGN_OUT));
          });
          var exitCommand:NativeMenuItem = iconMenu.addItem(new NativeMenuItem("Quite"));
          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("assets/images/icon.png"));
               var systray:SystemTrayIcon = NativeApplication.nativeApplication.icon as SystemTrayIcon;
               systray.addEventListener(ScreenMouseEvent.CLICK,onClickMenuIconHandler);
               systray.tooltip = "Your Application Name";
               systray.menu = iconMenu;
          }
          //for Mac, a larger icon is required which can be replaced in below code.
          if (NativeApplication.supportsDockIcon)
          {
               icon.contentLoaderInfo.addEventListener(Event.COMPLETE,iconLoadComplete);
               icon.load(new URLRequest("assets/images/icon.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];
trace( NativeApplication.nativeApplication.icon.width + " ==== " + NativeApplication.nativeApplication.icon.height );
     }
     private function onClickMenuIconHandler (event:ScreenMouseEvent):void
     {
          dispatchEvent(new SystemTrayAppEvent(SystemTrayAppEvent.SHOW_GROUP_CHAT_VIEW));
     }
}

That’s it. Call the public method SystemTrayApp.loadSystemTray() to create the Dock/SystemTray for you application.

Follow

Get every new post delivered to your Inbox.