blob: 0fd3bdfa70ae690ff16aaa3a9f3521921ef3818d [file] [log] [blame]
////////////////////////////////////////////////////////////////////////////////
//
// 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
{
import flash.events.Event;
import flash.events.IEventDispatcher;
/**
* The IEffect interface defines the base
* interface of all Flex effects.
* The IEffectInstance interface defines the base interface for all effect
* instance subclasses.
*
* @see mx.effects.IEffectInstance
*
* @langversion 3.0
* @playerversion Flash 9
* @playerversion AIR 1.1
* @productversion Flex 3
*/
public interface IEffect extends IAbstractEffect
{
//--------------------------------------------------------------------------
//
// Properties
//
//--------------------------------------------------------------------------
//----------------------------------
// className
//----------------------------------
/**
* The name of the effect class, such as <code>"Fade"</code>.
*
* <p>This is a short, or unqualified, class name
* that does not include the package name.
* If you need the qualified name, use the
* <code>getQualifiedClassName()</code> method
* in the flash.utils package.</p>
*
* @langversion 3.0
* @playerversion Flash 9
* @playerversion AIR 1.1
* @productversion Flex 3
*/
function get className():String;
//----------------------------------
// customFilter
//----------------------------------
/**
* Specifies a custom filter object, of type EffectTargetFilter,
* used by the effect to determine the targets
* on which to play the effect.
*
* <p>Target filtering is only performed if you call the
* <code>captureStartValues()</code> method before playing the effect.
* Flex automatically calls the <code>captureStartValues()</code> method
* when the effect is part of a transition.</p>
*
* <p>Use the <code>filter</code> property for simple filtering.
* If the <code>customFilter</code> property is non-null,
* the <code>filter</code> property is ignored.</p>
*
* @default null
*
* @see mx.effects.EffectTargetFilter
*
* @langversion 3.0
* @playerversion Flash 9
* @playerversion AIR 1.1
* @productversion Flex 3
*/
function get customFilter():EffectTargetFilter;
/**
* @private
*/
function set customFilter(value:EffectTargetFilter):void;
//----------------------------------
// duration
//----------------------------------
/**
* Duration of the effect in milliseconds.
*
* <p>In a Parallel or Sequence effect, the <code>duration</code>
* property sets the duration of each effect.
* For example, if a Sequence effect has its <code>duration</code>
* property set to 3000, each effect in the Sequence takes 3000 ms
* to play.</p>
*
* <p>For a repeated effect, the <code>duration</code> property
* specifies the duration of a single instance of the effect.
* Therefore, if an effect has a <code>duration</code> property
* set to 2000, and a <code>repeatCount</code> property set to 3,
* the effect takes a total of 6000 ms (6 seconds) to play.</p>
*
* @default 500
*
* @langversion 3.0
* @playerversion Flash 9
* @playerversion AIR 1.1
* @productversion Flex 3
*/
function get duration():Number;
/**
* @private
*/
function set duration(value:Number):void;
//----------------------------------
// effectTargetHost
//----------------------------------
/**
* A property that lets you access the target list-based control
* of a data effect.
* This property enables an instance of an effect class to communicate
* with the list-based control on which the effect is playing.
*
* @langversion 3.0
* @playerversion Flash 9
* @playerversion AIR 1.1
* @productversion Flex 3
*/
function get effectTargetHost():IEffectTargetHost;
/**
* @private
*/
function set effectTargetHost(value:IEffectTargetHost):void;
//----------------------------------
// filter
//----------------------------------
/**
* Specifies an algorithm for filtering targets for an effect.
* A value of <code>null</code> specifies no filtering.
*
* <p>Target filtering is only performed if you call the
* <code>captureStartValues()</code> method before playing the effect.
* Flex automatically calls the <code>captureStartValues()</code> method
* when the effect is part of a transition, or part of a data effect
* for a list-based control.</p>
*
* <p>Use this property for simple filtering.
* Use the <code>customFilter</code> property for more complex filtering.
* If the <code>customFilter</code> property has a non-null value,
* this property is ignored.</p>
*
* <p>You can use the following values for the <code>filter</code>
* property:</p>
*
* <ul>
* <li>A value of <code>"add"</code> plays the effect on any targets
* that are added as a child to a container.</li>
* <li>A value of <code>"addItem"</code> plays the effect
* on the item renderer for any list items added to a List
* or TileList control.</li>
* <li>A value of <code>"hide"</code> plays the effect on any targets
* whose visible property changed from <code>true</code> to
* <code>false</code>.</li>
* <li>A value of <code>"move"</code> plays the effect on any targets
* that changed their <code>x</code> or <code>y</code>
* properties.</li>
* <li>A value of <code>"remove"</code> plays the effect on any targets
* that are removed as a child of a container.</li>
* <li>A value of <code>"removeItem"</code> plays the effect
* on the item renderer for any list items removed from a List
* or TileList control.</li>
* <li>A value of <code>"replacedItem"</code> plays the effect
* on the item renderer for any list items replaced in a List
* or TileList control by a new item.</li>
* <li>A value of <code>"replacementItem"</code> plays the effect
* on the item renderer for any list items added to a List
* or TileList control that replaces an existing item.</li>
* <li>A value of <code>"resize"</code> plays the effect
* on any targets that changed their <code>width</code>
* or <code>height</code> properties.</li>
* <li>A value of <code>"show"</code> plays the effect
* on any targets whose visible property changed
* from <code>false</code> to <code>true</code>.</li>
* <li>A value of <code>""</code> specifies no filtering.</li>
* </ul>
*
* @default null
*
* @langversion 3.0
* @playerversion Flash 9
* @playerversion AIR 1.1
* @productversion Flex 3
*/
function get filter():String;
/**
* @private
*/
function set filter(value:String):void;
//----------------------------------
// hideFocusRing
//----------------------------------
/**
* Determines whether the effect should hide the focus ring
* when starting the effect.
* The effect target is responsible for the hiding the focus ring.
* Subclasses of the UIComponent class hide the focus ring automatically.
* If the effect target is not a subclass of the UIComponent class,
* add functionality to it to hide the focus ring.
*
* <p>Set this property to <code>true</code>
* to hide the focus ring during the effect.</p>
*
* <p>For subclasses of Effect, the default value is <code>false</code>.
* For subclasses of MaskEffect, the default value is <code>true</code>.
* </p>
*
* @langversion 3.0
* @playerversion Flash 9
* @playerversion AIR 1.1
* @productversion Flex 3
*/
function get hideFocusRing():Boolean;
/**
* @private
*/
function set hideFocusRing(value:Boolean):void;
//----------------------------------
// isPlaying
//----------------------------------
/**
* A read-only flag which is true if any instances of the effect
* are currently playing, and false if none are.
*
* @langversion 3.0
* @playerversion Flash 9
* @playerversion AIR 1.1
* @productversion Flex 3
*/
function get isPlaying():Boolean;
//----------------------------------
// perElementOffset
//----------------------------------
/**
* Additional delay, in milliseconds, for effect targets
* after the first target of the effect.
* This value is added to the value
* of the <code>startDelay</code> property.
*
* @langversion 3.0
* @playerversion Flash 9
* @playerversion AIR 1.1
* @productversion Flex 3
*/
function get perElementOffset():Number;
/**
* @private
*/
function set perElementOffset(value:Number):void;
//----------------------------------
// relevantProperties
//----------------------------------
/**
* An Array of property names to use when performing filtering.
* This property is used internally and should not be set by
* effect users.
*
* <p>The default value is equal to the Array returned by
* the <code>getAffectedProperties()</code> method.</p>
*
* @langversion 3.0
* @playerversion Flash 9
* @playerversion AIR 1.1
* @productversion Flex 3
*/
function get relevantProperties():Array /* of String */;
/**
* @private
*/
function set relevantProperties(values:Array /* of String */):void;
//----------------------------------
// relevantStyles
//----------------------------------
/**
* An Array of style names to use when performing filtering.
* This property is used internally and should not be set by
* effect users.
*
* <p>The default value is equal to the Array returned by
* the <code>getAffectedProperties()</code> method.</p>
*
* @langversion 3.0
* @playerversion Flash 9
* @playerversion AIR 1.1
* @productversion Flex 3
*/
function get relevantStyles():Array /* of String */;
/**
* @private
*/
function set relevantStyles(values:Array /* of String */):void;
//----------------------------------
// target
//----------------------------------
/**
* The object to which this effect is applied.
* When an effect is triggered by an effect trigger,
* the <code>target</code> property is automatically set to be
* the object that triggers the effect.
*
* @langversion 3.0
* @playerversion Flash 9
* @playerversion AIR 1.1
* @productversion Flex 3
*/
function get target():Object;
/**
* @private
*/
function set target(value:Object):void;
//----------------------------------
// targets
//----------------------------------
/**
* An Array of objects that are targets for the effect.
* When the effect is playing, it performs the effect on each target
* in parallel.
* Setting the <code>target</code> property replaces all objects
* in this Array.
* When the <code>targets</code> property is set, the <code>target</code>
* property returns the first item in this Array.
*
* @langversion 3.0
* @playerversion Flash 9
* @playerversion AIR 1.1
* @productversion Flex 3
*/
function get targets():Array;
/**
* @private
*/
function set targets(value:Array):void;
//----------------------------------
// triggerEvent
//----------------------------------
/**
* The Event object passed to this Effect
* by the EffectManager when an effect is triggered,
* or <code>null</code> if the effect is not being
* played by the EffectManager.
*
* @langversion 3.0
* @playerversion Flash 9
* @playerversion AIR 1.1
* @productversion Flex 3
*/
function get triggerEvent():Event;
/**
* @private
*/
function set triggerEvent(value:Event):void;
//----------------------------------
// playheadTime
//----------------------------------
/**
* Current time position of the effect.
* This property has a value between 0 and the total duration,
* which includes the Effect's <code>startDelay</code>,
* <code>repeatCount</code>, and <code>repeatDelay</code>.
*
* @langversion 3.0
* @playerversion Flash 9
* @playerversion AIR 1.1
* @productversion Flex 3
*/
function get playheadTime():Number;
/**
* @private
*/
function set playheadTime(value:Number):void;
//--------------------------------------------------------------------------
//
// Methods
//
//--------------------------------------------------------------------------
/**
* Returns an Array of Strings, where each String is the name
* of a property changed by this effect.
* For example, the Move effect returns an Array that contains
* <code>"x"</code> and <code>"y"</code>.
*
* <p>Every subclass of Effect must implement this method.
* The EffectManager uses this method
* to ensure that no two effects are trying to animate
* the same property of the same object at the same time.</p>
*
* @return An Array of Strings specifying the names of the
* properties modified by this effect.
*
* @langversion 3.0
* @playerversion Flash 9
* @playerversion AIR 1.1
* @productversion Flex 3
*/
function getAffectedProperties():Array /* of String */;
/**
* Takes an Array of target objects and invokes the
* <code>createInstance()</code> method on each target.
*
* @param targets Array of objects to animate with this effect.
*
* @return Array of effect instance objects, one per target,
* for the effect.
*
* @langversion 3.0
* @playerversion Flash 9
* @playerversion AIR 1.1
* @productversion Flex 3
*/
function createInstances(targets:Array = null):Array /* of EffectInstance */;
/**
* Creates a single effect instance and initializes it.
* Use this method instead of the <code>play()</code> method
* to manipulate the effect instance properties
* before the effect instance plays.
*
* <p>The effect instance is created with the type
* specified in the <code>instanceClass</code> property.
* It is then initialized using the <code>initInstance()</code> method.
* If the instance was created by the EffectManager
* (when the effect is triggered by an effect trigger),
* the effect is further initialized by a call to the
* <code>EffectInstance.initEffect()</code> method.</p>
*
* <p>Calling the <code>createInstance()</code> method
* does not play the effect.
* Call the <code>startEffect()</code> method
* on the returned effect instance. </p>
*
* <p>This function is automatically called by the
* <code>Effect.play()</code> method. </p>
*
* @param target Object to animate with this effect.
*
* @return The effect instance object for the effect.
*
* @langversion 3.0
* @playerversion Flash 9
* @playerversion AIR 1.1
* @productversion Flex 3
*/
function createInstance(target:Object = null):IEffectInstance;
/**
* Removes event listeners from an instance
* and removes it from the list of instances.
*
* @param instance The effect instance.
*
* @langversion 3.0
* @playerversion Flash 9
* @playerversion AIR 1.1
* @productversion Flex 3
*/
function deleteInstance(instance:IEffectInstance):void;
/**
* Begins playing the effect.
* You typically call the <code>end()</code> method
* before you call the <code>play()</code> method
* to ensure that any previous instance of the effect
* has ended before you start a new one.
*
* <p>All subclasses must implement this method.</p>
*
* @param targets Array of target objects on which to play this effect.
* If this parameter is specified, then the effect's <code>targets</code>
* property is not used.
*
* @param playReversedFromEnd If <code>true</code>,
* play the effect backwards.
*
* @return Array of EffectInstance objects, one per target,
* for the effect.
*
* @langversion 3.0
* @playerversion Flash 9
* @playerversion AIR 1.1
* @productversion Flex 3
*/
function play(targets:Array = null,
playReversedFromEnd:Boolean = false):
Array /* of EffectInstance */;
/**
* Pauses the effect until you call the <code>resume()</code> method.
*
* @langversion 3.0
* @playerversion Flash 9
* @playerversion AIR 1.1
* @productversion Flex 3
*/
function pause():void;
/**
* Stops the effect, leaving the effect targets in their current state.
* Unlike a call to the <code>pause()</code> method,
* you cannot call the <code>resume()</code> method after calling
* the <code>stop()</code> method.
* However, you can call the <code>play()</code> method to restart the effect.
*
* <p>The effect instance dispatches an <code>effectEnd</code> event
* when you call this method as part of ending the effect.</p>
*
* <p>For mask effects, the mask is not removed automatically
* when the effect is stopped.
* Running further mask effects on the same target(s)
* without first removing the mask can produce unexpected results.</p>
*
* @langversion 3.0
* @playerversion Flash 9
* @playerversion AIR 1.1
* @productversion Flex 3
*/
function stop():void;
/**
* Resumes the effect after it has been paused
* by a call to the <code>pause()</code> method.
*
* @langversion 3.0
* @playerversion Flash 9
* @playerversion AIR 1.1
* @productversion Flex 3
*/
function resume():void;
/**
* Plays the effect in reverse, if the effect is currently playing,
* starting from the current position of the effect.
*
* @langversion 3.0
* @playerversion Flash 9
* @playerversion AIR 1.1
* @productversion Flex 3
*/
function reverse():void;
/**
* Interrupts an effect that is currently playing,
* and jumps immediately to the end of the effect.
* Calling this method invokes the <code>EffectInstance.end()</code>
* method.
*
* <p>The effect instance dispatches an <code>effectEnd</code> event
* when you call this method as part of ending the effect.</p>
*
* <p>If you pass an effect instance as an argument,
* just that instance is interrupted.
* If no argument is passed in, all effect instances currently
* spawned from the effect are interrupted.</p>
*
* @param effectInstance EffectInstance to terminate.
*
* @see mx.effects.EffectInstance#end()
*
* @langversion 3.0
* @playerversion Flash 9
* @playerversion AIR 1.1
* @productversion Flex 3
*/
function end(effectInstance:IEffectInstance = null):void;
/**
* Captures the current values of the relevant properties
* on the effect's targets.
* Flex automatically calls the <code>captureStartValues()</code>
* method when the effect is part of a transition.
*
* <p>Use this function when you want the effect to figure out the start
* and end values of the effect.
* The proper usage of this function is to use it
* in the following steps:</p>
*
* <ol>
* <li>Call the <code>captureStartValues()</code> method.
* The effect captures the starting effect values.</li>
* <li>Make changes to your effect targets, such as
* adding/removing children, altering properties,
* changing location, or changing dimensions.</li>
* <li>Call the <code>play()</code> method.
* The effect captures the end values.
* This function populates the
* <code>EffectInstance.propertyChanges</code> property
* for each effect instance created by this effect.
* Effect developers can use the <code>propertyChanges</code> property
* to retrieve the start and end values for their effect.</li>
* </ol>
*
* @langversion 3.0
* @playerversion Flash 9
* @playerversion AIR 1.1
* @productversion Flex 3
*/
function captureStartValues():void;
/**
* Captures the current values of the relevant properties
* of an additional set of targets
*
* <p>Flex uses this function when a data change
* effect is run.</p>
*
* @param targets Array of targets for which values are captured
*
* @langversion 3.0
* @playerversion Flash 9
* @playerversion AIR 1.1
* @productversion Flex 3
*/
function captureMoreStartValues(targets:Array):void;
/**
* Captures the current values of the relevant properties
* on the effect's targets and saves them as end values.
*
* <p>Flex automatically calls the <code>captureEndValues()</code> method
* when the effect is part of a data change effect.</p>
*
* @langversion 3.0
* @playerversion Flash 9
* @playerversion AIR 1.1
* @productversion Flex 3
*/
function captureEndValues():void;
}
}