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@1253228 13f79535-47bb-0310-9956-ffa450edef68

--- frameworks/projects/charts/src/mx/charts/series/AreaSeries.as
+++ frameworks/projects/charts/src/mx/charts/series/AreaSeries.as
@@ -0,0 +1,2256 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  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.series
+{
+
+import flash.display.DisplayObject;
+import flash.geom.Point;
+import flash.geom.Rectangle;
+import flash.utils.Dictionary;
+
+import mx.charts.DateTimeAxis;
+import mx.charts.HitData;
+import mx.charts.chartClasses.BoundedValue;
+import mx.charts.chartClasses.CartesianChart;
+import mx.charts.chartClasses.CartesianTransform;
+import mx.charts.chartClasses.DataDescription;
+import mx.charts.chartClasses.GraphicsUtilities;
+import mx.charts.chartClasses.IAxis;
+import mx.charts.chartClasses.IStackable;
+import mx.charts.chartClasses.IStackable2;
+import mx.charts.chartClasses.InstanceCache;
+import mx.charts.chartClasses.LegendData;
+import mx.charts.chartClasses.NumericAxis;
+import mx.charts.chartClasses.Series;
+import mx.charts.chartClasses.StackedSeries;
+import mx.charts.renderers.AreaRenderer;
+import mx.charts.series.items.AreaSeriesItem;
+import mx.charts.series.renderData.AreaSeriesRenderData;
+import mx.charts.styles.HaloDefaults;
+import mx.collections.CursorBookmark;
+import mx.core.ClassFactory;
+import mx.core.IDataRenderer;
+import mx.core.IFactory;
+import mx.core.IFlexDisplayObject;
+import mx.core.mx_internal;
+import mx.graphics.IFill;
+import mx.graphics.IStroke;
+import mx.graphics.SolidColor;
+import mx.styles.CSSStyleDeclaration;
+import mx.styles.ISimpleStyleClient;
+import mx.core.IFlexModuleFactory;
+
+use namespace mx_internal;
+
+include "../styles/metadata/FillStrokeStyles.as"
+include "../styles/metadata/ItemRendererStyles.as"
+
+/**
+ *  Specifies the number of pixels by which radius of the chart item is to be
+ *  increased when highlighted or selected.
+ *
+ *  @default 2
+ *
+ *  @langversion 3.0
+ *  @playerversion Flash 9
+ *  @playerversion AIR 1.1
+ *  @productversion Flex 3
+ */
+[Style(name="adjustedRadius", type="Number", format="Length", inherit="yes")]
+
+
+/**
+ *  Sets the fill for the area. You can specify either an object implementing the
+ *  IFill interface, or a number representing a solid color value. You can also specify a solid fill using CSS.
+ *
+ *  @langversion 3.0
+ *  @playerversion Flash 9
+ *  @playerversion AIR 1.1
+ *  @productversion Flex 3
+ */
+[Style(name="areaFill", type="mx.graphics.IFill", inherit="no")]
+
+/**
+ *  The class that the series uses to represent the filled area on the chart. This class is instantiated once per series.
+ *  Classes used as areaRenderers should implement the IFlexDisplayObject, ISimpleStyleClient, and IDataRenderer
+ *  interfaces. The data property is assigned the
+ *  AreaSeriesRenderData that describes the area data.
+ *
+ *  @langversion 3.0
+ *  @playerversion Flash 9
+ *  @playerversion AIR 1.1
+ *  @productversion Flex 3
+ */
+[Style(name="areaRenderer", type="mx.core.IFactory", inherit="no")]
+
+/**
+ *  Sets the line style for the area.
+ *  You use a Stroke object to define the stroke.
+ *  You can specify the itemRenderer in MXML or using styles.
+ *
+ *  @langversion 3.0
+ *  @playerversion Flash 9
+ *  @playerversion AIR 1.1
+ *  @productversion Flex 3
+ */
+[Style(name="areaStroke", type="mx.graphics.IStroke", inherit="no")]
+
+/**
+ *  Specifies an Array of fill objects that define the fill for
+ *  each item in the series. This takes precedence over the fill style property.
+ *  If a custom method is specified by the fillFunction property, that takes precedence over this Array.
+ *  If you do not provide enough Array elements for every item,
+ *  Flex repeats the fill from the beginning of the Array.
+ *
+ *
To set the value of this property using CSS:
+ *

+ *    AreaSeries {
+ *      fills:#CC66FF, #9966CC, #9999CC;
+ *    }
+ *

+ *

+ *
+ *
To set the value of this property using MXML:
+ *

+ *    <mx:AreaSeries ... >
+ *     <mx:fills>
+ *      <mx:SolidColor color="0xCC66FF"/>
+ *      <mx:SolidColor color="0x9966CC"/>
+ *      <mx:SolidColor color="0x9999CC"/>
+ *     </mx:fills>
+ *    </mx:AreaSeries>
+ *

+ *

+ *
+ *

+ *  If you specify the fills property and you
+ *  want to have a Legend control, you must manually create a Legend control and
+ *  add LegendItems to it.
+ *

+ *
+ *  @langversion 3.0
+ *  @playerversion Flash 9
+ *  @playerversion AIR 1.1
+ *  @productversion Flex 3
+ */
+[Style(name="fills", type="Array", arrayType="mx.graphics.IFill", inherit="no")]
+
+/**
+ *  Specifies the boundary type for the area.
+ *  Possible values are:
+ *
+ *

+ *
"curve" - Draws curves for the boundary between data points.

+ *
+ *
"horizontal" - Draws only the boundary from the x-coordinate of
+ *    the first point to the x-coordinate of the second point at the y-coordinate of
+ *    the second point. Repeats this for each data point.

+ *
+ *
"reverseStep" - Draws boundaries of the area as horizontal segments.
+ *    At the first data point, draws a vertical boundary line and then a horizontal boundary
+ *    line to the second point, and repeats for each data point.

+ *
+ *
"segment" - Draws boundaries of the area as connected segments that
+ *    are angled to connect at each data point in the series.

+ *
+ *
"step" - Draws boundaries of the area as horizontal segments. At the
+ *    first data point, draws a horizontal boundary line and then a vertical boundary
+ *    line to the second point, and repeats for each data point.

+ *
+ *
"vertical" - Draws only the boundary from the y-coordinate of the first
+ *    point to the y-coordinate of the second point at the x-coordinate of the second point.
+ *    Repeats this for each data point.

+ *

+ *
+ *  @default segment
+ *
+ *  @langversion 3.0
+ *  @playerversion Flash 9
+ *  @playerversion AIR 1.1
+ *  @productversion Flex 3
+ */
+[Style(name="form", type="String", enumeration="segment,step,reverseStep,vertical,horizontal,curve", inherit="no")]
+
+/**
+ *  Specifies the radius, in pixels, of the chart elements for the data points. This property only applies
+ *  if you specify an itemRenderer property.
+ *  You can specify the itemRenderer in MXML or using styles.
+ *
+ *  @default 4
+ *
+ *  @langversion 3.0
+ *  @playerversion Flash 9
+ *  @playerversion AIR 1.1
+ *  @productversion Flex 3
+ */
+[Style(name="radius", type="Number", format="Length", inherit="no")]
+
+/**
+ *  Defines a data series for an AreaChart control. By default, this class uses the AreaRenderer itemRenderer.
+ *  Optionally, you can define a different itemRenderer for the
+ *  data series. The itemRenderer must implement the IDataRenderer interface.
+ *
+ *  @mxml
+ *
+ *
The <mx:AreaSeries> tag inherits all the properties
+ *  of its parent classes and adds the following properties:

+ *
+ *

+ *  <mx:AreaSeries
+ *    Properties
+ *    fillFunction="Internal fill function"
+ *    horizontalAxis="No default"
+ *    minField="null"
+ *    sortOnXField="true"
+ *    stacker="No default"
+ *    stackTotals="No default"
+ *    xField="null"
+ *    verticalAxis="No default"
+ *    yField="null"
+ *
+ *    Styles
+ *    adjustedRadius="2"
+ *    areaFill="IFill"
+ *    areaRenderer="areaRenderer"
+ *    areaStroke="Stroke"
+ *    fill="IFill; no default"
+ *    fills="IFill; no default"
+ *    form="segment|curve|horizontal|reverseStep|step|vertical"
+ *    itemRenderer="itemRenderer"
+ *    legendMarkerRenderer="Defaults to series's itemRenderer"
+ *    radius="4"
+ *    stroke="IStroke; no default"
+ *  />
+ *

+ *
+ *  @see mx.charts.AreaChart
+ *
+ *  @includeExample ../examples/Line_AreaChartExample.mxml
+ *
+ *
+ *  @langversion 3.0
+ *  @playerversion Flash 9
+ *  @playerversion AIR 1.1
+ *  @productversion Flex 3
+ */
+public class AreaSeries extends Series implements IStackable2
+{
+    include "../../core/Version.as";
+
+    //--------------------------------------------------------------------------
+    //
+    //  Class initialization
+    //
+    //--------------------------------------------------------------------------
+
+    //--------------------------------------------------------------------------
+    //
+    //  Constructor
+    //
+    //--------------------------------------------------------------------------
+
+    /**
+     *  Constructor.
+     *
+     *  @langversion 3.0
+     *  @playerversion Flash 9
+     *  @playerversion AIR 1.1
+     *  @productversion Flex 3
+     */
+    public function AreaSeries()
+    {
+        super();
+
+        _instanceCache = new InstanceCache(null, this, 1);
+        _instanceCache.creationCallback = applyItemRendererProperties;
+
+        dataTransform = new CartesianTransform();
+    }
+
+    //--------------------------------------------------------------------------
+    //
+    //  Variables
+    //
+    //--------------------------------------------------------------------------
+
+	/**
+	 *  @private
+	 */
+	private var _moduleFactoryInitialized:Boolean = false;
+
+    /**
+     *  @private
+     */
+    private var _areaRenderer:IFlexDisplayObject;
+
+    /**
+     *  @private
+     */
+    private var _instanceCache:InstanceCache;
+
+    /**
+     *  @private
+     */
+    private var _renderData:AreaSeriesRenderData;
+
+    /**
+     *  @private
+     */
+    private var _stacked:Boolean = false;
+
+    /**
+     *  @private
+     */
+    private var _localFills:Array /* of IFill */;
+
+    /**
+     *  @private
+     */
+    private var _fillCount:int;
+
+    /**
+     *  @private
+     */
+    private var _transition:Boolean = false;
+
+    //--------------------------------------------------------------------------
+    //
+    //  Overridden properties: Series
+    //
+    //--------------------------------------------------------------------------
+
+    //----------------------------------
+    //  items
+    //----------------------------------
+
+    /**
+     *  @inheritDoc
+     *
+     *  @langversion 3.0
+     *  @playerversion Flash 9
+     *  @playerversion AIR 1.1
+     *  @productversion Flex 3
+     */
+    override public function get items():Array /* of AreaSeriesItem */
+    {
+        return _renderData ? _renderData.filteredCache : null;
+    }
+
+    //----------------------------------
+    //  legendData
+    //----------------------------------
+
+    /**
+     *  @private
+     */
+    override public function get legendData():Array /* of LegendData */
+    {
+        if (fillFunction!=defaultFillFunction || _fillCount!=0)
+        {
+            var keyItems:Array /* of LegendData */ = [];
+            return keyItems;
+        }
+        var marker:IFlexDisplayObject = null;
+
+        var ld:LegendData = new LegendData();
+        ld.element = this;
+
+        var markerClass:IFactory = getStyle("legendMarkerRenderer");
+
+        if (markerClass)
+        {
+            marker = markerClass.newInstance();
+            if (marker as ISimpleStyleClient)
+                (marker as ISimpleStyleClient).styleName = this;
+        }
+
+
+        ld.marker = marker;
+        ld.label = displayName;
+
+        return [ ld ];
+
+    }
+
+    //----------------------------------
+    //  renderData
+    //----------------------------------
+
+    /**
+     *  @private
+     */
+    override protected function get renderData():Object
+    {
+        if (!_renderData)
+        {
+            var renderDataType:Class = this.renderDataType
+            var td:AreaSeriesRenderData = new renderDataType(this);
+            td.cache = td.filteredCache = [];
+            td.radius = 0;
+            return td;
+        }
+
+        _renderData.radius = getStyle("radius");
+
+        return _renderData;
+    }
+
+        private var _bAxesDirty:Boolean = false;
+
+    //--------------------------------------------------------------------------
+    //
+    //  Properties
+    //
+    //--------------------------------------------------------------------------
+
+    //-----------------------------------
+    // fillFunction
+    //-----------------------------------
+    [Bindable]
+    [Inspectable(category="General")]
+
+    /**
+     * @private
+     * Storage for fillFunction property
+     */
+    private var _fillFunction:Function=defaultFillFunction;
+
+    /**
+     * Specifies a method that returns the fill for the current chart item in the series.
+     * If this property is set, the return value of the custom fill function takes precedence over the
+     * fill and fills style properties.
+     * But if it returns null, then fills and fill will be
+     * prefered in that order.
+     *
+     *
The custom fillFunction has the following signature:
+     *
+     *

+     * function_name (item:ChartItem, index:Number):IFill { ... }
+     *

+     *
+     * item is a reference to the chart item that is being rendered.
+     * index is the index of the chart item in the renderData's cache. This is different
+     * from the chart's data provider's index because it is sorted based on the x, y, and z values.
+     * This function returns an object that implements the IFill interface.
+     *

+     *
+     *
An example usage of a customized fillFunction is to return a fill
+     * based on some threshold.

+     *
+     * @example
+     *

+     * public function myFillFunction(item:ChartItem, index:Number):IFill
+     * {
+     *      var curItem:AreaSeriesItem = AreaSeriesItem(item);
+     *      if (curItem.yNumber > 10)
+     *          return(new SolidColor(0x123456, .75));
+     *      else
+     *          return(new SolidColor(0x563412, .75));
+     * }
+     *

+     *
+     *

+     *  If you specify a custom fill function for your chart series and you
+     *  want to have a Legend control, you must manually create a Legend control and
+     *  add LegendItems to it.
+     *

+     *
+     *  @langversion 3.0
+     *  @playerversion Flash 9
+     *  @playerversion AIR 1.1
+     *  @productversion Flex 3
+     */
+    public function get fillFunction():Function
+    {
+        return _fillFunction;
+    }
+
+    /**
+     * @private
+     */
+    public function set fillFunction(value:Function):void
+    {
+        if (value==_fillFunction)
+            return;
+
+        if (value != null)
+            _fillFunction = value;
+
+        else
+            _fillFunction = defaultFillFunction;
+
+        invalidateDisplayList();
+        legendDataChanged();
+    }
+
+    //----------------------------------
+    //  horizontalAxis
+    //----------------------------------
+
+    /**
+     *  @private
+     *  Storage for the horizontalAxis property.
+     */
+    private var _horizontalAxis:IAxis;
+
+    [Inspectable(category="Data")]
+
+    /**
+     *  Defines the labels, tick marks, and data position
+     *  for items on the x-axis.
+     *  Use either the LinearAxis class or the CategoryAxis class
+     *  to set the properties of the horizontalAxis as a child tag in MXML
+     *  or create a LinearAxis or CategoryAxis object in ActionScript.
+     *
+     *  @langversion 3.0
+     *  @playerversion Flash 9
+     *  @playerversion AIR 1.1
+     *  @productversion Flex 3
+     */
+    public function get horizontalAxis():IAxis
+    {
+        return _horizontalAxis;
+    }
+
+    /**
+     *  @private
+     */
+    public function set horizontalAxis(value:IAxis):void
+    {
+        _horizontalAxis = value;
+        _bAxesDirty = true;
+
+        invalidateData();
+        invalidateProperties();
+    }
+
+    //----------------------------------
+    //  itemType
+    //----------------------------------
+
+    /**
+     *  The subtype of ChartItem used by this series to represent individual items.
+     *  Subclasses can override and return a more specialized class if they need to store additional information in the items
+     *
+     *  @langversion 3.0
+     *  @playerversion Flash 9
+     *  @playerversion AIR 1.1
+     *  @productversion Flex 3
+     */
+    protected function get itemType():Class
+    {
+        return AreaSeriesItem;
+    }
+
+    //----------------------------------
+    //  minField
+    //----------------------------------
+
+    /**
+     *  @private
+     *  Storage for the minField property.
+     */
+    private var _minField:String = "";
+
+    /**
+     *  @private
+     */
+    private var _userMinField:String = "";
+
+    [Inspectable(category="General")]
+
+    /**
+     *  Specifies the field of the dataProvider that determines the bottom boundary of the area.
+     *  If null, the area is based at the range minimum (or maximum, if the field value is negative).
+     *
+     *  @default null
+     *
+     *  @langversion 3.0
+     *  @playerversion Flash 9
+     *  @playerversion AIR 1.1
+     *  @productversion Flex 3
+     */
+    public function get minField():String
+    {
+        return _minField;
+    }
+
+    /**
+     *  @private
+     */
+    public function set minField(value:String):void
+    {
+        _userMinField = value;
+        _minField = value;
+
+        dataChanged();
+    }
+
+    //----------------------------------
+    //  renderDataType
+    //----------------------------------
+
+    /**
+     *  The subtype of ChartRenderData used by this series to store all data necessary to render.
+     *  Subclasses can override and return a more specialized class if they need to store additional information for rendering.
+     *
+     *  @langversion 3.0
+     *  @playerversion Flash 9
+     *  @playerversion AIR 1.1
+     *  @productversion Flex 3
+     */
+    protected function get renderDataType():Class
+    {
+        return AreaSeriesRenderData;
+    }
+
+    //----------------------------------
+    //  sortOnXField
+    //----------------------------------
+
+    /**
+     *  @private
+     *  Storage for the sortOnXField property.
+     */
+    private var _sortOnXField:Boolean = true;
+
+    [Inspectable]
+    /**
+     *  Requests the line datapoints be sorted from left to right
+     *  before rendering.
+     *
+     *
By default, the LineSeries renders points from left to right.
+     *  Set this property to false to render the items
+     *  in the order they appear in the data provider.

+     *
+     *  @default true
+     *
+     *  @langversion 3.0
+     *  @playerversion Flash 9
+     *  @playerversion AIR 1.1
+     *  @productversion Flex 3
+     */
+    public function get sortOnXField():Boolean
+    {
+        return _sortOnXField;
+    }
+
+    /**
+     *  @private
+     */
+    public function set sortOnXField(value:Boolean):void
+    {
+        if (_sortOnXField == value)
+            return;
+        _sortOnXField = value;
+
+        invalidateMapping();
+    }
+
+    //----------------------------------
+    //  stacker
+    //----------------------------------
+
+    /**
+     *  @private
+     *  Storage for the stacker property.
+     */
+    private var _stacker:StackedSeries;
+
+    /**
+     *  The StackedSeries associated with this AreaSeries.
+     *  The stacker manages the series's stacking behavior.
+     *
+     *  @langversion 3.0
+     *  @playerversion Flash 9
+     *  @playerversion AIR 1.1
+     *  @productversion Flex 3
+     */
+    public function get stacker():StackedSeries
+    {
+        return _stacker;
+    }
+
+    /**
+     *  @private
+     */
+    public function set stacker(value:StackedSeries):void
+    {
+        _stacker = value;
+    }
+
+    //----------------------------------
+    //  upperBoundCache
+    //----------------------------------
+
+    /**
+     *  @private
+     */
+    mx_internal function get upperBoundCache():Array /* of AreaSeriesItem */
+    {
+        return _renderData.cache;
+    }
+
+    //----------------------------------
+    //  verticalAxis
+    //----------------------------------
+
+    /**
+     *  @private
+     *  Storage for the verticalAxis property.
+     */
+    private var _verticalAxis:IAxis;
+
+    [Inspectable(category="Data")]
+
+    /**
+     *  Defines the labels, tick marks, and data position
+     *  for items on the y-axis.
+     *  Use either the LinearAxis class or the CategoryAxis class
+     *  to set the properties of the verticalAxis as a child tag in MXML
+     *  or create a LinearAxis or CategoryAxis object in ActionScript.
+     *
+     *  @langversion 3.0
+     *  @playerversion Flash 9
+     *  @playerversion AIR 1.1
+     *  @productversion Flex 3
+     */
+    public function get verticalAxis():IAxis
+    {
+        return _verticalAxis;
+    }
+
+    /**
+     *  @private
+     */
+    public function set verticalAxis(value:IAxis):void
+    {
+        _verticalAxis = value;
+        _bAxesDirty = true;
+
+        invalidateData();
+        //invalidateChildOrder();
+        invalidateProperties();
+    }
+
+    //----------------------------------
+    //  xField
+    //----------------------------------
+
+    /**
+     *  @private
+     *  Storage for the xField property.
+     */
+    private var _xField:String = "";
+
+    [Inspectable(category="General")]
+
+    /**
+     *  Specifies the field of the data provider that determines the position of the data
+     *  points on the horizontal axis. If null, the
+     *  data points are rendered in the order they appear in the data provider.
+     *
+     *  @default null
+     *
+     *  @langversion 3.0
+     *  @playerversion Flash 9
+     *  @playerversion AIR 1.1
+     *  @productversion Flex 3
+     */
+    public function get xField():String
+    {
+        return _xField;
+    }
+
+    /**
+     *  @private
+     */
+    public function set xField(value:String):void
+    {
+        _xField = value;
+
+        dataChanged();
+    }
+
+    //----------------------------------
+    //  yField
+    //----------------------------------
+
+    /**
+     *  @private
+     *  Storage for the yField property.
+     */
+    private var _yField:String = "";
+
+    [Inspectable(category="General")]
+
+    /**
+     *  Specifies the field of the data provider that determines the position of the data point on the vertical axis.
+     *  If null, the AreaSeries assumes the dataProvider
+     *  is an Array of numbers, and uses the numbers as values for the data points.
+     *
+     *  @default null
+     *
+     *  @langversion 3.0
+     *  @playerversion Flash 9
+     *  @playerversion AIR 1.1
+     *  @productversion Flex 3
+     */
+    public function get yField():String
+    {
+        return _yField;
+    }
+
+    /**
+     *  @private
+     */
+    public function set yField(value:String):void
+    {
+        _yField = value;
+
+        dataChanged();
+    }
+
+    //-----------------------------------------------------------------------
+    //
+    // Overridden Methods
+    //
+    //-----------------------------------------------------------------------
+
+    /**
+     *  @private
+     */
+    override public function getItemsInRegion(r:Rectangle):Array /* of AreaSeriesItem */
+    {
+        if (interactive == false || !_renderData)
+            return [];
+
+        var arrItems:Array /* of AreaSeriesItem */ = [];
+        var localRectangle:Rectangle = new Rectangle();
+        var n:uint = _renderData.filteredCache.length;
+
+        localRectangle.topLeft = globalToLocal(r.topLeft);
+        localRectangle.bottomRight = globalToLocal(r.bottomRight);
+
+        for (var i:int = 0; i < n; i++)
+        {
+            var v:AreaSeriesItem = _renderData.filteredCache[i];
+
+            if (localRectangle.contains(v.x,v.y))
+                arrItems.push(v);
+        }
+        return arrItems;
+    }
+
+    //--------------------------------------------------------------------------
+    //
+    //  Overridden methods: UIComponent
+    //
+    //--------------------------------------------------------------------------
+
+	/**
+	 *  @private
+	 */
+	private function initStyles():Boolean
+	{
+		HaloDefaults.init(styleManager);
+
+		var areaSeriesStyle:CSSStyleDeclaration =
+			HaloDefaults.createSelector("mx.charts.series.AreaSeries", styleManager);
+
+		areaSeriesStyle.defaultFactory = function():void
+		{
+			this.areaRenderer = new ClassFactory(mx.charts.renderers.AreaRenderer);
+			this.adjustedRadius = 2;
+			this.legendMarkerRenderer = new ClassFactory(AreaSeriesLegendMarker);
+			this.radius = 4;
+			this.areaFill = new SolidColor(0x000000);
+			this.fills = [];
+			this.stroke = HaloDefaults.pointStroke;
+		}
+
+		return true;
+	}
+
+	/**
+	 *  @inheritDoc
+	 *
+	 *  @langversion 3.0
+	 *  @playerversion Flash 9
+	 *  @playerversion AIR 1.1
+	 *  @productversion Flex 3
+	 */
+	override public function set moduleFactory(factory:IFlexModuleFactory):void
+	{
+		super.moduleFactory = factory;
+
+		if (_moduleFactoryInitialized)
+			return;
+
+		_moduleFactoryInitialized = true;
+
+		// our style settings
+		initStyles();
+	}
+
+    /**
+     *  @inheritDoc
+     *
+     *  @langversion 3.0
+     *  @playerversion Flash 9
+     *  @playerversion AIR 1.1
+     *  @productversion Flex 3
+     */
+    override protected function commitProperties():void
+    {
+        super.commitProperties();
+
+        if (dataTransform)
+        {
+            if (_horizontalAxis)
+            {
+                _horizontalAxis.chartDataProvider = dataProvider;
+                CartesianTransform(dataTransform).setAxis(
+                    CartesianTransform.HORIZONTAL_AXIS,_horizontalAxis);
+            }
+
+            if (_verticalAxis)
+            {
+                _verticalAxis.chartDataProvider = dataProvider;
+                CartesianTransform(dataTransform).setAxis(
+                    CartesianTransform.VERTICAL_AXIS, _verticalAxis);
+            }
+        }
+
+        var c:CartesianChart = CartesianChart(chart);
+        if (c)
+        {
+            if (!_horizontalAxis)
+            {
+                if (c.secondSeries.indexOf(this) != -1 && c.secondHorizontalAxis)
+                {
+                    if (dataTransform.axes[CartesianTransform.HORIZONTAL_AXIS] != c.secondHorizontalAxis)
+                        CartesianTransform(dataTransform).setAxis(
+                            CartesianTransform.HORIZONTAL_AXIS,c.secondHorizontalAxis);
+                }
+                else if (dataTransform.axes[CartesianTransform.HORIZONTAL_AXIS] != c.horizontalAxis)
+                        CartesianTransform(dataTransform).setAxis(
+                            CartesianTransform.HORIZONTAL_AXIS,c.horizontalAxis);
+            }
+
+            if (!_verticalAxis)
+            {
+                if (c.secondSeries.indexOf(this) != -1 && c.secondVerticalAxis)
+                {
+                    if (dataTransform.axes[CartesianTransform.VERTICAL_AXIS] != c.secondVerticalAxis)
+                        CartesianTransform(dataTransform).setAxis(
+                            CartesianTransform.VERTICAL_AXIS,c.secondVerticalAxis);
+                }
+                else if (dataTransform.axes[CartesianTransform.VERTICAL_AXIS] != c.verticalAxis)
+                        CartesianTransform(dataTransform).setAxis(
+                            CartesianTransform.VERTICAL_AXIS, c.verticalAxis);
+            }
+        }
+        dataTransform.elements = [this];
+    }
+
+    /**
+     *  @private
+     */
+    override protected function updateDisplayList(unscaledWidth:Number,
+                                                  unscaledHeight:Number):void
+    {
+        super.updateDisplayList(unscaledWidth, unscaledHeight);
+
+        var i:int;
+        var v:AreaSeriesItem;
+        var elementBounds:Array /* of Rectangle */;
+
+        if (!_areaRenderer)
+        {
+            var asClass:IFactory = getStyle("areaRenderer");
+            _areaRenderer = asClass.newInstance();
+            if (_areaRenderer is ISimpleStyleClient)
+                (_areaRenderer as ISimpleStyleClient).styleName = this;
+            addChildAt(_areaRenderer as DisplayObject, 0);
+        }
+
+        var renderData:AreaSeriesRenderData =
+            transitionRenderData ?
+            AreaSeriesRenderData(transitionRenderData) :
+            _renderData;
+
+        var activeRenderCache:Array /* of AreaSeriesItem */ = renderData.filteredCache;
+
+        var pointRadius:Number;
+
+        if (renderData == transitionRenderData &&
+            transitionRenderData.elementBounds)
+        {
+            elementBounds = renderData.elementBounds;
+            sampleCount = elementBounds.length;
+            pointRadius = renderData.radius;
+
+            for (i = 0; i < sampleCount; i++)
+            {
+                rcBounds = elementBounds[i];
+                v = activeRenderCache[i];
+                v.x = (rcBounds.left + rcBounds.right) / 2;
+                v.y = rcBounds.top + pointRadius;
+                v.min = rcBounds.bottom;
+            }
+            _transition = true;
+        }
+        else if (_transition && minField == "" && renderData.elementBounds)
+        {
+            elementBounds = renderData.elementBounds;
+            sampleCount = elementBounds.length;
+            for (i = 0; i < sampleCount; i++)
+            {
+                v = activeRenderCache[i];
+                v.min = NaN;
+            }
+            _transition = false;
+        }
+
+        _areaRenderer.setActualSize(unscaledWidth, unscaledHeight);
+
+        (_areaRenderer as IDataRenderer).data = renderData;
+
+        var sampleCount:int = activeRenderCache.length;
+
+        var renderCache:Array /* of AreaSeriesItem */;
+        var rcBounds:Rectangle;
+
+        pointRadius = getStyle("radius");
+        if (isNaN(pointRadius))
+            pointRadius = 0;
+
+        if (pointRadius > 0)
+        {
+            _instanceCache.factory = getStyle("itemRenderer");
+            _instanceCache.count = sampleCount;
+            var instances:Array /* of IFlexDisplayObject */ = _instanceCache.instances;
+
+            var bSetData:Boolean = sampleCount > 0 &&
+                                   instances[0] is IDataRenderer;
+
+            var rc:Rectangle;
+            var inst:IFlexDisplayObject;
+
+            if (renderData == transitionRenderData &&
+                renderData.elementBounds)
+            {
+                elementBounds = renderData.elementBounds;
+                for (i = 0; i < sampleCount; i++)
+                {
+                    inst = instances[i];
+                    v = activeRenderCache[i];
+                    v.fill = fillFunction(v,i);
+                    if (!(v.fill))
+                        v.fill = defaultFillFunction(v,i);
+                    v.itemRenderer = inst;
+                    if (v.itemRenderer && (v.itemRenderer as Object).hasOwnProperty('invalidateDisplayList'))
+                        (v.itemRenderer as Object).invalidateDisplayList();
+                    if (inst)
+                    {
+                        if (bSetData)
+                            (inst as IDataRenderer).data = v;
+                        rc = elementBounds[i];
+                        inst.move(rc.left, rc.top);
+                        inst.setActualSize(rc.width, rc.height);
+                    }
+                }
+            }
+            else
+            {
+                for (i = 0; i < sampleCount; i++)
+                {
+                    v = activeRenderCache[i];
+
+                    inst = instances[i];
+                    v.fill = fillFunction(v,i);
+                    if (!(v.fill))
+                        v.fill = defaultFillFunction(v,i);
+                    v.itemRenderer = inst;
+                    if (v.itemRenderer && (v.itemRenderer as Object).hasOwnProperty('invalidateDisplayList'))
+                        (v.itemRenderer as Object).invalidateDisplayList();
+                    if (inst)
+                    {
+                        if (bSetData)
+                            (inst as IDataRenderer).data = v;
+                        rc = new Rectangle(v.x - pointRadius,
+                                           v.y - pointRadius,
+                                           2 * pointRadius, 2 * pointRadius);
+                        inst.move(rc.left, rc.top);
+                        inst.setActualSize(rc.width, rc.height);
+                    }
+                }
+                if (chart && allSeriesTransform && chart.chartState == 0)
+                    chart.updateAllDataTips();
+            }
+        }
+
+    }
+
+    /**
+     *  @private
+     */
+    override public function stylesInitialized():void
+    {
+        _localFills = getStyle('fills');
+        if (_localFills != null)
+        	_fillCount = _localFills.length;
+        else
+        	_fillCount = 0;
+        super.stylesInitialized();
+    }
+
+    /**
+     *  @private
+     */
+    override public function styleChanged(styleProp:String):void
+    {
+        super.styleChanged(styleProp);
+
+        var styles:String = "stroke fill";
+        if (styleProp == null || styleProp == "" ||
+            styles.indexOf(styleProp) != -1)
+        {
+            legendDataChanged();
+        }
+        styles = "fills"
+        if (styles.indexOf(styleProp)!=-1)
+        {
+            _localFills = getStyle('fills');
+            if (_localFills != null)
+        		_fillCount = _localFills.length;
+        	else
+        		_fillCount = 0;
+            legendDataChanged();
+        }
+        if (styleProp == "itemRenderer")
+        {
+        	_instanceCache.remove = true;
+            _instanceCache.discard = true;
+            _instanceCache.count = 0;
+            _instanceCache.discard = false;
+            _instanceCache.remove = false;
+        }
+        invalidateDisplayList();
+    }
+
+    //--------------------------------------------------------------------------
+    //
+    //  Overridden methods: ChartElement
+    //
+    //--------------------------------------------------------------------------
+
+    /**
+     *  @private
+     */
+    override public function describeData(dimension:String,
+                                          requiredFields:uint):Array /* of DataDescription */
+    {
+        validateData();
+
+        if (_renderData.cache.length == 0)
+            return [];
+
+        var description:DataDescription = new DataDescription();
+        description.boundedValues = null;
+
+        if (dimension == CartesianTransform.VERTICAL_AXIS)
+        {
+            extractMinMax(_renderData.cache, "yNumber", description);
+            if (_minField != "")
+                extractMinMax(_renderData.cache, "minNumber", description);
+
+            if ((requiredFields & DataDescription.REQUIRED_BOUNDED_VALUES) != 0)
+            {
+                // for performance reasons, we're assuming people are ok with clipping on the origin.
+                var dataMargin:Number = 0;
+                var stroke:IStroke = getStyle("lineStroke");
+                if (stroke)
+                    dataMargin = stroke.weight/2;
+                var radius:Number = getStyle("radius");
+                var renderer:Object = getStyle("itemRenderer");
+                if (radius > 0 && renderer)
+                {
+                    stroke = getStyle("stroke");
+                    if (stroke)
+                        radius += stroke.weight/2;
+
+                    dataMargin = Math.max(radius,dataMargin);
+                }
+                if (dataMargin > 0)
+                {
+                    description.boundedValues= [];
+                    description.boundedValues.push(new BoundedValue(description.max,0,dataMargin));
+                    description.boundedValues.push(new BoundedValue(description.min,dataMargin,0));
+                }
+            }
+        }
+        else if (dimension == CartesianTransform.HORIZONTAL_AXIS)
+        {
+            if (_xField != "")
+            {
+                if ((requiredFields & DataDescription.REQUIRED_MIN_INTERVAL) != 0)
+                {
+                    // if we need to know the min interval, then we rely on the cache being in order. So we need to sort it if it
+                    // hasn't already been sorted
+                    var cache:Array /* of AreaSeriesItem */ = _renderData.cache;
+                    if (_sortOnXField == false)
+                    {
+                        cache = _renderData.cache.concat();
+                        cache.sortOn("xNumber",Array.NUMERIC);
+                    }
+                    extractMinMax(cache,"xNumber",description,(0 != (requiredFields & DataDescription.REQUIRED_MIN_INTERVAL)));
+                }
+                else
+                {
+                    extractMinMax(_renderData.cache,"xNumber",description, (requiredFields & DataDescription.REQUIRED_MIN_INTERVAL) != 0);
+                }
+            }
+            else
+            {
+                description.min = _renderData.cache[0].xNumber;
+                description.max =
+                    _renderData.cache[_renderData.cache.length - 1].xNumber;
+                if ((requiredFields & DataDescription.REQUIRED_MIN_INTERVAL) != 0)
+                {
+                    extractMinInterval(_renderData.cache,"xNumber",description);
+                }
+            }
+        }
+        else
+        {
+            return [];
+        }
+
+        return [ description ];
+    }
+
+    /**
+     *  @private
+     */
+    override public function getAllDataPoints():Array /* of HitData */
+    {
+        if (!_renderData)
+            return [];
+        if (!(_renderData.filteredCache))
+            return [];
+
+        var itemArr:Array /* of AreaSeriesItem */ = [];
+        if (chart && chart.dataTipItemsSet && dataTipItems)
+            itemArr = dataTipItems;
+        else if (chart && chart.showAllDataTips && _renderData.filteredCache)
+            itemArr = _renderData.filteredCache;
+        else
+            itemArr = [];
+
+        var n:uint = itemArr.length;
+        var i:uint;
+        var result:Array /* of HitData */ = [];
+
+        for (i = 0; i < n; i++)
+        {
+            var v:AreaSeriesItem = itemArr[i];
+            if (_renderData.filteredCache.indexOf(v) == -1)
+            {
+                var itemExists:Boolean = false;
+                var m:int  = _renderData.filteredCache.length;
+                for (var j:int = 0; j < m; j++)
+                {
+                    if (v.item == _renderData.filteredCache[j].item)
+                    {
+                        v = _renderData.filteredCache[j];
+                        itemExists = true;
+                        break;
+                    }
+                }
+                if (!itemExists)
+                    continue;
+            }
+            if (v)
+            {
+                var hd:HitData = new HitData(createDataID(v.index),
+                                             Math.sqrt(0),
+                                             v.x, v.y, v);
+                hd.contextColor = GraphicsUtilities.colorFromFill(getStyle("areaFill"));
+
+                hd.dataTipFunction = formatDataTip;
+                result.push(hd);
+            }
+        }
+        return result;
+    }
+
+    /**
+     *  @private
+     */
+    override public function findDataPoints(x:Number, y:Number,
+                                            sensitivity:Number):Array /* of HitData */
+    {
+        // esg, 8/7/06: if your mouse is over a series when it gets added and displayed for the first time, this can get called
+        // before updateData, and before and render data is constructed. The right long term fix is to make sure a stubbed out
+        // render data is _always_ present, but that's a little disruptive right now.
+        if (interactive == false || !_renderData)
+            return [];
+
+        var pr:Number = getStyle("radius");
+        var minDist2:Number = pr + sensitivity;
+        minDist2 *= minDist2;
+        var minItem:AreaSeriesItem;
+        var minIndex:int;
+        var pr2:Number = pr * pr;
+
+        var n:int = _renderData.filteredCache.length;
+
+        if (n == 0)
+            return [];
+        if (sortOnXField == true)
+        {
+            var low:Number = 0;
+            var high:Number = n;
+            var cur:Number = Math.floor((low + high) / 2);
+
+            while (true)
+            {
+                var v:AreaSeriesItem = _renderData.filteredCache[cur];
+
+                if (!isNaN(v.yNumber))
+                {
+                    var dist:Number = (v.x - x) * (v.x - x) +
+                                      (v.y - y) * (v.y - y);
+                    if (dist <= minDist2)
+                    {
+                        minDist2 = dist;
+                        minItem = v;
+                        minIndex = cur;
+                    }
+                }
+            	var a:Number;
+            	var b:Number;
+            	if(dataTransform && dataTransform.getAxis(CartesianTransform.HORIZONTAL_AXIS) is NumericAxis &&
+        		(dataTransform.getAxis(CartesianTransform.HORIZONTAL_AXIS) as NumericAxis).direction == "inverted")
+        		{
+        			a = x;
+        			b = v.x;
+        		}
+        		else
+        		{
+        			a = v.x;
+        			b = x;
+        		}
+                if (a < b)
+                {
+                    low = cur;
+                    cur = Math.floor((low + high) / 2);
+                    if (cur == low)
+                        break;
+                }
+                else
+                {
+                    high = cur;
+                    cur = Math.floor((low + high) / 2);
+                    if (cur == high)
+                        break;
+                }
+            }
+        }
+        else
+        {
+            var i:uint;
+            for (i = 0; i < n; i++)
+            {
+               v = _renderData.filteredCache[i];
+               if (!isNaN(v.yNumber) && !isNaN(v.xNumber))
+                {
+                   dist = (v.x  - x)*(v.x  - x) + (v.y - y)*(v.y -y);
+                   if (dist <= minDist2)
+                   {
+                       minDist2 = dist;
+                       minItem = v;
+                   }
+                }
+           }
+        }
+
+        if (minItem)
+        {
+            var hd:HitData = new HitData(createDataID(minItem.index),
+                                         Math.sqrt(minDist2),
+                                         minItem.x, minItem.y, minItem);
+            hd.contextColor = GraphicsUtilities.colorFromFill(getStyle("areaFill"));
+
+            hd.dataTipFunction = formatDataTip;
+            return [ hd ];
+        }
+
+        return [];
+    }
+
+    /**
+     *  @private
+     */
+    override public function dataToLocal(... dataValues):Point
+    {
+        var data:Object = {};
+        var da:Array /* of Object */= [ data ];
+        var n:int = dataValues.length;
+
+        if (n > 0)
+        {
+            data["d0"] = dataValues[0];
+            dataTransform.getAxis(CartesianTransform.HORIZONTAL_AXIS).
+                mapCache(da, "d0", "v0");
+        }
+
+        if (n > 1)
+        {
+            data["d1"] = dataValues[1];
+            dataTransform.getAxis(CartesianTransform.VERTICAL_AXIS).
+                mapCache(da, "d1", "v1");
+        }
+
+        dataTransform.transformCache(da,"v0","s0","v1","s1");
+
+        return new Point(data.s0 + this.x,
+                         data.s1 + this.y);
+    }
+
+    /**
+     *  @private
+     */
+    override public function localToData(v:Point):Array /* of Object */
+    {
+        var values:Array /* of Object */ = dataTransform.invertTransform(
+                                            v.x - this.x,
+                                            v.y - this.y);
+        return values;
+    }
+
+    //--------------------------------------------------------------------------
+    //
+    //  Overridden methods: Series
+    //
+    //--------------------------------------------------------------------------
+
+	/**
+     *  @inheritDoc
+     *
+     *  @langversion 3.0
+     *  @playerversion Flash 9
+     *  @playerversion AIR 1.1
+     *  @productversion Flex 3
+     */
+    override protected function invalidateData(invalid:Boolean=true):void
+    {
+        if (_stacker)
+            _stacker.invalidateStacking();
+        super.invalidateData(invalid);
+    }
+
+    /**
+     *  @inheritDoc
+     *
+     *  @langversion 3.0
+     *  @playerversion Flash 9
+     *  @playerversion AIR 1.1
+     *  @productversion Flex 3
+     */
+    override protected function invalidateMapping(invalid:Boolean=true):void
+    {
+        if (_stacker)
+            _stacker.invalidateStacking();
+        super.invalidateMapping(invalid);
+    }
+
+    /**
+     *  @private
+     */
+    override protected function updateData():void
+    {
+        if (_stacker)
+        {
+            _stacker.stack();
+            super.updateData();
+            return;
+        }
+        _stacked = false;
+
+        var renderDataType:Class = this.renderDataType;
+        _renderData = new renderDataType(this);
+
+        _renderData.cache = [];
+
+        if (cursor)
+        {
+            cursor.seek(CursorBookmark.FIRST);
+            var i:int = 0;
+            var itemType:Class = this.itemType;
+            while (!cursor.afterLast)
+            {
+                _renderData.cache[i] =
+                    new itemType(this, cursor.current, i);
+                i++;
+                cursor.moveNext();
+            }
+
+            cacheDefaultValues(_yField, _renderData.cache, "yValue");
+
+            cacheIndexValues(_xField, _renderData.cache, "xValue");
+
+            if (_minField != "")
+                cacheNamedValues(_minField, _renderData.cache, "minValue");
+        }
+        if(dataTransform && dataTransform.getAxis(CartesianTransform.VERTICAL_AXIS) is NumericAxis &&
+			!(dataTransform.getAxis(CartesianTransform.VERTICAL_AXIS) is DateTimeAxis) &&
+        	(dataTransform.getAxis(CartesianTransform.VERTICAL_AXIS) as NumericAxis).direction == "inverted")
+        	_renderData.cache = reverseYValues(_renderData.cache);
+        if(dataTransform && dataTransform.getAxis(CartesianTransform.HORIZONTAL_AXIS) is NumericAxis &&
+        	!(dataTransform.getAxis(CartesianTransform.HORIZONTAL_AXIS) is DateTimeAxis) &&
+        	(dataTransform.getAxis(CartesianTransform.HORIZONTAL_AXIS) as NumericAxis).direction == "inverted")
+        	_renderData.cache = reverseXValues(_renderData.cache);
+        super.updateData();
+    }
+
+    /**
+     *  @private
+     */
+    override protected function updateMapping():void
+    {
+        dataTransform.getAxis(CartesianTransform.HORIZONTAL_AXIS).mapCache(
+            _renderData.cache, "xValue", "xNumber", (_xField == ""));
+
+        dataTransform.getAxis(CartesianTransform.VERTICAL_AXIS).mapCache(
+            _renderData.cache, "yValue", "yNumber");
+
+        if (_minField != "" || _stacked)
+        {
+            dataTransform.getAxis(CartesianTransform.VERTICAL_AXIS).mapCache(
+                _renderData.cache, "minValue", "minNumber");
+        }
+
+        if (_xField != "" && _sortOnXField)
+            _renderData.cache.sortOn("xNumber",Array.NUMERIC);
+
+        super.updateMapping();
+    }
+
+    /**
+     *  @private
+     */
+    override protected function updateFilter():void
+    {
+        _renderData.filteredCache = filterFunction(_renderData.cache);
+
+        super.updateFilter();
+    }
+
+    /**
+     *  @private
+     */
+    override protected function updateTransform():void
+    {
+        if (dataProvider == null || _renderData.filteredCache.length == 0)
+            return;
+
+        dataTransform.transformCache(
+            _renderData.filteredCache, "xNumber", "x", "yNumber", "y");
+
+        var baseVal:Number = dataTransform.getAxis(CartesianTransform.VERTICAL_AXIS).baseline;
+        var stub:Array /* of Object */ = [ { yNumber: baseVal } ];
+        dataTransform.transformCache(stub, null, null, "yNumber", "y");
+        _renderData.renderedBase = stub[0].y;
+
+        if (_minField != "" || _stacked)
+        {
+            dataTransform.transformCache(
+                _renderData.filteredCache,null,null,"minNumber","min");
+        }
+
+        super.updateTransform();
+        allSeriesTransform = true;
+
+        if (chart && chart is CartesianChart)
+        {
+            var cChart:CartesianChart = CartesianChart(chart);
+            var n:int = cChart.series.length;
+
+            for (var i:int = 0; i < n; i++)
+            {
+                if (cChart.getSeriesTransformState(cChart.series[i]))
+                    allSeriesTransform = false;
+            }
+
+        	n = cChart.secondSeries.length;
+            for (i = 0; i < n; i++)
+            {
+                if (cChart.getSeriesTransformState(cChart.secondSeries[i]))
+                    allSeriesTransform = false;
+            }
+            if (allSeriesTransform)
+                cChart.measureLabels();
+        }
+    }
+
+    /**
+     *  @private
+     */
+    override public function getElementBounds(renderData:Object):void
+    {
+        var cache:Array /* of AreaSeriesItem */ = renderData.filteredCache;
+
+        var rb:Array /* of Rectangle */ = [];
+
+        var sampleCount:int = cache.length;
+
+        if (sampleCount)
+        {
+            var pointRadius:Number = getStyle("radius");
+            if (isNaN(pointRadius))
+                pointRadius = 0;
+
+            var v:AreaSeriesItem = cache[0];
+            var maxBounds:Rectangle = new Rectangle(v.x, v.y, 0, 0);
+            var i:int;
+            var b:Rectangle;
+
+            if (minField == "")
+            {
+                var base:Number = renderData.renderedBase;
+                maxBounds.bottom = base;
+
+                for (i = 0; i < sampleCount; i++)
+                {
+                    v = cache[i];
+
+                    b = new Rectangle(v.x - pointRadius,
+                                      v.y - pointRadius,
+                                      2 * pointRadius,
+                                      base - (v.y - pointRadius));
+
+                    maxBounds.left = Math.min(maxBounds.left, b.left);
+                    maxBounds.top = Math.min(maxBounds.top, b.top);
+                    maxBounds.right = Math.max(maxBounds.right, b.right);
+
+                    rb[i] = b;
+                }
+            }
+            else
+            {
+                for (i = 0; i < sampleCount; i++)
+                {
+                    v = cache[i];
+
+                    var top:Number = v.y-pointRadius;
+                    var bottom:Number = v.min;
+                    var min:Number = Math.min(top,bottom);
+
+                    b = new Rectangle(v.x - pointRadius, min,
+                                      2 * pointRadius,
+                                      Math.max(top, bottom) - min);
+                    maxBounds.left = Math.min(maxBounds.left, b.left);
+                    maxBounds.top = Math.min(maxBounds.top, b.top);
+                    maxBounds.right = Math.max(maxBounds.right, b.right);
+                    maxBounds.bottom = Math.max(maxBounds.bottom, b.bottom);
+
+                    rb[i] = b;
+                }
+            }
+        }
+        else
+        {
+            maxBounds = new Rectangle();
+        }
+
+        renderData.elementBounds = rb;
+        renderData.bounds =  maxBounds;
+    }
+
+    /**
+     *  @private
+     */
+    override public function beginInterpolation(sourceRenderData:Object,
+                                                destRenderData:Object):Object
+    {
+        var interpolatedFields:Object = { x: true, y: true };
+        if (minField != "")
+            interpolatedFields["min"] = true;
+
+        var idata:Object = initializeInterpolationData(
+            sourceRenderData.cache, destRenderData.filteredCache,
+            interpolatedFields, itemType,
+            { sourceRenderData: sourceRenderData,
+              destRenderData: destRenderData });
+
+        var interpolationRenderData:AreaSeriesRenderData =
+            AreaSeriesRenderData(destRenderData.clone());
+
+        interpolationRenderData.filteredCache =
+            interpolationRenderData.cache = idata.cache;
+
+        transitionRenderData = interpolationRenderData;
+
+        return idata;
+    }
+
+    /**
+     *  @private
+     */
+    override protected function getMissingInterpolationValues(
+                                    sourceProps:Object, srcCache:Array /* of AreaSeriesItem */,
+                                    destProps:Object, destCache:Array /* of AreaSeriesItem */,
+                                    index:Number, customData:Object):void
+    {
+        for (var p:String in sourceProps)
+        {
+            var src:Number = sourceProps[p];
+            var dst:Number = destProps[p];
+
+            if (isNaN(src))
+            {
+                if (srcCache.length == 0)
+                {
+                    sourceProps[p] = p == "x" ?
+                                            dst :
+                                            unscaledHeight;
+                }
+                else
+                {
+                    sourceProps[p] =
+                        findClosestValidValue(index,p,srcCache);
+                }
+            }
+
+            if (isNaN(dst))
+            {
+                if (srcCache.length == 0)
+                {
+                    destProps[p] = p == "x" ?
+                                          src :
+                                          unscaledHeight;
+                }
+                else
+                {
+                    destProps[p] =
+                        findClosestValidValue(index,p,destCache);
+                }
+            }
+        }
+    }
+
+    /**
+     * @private
+     */
+    override protected function defaultFilterFunction(cache:Array /*of AreaSeriesItem */ ):Array /*of AreaSeriesItem*/
+    {
+    	var filteredCache:Array /*of AreaSeriesItem*/ = [];
+    	if (filterDataValues == "outsideRange")
+        {
+            filteredCache = cache.concat();
+
+            dataTransform.getAxis(CartesianTransform.HORIZONTAL_AXIS).filterCache(
+                filteredCache, "xNumber", "xFilter");
+            stripNaNs(filteredCache, "xFilter");
+
+            dataTransform.getAxis(CartesianTransform.VERTICAL_AXIS).filterCache(
+                filteredCache, "yNumber", "yFilter");
+            stripNaNs(filteredCache, "yFilter");
+
+            if (_minField != "" || _stacked)
+            {
+                dataTransform.getAxis(CartesianTransform.VERTICAL_AXIS).filterCache(
+                    filteredCache, "minNumber", "minFilter");
+                stripNaNs(filteredCache, "minFilter");
+            }
+        }
+        else if (filterDataValues == "nulls")
+        {
+        	filteredCache = cache.concat();
+        	stripNaNs(filteredCache, "xNumber");
+            stripNaNs(filteredCache, "yNumber");
+
+            if (_minField != "" || _stacked)
+                stripNaNs(filteredCache, "minNumber");
+        }
+        else if (filterDataValues == "none")
+        {
+            filteredCache = cache;
+        }
+        return filteredCache;
+    }
+
+	//--------------------------------------------------------------------------
+    //
+    //  Methods
+    //
+    //--------------------------------------------------------------------------
+
+    /**
+     * @private
+     */
+    private function defaultFillFunction(element:AreaSeriesItem,i:Number):IFill
+    {
+        if (_fillCount!=0)
+            return(GraphicsUtilities.fillFromStyle(_localFills[i % _fillCount]));
+        else
+            return(GraphicsUtilities.fillFromStyle(getStyle("fill")));
+    }
+
+    /**
+     *  @inheritDoc
+     *
+     *  @langversion 3.0
+     *  @playerversion Flash 9
+     *  @playerversion AIR 1.1
+     *  @productversion Flex 3
+     */
+    public function stack(stackedXValueDictionary:Dictionary, previousElement:IStackable):Number
+    {
+        var i:uint = 0;
+        var itemClass:Class = itemType;
+        var chartItem:AreaSeriesItem;
+        var haveYField:Boolean = (_yField != null && _yField != "");
+        var haveXField:Boolean = (_xField != null && _xField != "");
+        var maxValue:Number = 0;
+
+        var renderDataType:Class = this.renderDataType;
+        _renderData= new renderDataType(this);
+        _renderData.cache = [];
+        _renderData.filteredCache = [];
+
+        if (cursor)
+        {
+            cursor.seek(CursorBookmark.FIRST);
+            while (!cursor.afterLast)
+            {
+                var dataItem:* = cursor.current;
+                _renderData.cache[i] = chartItem = new itemClass(this,dataItem,i);
+
+                var xValue:*;
+                var yValue:Number;
+                if (dataFunction != null)
+                {
+                    xValue = dataFunction(this,dataItem,'xValue');
+                    yValue = dataFunction(this,dataItem,'yValue');
+                }
+                else
+                {
+                    xValue = (haveXField)? dataItem[_xField]:i;
+                    yValue = Number((haveYField)? dataItem[_yField]:dataItem);
+                }
+                if(dataTransform && dataTransform.getAxis(CartesianTransform.VERTICAL_AXIS) is NumericAxis &&
+        			(dataTransform.getAxis(CartesianTransform.VERTICAL_AXIS) as NumericAxis).direction == "inverted")
+                	yValue = -yValue;
+                if (xValue == null)
+                {
+                	i++;
+                	cursor.moveNext();
+                    continue;
+                }
+                // accessing a property on an XML node always returns a new XMLList. Which means
+                // that using hte XMLList as a dictionary key to store and retrieve
+                // values in a dictionary won't work.  So we need to convert XMLLists to string values
+                // first.
+                if (xValue is XMLList)
+                    xValue = xValue.toString();
+                if (isNaN(yValue))
+                    yValue = 0;
+
+                var stackedValue:Object = stackedXValueDictionary[xValue];
+                if (stackedValue == null)
+                {
+                    stackedValue = 0;
+                }
+                if (yValue == 0)
+                {
+                	chartItem.yValue = 0;
+                	chartItem.minValue = 0;
+                }
+                else
+                {
+                	chartItem.yValue = yValue + stackedValue;
+                	chartItem.minValue = stackedValue;
+                }
+                yValue += stackedValue;
+                //chartItem.minValue = stackedValue;
+                stackedXValueDictionary[xValue] = yValue;
+                //chartItem.yValue = yValue;
+                chartItem.xValue = xValue;
+                maxValue = Math.max(maxValue,yValue);
+
+                i++;
+                cursor.moveNext();
+            }
+        }
+
+        invalidateMapping(true);
+        invalidateData(false);
+        _stacked = (previousElement != null);
+        return maxValue;
+    }
+
+    /**
+     *  @inheritDoc
+     *
+     *  @langversion 3.0
+     *  @playerversion Flash 9
+     *  @playerversion AIR 1.1
+     *  @productversion Flex 3
+     */
+    public function stackAll(stackedPosXValueDictionary:Dictionary, stackedNegXValueDictionary:Dictionary, previousElement:IStackable2):Object
+    {
+        var i:uint = 0;
+        var itemClass:Class = itemType;
+        var chartItem:AreaSeriesItem;
+        var haveYField:Boolean = (_yField != null && _yField != "");
+        var haveXField:Boolean = (_xField != null && _xField != "");
+        var maxValue:Number = 0;
+        var minValue:Number = 0;
+
+        var renderDataType:Class = this.renderDataType;
+        _renderData= new renderDataType(this);
+        _renderData.cache = [];
+        _renderData.filteredCache = [];
+
+        if (cursor)
+        {
+            cursor.seek(CursorBookmark.FIRST);
+            while (!cursor.afterLast)
+            {
+                var dataItem:* = cursor.current;
+                _renderData.cache[i] = chartItem = new itemClass(this,dataItem,i);
+
+                var xValue:*;
+                var yValue:Number;
+                if (dataFunction != null)
+                {
+                    xValue = dataFunction(this,dataItem,'xValue');
+                    yValue = dataFunction(this,dataItem,'yValue');
+                }
+                else
+                {
+                    xValue = (haveXField)? dataItem[_xField]:i;
+                    yValue = Number((haveYField)? dataItem[_yField]:dataItem);
+                }
+                if(dataTransform && dataTransform.getAxis(CartesianTransform.VERTICAL_AXIS) is NumericAxis &&
+        			(dataTransform.getAxis(CartesianTransform.VERTICAL_AXIS) as NumericAxis).direction == "inverted")
+                	yValue = -yValue;
+                if (xValue == null)
+                {
+                	i++;
+                	cursor.moveNext();
+                    continue;
+                }
+                // accessing a property on an XML node always returns a new XMLList. Which means
+                // that using hte XMLList as a dictionary key to store and retrieve
+                // values in a dictionary won't work.  So we need to convert XMLLists to string values
+                // first.
+                if (xValue is XMLList)
+                    xValue = xValue.toString();
+                if (isNaN(yValue))
+                    yValue = 0;
+
+                var stackedValue:Object
+                if (yValue >= 0)
+                     stackedValue = stackedPosXValueDictionary[xValue];
+                else
+                    stackedValue = stackedNegXValueDictionary[xValue];
+                if (stackedValue == null)
+                {
+                    stackedValue = 0;
+                }
+
+                if (yValue == 0)
+                {
+                	chartItem.yValue = 0;
+                	chartItem.minValue = 0;
+                }
+                else
+                {
+                	chartItem.yValue = yValue + stackedValue;
+                	chartItem.minValue = stackedValue;
+                }
+
+                yValue += stackedValue;
+                //chartItem.minValue = stackedValue;
+                if (yValue >= 0)
+                {
+                    stackedPosXValueDictionary[xValue] = yValue;
+                    maxValue = Math.max(maxValue,yValue);
+                }
+                else if (yValue < 0)
+                {
+                    stackedNegXValueDictionary[xValue] = yValue;
+                    minValue = Math.min(minValue, yValue);
+                }
+                //chartItem.yValue = yValue;
+                chartItem.xValue = xValue;
+
+                i++;
+                cursor.moveNext();
+            }
+        }
+
+        invalidateMapping(true);
+        invalidateData(false);
+        _stacked = (previousElement != null);
+        return ({ maxValue:maxValue, minValue:minValue });
+    }
+
+    /**
+     *  The stack totals for the series.
+     *  @param totals The totals to set.
+     *
+     *  @langversion 3.0
+     *  @playerversion Flash 9
+     *  @playerversion AIR 1.1
+     *  @productversion Flex 3
+     */
+    public function set stackTotals(value:Dictionary):void
+    {
+        if (value)
+        {
+            var cache:Array /* of AreaSeriesItem */ = _renderData.cache;
+            var n:int = _renderData.cache.length;
+            for (var i:int = 0; i < n; i++)
+            {
+                var item:AreaSeriesItem = cache[i];
+                var total:Number = value[item.xValue];
+                item.yValue = Math.min(100, Number(item.yValue) / total * 100);
+                item.minValue =
+                    Math.min(100, Number(item.minValue) / total * 100);
+            }
+        }
+    }
+
+    /**
+     *  Customizes the item renderer instances used to represent the chart. This method is called
+     *  automatically whenever a new item renderer is needed while the chart is being rendered.
+     *  You can override this method to add your own customization as necessary.
+     *
+     *  @param instance The new item renderer instance that is being created.
+     *  @param cache The InstanceCache that is used to manage the item renderer instances.
+     *
+     *  @langversion 3.0
+     *  @playerversion Flash 9
+     *  @playerversion AIR 1.1
+     *  @productversion Flex 3
+     */
+    protected function applyItemRendererProperties(instance:DisplayObject,
+                                                   cache:InstanceCache):void
+    {
+        if (instance is ISimpleStyleClient)
+            ISimpleStyleClient(instance).styleName = this;
+    }
+
+    /**
+     *  @private
+     */
+    private function formatDataTip(hd:HitData):String
+    {
+        var dt:String = "";
+        var n:String = displayName;
+        if (n && n != "")
+            dt += ""+ n + "
";
+
+        var xName:String = dataTransform.getAxis(CartesianTransform.HORIZONTAL_AXIS).displayName;
+        if (xName == "")
+            xName = xField;
+        if (xName != "")
+            dt += "" + xName + ": ";
+
+        var item:AreaSeriesItem = AreaSeriesItem(hd.chartItem);
+        var lowItem:AreaSeriesItem = (minField != "") ?
+                                     item :
+                                     null;
+        dt += dataTransform.getAxis(CartesianTransform.HORIZONTAL_AXIS).formatForScreen(item.xValue) + "\n";
+
+        var yName:String = dataTransform.getAxis(CartesianTransform.VERTICAL_AXIS).displayName;
+
+        if (!lowItem)
+        {
+            if (yName != "")
+                dt += "" + yName + ": ";
+            dt += dataTransform.getAxis(CartesianTransform.VERTICAL_AXIS).formatForScreen(item.yValue) + "\n";
+        }
+        else
+        {
+            if (yName != "")
+                dt += "" + yName + " (high): ";
+            else
+                dt += "high: ";
+            dt += dataTransform.getAxis(CartesianTransform.VERTICAL_AXIS).formatForScreen(item.yValue) + "\n";
+
+            if (yName != "")
+                dt += "" + yName + " (low): ";
+            else
+                dt += "low: ";
+            dt += dataTransform.getAxis(CartesianTransform.VERTICAL_AXIS).formatForScreen(lowItem.yValue) + "\n";
+        }
+
+        return dt;
+    }
+
+    /**
+     *  @private
+     */
+    private function findClosestValidValue(index:uint, propName:String,
+                                           cache:Array /* of AreaSeriesItem */):Number
+    {
+        var lastValidIndex:int = index;
+        var value:Number;
+
+        if (lastValidIndex >= cache.length)
+            lastValidIndex = cache.length - 1;
+
+        while (lastValidIndex >= 0 && isNaN(cache[lastValidIndex][propName]))
+        {
+            lastValidIndex--;
+        }
+
+        if (lastValidIndex >= 0)
+            value =  cache[lastValidIndex][propName]
+
+        if (isNaN(value))
+        {
+            lastValidIndex = index + 1;
+            var cachelen:int = cache.length;
+            while (lastValidIndex < cachelen &&
+                   isNaN(cache[lastValidIndex][propName]))
+            {
+                lastValidIndex++;
+            }
+            if (lastValidIndex < cachelen)
+            {
+                value = cache[lastValidIndex][propName] +
+                        0.01 * (lastValidIndex - index);
+            }
+        }
+
+        return value + 0.01 * (lastValidIndex - index);
+    }
+
+    private function reverseYValues(cache:Array):Array
+    {
+    	var i:int = 0;
+        var n:int = cache.length;
+        for(i = 0; i < n ; i++)
+        {
+        	cache[i]["yValue"] = -(cache[i]["yValue"]);
+        	if(_minField != "")
+        		cache[i]["minValue"] = -(cache[i]["minValue"]);
+        }
+    	return cache;
+    }
+
+    private function reverseXValues(cache:Array):Array
+    {
+    	var i:int = 0;
+        var n:int = cache.length;
+        for(i = 0; i < n ; i++)
+        {
+        	cache[i]["xValue"] = -(cache[i]["xValue"]);
+        }
+    	return cache;
+    }
+}
+
+}
+
+////////////////////////////////////////////////////////////////////////////////
+//
+//  Helper class: LineSeriesLegendMarker
+//
+////////////////////////////////////////////////////////////////////////////////
+
+
+import flash.display.Graphics;
+import mx.charts.series.AreaSeries;
+import mx.graphics.IStroke;
+import mx.graphics.IFill;
+import mx.graphics.Stroke;
+import flash.geom.Rectangle;
+import mx.charts.chartClasses.GraphicsUtilities;
+import mx.graphics.LinearGradientStroke;
+import mx.skins.ProgrammaticSkin;
+
+/**
+ *  @private
+ */
+class AreaSeriesLegendMarker extends ProgrammaticSkin
+{
+    //--------------------------------------------------------------------------
+    //
+    //  Constructor
+    //
+    //--------------------------------------------------------------------------
+
+    /**
+     *  Constructor.
+     *
+     *  @langversion 3.0
+     *  @playerversion Flash 9
+     *  @playerversion AIR 1.1
+     *  @productversion Flex 3
+     */
+    public function AreaSeriesLegendMarker()
+    {
+        super();
+    }
+
+    //--------------------------------------------------------------------------
+    //
+    //  Overridden methods
+    //
+    //--------------------------------------------------------------------------
+
+    /**
+     *  @private
+     */
+    override protected function updateDisplayList(unscaledWidth:Number,
+                                                  unscaledHeight:Number):void
+    {
+        super.updateDisplayList(unscaledWidth, unscaledHeight);
+
+        var fill:IFill = GraphicsUtilities.fillFromStyle(getStyle("areaFill"));
+        var stroke:IStroke = getStyle("areaStroke");
+
+        var w:Number = stroke ? 0.5 : 0;
+
+        var rc:Rectangle = new Rectangle(w, w, width - 2 * w, height - 2 * w);
+
+        var g:Graphics = graphics;
+        g.clear();
+        g.moveTo(rc.left,rc.top);
+        var strokeWeight:Number;
+        if (stroke)
+        {
+            strokeWeight = stroke.weight;
+            stroke.weight = 1;
+            stroke.apply(g,null,null);
+        }
+        if (fill)
+            fill.begin(g,rc,null);
+        g.lineTo(rc.right,rc.top);
+        g.lineTo(rc.right,rc.bottom);
+        g.lineTo(rc.left,rc.bottom);
+        g.lineTo(rc.left,rc.top);
+        if (fill)
+            fill.end(g);
+        if (stroke)
+            stroke.weight = strokeWeight;
+    }
+}


