<?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 TweenEffect 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.events.TweenEvent;

            // Event handler for the tweenUpdate and tweenEnd effects.            
            private function tweenUpdateHandler(event:TweenEvent):void {
                // Access current width of the image.
                currentWidth.text="Current width (in pixels): " + String(event.value[0]);
            }

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

	<fx:Declarations>
	    <mx:Resize id="expand" target="{img}" widthTo="100" heightTo="200" 
	        duration="10000" 
	        tweenUpdate="tweenUpdateHandler(event)" 
	        tweenEnd="tweenUpdateHandler(event)"/>
	</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 resize the image."/>

        <mx:HBox width="100%">
            <mx:Image id="img" width="30" height="60"
                source="@Embed(source='assets/ApacheFlexLogo.png')"/>
            <mx:Text id="currentWidth" height="20" width="100%"/>     
        </mx:HBox>
            
        <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>
