Transferred from the Adobe Open Source Subversion Repository

Revision: 12850
Author:   jimurphy@adobe.com
Date:     2009-12-11T14:57:14.623098Z

Log Message:
-----------
add 6 new DMV projects to the SDK:
automation
automation_air
automation_dmv
automation_flashflexkit
automation_spark
datavisualization

These projects are setup to build in an ant main call.  There are currently several warnings in the datavisualization project that will be cleaned up.  No checkintests exist for these projects as of yet.

I also modified the exisitng projects build files for easier management of the localization targets, bundle and fat-swc. If the projects that I updated:airframework,airspark,framework,playerglobal,rpc,and spark.  All the new projects have been implemented this same way.

QE notes: DMV folks should run through their tests
Doc notes: probably
Bugs: nope
Reviewer:
Tests run: ran the following targets: compile,checkintests,other.locales and doc
Is noteworthy for integration: no

Modified Paths:
--------------
1404 paths were modified

git-svn-id: 7146a936b37d36e51ea0d66f8acbe0b8281bc7b7@1290600 13f79535-47bb-0310-9956-ffa450edef68

--- frameworks/projects/advancedgrids/src/mx/olap/OLAPCube.as
+++ frameworks/projects/advancedgrids/src/mx/olap/OLAPCube.as
@@ -0,0 +1,1142 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  ADOBE SYSTEMS INCORPORATED
+//  Copyright 2009 Adobe Systems Incorporated
+//  All Rights Reserved.
+//
+//  NOTICE: Adobe permits you to use, modify, and distribute this file
+//  in accordance with the terms of the license agreement accompanying it.
+//
+////////////////////////////////////////////////////////////////////////////////
+
+package mx.olap
+{
+
+import flash.events.Event;
+import flash.events.EventDispatcher;
+import flash.events.IEventDispatcher;
+import flash.events.TimerEvent;
+import flash.utils.Dictionary;
+import flash.utils.Proxy;
+import flash.utils.Timer;
+import flash.utils.getTimer;
+
+import mx.collections.ArrayCollection;
+import mx.collections.ICollectionView;
+import mx.collections.IList;
+import mx.collections.Sort;
+import mx.core.mx_internal;
+import mx.events.CubeEvent;
+import mx.messaging.messages.ErrorMessage;
+import mx.resources.ResourceManager;
+import mx.rpc.AsyncToken;
+import mx.rpc.IResponder;
+
+use namespace mx_internal;
+
+//--------------------------------------
+//  Events
+//--------------------------------------
+
+/**
+*  Dispatched when a cube has been created
+*  and is ready to be queried.
+*
+*  @eventType mx.events.CubeEvent.CUBE_COMPLETE
+*
+*  @langversion 3.0
+*  @playerversion Flash 9
+*  @playerversion AIR 1.1
+*  @productversion Flex 3
+*/
+[Event(name="complete", type="mx.events.CubeEvent")]
+
+/**
+*  Dispatched continuously as a cube is being created
+*  by a call to the refresh() method.
+*
+*  @eventType mx.events.CubeEvent.CUBE_PROGRESS
+*
+*  @langversion 3.0
+*  @playerversion Flash 9
+*  @playerversion AIR 1.1
+*  @productversion Flex 3
+*/
+[Event(name="progress", type="mx.events.CubeEvent")]
+
+/**
+*  Dispatched continuously as a query result is being generated
+*  by a call to the execute() method.
+*
+*  @eventType mx.events.CubeEvent.QUERY_PROGRESS
+*
+*  @langversion 3.0
+*  @playerversion Flash 9
+*  @playerversion AIR 1.1
+*  @productversion Flex 3
+*/
+[Event(name="queryProgress", type="mx.events.CubeEvent")]
+
+//--------------------------------------
+//  metadata
+//--------------------------------------
+
+[DefaultProperty("elements")]
+
+[ResourceBundle("olap")]
+
+/**
+ *  The OLAPCube class represents an OLAP cube.
+ *
+ *  @mxml
+ *

+ *  The <mx:OLAPCube> tag inherits all of the tag attributes
+ *  of its superclass, and adds the following tag attributes:
+ *

+ *

+ *  <mx:OLAPCube
+ *    Properties
+ *    dataProvider=""
+ *    dimensions=""
+ *    elements=""
+ *    measures=""
+ *  />
+ *.
+ *  @see mx.olap.IOLAPCube
+ *
+ *  @langversion 3.0
+ *  @playerversion Flash 9
+ *  @playerversion AIR 1.1
+ *  @productversion Flex 3
+ */
+public class OLAPCube extends Proxy implements IOLAPCube, IEventDispatcher
+{
+    include "../core/Version.as";
+
+    //--------------------------------------------------------------------------
+    //
+    //  Constructor
+    //
+    //--------------------------------------------------------------------------
+
+    /**
+     *  Constructor.
+     *
+     *  @param name The name of the OLAP cube.
+     *
+     *  @langversion 3.0
+     *  @playerversion Flash 9
+     *  @playerversion AIR 1.1
+     *  @productversion Flex 3
+     */
+    public function OLAPCube(name:String=null)
+    {
+        OLAPTrace.traceMsg("Creating cube: " + name, OLAPTrace.TRACE_LEVEL_3);
+        super();
+
+        this.name = name;
+
+        ev = new EventDispatcher(this);
+    }
+
+    //--------------------------------------------------------------------------
+    //
+    //  Variables
+    //
+    //--------------------------------------------------------------------------
+
+    /**
+     *  @private
+     *  A map of dimensions based on their name.
+     */
+    private var _dimensionMap:Dictionary = new Dictionary(true);
+
+    //flag indicating whether we have prepared the dataProvider for processing
+    private var prepare:Boolean = false;
+
+    //saved sort property of the source dataProvider.
+    private var oldSort:Sort;
+
+    // index of the dimension being processed.
+    private var dimIndex:int = 0;
+
+    //progress in cube building
+    private var progress:int;
+
+    //total number of dimensions/data rows to process
+    private var total:int;
+
+    //the embedded event dispatcher object to support IEventDispatcher interface.
+    private var ev:EventDispatcher;
+
+    /**
+     *  @private
+     *  Timer used to build the cube.
+     */
+    private var cubeBuildingTimer:Timer;
+
+    /**
+     *  @private
+     *  Timer used to compute query results.
+     */
+    private var queryTimer:Timer;
+
+    /**
+     *  @private
+     *  Array holding all queries to be executed
+     */
+    private var _queriesPending:Array = [];
+
+    /**
+     *  @private
+     *  Map of query objects to their AsyncToken
+     */
+    private var _queryToken:Dictionary = new Dictionary(true);
+
+    private var _cubeImpl:IOLAPCubeImpl = new DefaultCubeImpl;
+
+    mx_internal var defaultMeasure:OLAPMeasure;
+
+    mx_internal var attributeToIndex:Dictionary;
+
+    /**
+     *  Sets the name of the dimension for the measures of the OLAP cube.
+     *
+     *  @default "Measures"
+     *
+     *  @langversion 3.0
+     *  @playerversion Flash 9
+     *  @playerversion AIR 1.1
+     *  @productversion Flex 3
+     */
+    protected var measureDimensionName:String = "Measures";
+
+    /**
+     *  The class used by an OLAPCube instance to return the result.
+     *  You can replace the default class, OLAPResult, with your own implementation
+     *  of the IOLAPResult interface to customize the result.
+     *
+     *  @default OLAPResult
+     *
+     *  @langversion 3.0
+     *  @playerversion Flash 9
+     *  @playerversion AIR 1.1
+     *  @productversion Flex 3
+     */
+    protected var resultClass:Class = OLAPResult;
+
+    /**
+     *  The time interval, in milliseconds, used by the timer of the refresh() method
+     *  to iteratively build the cube.
+     *  You can set it to a higher value if you can wait longer before the cube is built.
+     *  You can set it to a lower value, but it might negatively impact responsiveness of your application.
+     *
+     *  @langversion 3.0
+     *  @playerversion Flash 9
+     *  @playerversion AIR 1.1
+     *  @productversion Flex 3
+     */
+    protected var cubeBuildingTimeInterval:int = 5;
+
+    /**
+     *  The time interval, in milliseconds, used by the timer of the execute() method
+     *  to iteratively process queries.
+     *  You can set it to a higher value if you can wait for longer
+     *  before the cube generates the query result.
+     *  You can set it to a lower value to obtain query results faster,
+     *  but it might negatively impact the responsiveness of your application.
+     *
+     *  @langversion 3.0
+     *  @playerversion Flash 9
+     *  @playerversion AIR 1.1
+     *  @productversion Flex 3
+     */
+    protected var queryBuildingTimeInterval:int = 1;
+
+    /**
+     *  The time, in milliseconds, used by the refresh() method
+     *  to iteratively build the cube.
+     *  A higher value would mean more rows would get processed at each timer event.
+     *  You can set it to a higher value if you want the cube to be built faster,
+     *  but it might negatively impact responsiveness of your application.
+     *
+     *  @langversion 3.0
+     *  @playerversion Flash 9
+     *  @playerversion AIR 1.1
+     *  @productversion Flex 3
+     */
+    protected var workDuration:int = 50;
+
+    //--------------------------------------------------------------------------
+    //
+    //  Properties
+    //
+    //--------------------------------------------------------------------------
+
+    //----------------------------------
+    // attributeLevels
+    //----------------------------------
+
+    /**
+     *  @private
+     *  Returns an array of all levels in the cube.
+     *  Attribute levels duplicated in user defined hierarchy are skipped.
+     */
+    private var _attributeLevels:Array;
+
+    mx_internal function get attributeLevels():Array
+    {
+        if (_attributeLevels)
+            return _attributeLevels;
+
+        _attributeLevels = [];
+
+        var a:OLAPAttribute;
+        for each (var dim:IOLAPDimension in dimensions)
+        {
+            //skip measure dimension
+            if (dim.isMeasure)
+                continue;
+
+            //including attributes which are not part of any user defined hierarchy.
+            for each (a in dim.attributes)
+            {
+                // if the attribute is used in a user defined hierarchy we want to
+                // pick the attributes in the user specified order.
+                // so we skip it here.
+                if (!a.userHierarchyLevel)
+                    _attributeLevels = _attributeLevels.concat(a.allLevels.toArray());
+            }
+
+            //attributes in user defined hierarchy
+            for each (var h:OLAPHierarchy in dim.hierarchies)
+            {
+                var hLevels:IList = h.levels;
+                var length:int = hLevels.length;
+                for (var i:int = 0; i < length; ++i)
+                {
+                    a = OLAPLevel(hLevels.getItemAt(i)).attribute;
+                    _attributeLevels = _attributeLevels.concat(a.allLevels.toArray());
+                }
+            }
+        }
+
+        return _attributeLevels;
+    }
+
+    //----------------------------------
+    // dataProvider
+    //----------------------------------
+
+    private var _dataProvider:ICollectionView;
+
+    /**
+     *  The flat data used to populate the OLAP cube.
+     *  You must call the refresh() method
+     *  to initialize the cube after setting this property.
+     *
+     *  @langversion 3.0
+     *  @playerversion Flash 9
+     *  @playerversion AIR 1.1
+     *  @productversion Flex 3
+     */
+    public function get dataProvider():ICollectionView
+    {
+        return _dataProvider;
+    }
+
+    /**
+     *  @private
+     */
+    public function set dataProvider(value:ICollectionView):void
+    {
+        var collection:ICollectionView = value as ICollectionView;
+
+        _dataProvider = collection;
+    }
+
+    //----------------------------------
+    // defaultTupleMembers
+    //----------------------------------
+
+    mx_internal var _defaultTupleMembers:Array;
+
+    mx_internal function get defaultTupleMembers():Array
+    {
+        if (!_defaultTupleMembers)
+        {
+            _defaultTupleMembers = new Array(attributeLevels.length/2);
+            attributeToIndex = new Dictionary;
+            var aIndex:int = 0;
+            var n:int = attributeLevels.length;
+            for (var i:int = 0; i < n; i += 2)
+            {
+                var attr:OLAPAttribute = attributeLevels[i].attribute;
+                attributeToIndex[attr] = aIndex;
+                _defaultTupleMembers[aIndex++] = attr.defaultMember;
+            }
+        }
+
+        return _defaultTupleMembers.slice();
+    }
+
+    //----------------------------------
+    // dimensions
+    //----------------------------------
+
+    /**
+     * @private
+     */
+    private var _dimensions:IList = new ArrayCollection;
+
+    /**
+     *  @inheritDoc
+     *
+     *  @langversion 3.0
+     *  @playerversion Flash 9
+     *  @playerversion AIR 1.1
+     *  @productversion Flex 3
+     */
+    public function get dimensions():IList
+    {
+        return _dimensions;
+    }
+
+    /**
+     *  @private
+     */
+    public function set dimensions(value:IList):void
+    {
+        //reset the cache of levels
+        _attributeLevels = null;
+        _dimensions = value;
+        var n:int = value.length;
+        for (var i:int = 0; i < n; ++i)
+        {
+            var dim:OLAPDimension = value.getItemAt(i) as OLAPDimension;
+            dim.cube = this;
+            _dimensionMap[dim.name] = dim;
+        }
+    }
+
+    //----------------------------------
+    // elements
+    //----------------------------------
+
+    /**
+    *  Processes the input Array and initializes the dimensions
+    *  and measures properties based on the elements of the Array.
+    *  Dimensions are represented in the Array by instances of the OLAPDimension class,
+    *  and measures are represented by instances of the OLAPMeasure class.
+    *
+    *
Use this property to define the dimensions and measures of a cube in a single Array.

+    *
+    *  @langversion 3.0
+    *  @playerversion Flash 9
+    *  @playerversion AIR 1.1
+    *  @productversion Flex 3
+    */
+    public function set elements(value:Array):void
+    {
+        var dims:ArrayCollection = new ArrayCollection();
+        var userMeasures:ArrayCollection = new ArrayCollection();
+        for each (var element:Object in value)
+        {
+            if (element is OLAPDimension)
+                dims.addItem(element);
+            else if (element is OLAPMeasure)
+                userMeasures.addItem(element);
+            else
+                OLAPTrace.traceMsg("Invalid element specified for cube elements");
+        }
+
+        dimensions = dims;
+        measures = userMeasures;
+    }
+
+    //----------------------------------
+    // measures
+    //----------------------------------
+
+    /**
+     * @private
+     */
+    private var _measures:IList; //of OLAPMeasures
+
+    /**
+     *  Sets the measures of the OLAP cube, as a list of OLAPMeasure instances.
+     *
+     *  @langversion 3.0
+     *  @playerversion Flash 9
+     *  @playerversion AIR 1.1
+     *  @productversion Flex 3
+     */
+    public function set measures(value:IList):void
+    {
+        _measures = value;
+    }
+
+    //----------------------------------
+    // name
+    //----------------------------------
+
+    /**
+     * @private
+     */
+    private var _name:String;
+
+    /**
+     *  @inheritDoc
+     *
+     *  @langversion 3.0
+     *  @playerversion Flash 9
+     *  @playerversion AIR 1.1
+     *  @productversion Flex 3
+     */
+    public function get name():String
+    {
+        return _name;
+    }
+
+    /**
+     *  @private
+     */
+    public function set name(value:String):void
+    {
+        _name = value;
+    }
+
+    //--------------------------------------------------------------------------
+    //
+    //  Methods
+    //
+    //--------------------------------------------------------------------------
+
+    /**
+     *  @inheritDoc
+     *
+     *  @langversion 3.0
+     *  @playerversion Flash 9
+     *  @playerversion AIR 1.1
+     *  @productversion Flex 3
+     */
+    public function cancelQuery(query:IOLAPQuery):void
+    {
+        var queryIndex:int = _queriesPending.indexOf(query);
+        if (queryIndex != -1)
+        {
+            // if the query was the current query ask cubeImpl to
+            // abort the query.
+            if (queryIndex == 0)
+                _cubeImpl.cancelQuery(query);
+            _queriesPending.splice(queryIndex, 1);
+
+            //TODO make a fault call?
+            delete _queryToken[query];
+            if (_queriesPending.length == 0)
+            {
+                queryTimer.stop();
+                queryTimer = null;
+            }
+        }
+    }
+
+    /**
+     *  @inheritDoc
+     *
+     *  @langversion 3.0
+     *  @playerversion Flash 9
+     *  @playerversion AIR 1.1
+     *  @productversion Flex 3
+     */
+    public function cancelRefresh():void
+    {
+        prepare = false;
+        progress = 0;
+
+        _cubeImpl.cancelRefresh();
+
+        if (cubeBuildingTimer)
+        {
+            cubeBuildingTimer.stop();
+            cubeBuildingTimer.removeEventListener(TimerEvent.TIMER,  updateDimensions);
+            cubeBuildingTimer.removeEventListener(TimerEvent.TIMER,  buildCube);
+            cubeBuildingTimer = null;
+        }
+
+        if (oldSort)
+        {
+            dataProvider.sort = oldSort;
+            dataProvider.refresh();
+        }
+    }
+
+    /**
+     *  @private
+     *  Creates a new dimension of the cube with the specified name.
+     *
+     *  @param name The name of the new dimension.
+     *
+     *  @return An OLAPDimension instance representing the new dimension.
+     */
+    public function createDimension(name:String):OLAPDimension
+    {
+        var dim:OLAPDimension = new OLAPDimension(name);
+        dim.cube = this;
+        _dimensions.addItem(dim);
+        _dimensionMap[name] = dim;
+        return dim;
+    }
+
+    /**
+     *  @inheritDoc
+     *
+     *  @langversion 3.0
+     *  @playerversion Flash 9
+     *  @playerversion AIR 1.1
+     *  @productversion Flex 3
+     */
+    public function findDimension(name:String):IOLAPDimension
+    {
+        return _dimensionMap[name];
+    }
+
+     /**
+     *  @inheritDoc
+     *
+     *  @langversion 3.0
+     *  @playerversion Flash 9
+     *  @playerversion AIR 1.1
+     *  @productversion Flex 3
+     */
+    public function refresh():void
+    {
+        // check if the refresh is already in progress and return in that case.
+        // we can get into a infinite loop if refresh is being called in
+		// a collection change handler because a call to refresh sorts the dataProvider
+		// resulting in a collection changed event
+        if(cubeBuildingTimer)
+            return;
+
+        _attributeLevels = null;
+
+        //TODO if user sets new dimensions after refreshing we need to again
+        // position the measures dimension to the end of the list
+
+        // is this the right place to do this creation of Measures Level?
+        if (!findDimension(measureDimensionName))
+        {
+            var measuresDim:OLAPDimension = createDimension(measureDimensionName);
+            var measuresHierarchy:OLAPHierarchy = measuresDim.createHierarchy(measureDimensionName);
+            measuresHierarchy.hasAll = false;
+            measuresHierarchy.dimension = measuresDim;
+            var measuresLevel:OLAPLevel  = measuresHierarchy.createLevel(measureDimensionName);
+            measuresDim.setAsMeasure(true);
+
+            measuresDim.refresh();
+
+            if (!_measures || _measures.length == 0)
+            {
+                var message:String = ResourceManager.getInstance().getString(
+                            "olap", "noMeasures");
+                throw Error(message);
+            }
+
+            // loop: create measure members
+            var n:int = _measures.length;
+            for (var i:int = 0; i < n; ++i)
+            {
+                var m:OLAPMeasure = _measures.getItemAt(i) as OLAPMeasure;
+                m.dimension = measuresDim;
+                measuresLevel.addMember(m);
+            }
+        }
+
+        defaultMeasure = _measures.getItemAt(0) as OLAPMeasure;
+
+        //TODO a warning message to the user
+        if (!dataProvider)
+            return;
+
+        cubeBuildingTimer = new Timer(cubeBuildingTimeInterval);
+        cubeBuildingTimer.addEventListener(TimerEvent.TIMER,  updateDimensions);
+        cubeBuildingTimer.start();
+    }
+
+    /**
+     *  @private
+     */
+    private function dispatchCubeProgress(progress:int, total:int, message:String=null):void
+    {
+        var ev:CubeEvent = new CubeEvent(CubeEvent.CUBE_PROGRESS);
+        ev.progress = progress;
+        ev.total = total;
+        ev.message = message;
+        dispatchEvent(ev);
+    }
+
+    /**
+     *  @private
+     */
+    private function updateDimensions(event:TimerEvent):void
+    {
+        if (!prepare)
+        {
+	        //TODO may have to do it for each dimension if they have individual
+    	    // dataProviders (to support star schema?)
+            oldSort = dataProvider.sort;
+            prepare = true;
+            dimIndex = 0;
+            dispatchCubeProgress(dimIndex, dimensions.length,
+            				ResourceManager.getInstance().getString("olap",
+            				"dimensionProcessingMessage", [dimensions.getItemAt(dimIndex).name]));
+            return;
+        }
+
+        if (dimIndex < dimensions.length)
+        {
+            dispatchCubeProgress(dimIndex, dimensions.length,
+            			ResourceManager.getInstance().getString("olap",
+            			"dimensionProcessingMessage", [dimensions.getItemAt(dimIndex).name]));
+            dimensions.getItemAt(dimIndex).refresh();
+            ++dimIndex;
+            return;
+        }
+
+        dispatchCubeProgress(dimIndex, dimensions.length);
+
+        prepare = false;
+        cubeBuildingTimer.stop();
+        cubeBuildingTimer.removeEventListener(TimerEvent.TIMER,  updateDimensions);
+
+        dataProvider.sort = oldSort;
+        oldSort = null;
+
+        dataProvider.refresh();
+
+        if (cubeImpl)
+        {
+            cubeImpl.cube = this;
+            cubeImpl.refresh();
+            cubeBuildingTimer.addEventListener(TimerEvent.TIMER,  buildCube);
+            cubeBuildingTimer.start();
+            progress = 0;
+            total = dataProvider.length;
+        }
+    }
+
+    /**
+    *  @private
+    */
+    private function buildCube(event:TimerEvent):void
+    {
+        //once we have processed all rows cube would be doing a final pass
+        //which takes a longer time. So we skip a loop to provide
+        // a chance for the progress to be shown
+        if (progress == (total + 1))
+        {
+            //TODO use resource bundle
+            dispatchCubeProgress(progress - 1, total,
+            			ResourceManager.getInstance().getString("olap",
+            						"finalizingMessage"));
+            ++progress;
+            return;
+        }
+
+        var startTime:int = getTimer();
+        var timeTaken:int = 0;
+        var cubeBuilt:Boolean;
+
+        // if total time taken for a action is less than 10 ms
+        // call the action function again
+        while (timeTaken < workDuration)
+        {
+            cubeBuilt = cubeImpl.buildCubeIteratively();
+            if (cubeBuilt)
+                break;
+            if (progress > total)
+                dispatchCubeProgress(total, total,
+                		ResourceManager.getInstance().getString("olap",
+            									"finalizingMessage"));
+            else
+                dispatchCubeProgress(progress++, total,
+                			ResourceManager.getInstance().getString("olap",
+                			"progressMessage", [progress, total]));
+
+            timeTaken = getTimer() - startTime;
+        }
+
+        if (cubeBuilt)
+        {
+            dispatchEvent(new CubeEvent(CubeEvent.CUBE_COMPLETE));
+            cubeBuildingTimer.stop();
+            cubeBuildingTimer = null;
+        }
+    }
+
+    /**
+     *  Registers an event listener object with an EventDispatcher object so that the listener
+     *  receives notification of an event.
+     *
+     *  @param type The type of event.
+     *
+     *  @param listener The listener function that processes the event.
+     *
+     *  @param useCapture Determines whether the listener works in the capture phase
+     *  or the target and bubbling phases.
+     *
+     *  @param priority The priority level of the event listener.
+     *
+     *  @param useWeakReference Determines whether the reference to the listener is strong or weak.
+     *  A strong reference (the default) prevents your listener from being garbage-collected.
+     *  A weak reference does not.
+     *
+     *  @see flash.events.EventDispatcher#addEventListener()
+     *
+     *  @langversion 3.0
+     *  @playerversion Flash 9
+     *  @playerversion AIR 1.1
+     *  @productversion Flex 3
+     */
+    public function addEventListener(type:String, listener:Function,
+    			useCapture:Boolean = false, priority:int = 0, useWeakReference:Boolean = false):void
+    {
+        ev.addEventListener(type, listener, useCapture, priority, useWeakReference);
+    }
+
+    /**
+     *  Removes a listener.
+     *  If there no matching listener is registered,
+     *  a call to this method has no effect.
+     *
+     *  @param type The type of event.
+     *
+     *  @param listener The listener object to remove.
+     *
+     *  @param useCapture Specifies whether the listener was registered for
+     *  the capture phase or the target and bubbling phases.
+     *
+     *  @see flash.events.EventDispatcher#removeEventListener()
+     *
+     *  @langversion 3.0
+     *  @playerversion Flash 9
+     *  @playerversion AIR 1.1
+     *  @productversion Flex 3
+     */
+    public function removeEventListener(type:String, listener:Function, useCapture:Boolean = false):void
+    {
+        ev.removeEventListener(type, listener, useCapture);
+    }
+
+    /**
+     *  Checks whether an event listener is registered with this object or any of its ancestors for the specified event type.
+     *  This method returns true if an event listener is triggered during any phase of the event flow
+     *  when an event of the specified type is dispatched to this object or to any of its descendants.
+     *
+     *  @param type The type of event.
+     *
+     *  @return A value of true if a listener of the
+     *  specified type is triggered; false otherwise.
+     *
+     *  @see flash.events.EventDispatcher#willTrigger()
+     *
+     *  @langversion 3.0
+     *  @playerversion Flash 9
+     *  @playerversion AIR 1.1
+     *  @productversion Flex 3
+     */
+    public function willTrigger(type:String):Boolean
+    {
+        return ev.willTrigger(type);
+    }
+
+    /**
+     *  Dispatches an event into the event flow.
+     *  The event target is the object upon which the dispatchEvent() method is called.
+     *
+     *  @param event The Event object that is dispatched into the event flow.
+     *
+     *  @return A value of true if the event was successfully dispatched.
+     *  A value of false indicates failure or that the
+     *  preventDefault() method was called on the event.
+     *
+     *  @see flash.events.EventDispatcher#dispatchEvent()
+     *
+     *  @langversion 3.0
+     *  @playerversion Flash 9
+     *  @playerversion AIR 1.1
+     *  @productversion Flex 3
+     */
+    public function dispatchEvent(event:Event):Boolean
+    {
+        return ev.dispatchEvent(event);
+    }
+
+    /**
+     *  Checks whether the object has any listeners registered for a specific type of event.
+     *  This lets you determine where an object has altered handling of
+     *  an event type in the event flow hierarchy.
+     *
+     *  @param type The type of event.
+     *
+     *  @return A value of true if a listener of the specified type
+     *  is registered; false otherwise.
+     *
+     *  @see flash.events.EventDispatcher#hasEventListener()
+     *
+     *  @langversion 3.0
+     *  @playerversion Flash 9
+     *  @playerversion AIR 1.1
+     *  @productversion Flex 3
+     */
+    public function hasEventListener(type:String):Boolean
+    {
+        return ev.hasEventListener(type);
+    }
+
+    /**
+     *  @private
+     */
+    mx_internal function get cubeImpl():IOLAPCubeImpl
+    {
+        return _cubeImpl;
+    }
+
+    /**
+     *  @private
+     */
+    mx_internal function set cubeImpl(value:IOLAPCubeImpl):void
+    {
+        _cubeImpl = value;
+        _cubeImpl.cube = this;
+    }
+
+    /**
+     *  @inheritDoc
+     *
+     *  @langversion 3.0
+     *  @playerversion Flash 9
+     *  @playerversion AIR 1.1
+     *  @productversion Flex 3
+     */
+    public function execute(query:IOLAPQuery):AsyncToken
+    {
+    	// attempt is being made by the user to execute
+    	// a query which has been already submitted for execution.
+    	if (_queriesPending.indexOf(query) != -1)
+    		return null;
+
+        var token:AsyncToken = new AsyncToken(null);
+
+        _queriesPending.push(query);
+        _queryToken[query] = { tok:token };
+
+        if (!queryTimer)
+        {
+            queryTimer = new Timer(queryBuildingTimeInterval);
+            queryTimer.addEventListener(TimerEvent.TIMER, executeQuery);
+            queryTimer.start();
+        }
+
+        return token;
+    }
+
+    /**
+     * @private
+     *
+     * Query validation functions should be moved to a interface/class whcih can be implemented/extended.
+     */
+    private function getAxisHierarchies(axis:IOLAPQueryAxis):Array
+    {
+        var axisHierarchies:Array = [];
+        var sets:Array = axis.sets;
+        var n:int = sets.length;
+        for (var i:int = 0; i < n; ++i)
+        {
+            var tempSet:OLAPSet = sets[i];
+            var tuples:Array = tempSet.tuples;
+            var m:int = tuples.length;
+            for (var j:int = 0; j < m; ++j)
+            {
+                var tempTuple:OLAPTuple = tuples[j];
+                var list:IList = tempTuple.explicitMembers;
+                var l:int = list.length;
+                for (var k:int = 0; k < l; ++k)
+                {
+                    var tempHeirarchy:OLAPHierarchy = list.getItemAt(k).hierarchy as OLAPHierarchy;
+                    if (tempHeirarchy)
+                        axisHierarchies.push(tempHeirarchy);
+                }
+            }
+        }
+
+        return axisHierarchies;
+    }
+
+    /**
+     * @private
+     *
+     */
+    private function findDuplicateHierarchies(axisHierarchies1:Array, axisHierarchies2:Array):OLAPHierarchy
+    {
+        //TODO is it possible that same hierarchy is represented by different object?
+        // then we need to change this find logic
+        for each (var h:OLAPHierarchy in axisHierarchies1)
+        {
+            var foundIndex:int = axisHierarchies2.indexOf(h);
+            if (foundIndex > -1)
+                return h;
+        }
+
+        return null;
+    }
+
+    /**
+     * @private
+     *
+     */
+    private function validateQuery(q:IOLAPQuery):void
+    {
+        //check usage of same hierarchy on different axis.
+        var axes:Array = OLAPQuery(q).axes;
+
+        var n:int = axes.length;
+        for (var i:int = 0; i < n; ++i)
+        {
+            var queryAxis:OLAPQueryAxis = axes[i];
+
+            if (queryAxis.axisOrdinal != OLAPQuery.SLICER_AXIS)
+                checkZeroLengthAxis(queryAxis, queryAxis.axisOrdinal);
+
+            var axisHierarchies1:Array = getAxisHierarchies(queryAxis);
+            var m:int = axes.length;
+            for (var j:int = i + 1; j < m; ++j)
+            {
+                var axisHierarchies2:Array = getAxisHierarchies(axes[j]);
+                var dup:OLAPHierarchy = findDuplicateHierarchies(axisHierarchies1, axisHierarchies2);
+                if (dup)
+                {
+                    var message:String = ResourceManager.getInstance().getString(
+                        "olap", "duplicateHierarchyOnAxes", [dup.name, i ,j]);
+                    throw new QueryError(message);
+                }
+            }
+        }
+    }
+
+    /**
+     * @private
+     * Checks if the axis has no tuples
+     */
+    private function checkZeroLengthAxis(queryAxis:IOLAPQueryAxis, index:int):void
+    {
+    	if (queryAxis.tuples.length == 0)
+    	{
+                var message:String = ResourceManager.getInstance().getString(
+                    "olap", "zeroElementsOnAxis", [index]);
+                throw new QueryError(message);
+    	}
+    }
+
+    /**
+     *  @private
+     *  The query execution callback function.
+     */
+    private function executeQuery(event:TimerEvent):void
+    {
+        var holder:Object = _queryToken[_queriesPending[0]];
+        var token:AsyncToken = holder.tok;
+        if (token.hasResponder())
+        {
+            var responder:IResponder;
+            var result:OLAPResult;
+            var q:IOLAPQuery = _queriesPending[0];
+            var deleteEntry:Boolean = true;
+
+            try
+            {
+                if (!holder.hasOwnProperty("result"))
+                {
+                    validateQuery(q);
+                    holder["result"] = result = new resultClass;
+                }
+                else
+                {
+                    result = holder.result;
+                }
+
+                if (!_cubeImpl.execute(q, result))
+                {
+                    deleteEntry = false;
+                    return;
+                }
+            }
+            catch(qe:QueryError)
+            {
+                for each (responder in token.responders)
+                {
+                    responder.fault(qe.message);
+                }
+                result = null;
+            }
+            catch (e:Error)
+            {
+                for each (responder in token.responders)
+                {
+                    responder.fault(e.message);
+                }
+                result = null;
+            }
+            finally
+            {
+                if (deleteEntry)
+                {
+                    _queriesPending.splice(0, 1);
+                    delete _queryToken[q];
+                    if (_queriesPending.length == 0)
+                    {
+                        queryTimer.stop();
+                        queryTimer = null;
+                    }
+               }
+            }
+
+            if (result)
+            {
+                for each (responder in token.responders)
+                {
+                    responder.result(result);
+                }
+            }
+        }
+    }
+
+    /**
+     *  @private
+     *  Returns true if the tuple addresses a valid cell in the cube.
+     *  If the members of the tuple form a invalid combination returns false.
+     *
+     *  @param tuple the tuple whose validity is to be checked.
+     */
+    mx_internal function isTupleValid(tuple:OLAPTuple):Boolean
+    {
+        return DefaultCubeImpl(cubeImpl).isTupleValid(tuple);
+    }
+
+    /**
+     *  Returns the name of the cube
+     *
+     *  @return The name of the cube.
+     *
+     *  @langversion 3.0
+     *  @playerversion Flash 9
+     *  @playerversion AIR 1.1
+     *  @productversion Flex 3
+     */
+    public function toString():String
+    {
+        return name;
+    }
+}
+
+}