Transferred from the Adobe Open Source Subversion Repository

Revision: 17738
Author:   doug.lee@ssbbartgroup.com
Date:     2010-09-16T23:02:09.205256Z

Log Message:
-----------
AccImpl change: Fixed the setting of STATE_SYSTEM_FOCUSED on children of complex components, like lists, so that the default behavior is to avoid setting it (the component's own AccImpl code should do it) rather than setting it on every item, as was being done before.

QE notes:
Doc notes:
Bugs:
Reviewer:
Tests run: checkin
Is noteworthy for integration: no

Modified Paths:
--------------
<path kind="dir" action="M">/private/flex/sdk/branches/hero_private</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/framework/src/mx/accessibility/AccImpl.as</path>

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

--- frameworks/projects/framework/src/mx/accessibility/AccImpl.as
+++ frameworks/projects/framework/src/mx/accessibility/AccImpl.as
@@ -155,7 +155,8 @@
  *
STATE_SYSTEM_UNAVAILABLE
  *    (when enabled is false on this component or any ancestor)

  *
STATE_SYSTEM_FOCUSABLE

- *
STATE_SYSTEM_FOCUSED (when focused)

+ *
STATE_SYSTEM_FOCUSED (when the component itself is focused,
+ *    not set for any subparts the component may have)

  *

  *  Note that by default all components are assumed to be focusable
  *  and thus the accessibility implementation classes for non-focusable
@@ -627,7 +628,12 @@
         {
             accState |= AccConst.STATE_SYSTEM_FOCUSABLE

-            if (UIComponent(master) == UIComponent(master).getFocus())
+            // This sets STATE_SYSTEM_FOCUSED appropriately for simple components
+			// and top levels of complex ones, but not for any subparts.
+			// That has to be done in the component's get_accState() method.
+            // example: listItems in a list.
+            if (UIComponent(master) == UIComponent(master).getFocus()
+            && childID == 0)
                 accState |= AccConst.STATE_SYSTEM_FOCUSED;
         }


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@1260935 13f79535-47bb-0310-9956-ffa450edef68

--- frameworks/projects/framework/src/mx/geom/RoundedRectangle.as
+++ frameworks/projects/framework/src/mx/geom/RoundedRectangle.as
@@ -1,13 +1,3 @@
-////////////////////////////////////////////////////////////////////////////////
-//
-//  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.geom
 {


Transferred from the Adobe Open Source Subversion Repository

Revision: 7743
Author:   clucier@adobe.com
Date:     2009-06-11T13:53:10.203664Z

Log Message:
-----------
Moving away from using namespace qualifiers in most cases in the SDK.  We've run into a few cases now where the use of qualifiers in code that is called excessively can slow things down.
Bugs: SDK-21337
Reviewer: Ryan, Paul
QE Notes: None
Tests: Ran several random Mustella test groups, checkintests.

Modified Paths:
--------------
106 paths were modified

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

--- frameworks/projects/framework/src/mx/graphics/GradientBase.as
+++ frameworks/projects/framework/src/mx/graphics/GradientBase.as
@@ -137,8 +137,7 @@
         var oldValue:Number = _angle;
         _angle = value / 180 * Math.PI;

-        mx_internal::dispatchGradientChangedEvent(
-                            "angle", oldValue, _angle);
+        dispatchGradientChangedEvent("angle", oldValue, _angle);
     }

     //----------------------------------


Transferred from the Adobe Open Source Subversion Repository

Revision: 9419
Author:   aharui@adobe.com
Date:     2009-08-20T16:19:04.456854Z

Log Message:
-----------
2nd attempt to check in prototypes of ControlBars in Panel and Application, Spark Containers in Halo Navigators, Halo ViewStack in Spark ButtonBar.  APIs should match spec but are subject to change from PARB.  Skins are subject to tweaking after XD review

QE Notes: The following tests will fail and need updating:
gumbo/containers/Panel/Properties/Panel_Properties_position Panel_Properties_rotate
apollo/spark/components/Window/properties/window_properties_titleIcon_tests titleIcon_test8

Doc Notes: None
Bugs: None
Reviewer: Darrell, Glenn, Ryan
API Change: No
Is noteworthy for integration: No
tests: checkintests mustella/gumbo/components/Application, gumbo/components/ButtonBar, gumbo/containers/Panel, apollo/gumbo/spark/Window, containers/ViewStack, containers/Accordion,
states/Integration/TabNavApp, states/Reparent

Modified Paths:
--------------
<path kind="file" action="M">/flex/sdk/trunk/modules/compiler/src/java/flex2/compiler/mxml/builder/ComponentBuilder.java</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/airframework/src/spark/skins/spark/SparkChromeWindowedApplicationSkin.mxml</path>
<path kind="file" copyfrom-path="/flex/sdk/trunk/frameworks/projects/spark/src/spark/components/NavigatorChild.as" copyfrom-rev="9399" action="A">/flex/sdk/trunk/frameworks/projects/spark/src/spark/components/NavigatorChild.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/spark/src/spark/components/Panel.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/events/FlexEvent.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/spark/src/spark/components/ButtonBar.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/containers/ViewStack.as</path>
<path kind="file" action="D">/flex/sdk/trunk/frameworks/projects/spark/src/spark/core/IDeferredContentOwner.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/containers/Accordion.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/spark/src/spark/components/Application.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/core/Container.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/controls/NavBar.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/spark/src/spark/components/SkinnableContainer.as</path>
<path kind="file" action="M">/flex/sdk/trunk/modules/compiler/src/java/flex2/compiler_en.properties</path>
<path kind="file" copyfrom-path="/flex/sdk/trunk/frameworks/projects/framework/src/mx/core/INavigatable.as" copyfrom-rev="9399" action="A">/flex/sdk/trunk/frameworks/projects/framework/src/mx/core/INavigatable.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/spark-manifest.xml</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/spark/src/spark/skins/spark/PanelSkin.mxml</path>
<path kind="file" copyfrom-path="/flex/sdk/trunk/frameworks/projects/framework/src/mx/core/INavigatorContent.as" copyfrom-rev="9399" action="A">/flex/sdk/trunk/frameworks/projects/framework/src/mx/core/INavigatorContent.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/containers/TabNavigator.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/wireframe/src/spark/skins/wireframe/PanelSkin.mxml</path>
<path kind="file" copyfrom-path="/flex/sdk/trunk/frameworks/projects/framework/src/mx/core/IDeferredContentOwner.as" copyfrom-rev="9399" action="A">/flex/sdk/trunk/frameworks/projects/framework/src/mx/core/IDeferredContentOwner.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/spark/src/spark/skins/spark/ApplicationSkin.mxml</path>

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

--- frameworks/projects/spark/src/spark/components/Application.as
+++ frameworks/projects/spark/src/spark/components/Application.as
@@ -33,7 +33,9 @@
 import mx.managers.ISystemManager;
 import mx.styles.CSSStyleDeclaration;
 import mx.styles.StyleManager;
+import mx.utils.BitFlagUtil;
 import mx.utils.LoaderUtil;
+import spark.layouts.supportClasses.LayoutBase;

 use namespace mx_internal;

@@ -142,6 +144,22 @@

     //--------------------------------------------------------------------------
     //
+    //  Class constants
+    //
+    //--------------------------------------------------------------------------
+
+    /**
+     *  @private
+     */
+    private static const CONTROLS_PROPERTY_FLAG:uint = 1 << 0;
+
+    /**
+     *  @private
+     */
+    private static const LAYOUT_PROPERTY_FLAG:uint = 1 << 1;
+
+    //--------------------------------------------------------------------------
+    //
     //  Class properties
     //
     //--------------------------------------------------------------------------
@@ -308,6 +326,102 @@
             sm.stage.colorCorrection = value;
     }

