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

            // 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>

    <s:Panel title="Resize Effect Example" width="100%" height="100%" >
        <s:VGroup left="20" right="20" top="20" bottom="20">

            <s:Label width="100%" color="blue"
                text="Use the Button controls to control the Resize effect."/>

            <mx:Image id="img" width="30" height="60"
                source="@Embed(source='assets/Product1.png')"/>


            <s:Button id="button1" label="Start" click="expand.play(); button1.enabled=false;"/>
            <s:Button label="Pause" click="expand.pause();"/>
            <s:Button label="Resume" click="expand.resume();"/>
            <s:Button label="Reverse" click="expand.reverse();"/>
            <s:Button label="End" click="expand.end();"/>
            <s:Button label="Reset" click="resetHandler();"/>

        </s:VGroup>
    </s:Panel>
</s:Application>
