Welcome!

You will be redirected in 30 seconds or close now.

ColdFusion Authors: Yakov Fain, Jeremy Geelan, Maureen O'Gara, Nancy Y. Nee, Tad Anderson

Related Topics: Adobe Flex, ColdFusion, IoT User Interface

Adobe Flex: Tutorial

Adobe AIR: Creating Dock and System Tray Icon Menus

The AIR runtime allows you to manage and interact with the system tray and dock bar icons of your application

Many applications offer context menus associated with the application’s icon. On Windows systems, these menus are located in the system tray. If you’re working on a Mac OS X system, you’ll find these menus in the dock bar. Generally, these menus have shortcuts for the most common functions of the application you’re using. These menus might also contain commands that must be accessible even when the application is minimized or hidden by the desktop.

The AIR runtime allows you to manage and interact with the system tray and dock bar icons of your application. You can define context menus for them. On Microsoft Windows systems, the icons in the system tray don’t have any default context menus, so unless you have a specially prepared menu to display, it won’t provide a context menu. Mac OS X systems, on the other hand, have a default menu for dock bar icons. The menus you create will be added to the default menu provided by the operating system. You can’t modify or remove the default menus provided by the system for dock bar icons.

The application you will create in the next section will run on both Windows and Mac OS X.

Assigning a menu to an application icon
Start by opening the ch06p04.fla file in Flash CS4. The project, like the previous ones, only has an output TextArea. This TextArea will display the messages regarding the status of your application.

The project, as shown in Figure 6-13, displays an icon in the system tray or dock bar of the local system, which is why a symbol has been prepared in the library. The symbol is a movie clip: Application Icon, which represents the way you want to show the application icon. In the Symbol Properties panel, shown in Figure 6-14, the class name of the symbol has been specified: ApplicationIcon . This class name allows you to instantiate the symbol in the library via ActionScript.

0000f1306  
Figure 6-13. The stage and Library panel of the ch06p04.fla project

0000f1406 
Figure 6-14. The Symbol Properties panel

You access the document class of the Flash project by clicking the Edit class definition icon on the Document Properties panel. Like for the other projects in this chapter, the Flash project has been set up to not declare the variables automatically  for the elements on the stage. You’ll have to specify them yourself in the class associated with the project.

The class starts by declaring the namespace and the dependence on external classes, as shown here:

package com.comtaste.foed.essentialair.chapter6
{
import fl.controls.TextArea;
import flash.desktop.DockIcon;
import flash.desktop.NativeApplication;
import flash.desktop.SystemTrayIcon;
import flash.display.BitmapData;
import flash.display.MovieClip;
import flash.display.NativeMenu;
import flash.display.NativeMenuItem;
import flash.display.NativeWindow;
import flash.events.Event;
import flash.filesystem.File;
public class Ch06p04 extends MovieClip
{

Then you declare two class properties: one that refers to the component of the TextArea class on the stage of the project, and one to contain the native menu that the application will use:

// onstage components
public var output:TextArea;
// class properties
private var menuRoot:NativeMenu;

Next, the constructor method of the class will call the initialization of the native menu. It will check which options are supported by the local operating system. This method will also assign the menu to the menu bar of the application or window. Finally, it will assign the menu to the icon in the system tray or to the icon in the dock bar, depending on which one is available.

public function Ch06p04()
{
super();

You call the createNativeMenu() function to instantiate and populate the menu that will be used for the application as well as the application’s icon. Here’s the code:

// generate native menu to use
createNativeMenu();

Next, you check if the operating system supports application-level or window- level menus. After that, you assign the menu to the correct property on the basis of the functions of the operating system. This code accomplishes these tasks:

// assign to application menu if we are on Mac OS X
if ( NativeApplication.supportsMenu )
{
NativeApplication.nativeApplication.menu = menuRoot;
}
// assign to window menu if we are on Microsoft Windows
if ( NativeWindow.supportsMenu )
{
stage.nativeWindow.menu = menuRoot; }

Finally, you call the initIcon() method , which instantiates the ApplicationIcon symbol and uses its graphical representation as the application icon:

initIcon();
}

To instantiate and populate the native menu, you use the createNativeMenu() method , which assigns an instance of the NativeMenu class to the menuRoot class property. Then you add a submenu to the menu using the addItem() function of the NativeMenu class:

// create a complete native menu
private function createNativeMenu():void
{
// instantiate main menu object
menuRoot = new NativeMenu();
// append subMenus to menu root
menuRoot.addItem( createFirstSubMenu() );
}

The submenu is created and returned by the createFirstSubMenu() function , as shown here:

private function createFirstSubMenu():NativeMenuItem
{

Next, you create an instance of the NativeMenuItem class with a label of App settings. This object will be the element of the menu returned by the function. Then you assign an instance of the NativeMenu class to the submenu property of the element, so as to populate its list of items.

// create submenu
var subMenu:NativeMenuItem = new NativeMenuItem( "App settings" );
// initialize child container
subMenu.submenu = new NativeMenu();

You’ll add three methods to the menu, which will allow you to do the following:

Access the description of the application
Minimize the active window
Close the application

Each menu item is registered to an event listener method for the selection event, as shown here:

// create first child, register event listener for
// selection event and assign to submenu
var aboutCommand:NativeMenuItem = new NativeMenuItem( "About.." );
aboutCommand.addEventListener( Event.SELECT, getInformation );
subMenu.submenu.addItem( aboutCommand );
// create second child, register event listener for
// selection event and assign to submenu
var minimizeCommand:NativeMenuItem =
new NativeMenuItem( "Minimize" );
minimizeCommand.addEventListener( Event.SELECT,
minimizeApplication );
subMenu.submenu.addItem( minimizeCommand );
// create third child, register event listener for
// selection event and assign to submenu
var closeCommand:NativeMenuItem = new NativeMenuItem( "Close" );
closeCommand.addEventListener( Event.SELECT, closeApplication );
subMenu.submenu.addItem( closeCommand );
return subMenu;
}

The event listener functions for the three items on the native menu are the following, and have already been explained in detail in the previous exercise regarding application menus:

// get application description
private function getInformation( evt : Event ):void
{
// access to application XML descriptor
var appDescriptor:XML =
NativeApplication.nativeApplication.applicationDescriptor;
// retrieve XML descriptor namespace
var nsDeclaration:Namespace = appDescriptor.namespace();
// read description node from XML
var informationText:String = String( appDescriptor.nsDeclaration::description[ 0 ] );

// write into textarea 'output' description contents
output.appendText( "Adobe Air, test application for "
+ "menus functionalities." + File.lineEnding );
output.appendText( informationText + File.lineEnding );
}

// close application
private function closeApplication( e : Event ):void
{
NativeApplication.nativeApplication.exit();
}

// minimize application
private function minimizeApplication( e : Event ):void
{
stage.nativeWindow.minimize();
}

Preparing the application icon

Now all you have to do is correctly prepare the application icon. This is the task of the following initIcon() method , which is called at the end of the class constructor method:

// set up application icons
private function initIcon():void
{

First, you have to obtain an object of the BitmapData class to use as a graphical representation of the application icon. To do so, you have to instantiate the ApplicationIcon symbol in the ch06p04.fla project library .

Then create a local icon property, to which you assign an instance of the ApplicationIcon symbol. The local icon property is declared as a MovieClip, not an ApplicationIcon. This is possible because the ApplicationIcon symbol extends the MovieClip class , so it’s correct to say it’s a MovieClip. Inheritance is a fundamental concept for object- oriented programming languages like ActionScript 3.

// instanstiate icon symbol available in proj library
var icon:MovieClip = new ApplicationIcon();

Creating an object for raster representation
Now that you’ve instantiated the ApplicationIcon symbol, you have to create an object to be its raster representation. Begin by creating a BitmapData object . You specify the dimensions of its canvas as the dimensions of the icon instance you’ve just created. Then you draw the instance of the icon in the raster object using the draw() function of the BitmapData class. The draw() function allows you to draw any object that implements the IbitmapDrawable interface on the canvas of a BitmapData object. You can use this function to draw any object that implements the interface on the canvas of an object.
In ActionScript, this interface is implemented by the DisplayObject class and the Bitmap class . The following code accomplishes these tasks:

// access and save bitmapdata of icon
var iconImg:BitmapData = new BitmapData( icon.width, icon.height );
iconImg.draw( icon );

Next, you assign the raster representation of the icon for the application to the bitmaps property of the icon object of your AIR application. The bitmaps property is an array of raster representations of icons provided by an AIR application.

The runtime will use a representation with dimensions as similar as possible to the ones you’ve chosen (but exactly how similar depends on the local operating system and its graphical settings). The definition of the list of available icons for the application doesn’t depend on the local system, and you
always proceed as follows:

// define application icon
NativeApplication.nativeApplication.icon.bitmaps = [ iconImg ];

Using the correct class type for an application icon
According to the local operating system, the icon property of the nativeApplication object of the NativeApplication class can refer to instances of various classes. On Microsoft Windows systems, the icon represents an instance of the SystemTrayIcon class .
On Mac OS X systems, the icon represents an instance of the DockIcon class . You can check which type of icon is supported by checking the Boolean  supportsDockIcon and supportsSystemTrayIcon properties of the NativeApplication class , which let’s you know if the system supports dock icons or system tray icons, respectively.

Here’s an example of the NativeApplication class :

if ( NativeApplication.supportsDockIcon )
{

If the system supports DockIcon icons , you simply assign the native menu to the menu property of the icon object. The menu will be added on the one that is natively provided by the operating system. Here’s an example of the DockIcon icons:

// assign dock icon custom menu
DockIcon( NativeApplication.nativeApplication.icon ).menu = menuRoot;
}else if ( NativeApplication.supportsSystemTrayIcon )
{

If, on the other hand, the system supports SystemTrayIcon icons , you also define a string of text to be used as the icon’s tooltip. SystemTrayIcon icons don’t have a menu from the operating system—just the one you provided them. DockIcon icons don’t support tooltips.
Here’s an example of a SystemTrayIcon icon:

SystemTrayIcon( NativeApplication.nativeApplication.icon ).menu
= menuRoot;
// tooltip for tray icon, available only on Windows
SystemTrayIcon( NativeApplication.nativeApplication.icon ).tooltip = "Application settings";
}
}

Go back to the Flash ch06p04.fla project to execute the application and see the results of your work (Control > Test Movie). You can see the application icon with its activated context menu in Figures 6- 15 and 6- 16. The application will work both on operating systems that support SystemTrayIcon icons (Microsoft Windows) and systems that support DockIcon icons (Mac OS X).

0000f1506  
Figure 6-15. Application icon on Microsoft Windows systems

More Stories By Marco Casario

Marco Casario is CEO of Comtaste, a company devoted to develop Rich Internet Applications on the Web and for mobile devices.

He collaborates intensively with Adobe Italy as a speaker at conferences and as a consultant for Flash, Flex, and Flash Lite.

Learn more about Marco Casario at his blog http://casario.blogs.com. In 2005, Marco has founded Comtaste, a company dedicated to exploring new frontiers in Rich Internet Applications and the convergence between the web and the world of mobile devices — MobyMobile and YouThru are representative of their recent work. He is founder of the biggest worldwide Flash Lite User Group and of www.augitaly.com, a reference point for the Italian community of Adobe users, in which he carries out the role of Channel Manager for the section dedicated to Flex.

@ThingsExpo Stories
SYS-CON Events announced today that MangoApps will exhibit at SYS-CON's 18th International Cloud Expo®, which will take place on June 7-9, 2016, at the Javits Center in New York City, NY. MangoApps provides modern company intranets and team collaboration software, allowing workers to stay connected and productive from anywhere in the world and from any device. For more information, please visit https://www.mangoapps.com/.
SYS-CON Events announced today that EastBanc Technologies will exhibit at SYS-CON's 18th International Cloud Expo®, which will take place on June 7-9, 2016, at the Javits Center in New York City, NY. EastBanc Technologies has been working at the frontier of technology since 1999. Today, the firm provides full-lifecycle software development delivering flexible technology solutions that seamlessly integrate with existing systems – whether on premise or cloud. EastBanc Technologies partners with p...
The IoTs will challenge the status quo of how IT and development organizations operate. Or will it? Certainly the fog layer of IoT requires special insights about data ontology, security and transactional integrity. But the developmental challenges are the same: People, Process and Platform. In his session at @ThingsExpo, Craig Sproule, CEO of Metavine, will demonstrate how to move beyond today's coding paradigm and share the must-have mindsets for removing complexity from the development proc...
The IoT is changing the way enterprises conduct business. In his session at @ThingsExpo, Eric Hoffman, Vice President at EastBanc Technologies, discuss how businesses can gain an edge over competitors by empowering consumers to take control through IoT. We'll cite examples such as a Washington, D.C.-based sports club that leveraged IoT and the cloud to develop a comprehensive booking system. He'll also highlight how IoT can revitalize and restore outdated business models, making them profitable...
In his session at 18th Cloud Expo, Bruce Swann, Senior Product Marketing Manager at Adobe, will discuss how the Adobe Marketing Cloud can help marketers embrace opportunities for personalized, relevant and real-time customer engagement across offline (direct mail, point of sale, call center) and digital (email, website, SMS, mobile apps, social networks, connected objects). Bruce Swann has more than 15 years of experience working with digital marketing disciplines like web analytics, social med...
SYS-CON Events announced today that Commvault, a global leader in enterprise data protection and information management, has been named “Bronze Sponsor” of SYS-CON's 18th International Cloud Expo, which will take place on June 7–9, 2016, at the Javits Center in New York City, NY, and the 19th International Cloud Expo, which will take place on November 1–3, 2016, at the Santa Clara Convention Center in Santa Clara, CA. Commvault is a leading provider of data protection and information management...
Companies can harness IoT and predictive analytics to sustain business continuity; predict and manage site performance during emergencies; minimize expensive reactive maintenance; and forecast equipment and maintenance budgets and expenditures. Providing cost-effective, uninterrupted service is challenging, particularly for organizations with geographically dispersed operations.
SYS-CON Events announced today that BMC Software has been named "Siver Sponsor" of SYS-CON's 18th Cloud Expo, which will take place on June 7-9, 2015 at the Javits Center in New York, New York. BMC is a global leader in innovative software solutions that help businesses transform into digital enterprises for the ultimate competitive advantage. BMC Digital Enterprise Management is a set of innovative IT solutions designed to make digital business fast, seamless, and optimized from mainframe to mo...
Customer experience has become a competitive differentiator for companies, and it’s imperative that brands seamlessly connect the customer journey across all platforms. With the continued explosion of IoT, join us for a look at how to build a winning digital foundation in the connected era – today and in the future. In his session at @ThingsExpo, Chris Nguyen, Group Product Marketing Manager at Adobe, will discuss how to successfully leverage mobile, rapidly deploy content, capture real-time d...
SoftLayer operates a global cloud infrastructure platform built for Internet scale. With a global footprint of data centers and network points of presence, SoftLayer provides infrastructure as a service to leading-edge customers ranging from Web startups to global enterprises. SoftLayer's modular architecture, full-featured API, and sophisticated automation provide unparalleled performance and control. Its flexible unified platform seamlessly spans physical and virtual devices linked via a world...
SYS-CON Events announced today that ContentMX, the marketing technology and services company with a singular mission to increase engagement and drive more conversations for enterprise, channel and SMB technology marketers, has been named “Sponsor & Exhibitor Lounge Sponsor” of SYS-CON's 18th Cloud Expo, which will take place on June 7-9, 2016, at the Javits Center in New York City, New York. “CloudExpo is a great opportunity to start a conversation with new prospects, but what happens after the...
IoT generates lots of temporal data. But how do you unlock its value? How do you coordinate the diverse moving parts that must come together when developing your IoT product? What are the key challenges addressed by Data as a Service? How does cloud computing underlie and connect the notions of Digital and DevOps What is the impact of the API economy? What is the business imperative for Cognitive Computing? Get all these questions and hundreds more like them answered at the 18th Cloud Expo...
SYS-CON Events announced today Object Management Group® has been named “Media Sponsor” of SYS-CON's 18th International Cloud Expo, which will take place on June 7–9, 2016, at the Javits Center in New York City, NY, and the 19th International Cloud Expo, which will take place on November 1–3, 2016, at the Santa Clara Convention Center in Santa Clara, CA.
What a difference a year makes. Organizations aren’t just talking about IoT possibilities, it is now baked into their core business strategy. With IoT, billions of devices generating data from different companies on different networks around the globe need to interact. From efficiency to better customer insights to completely new business models, IoT will turn traditional business models upside down. In the new customer-centric age, the key to success is delivering critical services and apps wit...
Join us at Cloud Expo | @ThingsExpo 2016 – June 7-9 at the Javits Center in New York City and November 1-3 at the Santa Clara Convention Center in Santa Clara, CA – and deliver your unique message in a way that is striking and unforgettable by taking advantage of SYS-CON's unmatched high-impact, result-driven event / media packages.
In his keynote at 18th Cloud Expo, Andrew Keys, Co-Founder of ConsenSys Enterprise, will provide an overview of the evolution of the Internet and the Database and the future of their combination – the Blockchain. Andrew Keys is Co-Founder of ConsenSys Enterprise. He comes to ConsenSys Enterprise with capital markets, technology and entrepreneurial experience. Previously, he worked for UBS investment bank in equities analysis. Later, he was responsible for the creation and distribution of life ...
As cloud and storage projections continue to rise, the number of organizations moving to the cloud is escalating and it is clear cloud storage is here to stay. However, is it secure? Data is the lifeblood for government entities, countries, cloud service providers and enterprises alike and losing or exposing that data can have disastrous results. There are new concepts for data storage on the horizon that will deliver secure solutions for storing and moving sensitive data around the world. ...
SYS-CON Events announced today that MobiDev will exhibit at SYS-CON's 18th International Cloud Expo®, which will take place on June 7-9, 2016, at the Javits Center in New York City, NY. MobiDev is a software company that develops and delivers turn-key mobile apps, websites, web services, and complex software systems for startups and enterprises. Since 2009 it has grown from a small group of passionate engineers and business managers to a full-scale mobile software company with over 200 develope...
WebRTC is bringing significant change to the communications landscape that will bridge the worlds of web and telephony, making the Internet the new standard for communications. Cloud9 took the road less traveled and used WebRTC to create a downloadable enterprise-grade communications platform that is changing the communication dynamic in the financial sector. In his session at @ThingsExpo, Leo Papadopoulos, CTO of Cloud9, will discuss the importance of WebRTC and how it enables companies to fo...
SYS-CON Events announced today TechTarget has been named “Media Sponsor” of SYS-CON's 18th International Cloud Expo, which will take place on June 7–9, 2016, at the Javits Center in New York City, NY, and the 19th International Cloud Expo, which will take place on November 1–3, 2016, at the Santa Clara Convention Center in Santa Clara, CA. TechTarget is the Web’s leading destination for serious technology buyers researching and making enterprise technology decisions. Its extensive global networ...