Transferred from the Adobe Open Source Subversion Repository

Revision: 7163
Author:   aharui@adobe.com
Date:     2009-05-21T02:19:55.813792Z

Log Message:
-----------
Initial checkin of frame 1 cleanup.  In an RSL linkage, more classes will now come from the RSL because they are no longer needed in frame 1, and the size of the application SWF will be smaller.

QE Notes: None
Doc Notes: Maybe.  All new classes should be undocumented, but it might be worth checking that and any changes to interfaces
Bugs:
Reviewer: darrell
tests: checkintests mustella/MarshallPlan

Modified Paths:
--------------
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/controls/listClasses/TileListItemRenderer.as</path>
<path kind="file" action="A">/flex/sdk/trunk/frameworks/projects/framework/src/mx/managers/systemClasses/ActiveWindowManager.as</path>
<path kind="dir" action="A">/flex/sdk/trunk/frameworks/projects/framework/src/mx/managers/marshalClasses</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/managers/LayoutManager.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/events/RSLEvent.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/controls/Menu.as</path>
<path kind="file" action="A">/flex/sdk/trunk/frameworks/projects/framework/src/mx/managers/marshalClasses/MarshalPopUpData.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/core/IEmbeddedFontRegistry.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/managers/PopUpManagerImpl.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/controls/ColorPicker.as</path>
<path kind="file" action="M">/flex/sdk/trunk/modules/compiler/src/java/flex2/compiler/mxml/lang/StandardDefs.java</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/managers/systemClasses/EventProxy.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/core/UITextFormat.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/controls/DateField.as</path>
<path kind="file" action="M">/flex/sdk/trunk/tools/dependencychecker/flex/tools/dependencychecker/FrameworkSwcDependencyRules.java</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/managers/DragManagerImpl.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/core/Application.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/controls/dataGridClasses/DataGridColumn.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/styles/StyleManagerImpl.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/core/EmbeddedFontRegistry.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/managers/ToolTipManagerImpl.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/spark/primitives/RichText.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/core/EmbeddedFont.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/controls/ComboBox.as</path>
<path kind="file" action="M">/flex/sdk/trunk/modules/compiler/src/java/flex2/tools/PreLink.java</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/managers/SystemManager.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/preloaders/Preloader.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/resources/ResourceManagerImpl.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/core/ResourceModuleRSLItem.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/FrameworkClasses.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/core/ISWFBridgeProvider.as</path>
<path kind="file" action="A">/flex/sdk/trunk/frameworks/projects/framework/src/mx/managers/marshalClasses/FocusManagerMarshalMixin.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/airframework/src/mx/core/Window.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/resources/ResourceManager.as</path>
<path kind="file" action="A">/flex/sdk/trunk/frameworks/projects/framework/src/mx/managers/IMarshalSystemManager.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/events/EventListenerRequest.as</path>
<path kind="file" action="A">/flex/sdk/trunk/frameworks/projects/framework/src/mx/managers/marshalClasses/ToolTipManagerMarshalMixin.as</path>
<path kind="file" action="M">/flex/sdk/trunk/tools/dependencychecker/frameworkSwcExceptionsList.txt</path>
<path kind="file" action="M">/flex/sdk/trunk/mustella/MustellaResultsParser.java</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/controls/Alert.as</path>
<path kind="file" action="A">/flex/sdk/trunk/frameworks/projects/framework/src/mx/managers/systemClasses/ChildManager.as</path>
<path kind="file" action="A">/flex/sdk/trunk/frameworks/projects/framework/src/mx/managers/systemClasses/MarshallPlan.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/core/UITextField.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/managers/SystemManagerGlobals.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/core/SWFBridgeGroup.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/controls/alertClasses/AlertForm.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/airframework/src/spark/components/Window.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/controls/treeClasses/TreeItemRenderer.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/managers/ISystemManager.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework_textLayout/src/mx/core/UITLFTextField.as</path>
<path kind="file" action="A">/flex/sdk/trunk/frameworks/projects/framework/src/mx/managers/marshalClasses/DragManagerMarshalMixin.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/core/UIComponent.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/controls/SWFLoader.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/controls/MenuBar.as</path>
<path kind="file" action="A">/flex/sdk/trunk/frameworks/projects/framework/src/mx/events/Request.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/spark/primitives/RichEditableText.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/styles/CSSStyleDeclaration.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/controls/PopUpButton.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/events/FlexEvent.as</path>
<path kind="file" action="A">/flex/sdk/trunk/frameworks/projects/framework/src/mx/managers/IActiveWindowManager.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/managers/FocusManager.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/airframework/src/mx/managers/WindowedSystemManager.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/spark/components/Application.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/spark/primitives/SimpleText.as</path>
<path kind="file" action="A">/flex/sdk/trunk/frameworks/projects/framework/src/mx/managers/marshalClasses/PopUpManagerMarshalMixin.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/controls/listClasses/ListItemRenderer.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/managers/SystemManagerProxy.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/messaging/config/LoaderConfig.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/managers/IFocusManager.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/preloaders/DownloadProgressBar.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/core/ScrollControlBase.as</path>
<path kind="file" action="A">/flex/sdk/trunk/frameworks/projects/framework/src/mx/managers/ISystemManagerChildManager.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/controls/dataGridClasses/DataGridItemRenderer.as</path>
<path kind="file" action="A">/flex/sdk/trunk/frameworks/projects/framework/src/mx/managers/marshalClasses/CursorManagerMarshalMixin.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/managers/CursorManagerImpl.as</path>
<path kind="file" action="A">/flex/sdk/trunk/frameworks/projects/framework/src/mx/managers/PopUpData.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/core/ISWFBridgeGroup.as</path>

