<?xml version="1.0"?>
<!--
  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 PopUpButton control. -->
<mx:Module xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:mx="library://ns.adobe.com/flex/mx"
				paddingBottom="0" paddingTop="0" paddingLeft="0" paddingRight="0"
				height="100%" width="100%">
	
	<fx:Script>
		<![CDATA[

			import mx.controls.*;
			import mx.events.*;

			private var myMenu:Menu;

			// Initialize the Menu control, and specify it as the pop up object
			// of the PopUpButton control. 
			private function initMenu():void {
				myMenu = new Menu();
				var dp:Object = [{label: "New Folder"}, {label: "Sent Items"}, {label: "Inbox"}];        
				myMenu.dataProvider = dp;
				myMenu.selectedIndex = 0;       
				myMenu.addEventListener("itemClick", itemClickHandler);
				popB.popUp = myMenu;
				popB.label = "Put in: " + myMenu.dataProvider[myMenu.selectedIndex].label;
			}

			// Define the event listener for the Menu control's itemClick event. 
			private function itemClickHandler(event:MenuEvent):void {
				var label:String = event.item.label;        
				popTypeB.text=String("Moved to " + label);
				popB.label = "Put in: " + label;
				popB.close();
				myMenu.selectedIndex = event.index;
			}

		]]>
	</fx:Script>

    <mx:Panel title="PopUpButton Control Example"
				paddingBottom="10" paddingTop="10" paddingLeft="10" paddingRight="10"
				height="100%" width="100%">

        <mx:Label width="100%"
            text="Button label contains the name of the last selected menu item." />
        <mx:PopUpButton id="popB" label="Edit" creationComplete="initMenu()" width="135" />
		
        <mx:Spacer height="50" />
        <mx:TextInput id="popTypeB" />
		
    </mx:Panel>		
</mx:Module>