+    /**
+     *  @private
+     *  Several properties are proxied to controlGroup.  However, when controlGroup
+     *  is not around, we need to store values set on SkinnableContainer.  This object
+     *  stores those values.  If controlGroup is around, the values are stored
+     *  on the controlGroup directly.  However, we need to know what values
+     *  have been set by the developer on the SkinnableContainer (versus set on
+     *  the controlGroup or defaults of the controlGroup) as those are values
+     *  we want to carry around if the controlGroup changes (via a new skin).
+     *  In order to store this info effeciently, controlGroupProperties becomes
+     *  a uint to store a series of BitFlags.  These bits represent whether a
+     *  property has been explicitely set on this SkinnableContainer.  When the
+     *  controlGroup is not around, controlGroupProperties is a typeless
+     *  object to store these proxied properties.  When controlGroup is around,
+     *  controlGroupProperties stores booleans as to whether these properties
+     *  have been explicitely set or not.
+     */
+    private var controlGroupProperties:Object = {};
+
+    //----------------------------------
+    //  controlGroup
+    //----------------------------------
+
+    [SkinPart(required="false")]
+
+    /**
+     *  The skin part that defines the appearance of the
+     *  control bar in the container.
+     *
+     *  @see spark.skins.spark.PanelSkin
+     *
+     *  @langversion 3.0
+     *  @playerversion Flash 10
+     *  @playerversion AIR 1.5
+     *  @productversion Flex 4
+     */
+    public var controlGroup:Group;
+
+    //----------------------------------
+    //  controls
+    //----------------------------------
+
+    [ArrayElementType("mx.core.IVisualElement")]
+
+    /**
+     *  The set of items that become the content of
+     *  the controlGroup
+     *
+     *  @langversion 3.0
+     *  @playerversion Flash 10
+     *  @playerversion AIR 1.5
+     *  @productversion Flex 4
+     */
+    public function set controls(value:Array):void
+    {
+        if (controlGroup)
+        {
+            controlGroup.mxmlContent = value;
+            controlGroupProperties = BitFlagUtil.update(controlGroupProperties as uint,
+                                                        CONTROLS_PROPERTY_FLAG, true);
+        }
+        else
+            controlGroupProperties.controls = value;
+    }
+
+    //----------------------------------
+    //  controlLayout
+    //----------------------------------
+
+    /**
+     *  An optional Layout assigned to the control bar.
+     *
+     *  @langversion 3.0
+     *  @playerversion Flash 10
+     *  @playerversion AIR 1.5
+     *  @productversion Flex 4
+     */
+    public function get controlLayout():LayoutBase
+    {
+        return (controlGroup)
+            ? controlGroup.layout
+            : controlGroupProperties.layout;
+    }
+
+    public function set controlLayout(value:LayoutBase):void
+    {
+        if (controlGroup)
+        {
+            controlGroup.layout = value;
+            controlGroupProperties = BitFlagUtil.update(controlGroupProperties as uint,
+                                                        LAYOUT_PROPERTY_FLAG, true);
+        }
+        else
+            controlGroupProperties.layout = value;
+    }
+
     //--------------------------------------------------------------------------
     //
     //  Compile-time pseudo-properties