git-svn-id: 7146a936b37d36e51ea0d66f8acbe0b8281bc7b7@1260089 13f79535-47bb-0310-9956-ffa450edef68

--- frameworks/projects/framework/src/mx/core/UITextFormat.as
+++ frameworks/projects/framework/src/mx/core/UITextFormat.as
@@ -50,6 +50,8 @@
     //  embeddedFontRegistry
     //----------------------------------

+	private static var noEmbeddedFonts:Boolean;
+
     /**
      *  @private
      *  Storage for the embeddedFontRegistry property.
@@ -67,10 +69,17 @@
      */
     private static function get embeddedFontRegistry():IEmbeddedFontRegistry
     {
-        if (!_embeddedFontRegistry)
+        if (!_embeddedFontRegistry && !noEmbeddedFonts)
         {
-            _embeddedFontRegistry = IEmbeddedFontRegistry(
-                Singleton.getInstance("mx.core::IEmbeddedFontRegistry"));
+			try
+			{
+				_embeddedFontRegistry = IEmbeddedFontRegistry(
+					Singleton.getInstance("mx.core::IEmbeddedFontRegistry"));
+			}
+			catch (e:Error)
+			{
+				noEmbeddedFonts = true;
+			}
         }

         return _embeddedFontRegistry;
@@ -228,13 +237,6 @@
      */
     private var systemManager:ISystemManager;

-    /**
-     * @private
-     *
-     * Cache last value of embedded font.
-     */
-    private var cachedEmbeddedFont:EmbeddedFont = null;
-
     //--------------------------------------------------------------------------
     //
     //  Properties
@@ -482,9 +484,10 @@
         // to be used for text measurement. The text field factory keeps
         // the text fields to one per moduleFactory.
         var embeddedFont:Boolean = false;
-        var fontModuleFactory:IFlexModuleFactory =
+        var fontModuleFactory:IFlexModuleFactory = (noEmbeddedFonts || !embeddedFontRegistry) ?
+			null :
             embeddedFontRegistry.getAssociatedModuleFactory(
-                getEmbeddedFont(font, bold, italic), moduleFactory);
+                font, bold, italic, this, moduleFactory);

         embeddedFont = (fontModuleFactory != null);
         if (fontModuleFactory == null)
