AIR APIがサポートするメニュー
デスクトップアプリケーションには,インタフェースの一部として独自のメニューを備えているものが多くあります。AIRアプリケーションにもメニューAPIが用意されており,OSネイティブのメニューを利用できます。今回はメニューの実装方法について解説します。
AIRアプリケーションがサポートしているメニューには次のものがあります。
- アプリケーションメニュー(Mac OS Xのみ)
- ウィンドウメニュー(Windowsのみ)
- Dockアイコンメニュー(Mac OS Xのみ)
- システムトレイアイコンメニュー(Windowsのみ)
- コンテキストメニュー
- ポップアップメニュー
これらのメニューは表示場所こそ違うものの,作成方法はすべて共通です。例えば,同じ内容のメニューをアプリケーションメニューとDockメニューで使いたい,という場合でも簡単に実装できます。
メニューの構成
では,メニューの構成について見ていきましょう。メニューの作成には,NativeMenuクラスとNativeMenuItemクラス(いずれもflash.displayパッケージ)を使用します。メニューの個々のアイテムにあたるNativeMenuItemオブジェクトと,それらのコンテナとなるNativeMenuオブジェクトで1セットです。サブメニューが必要であれば,その分だけセットを作ります。図にすると次のようなイメージです。
NativeMenuItemオブジェクトは通常のコマンドとして使う他に,必要に応じてセパレータにしたり,サブメニューにすることができます。
なお,アプリケーションメニューおよびウィンドウメニューでは,ルートとなるNativeMenuオブジェクトの直下をサブメニューにする必要があります。いきなりコマンドやセパレータを追加しないよう注意してください。
メニューの作成とアサイン
実際にメニューを作成してみましょう。Mac OS Xではアプリケーションメニュー,Windowsではウィンドウメニューとして表示されるようにします。ウィンドウメニューはシステムクロームでのみ有効です。次のサンプルでは[File]メニューを作成し,その下に[Exit]メニューを追加します。
<?xml version="1.0" encoding="utf-8"?>
<mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" applicationComplete="buildMenu()">
<mx:Script>
<![CDATA[
private function buildMenu():void {
var rootMenu:NativeMenu = new NativeMenu();
var fileMenu:NativeMenuItem = rootMenu.addSubmenu(new NativeMenu(), "File");
var exitMenu:NativeMenuItem = new NativeMenuItem("Exit");
fileMenu.submenu.addItem(exitMenu);
if (Shell.supportsMenu) {
Shell.shell.menu = rootMenu;
} else if (NativeWindow.supportsMenu) {
stage.nativeWindow.menu = rootMenu;
}
}
]]>
</mx:Script>
</mx:WindowedApplication>
まず,メニューのルートとなるNativeMenuオブジェクトを作成し,addSubmenu()メソッドを使って"File"というサブメニューを追加しています。addSubmenu()の第1パラメータはサブメニューとして使うNativeMenuオブジェクトです。サブメニューもこれから定義するので,新規オブジェクトを渡しています。第2パラメータがメニューのラベルです。
サブメニューの追加は,addSubmenu()メソッドの代わりにaddItem()メソッドでも可能です。その場合は,NativeMenuItemオブジェクトのsubmenuプロパティにサブメニューとなるNativeMenuオブジェクトを指定します。
var fileMenu:NativeMenuItem = new NativeMenuItem("File");
fileMenu.submenu = new NativeMenu();
rootMenu.addItem(fileMenu);
次に,[File]メニューの下に表示される[Exit]メニューを作成しています。"Exit"というラベルのNativeMenuItemオブジェクトを作成して[File]メニューのsubmenuプロパティに追加するだけです。
最後に,作成したメニューをアプリケーションにアサインします。Mac OS XのアプリケーションメニューであればShell.shell.menuプロパティに,Windowsのウィンドウメニューであればstage.nativeWindow.menuプロパティにアサインする必要があります。この判別に利用しているのがShell.supportsMenuプロパティとNativeWindow.supportsMenuプロパティです。前者はアプリケーションメニューをサポートしている場合にtrueとなり,後者はウィンドウメニューをサポートしている場合にtrueとなります。これでメニューが表示されるようになりました。