@@ -738,6 +852,67 @@
         }
     }

+    /**
+     *  @private
+     */
+    override protected function partAdded(partName:String, instance:Object):void
+    {
+        super.partAdded(partName, instance);
+
+        if (instance == controlGroup)
+        {
+            // copy proxied values from controlGroupProperties (if set) to contentGroup
+            var newControlGroupProperties:uint = 0;
+
+            if (controlGroupProperties.controls !== undefined)
+            {
+                controlGroup.mxmlContent = controlGroupProperties.controls;
+                newControlGroupProperties = BitFlagUtil.update(newControlGroupProperties,
+                                                               CONTROLS_PROPERTY_FLAG, true);
+            }
+
+            if (controlGroupProperties.layout !== undefined)
+            {
+                controlGroup.layout = controlGroupProperties.layout;
+                newControlGroupProperties = BitFlagUtil.update(newControlGroupProperties,
+                                                               LAYOUT_PROPERTY_FLAG, true);
+            }
+
+            controlGroupProperties = newControlGroupProperties;
+        }
+    }
+
+    /**
+     *  @inheritDoc
+     *
+     *  @langversion 3.0
+     *  @playerversion Flash 10
+     *  @playerversion AIR 1.5
+     *  @productversion Flex 4
+     */
+    override protected function partRemoved(partName:String, instance:Object):void
+    {
+        super.partRemoved(partName, instance);
+
+        if (instance == controlGroup)
+        {
+            // copy proxied values from contentGroup (if explicitely set) to contentGroupProperties
+
+            var newControlGroupProperties:Object = {};
+
+            if (BitFlagUtil.isSet(controlGroupProperties as uint, CONTROLS_PROPERTY_FLAG))
+                newControlGroupProperties.controls = controlGroup.getMXMLContent();
+
+            if (BitFlagUtil.isSet(controlGroupProperties as uint, LAYOUT_PROPERTY_FLAG))
+                newControlGroupProperties.layout = controlGroup.layout;
+
+            controlGroupProperties = newControlGroupProperties;
+
+            controlGroup.mxmlContent = null;
+            controlGroup.layout = null;
+        }
+    }
+
     //----------------------------------
     //  unscaledHeight
     //----------------------------------