@@ -549,28 +552,6 @@
         }

         return lineMetrics;
-    }
-
-    /**
-     * @private
-     *
-     * Get the embedded font for a set of font attributes.
-     */
-    private function getEmbeddedFont(fontName:String, bold:Boolean, italic:Boolean):EmbeddedFont
-    {
-        // Check if we can reuse a cached value.
-        if (cachedEmbeddedFont)
-        {
-            if (cachedEmbeddedFont.fontName == fontName &&
-                cachedEmbeddedFont.fontStyle == EmbeddedFontRegistry.getFontStyle(bold, italic))
-            {
-                return cachedEmbeddedFont;
-            }
-        }
-
-        cachedEmbeddedFont = new EmbeddedFont(fontName, bold, italic);
-
-        return cachedEmbeddedFont;
     }

     /**


Transferred from the Adobe Open Source Subversion Repository

Revision: 6200
Author:   smgilson@adobe.com
Date:     2009-04-22T20:20:58.294727Z

Log Message:
-----------
Starting ASDoc work on spark effects

QE Notes: None
Doc Notes: None
Bugs: -
checkintests: passed

Modified Paths:
--------------
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/spark/effects/AnimateColor.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/spark/effects/Animate.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/spark/effects/AnimateShaderTransition.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/spark/effects/AnimateFilter.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/spark/effects/AddAction.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/spark/effects/CallAction.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/spark/effects/CrossFade.as</path>

git-svn-id: 7146a936b37d36e51ea0d66f8acbe0b8281bc7b7@1283558 13f79535-47bb-0310-9956-ffa450edef68

--- frameworks/projects/spark/src/spark/effects/CallAction.as
+++ frameworks/projects/spark/src/spark/effects/CallAction.as
@@ -24,13 +24,29 @@
 [Exclude(name="duration", kind="property")]

 /**
- * This effect, when played, calls the function specified by
- * functionName on the target object with
- * optional parameters. The effect may be useful in
+ * The CallAction effect calls the function specified by
+ * functionName property on the target object with
+ * optional parameters specified by the parameters property.
+ * The effect is useful in
  * effect sequences where some function call can be choreographed
  * with other effects.
  *
- * @see mx.effects.effectClasses.CallFunctionActionInstance
+ *  @mxml
+ *
+ *
The <mx:CallAction> tag
+ *  inherits all of the tag attributes of its superclass,
+ *  and adds the following tag attributes:

+ *
+ *

+ *  <mx:CallAction
+ *    Properties
+ *    id="ID"
+ *    functionName="no default"
+ *    parameters="no default"
+ *  />
+ *

+ *
+ * @see spark.effects.supportClasses.CallActionInstance
  *
  *  @langversion 3.0
  *  @playerversion Flash 10
@@ -75,7 +91,7 @@
     //----------------------------------

     /**
-     * Name of the function that will be called on the target when this effect plays
+     * Name of the function called on the target when this effect plays.
      *
      *  @langversion 3.0
      *  @playerversion Flash 10
@@ -89,8 +105,8 @@
     //----------------------------------

     /**
-     * Parameters that will be supplied to the function that is called
-     * by this effect
+     * Parameters passed to the function that is called
+     * by this effect.
      *
      *  @langversion 3.0
      *  @playerversion Flash 10


fix broken reference to Camera in VisibilityController

--- src/aerys/minko/scene/controller/mesh/VisibilityController.as
+++ src/aerys/minko/scene/controller/mesh/VisibilityController.as
@@ -4,9 +4,9 @@
 	import aerys.minko.render.geometry.Geometry;
 	import aerys.minko.scene.controller.AbstractController;
 	import aerys.minko.scene.data.MeshVisibilityDataProvider;
-	import aerys.minko.scene.node.Camera;
 	import aerys.minko.scene.node.Mesh;
 	import aerys.minko.scene.node.Scene;
+	import aerys.minko.scene.node.camera.AbstractCamera;
 	import aerys.minko.type.binding.DataBindings;
 	import aerys.minko.type.enum.FrustumCulling;
 	import aerys.minko.type.math.BoundingBox;


fixed wrong init. value for DrawCall.enabled according to Mesh.visible (issue #297) and forced (= when no triangles are rendered) clear color format to RGBA

--- src/aerys/minko/scene/controller/scene/RenderingController.as
+++ src/aerys/minko/scene/controller/scene/RenderingController.as
@@ -250,10 +250,10 @@
 				var color : uint = backBuffer.backgroundColor;

 				context.clear(
+					(color >>> 24) / 255.,
 					((color >> 16) & 0xff) / 255.,
 					((color >> 8) & 0xff) / 255.,
-					(color & 0xff) / 255.,
-					((color >> 24) & 0xff) / 255.
+					(color & 0xff) / 255.
 				);
 			}

@@ -371,7 +371,7 @@
 			var sceneBindings	: DataBindings	= _scene.bindings;

 			// iterate on meshEffect passes
-			var drawCalls : Vector.<DrawCall>	= new Vector.<DrawCall>();
+			var drawCalls : Vector.<DrawCall>	= new <DrawCall>[];

 			for (var i : uint = 0; i < numPasses; ++i)
 			{
@@ -382,6 +382,7 @@
 				// create drawcall
 				var drawCall		: DrawCall			= new DrawCall();

+				drawCall.enabled = mesh.visible;
 				if (passInstance.program != null)
 					drawCall.configure(passInstance.program, mesh.geometry, meshBindings, sceneBindings);
 				drawCalls[i] = drawCall;


more XML fixes

more XML fixes

--- frameworks/projects/XML/src/main/flex/XML.as
+++ frameworks/projects/XML/src/main/flex/XML.as
@@ -340,7 +340,7 @@
 		}

 		private var _children:Array;
-		private var _attributes:Array;
+		private var _attributes:Array = [];
 		private var _processingInstructions:Array;
 		private var _parent:XML;
 		private var _value:String;
@@ -580,10 +580,10 @@
 		 */
 		public function childIndex():int
 		{
-			if(!parent)
+			if(!_parent)
 				return -1;

-			return parent.getIndexOf(this);
+			return _parent.getIndexOf(this);
 		}

 		/**
@@ -700,7 +700,14 @@

 		private function deleteChildAt(idx:int):void
 		{
-
+			if(idx < 0)
+				return;
+			if(idx >= _children.length)
+				return;
+			var child:XML = _children[idx];
+			child.setParent(null);
+			_children.splice(idx,1);
+				_
 		}

 		/**
@@ -1642,16 +1649,24 @@
 				{
 					for(i=0;i<_attributes.length;i++)
 					{
-						//TODO incomplete...
-						//if(_attributes[i].name.equals() )
+						if(_attributes[i].name().equals(attr.name()))
+						{
+							_attributes[i].setValue(value);
+							return;
+						}
 						//addChild(_att)
 					}
-				}
+					if(value)
+						attr.setValue(value);
+					addChild(attr);
+				}
+				return;

 			}
 			if(attr.indexOf("xmlns") == 0)
 			{
 				//it's a namespace declaration
+				//TODO This does not seem right.
 				var ns:Namespace = new Namespace(value.toString());
 				if(attr.indexOf("xmlns:") == 0)// it has a prefix
 					ns.prefix = attr.split(":")[1];
@@ -1660,6 +1675,7 @@
 			else
 			{
 				//it's a regular attribute string
+				//TODO use toXMLName or toAttributeName to convert attr and assing it

 			}

@@ -1899,9 +1915,11 @@

 		public function setParent(parent:XML):void
 		{
-			if(_parent)
+			var oldParent:XML = _parent;
+			_parent = parent;
+			//assign first to prevent the possiblity of a recursive loop
+			if(oldParent)
 				_parent.removeChild(this);
-			_parent = parent;
 		}

 		public function setValue(value:String):void
@@ -2137,7 +2155,6 @@
 				return indent + "<?" + name().localName + " " + _value + "?>";

 			// We excluded the other types, so it's a normal element
-			//TODO I'm here...
 			// step 8.
 			//ancestors
 			if(!ancestors)


Transferred from the Adobe Open Source Subversion Repository

Revision: 23246
Author:   cframpto@adobe.com
Date:     2011-12-20T17:40:08.069454Z

Log Message:
-----------
Rollback 23243.  If comment followed header it was stripped as well.

Modified Paths:
--------------
2361 paths were modified

git-svn-id: 7146a936b37d36e51ea0d66f8acbe0b8281bc7b7@1260220 13f79535-47bb-0310-9956-ffa450edef68

--- frameworks/projects/framework/src/mx/effects/EffectTargetFilter.as
+++ frameworks/projects/framework/src/mx/effects/EffectTargetFilter.as
@@ -1,3 +1,13 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  ADOBE SYSTEMS INCORPORATED
+//  Copyright 2005-2007 Adobe Systems Incorporated
+//  All Rights Reserved.
+//
+//  NOTICE: Adobe permits you to use, modify, and distribute this file
+//  in accordance with the terms of the license agreement accompanying it.
+//
+////////////////////////////////////////////////////////////////////////////////

 package mx.effects
 {


Transferred from the Adobe Open Source Subversion Repository

Revision: 3925
Author:   jimurphy@adobe.com
Date:     2008-10-28T15:28:25.006190Z

Log Message:
-----------
Merged gumbo_alpha revisions 3857-3860,3870,3872,3874-3876,3881,3884,3886,3889,3891,3893,3895,3908,3912 -> trunk

Modified Paths:
--------------
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/asdoc/en_US/mx/effects/examples/FxRotateEffectExample.mxml</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/geom/TransformOffsets.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/asdoc/en_US/mx/effects/examples/FxFadeEffectExample.mxml</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/mx/graphics/CubicBezierSegment.as</path>
<path kind="file" copyfrom-path="/flex/sdk/branches/gumbo_alpha/frameworks/projects/flex4/src/mx/skins/spark/FxFocusSkin.as" copyfrom-rev="3895" action="A">/flex/sdk/trunk/frameworks/projects/flex4/src/mx/skins/spark/FxFocusSkin.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/asdoc/en_US/mx/components/examples/FxVSliderExample.mxml</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/mx/graphics/LineSegment.as</path>
<path kind="file" action="M">/flex/sdk/trunk/modules/compiler/src/java/flex2/compiler/css/StylesContainer.java</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/mx/components/DataGroup.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/mx/effects/effectClasses/FxFadeInstance.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/mx/effects/FxFade.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/asdoc/en_US/mx/components/examples/FxListExample.mxml</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/asdoc/en_US/mx/effects/examples/FxMoveEffectExample.mxml</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/mx/graphics/PathSegment.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/mx/components/Group.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/geom/CompoundTransform.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/mx/graphics/TextGraphic.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/libs/textLayout_conversion.swc</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/asdoc/en_US/mx/effects/examples/FxAnimateColorEffectExample.mxml</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/libs/textLayout_core.swc</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/asdoc/en_US/mx/effects/examples/FxAnimateEffectExample.mxml</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/asdoc/en_US/mx/components/examples/FxCheckBoxExample.mxml</path>
<path kind="dir" action="M">/flex/sdk/trunk</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/mx/components/FxNumericStepper.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/mx/effects/effectClasses/FxAnimateInstance.as</path>
<path kind="file" copyfrom-path="/flex/sdk/branches/gumbo_alpha/frameworks/projects/flex4/asdoc/en_US/mx/components/examples/DataGroupExample.mxml" copyfrom-rev="3895" action="A">/flex/sdk/trunk/frameworks/projects/flex4/asdoc/en_US/mx/components/examples/DataGroupExample.mxml</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/mx/effects/FxAnimateColor.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/mx/graphics/Path.as</path>
<path kind="file" action="M">/flex/sdk/trunk/modules/compiler/src/java/flash/css/StyleDeclaration.java</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/mx/components/FxButton.as</path>
<path kind="file" copyfrom-path="/flex/sdk/branches/gumbo_alpha/frameworks/projects/flex4/asdoc/en_US/mx/components/examples/GroupExample.mxml" copyfrom-rev="3895" action="A">/flex/sdk/trunk/frameworks/projects/flex4/asdoc/en_US/mx/components/examples/GroupExample.mxml</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/mx/components/FxSpinner.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/mx/graphics/QuadraticBezierSegment.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/core/UIComponent.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/mx/components/TextView.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/mx/graphics/graphicsClasses/GraphicElement.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/asdoc/en_US/mx/components/examples/FxNumericStepperExample.mxml</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/asdoc/en_US/mx/effects/examples/FxResizeEffectExample.mxml</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/mx/effects/effectClasses/FxRotateInstance.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/mx/effects/FxRotate.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/Flex4Classes.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/mx/components/baseClasses/FxComponent.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/asdoc/en_US/mx/components/examples/FxButtonExample.mxml</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/mx/effects/effectClasses/FxResizeInstance.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/mx/effects/FxResize.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/asdoc/en_US/mx/components/examples/FxToggleButtonExample.mxml</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/asdoc/en_US/mx/components/examples/FxSpinnerExample.mxml</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/defaults.css</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/mx/effects/PropertyValuesHolder.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/mx/effects/effectClasses/FxMoveInstance.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/libs/textLayout_edit.swc</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/asdoc/en_US/mx/components/examples/TextViewExample.mxml</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/mx/effects/FxMove.as</path>
<path kind="file" action="M">/flex/sdk/trunk/modules/compiler/src/java/flex2/compiler/css/StyleModule.java</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/asdoc/en_US/mx/components/examples/FxHSliderExample.mxml</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/mx/effects/Animation.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/mx/utils/MatrixUtil.as</path>
<path kind="file" action="M">/flex/sdk/trunk/modules/compiler/src/java/flex2/compiler/css/StyleDef.java</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/core/AdvancedLayoutFeatures.as</path>

git-svn-id: 7146a936b37d36e51ea0d66f8acbe0b8281bc7b7@1283887 13f79535-47bb-0310-9956-ffa450edef68

--- frameworks/projects/spark/src/spark/effects/animation/Animation.as
+++ frameworks/projects/spark/src/spark/effects/animation/Animation.as
@@ -144,7 +144,7 @@
     // TODO: more efficient way to store/remove these than in an array?
     // Dictionary, perhaps (although that may be unordered and less
     // efficient to access)
-    private var id:int;
+    private var id:int = -1;
     // TODO: re-think this variable in seeking
     private var _doSeek:Boolean = false;
     private var _isPlaying:Boolean = false;
@@ -701,15 +701,18 @@
      */
     public function end():void
     {
-        // TODO (chaase): Check whether we already send out a final
-        // UPDATE event with the end value; if so, this dup should be
-        // removed
-        // TODO (chaase): this will snap paused and startDelayed animations
-        // to their end values. Seems correct, but should check this.
-        var value:Object = getCurrentValue(duration);
-
-        sendAnimationEvent(AnimationEvent.ANIMATION_UPDATE, value);
-        sendAnimationEvent(AnimationEvent.ANIMATION_END, value);
+        if (id >= 0)
+        {
+            // TODO (chaase): Check whether we already send out a final
+            // UPDATE event with the end value; if so, this dup should be
+            // removed
+            // TODO (chaase): this will snap paused and startDelayed animations
+            // to their end values. Seems correct, but should check this.
+            var value:Object = getCurrentValue(duration);
+
+            sendAnimationEvent(AnimationEvent.ANIMATION_UPDATE, value);
+            sendAnimationEvent(AnimationEvent.ANIMATION_END, value);
+        }

         // The rest of what we need to do is handled by the stop() function
         stop();
@@ -720,7 +723,6 @@
      */
     public function play():void
     {
-        setupInterpolation();
         if (startDelay > 0)
         {
             // Run timer if it's not currently running
@@ -775,6 +777,8 @@

         if (!_isPlaying)
         {
+            // start/end values only valid after animation starts
+            sendAnimationEvent(AnimationEvent.ANIMATION_START, startValue);
             setupInterpolation();
             _intervalTime = Timeline.currentTime;
             startTime = _intervalTime - playheadTime;
@@ -934,20 +938,32 @@
      */
     private function start(event:TimerEvent = null):void
     {
+        // actualStartTime accounts for overrun in desired startDelay
+        var actualStartTime:int = 0;
+
         // TODO (chaase): call removal utility instead of this code
         // Make sure to remove any references on the delayed lists
         for (var i:int = 0; i < delayedStartAnims.length; ++i)
         {
             if (this == delayedStartAnims[i])
             {
+                var animStartTime:int = int(delayedStartTimes[this]);
+                var overrun:int = Timeline.currentTime - animStartTime;
+                if (overrun > 0)
+                    actualStartTime = Math.min(overrun, duration);
                 delete delayedStartTimes[this];
                 delayedStartAnims.splice(i, 1);
                 break;
             }
         }
         numRepeats = 1;
+        sendAnimationEvent(AnimationEvent.ANIMATION_START, startValue);
+
+        // start/end values may be changed by FxAnimate (set dynamically),
+        // so now we set up our interpolator based on the real values
+        setupInterpolation();
+
         var value:Object = getCurrentValue(0);
-        sendAnimationEvent(AnimationEvent.ANIMATION_START, value);

         if (duration == 0)
         {
@@ -961,6 +977,8 @@
             sendAnimationEvent(AnimationEvent.ANIMATION_UPDATE, value);
             Animation.addAnimation(this);
             _isPlaying = true;
+            if (actualStartTime > 0)
+                seek(actualStartTime);
         }
     }


Transferred from the Adobe Open Source Subversion Repository

Revision: 4611
Author:   chaase@adobe.com
Date:     2009-01-22T00:30:21.783682Z

Log Message:
-----------
Various bug fixes in effects, mostly in the area of seeking, auto-reversing, and shader transitions.

QE Notes: None
Doc Notes: None
Bugs: sdk-17783, sdk-18767, sdk-18759, sdk-18461, sdk-18309, sdk-18013, sdk-18688
Reviewer: Jason
Tests: checkintests, Mustella: Effects, gumbo/effects, ListDataEffects

Modified Paths:
--------------
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/mx/effects/SetAction.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/effects/UnconstrainItemAction.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/effects/EffectInstance.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/effects/AddChildAction.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/effects/effectClasses/ParallelInstance.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/effects/Effect.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/effects/Parallel.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/effects/SetPropertyAction.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/effects/RemoveChildAction.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/mx/effects/effectClasses/FxAnimateInstance.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/mx/effects/effectClasses/FxAnimateShaderTransitionInstance.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/mx/effects/FxAnimateShaderTransition.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/mx/effects/Animation.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/effects/AddItemAction.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/effects/effectClasses/SequenceInstance.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/effects/SetStyleAction.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/effects/RemoveItemAction.as</path>

git-svn-id: 7146a936b37d36e51ea0d66f8acbe0b8281bc7b7@1283892 13f79535-47bb-0310-9956-ffa450edef68

--- frameworks/projects/spark/src/spark/effects/animation/Animation.as
+++ frameworks/projects/spark/src/spark/effects/animation/Animation.as
@@ -155,7 +155,7 @@
     // and current fraction
     private var startTime:Number;
     // Track number of times repeated for use by repeatCount logic
-    private var numRepeats:Number;
+    private var numRepeats:int;
     // The amount of time that the animation should delay before
     // starting. This is set to a non-negative number only when
     // an Animation is paused during its startDelay phase
@@ -608,7 +608,10 @@
                 // TODO (chaase): this assumes we've only gone through one cycle since
                 // last time...
                 if (repeatCount != 0)
-                    numRepeats++;
+                    if (!_doSeek)
+                        numRepeats++;
+                    else
+                        numRepeats = 1 + currentTime / (duration + repeatDelay);
                 if (repeatDelay == 0) {
                     startTime += duration;
                     currentTime = intervalTime - startTime;
@@ -618,24 +621,38 @@
                 }
                 else
                 {
-                    // repeatDelay: send out a final update for this cycle with the
-                    // end value, then schedule a timer to wake up and
-                    // start the next cycle
-                    _elapsedTime = duration;
-                    var repeatValue:Object = getCurrentValue(_elapsedTime);
-                    sendAnimationEvent(AnimationEvent.ANIMATION_UPDATE, repeatValue);
-                    removeAnimation(this);
-                    var delayTimer:Timer = new Timer(repeatDelay, 1);
-                    delayTimer.addEventListener(TimerEvent.TIMER, repeat);
-                    delayTimer.start();
-                    return false;
+                    if (_doSeek)
+                    {
+                        var cycleTime:Number = currentTime % (duration + repeatDelay);
+                        if (cycleTime < duration)
+                            _elapsedTime = cycleTime;
+                        else
+                            _elapsedTime = duration; // must be in repeatDelay phase
+                        sendAnimationEvent(AnimationEvent.ANIMATION_UPDATE,
+                            getCurrentValue(_elapsedTime));
+                        return false;
+                    }
+                    else
+                    {
+                        // repeatDelay: send out a final update for this cycle with the
+                        // end value, then schedule a timer to wake up and
+                        // start the next cycle
+                        _elapsedTime = duration;
+                        var repeatValue:Object = getCurrentValue(_elapsedTime);
+                        sendAnimationEvent(AnimationEvent.ANIMATION_UPDATE, repeatValue);
+                        removeAnimation(this);
+                        var delayTimer:Timer = new Timer(repeatDelay, 1);
+                        delayTimer.addEventListener(TimerEvent.TIMER, repeat);
+                        delayTimer.start();
+                        return false;
+                    }
                 }
             }
             _elapsedTime = currentTime;

             var currentValue:Object = getCurrentValue(currentTime);

-            if (currentTime >= duration && !_doSeek)
+            if (currentTime >= duration)
             {
                 end();
                 animationEnded = true;
@@ -646,8 +663,6 @@
                 if (repeated)
                     sendAnimationEvent(AnimationEvent.ANIMATION_REPEAT, currentValue);
             }
-
-            _doSeek = false;
         }
         return animationEnded;
     }
@@ -784,10 +799,10 @@
         // Should only do this for playing animation, as the stopped animations
         // do it for themselves
         startTime = _intervalTime - playheadTime;
+        _doSeek = true;

         if (!_isPlaying)
         {
-            _doSeek = true;
             _intervalTime = Timeline.currentTime;
             // TODO: comments...
             if (includeStartDelay && startDelay > 0)
@@ -809,7 +824,7 @@
                     var postDelaySeekTime:Number = playheadTime - startDelay;
                     if (postDelaySeekTime < 0)
                     {
-                        animPendingTime -= playheadTime;
+                        animPendingTime = _intervalTime + (startDelay - playheadTime);
                         // add it back into the array in the proper order
                         var insertIndex:int = -1;
                         for (i = 0; i < delayedStartAnims.length; ++i)
@@ -832,10 +847,10 @@
                         // reduce seek time by startTime; we will go ahead and
                         // seek into the now-playing animation by that much
                         playheadTime -= startDelay;
-                        _doSeek = false;
                         start();
                         startTime = _intervalTime - playheadTime;
                         doInterval();
+                        _doSeek = false;
                         return;
                     }
                 }
@@ -846,6 +861,7 @@
             startTime = _intervalTime - playheadTime;
         }
         doInterval();
