Exempel på inbyggd meny: Fönster- och programmeny (AIR)

Adobe AIR 1.0 och senare

I följande exempel skapas den meny som visas i Struktur för inbyggda menyer (AIR) .

Menyn har utformats så att den fungerar med både Windows (som bara stöder fönstermenyer) och Mac OS X (som bara stöder programmenyer). För att avgöra skillnaden mellan dem kontrollerar klassen MenuExamples konstruktor de statiska supportsMenu -egenskaperna i klasserna NativeWindow och NativeApplication. Om NativeWindow.supportsMenu är true skapar konstruktorn ett NativeMenu-objekt för fönstret, och skapar sedan och lägger till undermenyerna File och Edit. Om NativeApplication.supportsMenu är true skapar och lägger konstruktorn till menyerna File och Edit till den befintliga menyn som finns i Mac OS X-operativsystemet.

Exemplet visar också menyhändelsehantering. select -händelsen hanteras på alternativnivån och på menynivån. Varje meny i kedjan, från den meny som innehåller det valda alternativet till rotmenyn, svarar på select -händelsen. displaying -händelsen används med ”Open Recent”-menyn. Alldeles innan menyn öppnas uppdateras alternativen på menyn från den senaste Documents-arrayen (ändras inte i det här exemplet). Även om det inte visas i det här exemplet kan du faktiskt lyssna efter displaying -händelser i enskilda alternativ.

package { 
    import flash.display.NativeMenu; 
    import flash.display.NativeMenuItem; 
    import flash.display.NativeWindow; 
    import flash.display.Sprite; 
    import flash.events.Event; 
    import flash.filesystem.File; 
    import flash.desktop.NativeApplication; 
 
    public class MenuExample extends Sprite 
    { 
        private var recentDocuments:Array =  
            new Array(new File("app-storage:/GreatGatsby.pdf"),  
                     new File("app-storage:/WarAndPeace.pdf"),  
                     new File("app-storage:/Iliad.pdf")); 
                                             
        public function MenuExample() 
        { 
            var fileMenu:NativeMenuItem; 
            var editMenu:NativeMenuItem; 
             
            if (NativeWindow.supportsMenu){ 
                stage.nativeWindow.menu = new NativeMenu(); 
                stage.nativeWindow.menu.addEventListener(Event.SELECT, selectCommandMenu); 
                fileMenu = stage.nativeWindow.menu.addItem(new NativeMenuItem("File")); 
                fileMenu.submenu = createFileMenu(); 
                editMenu = stage.nativeWindow.menu.addItem(new NativeMenuItem("Edit")); 
                editMenu.submenu = createEditMenu(); 
            } 
             
            if (NativeApplication.supportsMenu){ 
                NativeApplication.nativeApplication.menu.addEventListener(Event.SELECT, selectCommandMenu); 
                fileMenu = NativeApplication.nativeApplication.menu.addItem(new NativeMenuItem("File")); 
                fileMenu.submenu = createFileMenu(); 
                editMenu = NativeApplication.nativeApplication.menu.addItem(new NativeMenuItem("Edit")); 
                editMenu.submenu = createEditMenu(); 
            } 
        } 
                 
        public function createFileMenu():NativeMenu { 
            var fileMenu:NativeMenu = new NativeMenu(); 
            fileMenu.addEventListener(Event.SELECT, selectCommandMenu); 
             
            var newCommand:NativeMenuItem = fileMenu.addItem(new NativeMenuItem("New")); 
            newCommand.addEventListener(Event.SELECT, selectCommand); 
            var saveCommand:NativeMenuItem = fileMenu.addItem(new NativeMenuItem("Save")); 
            saveCommand.addEventListener(Event.SELECT, selectCommand); 
            var openRecentMenu:NativeMenuItem =  
                    fileMenu.addItem(new NativeMenuItem("Open Recent"));  
            openRecentMenu.submenu = new NativeMenu(); 
            openRecentMenu.submenu.addEventListener(Event.DISPLAYING, 
                                            updateRecentDocumentMenu); 
            openRecentMenu.submenu.addEventListener(Event.SELECT, selectCommandMenu); 
             
            return fileMenu; 
        } 
         
        public function createEditMenu():NativeMenu { 
            var editMenu:NativeMenu = new NativeMenu(); 
            editMenu.addEventListener(Event.SELECT, selectCommandMenu); 
             
            var copyCommand:NativeMenuItem = editMenu.addItem(new NativeMenuItem("Copy")); 
            copyCommand.addEventListener(Event.SELECT, selectCommand); 
            copyCommand.keyEquivalent = "c"; 
            var pasteCommand:NativeMenuItem =  
                    editMenu.addItem(new NativeMenuItem("Paste")); 
            pasteCommand.addEventListener(Event.SELECT, selectCommand); 
            pasteCommand.keyEquivalent = "v"; 
            editMenu.addItem(new NativeMenuItem("", true)); 
            var preferencesCommand:NativeMenuItem =  
                    editMenu.addItem(new NativeMenuItem("Preferences")); 
            preferencesCommand.addEventListener(Event.SELECT, selectCommand); 
             
            return editMenu; 
        } 
         
        private function updateRecentDocumentMenu(event:Event):void { 
            trace("Updating recent document menu."); 
            var docMenu:NativeMenu = NativeMenu(event.target); 
             
            for each (var item:NativeMenuItem in docMenu.items) { 
                docMenu.removeItem(item); 
            } 
             
            for each (var file:File in recentDocuments) { 
                var menuItem:NativeMenuItem =  
                        docMenu.addItem(new NativeMenuItem(file.name)); 
                menuItem.data = file; 
                menuItem.addEventListener(Event.SELECT, selectRecentDocument); 
            } 
        } 
         
        private function selectRecentDocument(event:Event):void { 
            trace("Selected recent document: " + event.target.data.name); 
        } 
         
        private function selectCommand(event:Event):void { 
            trace("Selected command: " + event.target.label); 
        } 
 
        private function selectCommandMenu(event:Event):void { 
            if (event.currentTarget.parent != null) { 
                var menuItem:NativeMenuItem = 
                        findItemForMenu(NativeMenu(event.currentTarget)); 
                if (menuItem != null) { 
                    trace("Select event for \"" +  
                            event.target.label +  
                            "\" command handled by menu: " +  
                            menuItem.label); 
                } 
            } else { 
                trace("Select event for \"" +  
                        event.target.label +  
                        "\" command handled by root menu."); 
            } 
        } 
         
        private function findItemForMenu(menu:NativeMenu):NativeMenuItem { 
            for each (var item:NativeMenuItem in menu.parent.items) { 
                if (item != null) { 
                    if (item.submenu == menu) { 
                        return item; 
                    } 
                } 
            } 
            return null; 
        } 
    } 
}