Superclass helper function

Superclass helper function

--- as3/xobjas3/src/com/rpath/xobj/XObjUtils.as
+++ as3/xobjas3/src/com/rpath/xobj/XObjUtils.as
@@ -191,7 +191,7 @@
         /**
          * Use our own version of getClassInfo to support various metadata
          * tags we use.  See ObjectUtil.getClassInfo for more info about
-         * the baisc functionality of this method.
+         * the basic functionality of this method.
          */
         public static function getClassInfo(obj:Object,
                                             excludes:Array = null,
@@ -422,6 +422,19 @@
             return result;
         }

+        public static function getSuperclasses(object:*):Array
+        {
+            var result:Array = [];
+            var classInfo:XML = DescribeTypeCache.describeType(object).typeDescription;
+
+            for each (var superClass:XML in classInfo.extendsClass)
+            {
+                result.push(getClassByName(superClass.@type));
+            }
+            return result;
+        }
+
+
         /**
          *  @private
          */


Fixed infobox page + scroller interaction

--- src/Displays/InfoboxPage.as
+++ src/Displays/InfoboxPage.as
@@ -16,6 +16,7 @@

 		public function setDimensions(Width:int, Height:int):void {
 			textArea = new FlxSprite().makeGraphic(Width, Height, 0xffffffff, true);
+			textArea.scrollFactor.x = textArea.scrollFactor.y = 0;
 		}

 		public function setLoc(X:int, Y:int):void {


Transferred from the Adobe Open Source Subversion Repository

Revision: 11436
Author:   dloverin@adobe.com
Date:     2009-11-04T18:27:10.565800Z

Log Message:
-----------
Unload style fix.

projects/framework/src/mx/managers/IPopUpManager.as
projects/framework/src/mx/managers/PopUpManager.as
projects/framework/src/mx/managers/PopUpManagerImpl.as
    Add moduleFactory parameter to PopUpManager.addPopUp() so the moduleFactory can be controlled separately from the parent.

projects/framework/src/mx/styles/CSSStyleDeclaration.as
    Test if overrides[styleProp] is undefined instead of non-zero.

QE notes: None.
Doc notes: None.
Bugs: SDK-23030
Reviewer: Alex
Tests run: checkintests, Managers/StyleManager, Managers/PopUpManager
Is noteworthy for integration: No.

Modified Paths:
--------------
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/managers/PopUpManager.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/styles/CSSStyleDeclaration.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/managers/IPopUpManager.as</path>

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

--- frameworks/projects/framework/src/mx/managers/IPopUpManager.as
+++ frameworks/projects/framework/src/mx/managers/IPopUpManager.as
@@ -14,6 +14,7 @@

 import flash.display.DisplayObject;
 import mx.core.IFlexDisplayObject;
+import mx.core.IFlexModuleFactory;

 [ExcludeClass]

@@ -29,7 +30,8 @@
 	function addPopUp(window:IFlexDisplayObject,
 			parent:DisplayObject,
 			modal:Boolean = false,
-			childList:String = null):void;
+			childList:String = null,
+            moduleFactory:IFlexModuleFactory = null):void;
 	function centerPopUp(popUp:IFlexDisplayObject):void;
 	function removePopUp(popUp:IFlexDisplayObject):void;
 	function bringToFront(popUp:IFlexDisplayObject):void;