+        _doSeek = false;
     }

     /**


set version

set version

--- src/sssplayer/display/SSSPlayer.as
+++ src/sssplayer/display/SSSPlayer.as
@@ -14,6 +14,8 @@
 	import starling.events.Event;

 	public class SSSPlayer extends Sprite {
+
+		public static const VERSION:String = "0.0.1";

 		private var project:SSSProject;


- 删除重复设置 allowMultipleSelection

- 删除重复设置 allowMultipleSelection

--- ageb/src/ageb/modules/avatar/timelineClasses/FrameLayerList.as
+++ ageb/src/ageb/modules/avatar/timelineClasses/FrameLayerList.as
@@ -37,7 +37,6 @@
 			dragEnabled = true;
 			dragMoveEnabled = true;
 			dropEnabled = true;
-			allowMultipleSelection = true;
 			itemRenderer = new ClassFactory(FrameLayerListItemRenderer);
 			percentWidth = 100;
 			percentHeight = 100;


Removed duplicate function definition

Removed duplicate function definition

--- src/laml/display/Component.as
+++ src/laml/display/Component.as
@@ -118,13 +118,6 @@
 			}
 		}

-		protected function addChildViewsToView():void {
-			var len:int = numChildren;
-			for(var i:int; i < len; i++) {
-				view.addChild(getChildAt(i).view);
-			}
-		}
-
 		protected function createChildrenIfNeeded():void {
 			if(!childrenCreated) {
 				createChildren();


Added compare().

Added compare().

git-svn-id: a1a4b28b82a3276cc491891159dd9963a0a72fae@5752 542714f4-19e9-0310-aa3c-eee0fc999fb1

--- src/as/com/threerings/util/StringUtil.as
+++ src/as/com/threerings/util/StringUtil.as
@@ -30,6 +30,14 @@
 public class StringUtil
 {
     /**
+     * Compares two String values, returning -1, 0, or 1.
+     */
+    public static function compare (s1 :String, s2 :String) :int
+    {
+        return (s1 > s2) ? 1 : (s1 == s2 ? 0 : -1);
+    }
+
+    /**
      * Get a reasonable hash code for the specified String.
      */
     public static function hashCode (str :String) :int


