<?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.

-->
<s:Window xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark" 
	xmlns:mx="library://ns.adobe.com/flex/mx" 
	width="400" height="300"
	creationPolicy="{policy}"  creationComplete="completeCreation()">
	<fx:Script>
		<![CDATA[
			import spark.components.Button;
			public var msg:String="";
			[Bindable]
			public var policy:String="none";//default value is none
			[Bindable]
			public var yValue:Number=100;//default y=100
			override 	public  function createDeferredContent():void
			{
				super.createDeferredContent();
				var b:spark.components.Button=new Button();
				b.label="testButton";
				b.name="testButton";
				b.y= yValue;
				this.addElement(b);
				msg+=" testButton is created";
			}
		        //override  mouseDownHandler
        		override protected function mouseDownHandler(e:MouseEvent):void
        		{
        			dispatchEvent(new MouseEvent("myMouseDown_handled", e.bubbles, e.cancelable, e.localX, 
        					e.localY,e.relatedObject,
        					e.ctrlKey, e.altKey,
        					e.shiftKey, e.buttonDown, 
        					e.delta, e.commandKey, 
        					e.controlKey, e.clickCount));
       			}
	
			public function completeCreation():void
			{
				msg=" creationComplete done";
			}
		]]>
	</fx:Script>
	
</s:Window>