Transferred from the Adobe Open Source Subversion Repository

Revision: 18323
Author:   smgilson@adobe.com
Date:     2010-10-26T17:50:12.524532Z

Log Message:
-----------
Fix invalid HTML in ASDoc comments for the [DiscouragedForProfile] metadata tag

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

Modified Paths:
--------------
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/spark/src/spark/components/NumericStepper.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/spark/src/spark/components/ComboBox.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/spark/src/spark/components/VSlider.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/spark/src/spark/components/TitleWindow.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/spark/src/spark/components/ToggleButton.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/spark/src/spark/components/Spinner.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/spark/src/spark/components/BorderContainer.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/spark/src/spark/components/FormHeading.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/spark/src/spark/components/VideoPlayer.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/spark/src/spark/components/DropDownList.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/framework/src/mx/controls/ProgressBar.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/framework/src/mx/controls/ToolTip.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/spark/src/spark/components/HSlider.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/spark/src/spark/components/TabBar.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/spark/src/spark/components/VideoDisplay.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/spark/src/spark/components/ButtonBarButton.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/spark/src/spark/components/Panel.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/spark/src/spark/components/ButtonBar.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/spark/src/spark/components/Form.as</path>

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

--- frameworks/projects/spark/src/spark/components/ToggleButton.as
+++ frameworks/projects/spark/src/spark/components/ToggleButton.as
@@ -22,7 +22,7 @@
  * Because this component does not define a skin for the mobile theme, Adobe
  * recommends that you not use it in a mobile application. Alternatively, you
  * can define your own mobile skin for the component. For more information,