Transferred from the Adobe Open Source Subversion Repository

Revision: 23246
Author:   cframpto@adobe.com
Date:     2011-12-20T17:40:08.069454Z

Log Message:
-----------
Rollback 23243.  If comment followed header it was stripped as well.

Modified Paths:
--------------
2361 paths were modified

git-svn-id: 7146a936b37d36e51ea0d66f8acbe0b8281bc7b7@1253103 13f79535-47bb-0310-9956-ffa450edef68

--- frameworks/projects/charts/src/mx/charts/chartClasses/PolarChart.as
+++ frameworks/projects/charts/src/mx/charts/chartClasses/PolarChart.as
@@ -1,3 +1,13 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  ADOBE SYSTEMS INCORPORATED
+//  Copyright 2009 Adobe Systems Incorporated
+//  All Rights Reserved.
+//
+//  NOTICE: Adobe permits you to use, modify, and distribute this file
+//  in accordance with the terms of the license agreement accompanying it.
+//
+////////////////////////////////////////////////////////////////////////////////

 package mx.charts.chartClasses
 {


Transferred from the Adobe Open Source Subversion Repository

Revision: 10931
Author:   smgilson@adobe.com
Date:     2009-10-08T14:43:33.263410Z

Log Message:
-----------
Update ASDoc version tags to show IID.as and IAdvancedStyleClient.as as Flex 4

QE notes: -
Doc notes: -
Bugs: -
Reviewer: -
Tests run: - checkintests
Is noteworthy for integration: No

Modified Paths:
--------------
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/core/IID.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/styles/IAdvancedStyleClient.as</path>

git-svn-id: 7146a936b37d36e51ea0d66f8acbe0b8281bc7b7@1262530 13f79535-47bb-0310-9956-ffa450edef68

--- frameworks/projects/framework/src/mx/styles/IAdvancedStyleClient.as
+++ frameworks/projects/framework/src/mx/styles/IAdvancedStyleClient.as
@@ -17,9 +17,9 @@
  *  implement to fully participate in the advanced style subsystem.
  *
  *  @langversion 3.0
- *  @playerversion Flash 9
- *  @playerversion AIR 1.1
- *  @productversion Flex 3
+ *  @playerversion Flash 10
+ *  @playerversion AIR 1.5
+ *  @productversion Flex 4
  */
 public interface IAdvancedStyleClient extends IStyleClient
 {
@@ -37,9 +37,9 @@
      *  The identity of the component.
      *
      *  @langversion 3.0
-     *  @playerversion Flash 9
-     *  @playerversion AIR 1.1
-     *  @productversion Flex 3
+     *  @playerversion Flash 10
+     *  @playerversion AIR 1.5
+     *  @productversion Flex 4
      */
     function get id():String;

@@ -51,9 +51,9 @@
      *  The parent of this component.
      *
      *  @langversion 3.0
-     *  @playerversion Flash 9
-     *  @playerversion AIR 1.1
-     *  @productversion Flex 3
+     *  @playerversion Flash 10
+     *  @playerversion AIR 1.5
+     *  @productversion Flex 4
      */
     function get styleParent():IAdvancedStyleClient;

@@ -63,17 +63,17 @@
     //
     //--------------------------------------------------------------------------

-	/**
-	 *  Flex calls the stylesInitialized() method when
-	 *  the styles for a component are first initialized.
-	 *
-	 *  @langversion 3.0
-	 *  @playerversion Flash 10
-	 *  @playerversion AIR 1.5
-	 *  @productversion Flex 4
-	 */
-	function stylesInitialized():void
-
+    /**
+     *  Flex calls the stylesInitialized() method when
+     *  the styles for a component are first initialized.
+     *
+     *  @langversion 3.0
+     *  @playerversion Flash 10
+     *  @playerversion AIR 1.5
+     *  @productversion Flex 4
+     */
+    function stylesInitialized():void
+
     /**
      *  The current state of this component used to match CSS pseudo-selectors.
      *  If no state exists, returns null.
@@ -82,9 +82,9 @@
      *  as Halo components use their currentState property.
      *
      *  @langversion 3.0
-     *  @playerversion Flash 9
-     *  @playerversion AIR 1.1
-     *  @productversion Flex 3
+     *  @playerversion Flash 10
+     *  @playerversion AIR 1.5
+     *  @productversion Flex 4
      */
     function matchesCSSState(cssState:String):Boolean;

@@ -93,9 +93,9 @@
      *  the given type.
      *
      *  @langversion 3.0
-     *  @playerversion Flash 9
-     *  @playerversion AIR 1.1
-     *  @productversion Flex 3
+     *  @playerversion Flash 10
+     *  @playerversion AIR 1.5
+     *  @productversion Flex 4
      */
     function matchesCSSType(cssType:String):Boolean;
 }


Transferred from the Adobe Open Source Subversion Repository

Revision: 12291
Author:   smgilson@adobe.com
Date:     2009-11-30T20:05:25.519075Z

Log Message:
-----------
update old effects examples and add new ones. Add back the @includeExample tags to effects classes that had them removed for some reason.

QE notes: -
Doc notes: -
Bugs: -
Reviewer: -
Tests run: - checkintests
Is noteworthy for integration: No

Modified Paths:
--------------
<path kind="dir" action="A">/flex/sdk/trunk/frameworks/projects/spark/asdoc/en_US/spark/effects/easing/examples</path>
<path kind="dir" action="A">/flex/sdk/trunk/frameworks/projects/spark/asdoc/en_US/spark/effects/easing/examples/assets</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/spark/src/spark/effects/animation/MotionPath.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/spark/src/spark/effects/easing/Power.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/spark/src/spark/effects/easing/Sine.as</path>
<path kind="dir" action="A">/flex/sdk/trunk/frameworks/projects/spark/asdoc/en_US/spark/effects/animation/examples</path>
<path kind="dir" action="A">/flex/sdk/trunk/frameworks/projects/spark/asdoc/en_US/spark/effects/animation/examples/assets</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/spark/asdoc/en_US/spark/effects/examples/Scale3DEffectExample.mxml</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/spark/src/spark/effects/animation/SimpleMotionPath.as</path>
<path kind="file" action="A">/flex/sdk/trunk/frameworks/projects/spark/asdoc/en_US/spark/effects/easing/examples/LinearEffectExample.mxml</path>
<path kind="file" action="A">/flex/sdk/trunk/frameworks/projects/spark/asdoc/en_US/spark/effects/easing/examples/SinePowerEffectExample.mxml</path>
<path kind="file" action="A">/flex/sdk/trunk/frameworks/projects/spark/asdoc/en_US/spark/effects/animation/examples/KeyFrameEffectExample.mxml</path>
<path kind="file" action="A">/flex/sdk/trunk/frameworks/projects/spark/asdoc/en_US/spark/effects/easing/examples/assets/logo.jpg</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/spark/src/spark/effects/Animate.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/spark/src/mx/controls/treeClasses/MXTreeItemRenderer.as</path>
<path kind="dir" action="A">/flex/sdk/trunk/frameworks/projects/spark/asdoc/en_US/spark/effects/easing</path>
<path kind="file" action="A">/flex/sdk/trunk/frameworks/projects/spark/asdoc/en_US/spark/effects/examples/AnimateFilterEffectExample.mxml</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/spark/src/spark/effects/easing/Linear.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/spark/asdoc/en_US/spark/effects/examples/Rotate3DEffectExample.mxml</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/spark/src/spark/effects/easing/Bounce.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/spark/src/spark/effects/animation/Keyframe.as</path>
<path kind="file" action="A">/flex/sdk/trunk/frameworks/projects/spark/asdoc/en_US/spark/effects/easing/examples/BounceElasticEffectExample.mxml</path>
<path kind="file" action="A">/flex/sdk/trunk/frameworks/projects/spark/asdoc/en_US/spark/effects/examples/ScaleEffectExample.mxml</path>
<path kind="file" action="A">/flex/sdk/trunk/frameworks/projects/spark/asdoc/en_US/spark/effects/examples/SetActionEffectExample.mxml</path>
<path kind="file" action="A">/flex/sdk/trunk/frameworks/projects/spark/asdoc/en_US/spark/effects/animation/examples/assets/logo.jpg</path>
<path kind="dir" action="A">/flex/sdk/trunk/frameworks/projects/spark/asdoc/en_US/spark/effects/animation</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/spark/asdoc/en_US/spark/effects/examples/Move3DEffectExample.mxml</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/spark/src/spark/effects/easing/Elastic.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/spark/asdoc/en_US/spark/effects/examples/RotateEffectExample.mxml</path>

git-svn-id: 7146a936b37d36e51ea0d66f8acbe0b8281bc7b7@1283962 13f79535-47bb-0310-9956-ffa450edef68

--- frameworks/projects/spark/src/spark/effects/animation/MotionPath.as
+++ frameworks/projects/spark/src/spark/effects/animation/MotionPath.as
@@ -50,6 +50,8 @@
  *  @playerversion Flash 10
  *  @playerversion AIR 1.5
  *  @productversion Flex 4
+ *
+ *  @includeExample examples/KeyFrameEffectExample.mxml
  *
  *  @see Keyframe
  *  @see spark.effects.interpolation.NumberInterpolator


Added subtitle support to LevelLoader via property extraction plus subtitleTracks accessor

--- src/org/mangui/hls/loader/LevelLoader.as
+++ src/org/mangui/hls/loader/LevelLoader.as
@@ -12,19 +12,21 @@
     import flash.utils.clearTimeout;
     import flash.utils.getTimer;
     import flash.utils.setTimeout;
+
+    import org.mangui.hls.HLS;
+    import org.mangui.hls.HLSSettings;
     import org.mangui.hls.constant.HLSLoaderTypes;
     import org.mangui.hls.constant.HLSPlayStates;
     import org.mangui.hls.constant.HLSTypes;
     import org.mangui.hls.event.HLSError;
     import org.mangui.hls.event.HLSEvent;
     import org.mangui.hls.event.HLSLoadMetrics;
-    import org.mangui.hls.HLS;
-    import org.mangui.hls.HLSSettings;
     import org.mangui.hls.model.Fragment;
     import org.mangui.hls.model.Level;
     import org.mangui.hls.playlist.AltAudioTrack;
     import org.mangui.hls.playlist.DataUri;
     import org.mangui.hls.playlist.Manifest;
+    import org.mangui.hls.playlist.SubtitleTrack;

     CONFIG::LOGGING {
         import org.mangui.hls.utils.Log;
@@ -57,6 +59,8 @@
         private var _retryCount : int;
         /* alt audio tracks */
         private var _altAudioTracks : Vector.<AltAudioTrack>;
+        /* subtitle tracks */
+        private var _subtitleTracks : Vector.<SubtitleTrack>;
         /* manifest load metrics */
         private var _metrics : HLSLoadMetrics;

@@ -141,6 +145,10 @@
             return _altAudioTracks;
         }

+        public function get subtitleTracks() : Vector.<SubtitleTrack> {
+            return _subtitleTracks;
+        }
+
         /** Load the manifest file. **/
         public function load(url : String) : void {
             if(!_urlloader) {
@@ -161,6 +169,7 @@
             _retryTimeout = 1000;
             _retryCount = 0;
             _altAudioTracks = null;
+            _subtitleTracks = null;
             _loadManifest();
         }

@@ -299,6 +308,12 @@
                                     Log.debug(_altAudioTracks.length + " alternate audio tracks found");
                                 }
                             }
