<?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 Effect class. -->
<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.Alert;

            // Event handler for the effectEnd event.            
            private function endEffectHandler():void {
                Alert.show("Effect Ended!");
            }

            // Event handler for the reset button.            
            private function resetHandler():void {
                expand.end(); 
                img.width=30; 
                img.height=60; 
                button1.enabled=true;
            }
        ]]>
    </fx:Script>


	<fx:Declarations>
	    <mx:Resize id="expand" target="{img}" widthTo="100" heightTo="200" 
	        duration="10000" effectEnd="endEffectHandler()"/>
	</fx:Declarations>

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

        <mx:Text width="100%" 
            text="Use the Button controls to control the Resize effect."/>

        <mx:Image id="img" width="30" height="60"
            source="@Embed(source='assets/ApacheFlexLogo.png')"/>
     
        <mx:ControlBar>
            <mx:Button id="button1" label="Start" click="expand.play(); button1.enabled=false"/>
            <mx:Button label="Pause" click="expand.pause()"/>
            <mx:Button label="Resume" click="expand.resume()"/>
            <mx:Button label="Reverse" click="expand.reverse()"/>
            <mx:Button label="End" click="expand.end()"/>
            <mx:Button label="Reset" click="resetHandler()"/>
        </mx:ControlBar>
        
    </mx:Panel>
</mx:Module>
