AIR アプリでメニューバーを表示する場合、Mac OS X と、Windows や Unix(まあ、Unix の場合は Window Manager の役目だが)とで処理が異なる。
アプリケーション毎のメニューを、Mac OS X は画面上部のメニューバーに一元化しているが、Windows や Unix では Window 毎のウィンドウメニューバーに表示する。仕掛けがまったく違うわけだ。
ということで、Action Script では OS 毎の記述の違いをなるべく吸収しているが、メニューバーのセットについては、以下のように NativeApplication.supportsMenu が有効(Mac OS X)か、NativeWindow.supportsMenu(Windows や Unix)が有効かでメニューをセットする先がかわってくる。
//================================================================
// メニューバーセット
//================================================================
private function buildMenu():void {
var root:NativeMenu = new NativeMenu();
var item:NativeMenuItem = new NativeMenuItem("hogehoge");
root.addItem(item);
if (NativeApplication.supportsMenu) { // Mac OS X
nativeApplication.menu = root;
}
else if (NativeWindow.supportsMenu) { // Windows
nativeWindow.menu = root;
}
}
で、この場合、ウィンドウメニューバーを表示しないよう ADF ファイルでシステムクロームの設定を "none" にしていると、
Error: Illegal window settings. Window menus are only supported when systemChrome is set to "standard".
と怒られてしまう。
でも、Mac OS X の場合はメニューバーは必ず表示れているわけで、その内容だけは編集したい場合もあるだろう。
その時は、
//================================================================
// メニューバーセット
//================================================================
private function buildMenu():void {
var root:NativeMenu = new NativeMenu();
var item:NativeMenuItem = new NativeMenuItem("hogehoge");
root.addItem(item);
nativeApplication.menu = root; // Mac OS X
}
これだけの記述で良い。