+                            _subtitleTracks = Manifest.extractSubtitleTracks(string, _url);
+                            CONFIG::LOGGING {
+                                if (_subtitleTracks.length > 0) {
+                                    Log.debug(_subtitleTracks.length + " subtitle tracks found");
+                                }
+                            }
                         }
                     } else {
                         errorTxt = "No level found in Manifest";


Updates script to support hot-reload.

Updates script to support hot-reload.

--- Scripts/testing.as
+++ Scripts/testing.as
@@ -2,7 +2,14 @@

 void OnLoad()
 {
+	println("Loaded.");
 	@t = Clock();
+}
+
+void OnReload()
+{
+	println("Reloaded.");
+	t.reloaded();
 }

 class Clock
@@ -23,6 +30,8 @@
 		updates = 0;
 		target = Time::At(2016,04,16, 03,00,00);
 		nextReport = Time::Now + Time::Seconds(1);
+
+		println("Created clock.");
 	}

 	~Clock()
@@ -32,6 +41,18 @@
 #if CLIENT
 		Hooks::Remove("DrawUI");
 		Hooks::Remove("Update");
+#endif
+
+		println("Destroyed clock.");
+	}
+
+	void reloaded()
+	{
+		Hooks::Add("Tick", "tick");
+
+#if CLIENT
+		Hooks::Add("Update", "update");
+		Hooks::Add("DrawUI", "draw");
 #endif
 	}