- * see Spark Skinning.
+ * see Spark Skinning.
  */
 [DiscouragedForProfile("mobileDevice")]


- bugfix: quickfix for UIObject::addChildAt in the face of UIComponent moving its' child elements to other, nested display containers, thus meddling with the actual numChildren

git-svn-id: e38e7cdd6ace00d8230583a2d3b43e9a55f5c011@456 bc4816be-ef27-423a-9c4d-fc420be121a2

--- src/reprise/ui/UIObject.as
+++ src/reprise/ui/UIObject.as
@@ -170,7 +170,8 @@
 			if (child is UIObject)
 			{
 				var element : UIObject = UIObject(child);
-				m_contentDisplay.addChildAt(child, index);
+				m_contentDisplay.addChildAt(
+					child, Math.min(m_contentDisplay.numChildren, index));
 				element.setParent(this);


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@1290451 13f79535-47bb-0310-9956-ffa450edef68

--- frameworks/projects/advancedgrids/src/mx/core/Version.as
+++ frameworks/projects/advancedgrids/src/mx/core/Version.as
@@ -0,0 +1,18 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  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.
+//
+////////////////////////////////////////////////////////////////////////////////
+
+import mx.core.mx_internal;
+
+/**
+ *  @private
+ *  Version string for this class.
+ */
+mx_internal static const VERSION:String = "4.0.0.0";