<?xml version="1.0" encoding="utf-8"?>
<!--

  Licensed to the Apache Software Foundation (ASF) under one or more
  contributor license agreements.  See the NOTICE file distributed with
  this work for additional information regarding copyright ownership.
  The ASF licenses this file to You under the Apache License, Version 2.0
  (the "License"); you may not use this file except in compliance with
  the License.  You may obtain a copy of the License at

      http://www.apache.org/licenses/LICENSE-2.0

  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License.

-->
<!-- Simple example to demonstrate the Halo Menu control. -->
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
        xmlns:s="library://ns.adobe.com/flex/spark"
        xmlns:mx="library://ns.adobe.com/flex/mx">

    <fx:Script>
        <![CDATA[
            import mx.controls.Alert;
            import mx.controls.Menu;
            import mx.events.MenuEvent;

            private var point1:Point = new Point();
            private var myMenu:Menu;

            // Create and display the Menu control.
            private function showMenu():void {
                myMenu = Menu.createMenu(panel, myMenuData, false);
                myMenu.labelField = "@label";
                myMenu.addEventListener(MenuEvent.ITEM_CLICK, menuHandler);

                // Calculate position of Menu in Application's coordinates. 
                point1.x = myButton.x;
                point1.y = myButton.y;
                point1 = myButton.localToGlobal(point1);

                myMenu.show(point1.x + 25, point1.y + 25);
            }

            // Event handler for the Menu control's change event.
            private function menuHandler(evt:MenuEvent):void  {
                Alert.show("Label: " + evt.item.@label, "Clicked menu item");
            }
        ]]>
    </fx:Script>

    <fx:Declarations>
        <fx:XML id="myMenuData">
            <root>
                <menuitem label="MenuItem 1" eventName="copy"/>
                <menuitem label="MenuItem 2" eventName="paste"/>
            </root>
        </fx:XML>
    </fx:Declarations>

    <s:Panel id="panel"
            title="Halo Menu Control Example"
            width="75%" height="75%" 
            horizontalCenter="0" verticalCenter="0">
        <s:VGroup left="10" right="10" top="10" bottom="10">
            <s:Label width="100%" color="blue"
                    text="Click the button to open the Halo Menu control."/>

            <s:Button id="myButton" label="Open Menu" click="showMenu();"/>
        </s:VGroup>
    </s:Panel>

</s:Application>