@@ -63,13 +84,15 @@
 		{
 			print("Time stats: ");
 #if CLIENT
-			print(frames + "FPS ");
+			print(time);
+			print("s ");
+			print((frames/2) + "FPS ");
 			frames = 0;
 #endif
-			println(updates + "UPS");
+			println((updates/2) + "UPS");
 			updates = 0;

-			nextReport = Time::Now + Time::Seconds(1);
+			nextReport = Time::Now + Time::Seconds(2);
 		}
 	}

@@ -96,7 +119,7 @@
 		sf::View v = rend.View;

 		v.Zoom(1 + sin(time * 2) / 100);
-		//v.Rotate(cos(time*2) *5);
+		v.Rotate(cos(time*2) *5);
 		v.Center = -sf::Vec2(cos(time), sin(time)) * 5;

 		rend.View = v;


Remove the reference to AlertWindow, even if it is commented

--- src/org/jivesoftware/xiff/vcard/VCard.as
+++ src/org/jivesoftware/xiff/vcard/VCard.as
@@ -426,8 +426,6 @@
 			if (resultIQ.type == IQ.ERROR_TYPE)
 			{
 				dispatchEvent(new VCardEvent(VCardEvent.ERROR, cache[resultIQ.to.toBareJID()], true, true));
-
-				//AlertWindow.show(Localizator.getText('vcard.error.save'), Localizator.getText('title.error'));
 			}
 			else
 				delete cache[resultIQ.to.toBareJID()];		// Force profile refresh on next view


Added missing declaration in ActionScript build.

--- vm/src/as/header.as
+++ vm/src/as/header.as
@@ -22,6 +22,7 @@

 			var JSON : Object;
 			var ArrayBuffer : Object;
+			var Uint8Array : Object;
 			var Int32Array : Object;
 			var XMLHttpRequest : Function = function () {};


Transferred from the Adobe Open Source Subversion Repository

Revision: 23243
Author:   cframpto@adobe.com
Date:     2011-12-20T00:59:57.384047Z

Log Message:
-----------
In frameworks, remove Adobe headers from all files except xml/mxml file types.  There are also a few .txt files that are license files that I didn't touch yet.

Modified Paths:
--------------
2361 paths were modified

git-svn-id: 7146a936b37d36e51ea0d66f8acbe0b8281bc7b7@1260265 13f79535-47bb-0310-9956-ffa450edef68

--- frameworks/projects/framework/src/mx/effects/MaskEffect.as
+++ frameworks/projects/framework/src/mx/effects/MaskEffect.as
@@ -1,13 +1,3 @@
-////////////////////////////////////////////////////////////////////////////////
-//
-//  ADOBE SYSTEMS INCORPORATED
-//  Copyright 2003-2007 Adobe Systems Incorporated
-//  All Rights Reserved.
-//
-//  NOTICE: Adobe permits you to use, modify, and distribute this file
-//  in accordance with the terms of the license agreement accompanying it.
-//
-////////////////////////////////////////////////////////////////////////////////

 package mx.effects
 {


Transferred from the Adobe Open Source Subversion Repository

Revision: 12061
Author:   jszeto@adobe.com
Date:     2009-11-20T20:17:21.636565Z

Log Message:
-----------
Moving DropDownListBase from spark.components to spark.components.supportClasses

http://bugs.adobe.com/jira/browse/SDK-24316

QE notes: None
Doc notes: None
Bugs: SDK-24316
Reviewer: Corey
Tests run: DropDownList, ComboBox
Is noteworthy for integration: Yes

Modified Paths:
--------------
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/spark/src/spark/components/ComboBox.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/spark/src/spark/components/DropDownList.as</path>
<path kind="file" copyfrom-path="/flex/sdk/trunk/frameworks/projects/spark/src/spark/components/DropDownListBase.as" copyfrom-rev="12024" action="A">/flex/sdk/trunk/frameworks/projects/spark/src/spark/components/supportClasses/DropDownListBase.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/spark/src/spark/accessibility/DropDownListBaseAccImpl.as</path>
<path kind="file" action="D">/flex/sdk/trunk/frameworks/projects/spark/src/spark/components/DropDownListBase.as</path>

git-svn-id: 7146a936b37d36e51ea0d66f8acbe0b8281bc7b7@1278484 13f79535-47bb-0310-9956-ffa450edef68

--- frameworks/projects/spark/src/spark/components/ComboBox.as
+++ frameworks/projects/spark/src/spark/components/ComboBox.as
@@ -28,6 +28,7 @@
 import mx.core.mx_internal;
 import mx.styles.StyleProxy;

+import spark.components.supportClasses.DropDownListBase;
 import spark.components.supportClasses.ListBase;
 import spark.core.NavigationUnit;
 import spark.events.DropDownEvent;


Transferred from the Adobe Open Source Subversion Repository

Revision: 17055
Author:   cframpto@adobe.com
Date:     2010-07-24T13:07:46.799146Z

Log Message:
-----------
PARB changes for DataGrid selection from signoff review

missed renaming a method - setSelectedIndices(Vector.<int>) -> selectIndices(startRowIndex, endRowIndex)

https://zerowing.corp.adobe.com/display/flex/Data+Grid+Selection has been updated

QE notes: API changes so expect some test breakage
Doc notes:
Bugs:
Reviewer: Hans
Tests run: none
Is noteworthy for integration: no

Modified Paths:
--------------
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/spark/src/spark/components/Grid.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/spark/src/spark/components/DataGrid.as</path>

git-svn-id: 7146a936b37d36e51ea0d66f8acbe0b8281bc7b7@1278519 13f79535-47bb-0310-9956-ffa450edef68

--- frameworks/projects/spark/src/spark/components/DataGrid.as
+++ frameworks/projects/spark/src/spark/components/DataGrid.as
@@ -466,13 +466,13 @@
      *  @playerversion AIR 2.0
      *  @productversion Flex 4.5
      */
-    public function setSelectedIndices(startRowIndex:int, endRowIndex:int):Boolean
-    {
-        var selectionChanged:Boolean;
-
-        if (grid)
-        {
-            selectionChanged = grid.setSelectedIndices(startRowIndex, endRowIndex);
+    public function selectIndices(startRowIndex:int, endRowIndex:int):Boolean
+    {
+        var selectionChanged:Boolean;
+
+        if (grid)
+        {
+            selectionChanged = grid.selectIndices(startRowIndex, endRowIndex);
         }
         else
         {


Transferred from the Adobe Open Source Subversion Repository

Revision: 19942
Author:   rfrishbe@adobe.com
Date:     2011-01-25T22:49:40.674586Z

Log Message:
-----------
Cleaning up some FIXMEs assigned to me in various locations.

Also exposing some private variables as mx_internal: messageText, labelText, and oldUnscaledWidth.

QE notes: -
Doc notes:
Bugs: SDK-29226
Reviewer: Eric
Tests run: checkintests
Is noteworthy for integration: No

Modified Paths:
--------------
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/mobilecomponents/src/spark/components/supportClasses/StyleableTextField.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/mobiletheme/src/spark/skins/mobile/TextAreaSkin.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/spark/src/spark/components/Scroller.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/mobilecomponents/src/spark/components/IconItemRenderer.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/mobiletheme/src/spark/skins/mobile/ListSkin.as</path>

git-svn-id: 7146a936b37d36e51ea0d66f8acbe0b8281bc7b7@1280513 13f79535-47bb-0310-9956-ffa450edef68

--- frameworks/projects/spark/src/spark/components/Scroller.as
+++ frameworks/projects/spark/src/spark/components/Scroller.as
@@ -1745,8 +1745,6 @@
      */
     private function hideScrollBars():void
     {
-        // FIXME (rfrishbe): need to make sure this coordinates with ScrollerLayout
-        // better.
         if (!hideScrollBarAnimation)
         {
             hideScrollBarAnimation = new Animate();
@@ -2122,7 +2120,7 @@
             hspBeforeTouchScroll = viewport.horizontalScrollPosition;
             vspBeforeTouchScroll = viewport.verticalScrollPosition;

-            // FIXME (rfrishbe): should the ScrollerLayout just listen to
+            // TODO (rfrishbe): should the ScrollerLayout just listen to
             // Scroller events to determine this rather than doing it here.
             // Also should figure out who's in charge of fading the alpha of the
             // scrollbars...Scroller or ScrollerLayout (or even HScrollbar/VScrollbar)?
@@ -2330,8 +2328,6 @@
      *  @private
      *  Called when the effect finishes playing on the scrollbars.  This is so ScrollerLayout
      *  can hide the scrollbars completely and go back to controlling its visibility.
-     *  FIXME (rfrishbe): Not sure if this return to ScrollerLayout control is
-     *  actually necessary
      */
     private function hideScrollBarAnimation_effectEndHandler(event:EffectEvent):void
     {
@@ -2343,7 +2339,7 @@
         horizontalScrollInProgress = false;
         verticalScrollInProgress = false;

-        // need to invaliadte the ScrollerLayout object so it'll update the
+        // need to invalidate the ScrollerLayout object so it'll update the
         // scrollbars in overlay mode
         skin.invalidateDisplayList();
     }