Adobe AIRで作るデスクトップアプリケーション

第13回 メニューの実装

この記事を読むのに必要な時間:およそ 5 分

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となります。これでメニューが表示されるようになりました。

Mac OS XのアプリケーションメニューとWindowsのウィンドウメニュー

Mac OS XのアプリケーションメニューとWindowsのウィンドウメニュー

著者プロフィール

タナカヤスヒロ

早稲田大学卒業後,DTP業務を経てマルチメディア系制作会社へ。Macromedia Directorにのめり込む。フリーランスとなりFlashにシフトしてからもデスクトップ絡みの仕事が絶えず,Apolloにも勝手に縁を感じている。現在株式会社antsに所属。ants Lab.にも記事を上げている。

URLhttp://labs.anthill.jp/

著書

コメント

コメントの記入