ネイティブメニューの例:ウィンドウメニューとアプリケーションメニュー(AIR)

Adobe AIR 1.0 およびそれ以降

次の例では、 ネイティブメニューの構造(AIR) で説明したメニューを作成します。

メニューは、Windows(ウィンドウメニューのみがサポートされます)および Mac OS X(アプリケーションメニューのみがサポートされます)の両方で機能するように設計されています。それらを区別するために、MenuExample クラスコンストラクターで、NativeWindow クラスおよび NativeApplication クラスの静的プロパティ supportsMenu を確認しています。 NativeWindow.supportsMenu true の場合は、ウィンドウの NativeMenu オブジェクトを作成してから、File サブメニューと Edit サブメニューを作成して追加します。 NativeApplication.supportsMenu true の場合は、File メニューと Edit メニューを作成して、それらを Mac OS X オペレーティングシステムで提供される既存のメニューに追加します。

次の例では、メニューイベント処理についても示しています。 select イベントはアイテムレベルで処理され、さらにメニューレベルでも処理されます。選択されたアイテムを格納するメニューからルートメニューまでのチェーンにある各メニューで、 select イベントに応答しています。 displaying イベントは、最近使用したファイルを開くメニューで使用されています。メニューが開かれる直前に、メニュー内のアイテムが最新の Documents 配列で更新されます(この例では実際には変更されません)。この例では示していませんが、 displaying イベントは個々のアイテムでリッスンすることもできます。

<html> 
<head> 
<script src="AIRAliases.js" type="text/javascript"></script> 
<script type="text/javascript"> 
var application = air.NativeApplication.nativeApplication; 
var recentDocuments =  
    new Array(new air.File("app-storage:/GreatGatsby.pdf"),  
             new air.File("app-storage:/WarAndPeace.pdf"),  
             new air.File("app-storage:/Iliad.pdf")); 
 
function MenuExample(){ 
    var fileMenu; 
    var editMenu; 
     
    if (air.NativeWindow.supportsMenu &&  
         nativeWindow.systemChrome != air.NativeWindowSystemChrome.NONE) { 
        nativeWindow.menu = new air.NativeMenu(); 
        nativeWindow.menu.addEventListener(air.Event.SELECT, selectCommandMenu); 
        fileMenu = nativeWindow.menu.addItem(new air.NativeMenuItem("File")); 
        fileMenu.submenu = createFileMenu(); 
     
        editMenu = nativeWindow.menu.addItem(new air.NativeMenuItem("Edit")); 
        editMenu.submenu = createEditMenu(); 
    } 
     
    if (air.NativeApplication.supportsMenu) { 
        application.menu.addEventListener(air.Event.SELECT, selectCommandMenu); 
        fileMenu = application.menu.addItem(new air.NativeMenuItem("File")); 
        fileMenu.submenu = createFileMenu(); 
        editMenu = application.menu.addItem(new air.NativeMenuItem("Edit")); 
        editMenu.submenu = createEditMenu(); 
    } 
} 
         
function createFileMenu() { 
    var fileMenu = new air.NativeMenu(); 
    fileMenu.addEventListener(air.Event.SELECT,selectCommandMenu); 
     
    var newCommand = fileMenu.addItem(new air.NativeMenuItem("New")); 
    newCommand.addEventListener(air.Event.SELECT, selectCommand); 
    var saveCommand = fileMenu.addItem(new air.NativeMenuItem("Save")); 
    saveCommand.addEventListener(air.Event.SELECT, selectCommand); 
    var openFile = fileMenu.addItem(new air.NativeMenuItem("Open Recent"));  
    openFile.submenu = new air.NativeMenu(); 
    openFile.submenu.addEventListener(air.Event.DISPLAYING, updateRecentDocumentMenu); 
    openFile.submenu.addEventListener(air.Event.SELECT, selectCommandMenu); 
     
    return fileMenu; 
} 
 
function createEditMenu() { 
    var editMenu = new air.NativeMenu(); 
    editMenu.addEventListener(air.Event.SELECT,selectCommandMenu); 
     
    var copyCommand = editMenu.addItem(new air.NativeMenuItem("Copy")); 
    copyCommand.addEventListener(air.Event.SELECT,selectCommand); 
    copyCommand.keyEquivalent = "c"; 
    var pasteCommand = editMenu.addItem(new air.NativeMenuItem("Paste")); 
    pasteCommand.addEventListener(air.Event.SELECT, selectCommand); 
    pasteCommand.keyEquivalent = "v"; 
    editMenu.addItem(new air.NativeMenuItem("", true)); 
    var preferencesCommand = editMenu.addItem(new air.NativeMenuItem("Preferences")); 
    preferencesCommand.addEventListener(air.Event.SELECT,selectCommand); 
     
    return editMenu; 
} 
 
function updateRecentDocumentMenu(event) { 
    air.trace("Updating recent document menu."); 
    var docMenu = air.NativeMenu(event.target); 
     
    for (var i = docMenu.numItems - 1; i >= 0; i--) { 
        docMenu.removeItemAt(i); 
    } 
     
    for (var file in recentDocuments) { 
        var menuItem =  
            docMenu.addItem(new air.NativeMenuItem(recentDocuments[file].name)); 
        menuItem.data = recentDocuments[file]; 
        menuItem.addEventListener(air.Event.SELECT, selectRecentDocument); 
    } 
} 
 
function selectRecentDocument(event) { 
    air.trace("Selected recent document: " + event.target.data.name); 
} 
 
function selectCommand(event) { 
    air.trace("Selected command: " + event.target.label); 
} 
 
function selectCommandMenu(event) { 
    if (event.currentTarget.parent != null) { 
        var menuItem = findItemForMenu(event.currentTarget); 
        if(menuItem != null){ 
            air.trace("Select event for \"" + event.target.label +  
            "\" command handled by menu: " + menuItem.label); 
        } 
    } else { 
        air.trace("Select event for \"" + event.target.label +  
                "\" command handled by root menu."); 
    } 
} 
 
function findItemForMenu(menu){ 
    for (var item in menu.parent.items) { 
        if (item != null) { 
            if (item.submenu == menu) { 
                return item; 
            } 
        } 
    } 
    return null; 
} 
</script> 
<title>AIR menus</title> 
</head> 
<body onload="MenuExample()"></body> 
</html>