////////////////////////////////////////////////////////////////////////////////
//
// 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.
//
////////////////////////////////////////////////////////////////////////////////
package mx.effects.effectClasses
{
import flash.events.Event;
import flash.events.IEventDispatcher;
import mx.core.mx_internal;
/**
* The PauseInstance class implements the instance class for the Pause effect.
* Flex creates an instance of this class when it plays a Pause effect;
* you do not create one
* yourself.
*
* @see mx.effects.Pause
*
* @langversion 3.0
* @playerversion Flash 9
* @playerversion AIR 1.1
* @productversion Flex 3
*/
public class PauseInstance extends TweenEffectInstance
{
include "../../core/Version.as";
//--------------------------------------------------------------------------
//
// Constructor
//
//--------------------------------------------------------------------------
/**
* Constructor.
*
* @param target This argument is ignored by the Pause effect.
* It is included for consistency with other effects.
*
* @langversion 3.0
* @playerversion Flash 9
* @playerversion AIR 1.1
* @productversion Flex 3
*/
public function PauseInstance(target:Object)
{
super(target);
}
//--------------------------------------------------------------------------
//
// Variables
//
//--------------------------------------------------------------------------
/**
* We cache the source for the event "eventName" to remove
* the listener for it when the effect ends.
*
* @langversion 3.0
* @playerversion Flash 9
* @playerversion AIR 1.1
* @productversion Flex 3
*/
private var eventSource:IEventDispatcher;
//--------------------------------------------------------------------------
//
// Properties
//
//--------------------------------------------------------------------------
//----------------------------------
// eventName
//----------------------------------
/**
* Name of event that Pause is waiting on before ending.
* This parameter must be used in conjunction with the
* target
property, which must be of type
* IEventDispatcher; all events must originate
* from some dispatcher.
*
*
Listening for eventName
is also related to the
* duration
property, which acts as a timeout for the
* event. If the event is not received in the time period specified
* by duration
, the effect will end, regardless.
This property is optional; the default * action is to play without waiting for any event.
* * @langversion 3.0 * @playerversion Flash 9 * @playerversion AIR 1.1 * @productversion Flex 3 */ public var eventName:String //-------------------------------------------------------------------------- // // Overridden methods // //-------------------------------------------------------------------------- /** * @private */ override public function play():void { // Dispatch an effectStart event from the target. super.play(); if (eventName && target is IEventDispatcher) { eventSource = IEventDispatcher(target); eventSource.addEventListener(eventName, eventHandler); } if (duration >= 0) tween = createTween(this, 0, 0, duration); } //-------------------------------------------------------------------------- // // Event handlers // //-------------------------------------------------------------------------- /** * This function is called by the target if the named event * is dispatched before the duration expires. * * @langversion 3.0 * @playerversion Flash 9 * @playerversion AIR 1.1 * @productversion Flex 3 */ private function eventHandler(event:Event):void { if (duration >= 0) { // Non-negative duration means we must have started // a tween; let it end normally end(); } else { // We didn't start a tween, so finish the effect manually if (eventSource) eventSource.removeEventListener(eventName, eventHandler); finishRepeat(); } } /** * Override this function so that we can remove the listener for the * event named in theeventName
attribute, if it exists
*
* @private
*/
override public function onTweenEnd(value:Object):void
{
if (eventSource)
eventSource.removeEventListener(eventName, eventHandler);
super.onTweenEnd(value);
}
}
}