Transferred from the Adobe Open Source Subversion Repository

Revision: 6597
Author:   gruehle@adobe.com
Date:     2009-05-04T20:16:50.604214Z

Log Message:
-----------
Add error indicator support to Spark skins for Halo components.

Bugs: SDK-19557, SDK-20271
QA Notes: Ready for testing. This is specific support for errorString, not general support for borderColor. See the notes for SDK-19557 for details.
Docs: no
Reviewer: Jason

Modified Paths:
--------------
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/sparkskins/src/mx/skins/spark/RadioButtonSkin.mxml</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/sparkskins/src/mx/skins/spark/StepperIncrButtonSkin.mxml</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/sparkskins/src/mx/skins/spark/ButtonSkin.mxml</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/sparkskins/src/mx/skins/spark/StepperDecrButtonSkin.mxml</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/sparkskins/src/mx/skins/spark/BorderSkin.mxml</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/sparkskins/src/mx/skins/spark/PopUpButtonSkin.mxml</path>
<path kind="file" action="A">/flex/sdk/trunk/frameworks/projects/sparkskins/src/mx/skins/spark/SparkSkinForHalo.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/sparkskins/src/mx/skins/spark/EditableComboBoxSkin.mxml</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/sparkskins/src/mx/skins/spark/TextInputBorderSkin.mxml</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/sparkskins/src/mx/skins/spark/CheckBoxSkin.mxml</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/sparkskins/src/mx/skins/spark/ComboBoxSkin.mxml</path>

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

--- frameworks/projects/sparkskins/src/mx/skins/spark/SparkSkinForHalo.as
+++ frameworks/projects/sparkskins/src/mx/skins/spark/SparkSkinForHalo.as
@@ -0,0 +1,99 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  ADOBE SYSTEMS INCORPORATED
+//  Copyright 2008 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.skins.spark {
+
+import mx.core.UIComponent;
+
+import spark.skins.SparkSkin;
+
+[ExcludeClass]
+
+/**
+ *  Base class for Spark skins for Halo components. This class
+ *  adds support for colorizing the border with errorColor.
+ *
+ *  @langversion 3.0
+ *  @playerversion Flash 10
+ *  @playerversion AIR 1.5
+ *  @productversion Flex 4
+ */
+public class SparkSkinForHalo extends SparkSkin
+{
+    /**
+     * Constructor.
+     *
+     *  @langversion 3.0
+     *  @playerversion Flash 10
+     *  @playerversion AIR 1.5
+     *  @productversion Flex 4
+     */
+    public function SparkSkinForHalo()
+    {
+        super();
+    }
+
+    /**
+     * Names of items that should have their color property set to the errorColor style
+     * if the component has an errorString.
+     *
+     *  @langversion 3.0
+     *  @playerversion Flash 10
+     *  @playerversion AIR 1.5
+     *  @productversion Flex 4
+     */
+    protected function get borderItems():Array
+    {
+        return null;
+    }
+
+    /**
+     * Default border item color.
+     *
+     *  @langversion 3.0
+     *  @playerversion Flash 10
+     *  @playerversion AIR 1.5
+     *  @productversion Flex 4
+     */
+    protected function get defaultBorderItemColor():uint
+    {
+        return 0;
+    }
+
+    /**
+     *  @private.
+     */
+    override protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void
+    {
+        var borderItems:Array = this.borderItems;
+
+        if (borderItems && borderItems.length > 0)
+        {
+            var isError:Boolean = false;
+            var borderItemColor:uint;
+            var errorColor:uint = getStyle("errorColor");
+
+            if (getStyle("borderColor") == errorColor)
+                borderItemColor = errorColor;
+            else
+                borderItemColor = defaultBorderItemColor;
+
+            for (var i:int = 0; i < borderItems.length; i++)
+            {
+                if (this[borderItems[i]])
+                    this[borderItems[i]].color = borderItemColor;
+            }
+        }
+
+        super.updateDisplayList(unscaledWidth, unscaledHeight);
+    }
+}
+}


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

--- frameworks/projects/charts/src/mx/charts/chartClasses/NumericAxis.as
+++ frameworks/projects/charts/src/mx/charts/chartClasses/NumericAxis.as
@@ -0,0 +1,1414 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  ADOBE SYSTEMS INCORPORATED
+//  Copyright 2009 Adobe Systems Incorporated
+//  All Rights Reserved.
+//
+//  NOTICE: Adobe permits you to use, modify, and distribute this file
+//  in accordance with the terms of the license agreement accompanying it.
+//
+////////////////////////////////////////////////////////////////////////////////
+
+package mx.charts.chartClasses
+{
+
+import flash.events.Event;
+
+import mx.charts.AxisLabel;
+import mx.core.mx_internal;
+
+use namespace mx_internal;
+
+/**
+ *  The NumericAxis class acts as a common base class
+ *  for axis types representing a continuous range of values
+ *  between a defined minimum and maximum.
+ *  The built-in LinearAxis, LogAxis, and DateTimeAxis
+ *  classes all extend this base class.
+ *
+ *  @see mx.charts.DateTimeAxis
+ *  @see mx.charts.LinearAxis
+ *  @see mx.charts.LogAxis
+ *
+ *  @langversion 3.0
+ *  @playerversion Flash 9
+ *  @playerversion AIR 1.1
+ *  @productversion Flex 3
+ */
+public class NumericAxis extends AxisBase implements IAxis
+{
+    include "../../core/Version.as";
+
+    //--------------------------------------------------------------------------
+    //
+    //  Constructor
+    //
+    //--------------------------------------------------------------------------
+
+    /**
+     *  Constructor.
+     *
+     *  @langversion 3.0
+     *  @playerversion Flash 9
+     *  @playerversion AIR 1.1
+     *  @productversion Flex 3
+     */
+    public function NumericAxis()
+    {
+        super();
+    }
+
+    //--------------------------------------------------------------------------
+    //
+    //  Variables
+    //
+    //--------------------------------------------------------------------------
+
+    /**
+     *  @private
+     */
+    private var _labelSet:AxisLabelSet;
+
+    /**
+     *  @private
+     */
+    private var _cachedDataDescriptions:Array /* of DataDescription */;
+
+    /**
+     *  @private
+     */
+    private var _cachedValuesHaveBounds:Boolean;
+
+    /**
+     *  @private
+     */
+    private var _regenerateAutoValues:Boolean = true;
+
+    //--------------------------------------------------------------------------
+    //
+    //  Properties
+    //
+    //--------------------------------------------------------------------------
+
+    //----------------------------------
+    //  assignedMaximum
+    //----------------------------------
+
+    /**
+     *  The explicitly assigned maximum value.
+     *  If no value has been assigned, this will be NaN.
+     *  Typically, calculations should be performed
+     *  with the computedMaximum field.
+     *
+     *  @langversion 3.0
+     *  @playerversion Flash 9
+     *  @playerversion AIR 1.1
+     *  @productversion Flex 3
+     */
+    protected var assignedMaximum:Number;
+
+    //----------------------------------
+    //  assignedMinimum
+    //----------------------------------
+
+    /**
+     *  The explicitly assigned minimum value.
+     *  If no value has been assigned, this will be NaN.
+     *  Typically calculations should be performed
+     *  with the computedMinimum field.
+     *
+     *  @langversion 3.0
+     *  @playerversion Flash 9
+     *  @playerversion AIR 1.1
+     *  @productversion Flex 3
+     */
+    protected var assignedMinimum:Number;
+
+    //----------------------------------
+    //  autoAdjust
+    //----------------------------------
+
+    /**
+     *  @private
+     *  Storage for the autoAdjust property.
+     */
+    private var _autoAdjust:Boolean = true;
+
+    [Inspectable(category="General", defaultValue="true")]
+
+    /**
+     *  Specifies whether Flex rounds values.
+     *  If false, Flex does not round the values
+     *  set by the minimum and maximum properties,
+     *  or modify the default minimum and
+     *  maximum values.
+     *
+     *  @default true
+     *
+     *  @langversion 3.0
+     *  @playerversion Flash 9
+     *  @playerversion AIR 1.1
+     *  @productversion Flex 3
+     */
+    public function get autoAdjust():Boolean
+    {
+        return _autoAdjust;
+    }
+
+    /**
+     *  @private
+     */
+    public function set autoAdjust(value:Boolean):void
+    {
+        _autoAdjust = value;
+
+        dataChanged();
+    }
+
+    //----------------------------------
+    //  baseAtZero
+    //----------------------------------
+    /**
+     *  Storage for baseAtZero property
+     *
+     *  @langversion 3.0
+     *  @playerversion Flash 9
+     *  @playerversion AIR 1.1
+     *  @productversion Flex 3
+     */
+    private var _baseAtZero:Boolean = true;
+
+    [Inspectable(category="General", defaultValue="true")]
+
+    /**
+     *  Specifies whether Flex tries to keep the minimum
+     *  and maximum values rooted at zero.
+     *  If all axis values are positive, the minimum axis value is zero.
+     *  If all axis values are negative, the maximum axis value is zero.
+     *
+     *  @default true
+     *
+     *  @langversion 3.0
+     *  @playerversion Flash 9
+     *  @playerversion AIR 1.1
+     *  @productversion Flex 3
+     */
+    public function get baseAtZero():Boolean
+    {
+        return _baseAtZero;
+    }
+
+    /**
+     * @private
+     */
+    public function set baseAtZero(value:Boolean):void
+    {
+        _baseAtZero = value;
+
+        dataChanged();
+    }
+
+    //----------------------------------
+    //  computedInterval
+    //----------------------------------
+
+    /**
+     *  The computed interval represented by this axis.
+     *  The computedInterval is used
+     *  by the AxisRenderer and Gridlines classes
+     *  to determine where to render tick marks and grid lines.
+     *  The NumericAxis base class watches this field for changes
+     *  to determine if the chart needs to be re-rendered.
+     *  Derived classes are responsible for computing the value
+     *  of this field.
+     *
+     *  @langversion 3.0
+     *  @playerversion Flash 9
+     *  @playerversion AIR 1.1
+     *  @productversion Flex 3
+     */
+    protected var computedInterval:Number;
+
+    //----------------------------------
+    //  computedMaximum
+    //----------------------------------
+
+    /**
+     *  The computed maximum value represented by this axis.
+     *  If the user has explicitly assigned a maximum value,
+     *  the computedMaximum and
+     *  assignedMaximum properties
+     *  are usually the same.
+     *  Otherwise, the computedMaximum is generated
+     *  from the values represented in the chart.
+     *
+     *  @langversion 3.0
+     *  @playerversion Flash 9
+     *  @playerversion AIR 1.1
+     *  @productversion Flex 3
+     */
+    public var computedMaximum:Number;
+
+    //----------------------------------
+    //  computedMinimum
+    //----------------------------------
+
+    /**
+     *  The computed minimum value represented by this axis.
+     *  If the user has explicitly assigned a minimum value,
+     *  the computedMinimum and
+     *  assignedMinimum properties
+     *  are usually be the same.
+     *  Otherwise, the computedMinimum is generated
+     *  from the values represented in the chart.
+     *
+     *  @langversion 3.0
+     *  @playerversion Flash 9
+     *  @playerversion AIR 1.1
+     *  @productversion Flex 3
+     */
+    public var computedMinimum:Number;
+
+	//----------------------------------
+	//  direction
+	//----------------------------------
+
+	/**
+	 *  @private
+	 */
+	private var _direction:String = "normal";
+
+	[Inspectable(category="General", enumeration="normal,inverted", defaultValue="normal")]
+
+	/**
+ 	 *  Determines the direction in which the axis is rendered.
+     *  Possible values are normal,
+     *  and inverted.
+     *
+     *  All derived classes should take care of the way min and max
+     *  are set depending on direction.
+     *
+     *  All series should take care of the way it is rendered
+     *  depending on the direction of its underlying axis.
+     *
+     *  @default "normal"
+	 *
+	 *  @langversion 3.0
+	 *  @playerversion Flash 9
+	 *  @playerversion AIR 1.1
+	 *  @productversion Flex 4
+	 */
+	public function get direction():String
+	{
+		return _direction;
+	}
+
+	/**
+	 *  @private
+	 */
+	public function set direction(value:String):void
+	{
+		if(_direction != value)
+		{
+			_direction = value;
+			invalidateCache();
+			dataChanged();
+		}
+	}
+
+    //----------------------------------
+    //  labelCache
+    //----------------------------------
+
+    /**
+     *  The most recent set of AxisLabel objects
+     *  generated to represent this axis.
+     *  This property is null if the axis
+     *  has been modified and requires new labels.
+     *  To guarantee that the value of the labelCache property
+     *  is correct, call the buildLabelCache() method
+     *  before accessing the labelCache property.
+     *
+     *  @langversion 3.0
+     *  @playerversion Flash 9
+     *  @playerversion AIR 1.1
+     *  @productversion Flex 3
+     */
+    protected var labelCache:Array /* of AxisLabel */;
+
+    //----------------------------------
+    //  labelFunction
+    //----------------------------------
+
+    /**
+     *  @private
+     *  Storage for the labelFunction property.
+     */
+    private var _labelFunction:Function = null;
+
+    [Inspectable(category="General")]
+
+    /**
+     *  Called to format axis values for display as labels.
+     *  A labelFunction has the following signature:
+     *

+     *  function function_name(labelValue:Object, previousValue:Object, axis:IAxis):String { ... }
+     *

+     *
+     *
If you know the types of the data your function will be formatting,
+     *  you can specify an explicit type for the labelValue
+     *  and previousValue parameters.

+     *
+     *  @langversion 3.0
+     *  @playerversion Flash 9
+     *  @playerversion AIR 1.1
+     *  @productversion Flex 3
+     */
+    public function get labelFunction():Function
+    {
+        return _labelFunction;
+    }
+
+    /**
+     *  @private
+     */
+    public function set labelFunction(value:Function):void
+    {
+        _labelFunction = value;
+
+        invalidateCache();
+
+        dispatchEvent(new Event("mappingChange"));
+        dispatchEvent(new Event("axisChange"));
+    }
+
+    //----------------------------------
+    //  labelMaximum
+    //----------------------------------
+
+    /**
+     *  The maximum value where a label should be placed.
+     *  After computing an adjusted minimum value,
+     *  many axis types expand the range of the axis further
+     *  to make room for additional rendering artifacts in the chart,
+     *  such as labels and borders.
+     *  This value represents the maximum value in the chart
+     *  before it is adjusted for these artifacts.
+     *  Typically axes generate labels to make sure
+     *  this value is labeled, rather than the adjusted maximum of the axis.
+     *
+     *  @langversion 3.0
+     *  @playerversion Flash 9
+     *  @playerversion AIR 1.1
+     *  @productversion Flex 3
+     */
+    protected var labelMaximum:Number;
+
+    //----------------------------------
+    //  labelMinimum
+    //----------------------------------
+
+    /**
+     *  The minimum value where a label should be placed.
+     *  After computing an adjusted minimum value,
+     *  many axis types expand the range of the axis further
+     *  to make room for additional rendering artifacts in the chart,
+     *  such as labels and borders.
+     *  This value represents the minimum value in the chart
+     *  before it is adjusted for these artifacts.
+     *  Typically axes will generate labels to make sure
+     *  this value is labeled, rather than the adjusted minimum of the axis.
+     *
+     *  @langversion 3.0
+     *  @playerversion Flash 9
+     *  @playerversion AIR 1.1
+     *  @productversion Flex 3
+     */
+    protected var labelMinimum:Number;
+
+    //----------------------------------
+    //  mappedMaximum
+    //----------------------------------
+
+    [Inspectable(environment="none")]
+
+    /**
+     *  The computed minimum value for the axis
+     *  as long as this value is greater than 0.
+     *  If the maximum value is less than or equal to 0,
+     *  then the baseline property is the computed maximum.
+     *  If neither value is greater than 0,
+     *  then the baseline property is 0.
+     *
+     *  @langversion 3.0
+     *  @playerversion Flash 9
+     *  @playerversion AIR 1.1
+     *  @productversion Flex 3
+     */
+    public function get baseline():Number
+    {
+        var baseVal:Number;
+
+        if (computedMinimum >= 0)
+            baseVal = computedMinimum;
+        else if (computedMaximum <= 0)
+            baseVal = computedMaximum;
+        else
+            baseVal = 0;
+
+        return baseVal;
+    }
+
+    //----------------------------------
+    //  minorTickCache
+    //----------------------------------
+
+    /**
+     *  The most recent set of minor tick marks generated to represent this axis.
+     *  This property may be null if the axis
+     *  has been modified and requires new labels and tick marks.
+     *  Use the public accessor minorTicks
+     *  to build the minor tick marks on demand.
+     *
+     *  @langversion 3.0
+     *  @playerversion Flash 9
+     *  @playerversion AIR 1.1
+     *  @productversion Flex 3
+     */
+    protected var minorTickCache:Array /* of Number */;
+
+    //----------------------------------
+    //  minorTicks
+    //----------------------------------
+
+    [Inspectable(environment="none")]
+
+    /**
+     *  An Array of minor tick marks generated to represent this axis.
+     *
+     *  @langversion 3.0
+     *  @playerversion Flash 9
+     *  @playerversion AIR 1.1
+     *  @productversion Flex 3
+     */
+    public function get minorTicks():Array /* of Number */
+    {
+        if (!minorTickCache)
+            minorTickCache = buildMinorTickCache();
+
+        return minorTickCache;
+    }
+
+    //----------------------------------
+    //  padding
+    //----------------------------------
+
+    /**
+     *  @private
+     *  Storage for the padding property.
+     */
+    private var _padding:Number;
+
+    [Inspectable(category="General")]
+
+    /**
+     *  Specifies padding that Flex adds to the calculated minimum and maximum
+     *  values for the axis when rendering the values on the screen.
+     *
+     *  @langversion 3.0
+     *  @playerversion Flash 9
+     *  @playerversion AIR 1.1
+     *  @productversion Flex 3
+     */
+    public function get padding():Number
+    {
+        return _padding;
+    }
+
+    /**
+     *  @private
+     */
+    public function set padding(value:Number):void
+    {
+        _padding = value;
+
+        invalidateCache();
+
+        dispatchEvent(new Event("axisChange"));
+    }
+
+    //----------------------------------
+    //  parseFunction
+    //----------------------------------
+
+    /**
+     *  @private
+     *  Storage for the parseFunction property.
+     */
+    private var _parseFunction:Function = null;
+
+    [Inspectable(category="Other")]
+
+    /**
+     *  Specify a parseFunction to customize how
+     *  the values rendered by your chart are converted into numeric values.
+     *  A custom parseFunction is passed a data value
+     *  and should return a corresponding number representing the same value.
+     *  By default, this axis uses the ECMA function parseFloat().
+     *
+     *  @langversion 3.0
+     *  @playerversion Flash 9
+     *  @playerversion AIR 1.1
+     *  @productversion Flex 3
+     */
+    public function get parseFunction():Function
+    {
+        return _parseFunction;
+    }
+
+    /**
+     *  @private
+     */
+    public function set parseFunction(value:Function):void
+    {
+        _parseFunction = value;
+
+        invalidateCache();
+        _cachedDataDescriptions = null;
+
+        dispatchEvent(new Event("mappingChange"));
+        dispatchEvent(new Event("axisChange"));
+    }
+
+    //----------------------------------
+    //  requiredDescribedFields
+    //----------------------------------
+
+    /**
+     *  The fields of the DescribeData structure that this axis is interested in.
+     *
+     *  @langversion 3.0
+     *  @playerversion Flash 9
+     *  @playerversion AIR 1.1
+     *  @productversion Flex 3
+     */
+    protected function get requiredDescribedFields():uint
+    {
+        return DataDescription.REQUIRED_MIN_MAX |
+               DataDescription.REQUIRED_BOUNDED_VALUES;
+    }
+
+    //----------------------------------
+    //  ticks
+    //----------------------------------
+
+    /**
+     *  An Array of tick marks for this axis.
+     *
+     *  @langversion 3.0
+     *  @playerversion Flash 9
+     *  @playerversion AIR 1.1
+     *  @productversion Flex 3
+     */
+    protected function get ticks():Array /* of Number */
+    {
+        var result:Array /* of Number */ = [];
+
+        var n:int = labelCache.length;
+        for (var i:int = 0; i < n; i++)
+        {
+            result.push(labelCache[i].position);
+        }
+
+        return result;
+    }
+
+    //----------------------------------
+    //  zeroValue
+    //----------------------------------
+
+    /**
+     *  @private
+     */
+    mx_internal function get zeroValue():Number
+    {
+        return 0;
+    }
+
+    //--------------------------------------------------------------------------
+    //
+    //  Overridden methods: AxisBase
+    //
+    //--------------------------------------------------------------------------
+
+    /**
+     *  @private
+     */
+    override public function dataChanged():void
+    {
+        // We don't call invalidateCache() here, because invalidateCache()
+        // forces a rebuild of the labels.
+        // But just changing the data doesn't guarantee the labels have changed.
+        // Instead, we need to recalc our autogenerated values,
+        // and then see if the values have changed.
+        minorTickCache = null;
+        _cachedDataDescriptions = null;
+        _regenerateAutoValues = true;
+
+        if (isNaN(assignedMinimum) || isNaN(assignedMaximum))
+        {
+            dispatchEvent(new Event("mappingChange"));
+            dispatchEvent(new Event("axisChange"));
+        }
+    }
+
+    //--------------------------------------------------------------------------
+    //
+    //  Methods
+    //
+    //--------------------------------------------------------------------------
+
+    /**
+     *  @copy mx.charts.chartClasses.IAxis#mapCache()
+     *
+     *  @langversion 3.0
+     *  @playerversion Flash 9
+     *  @playerversion AIR 1.1
+     *  @productversion Flex 3
+     */
+    public function mapCache(cache:Array /* of Object */, field:String,
+                             convertedField:String,
+                             indexValues:Boolean = false):void
+    {
+        var n:int = cache.length;
+        var i:int;
+
+        var v:Object;
+
+        if (_parseFunction != null)
+        {
+            for (i = 0; i < n; i++)
+            {
+                v = cache[i];
+                v[convertedField] = _parseFunction(v[field]);
+            }
+        }
+        else
+        {
+            for (i = 0; i < n && cache[i][field] == null; i++)
+            {
+            }
+            if (i == n)
+                return;
+
+            if ((cache[i][field] is String))
+            {
+                for (; i < n; i++)
+                {
+                    v = cache[i];
+                    v[convertedField] = Number(v[field]);
+                }
+            }
+            else if (cache[i][field] is XML ||
+                     cache[i][field] is XMLList)
+            {
+                for (; i < n; i++)
+                {
+                    v = cache[i];
+                     v[convertedField] =   parseFloat(v[field].toString());
+                }
+            }
+            else if (cache[i][field] is Number ||
+                     cache[i][field] is int ||
+                     cache[i][field] is uint)
+            {
+                for (; i < n; i++)
+                {
+                    v = cache[i];
+                    if (v[field] == null || v[field].toString() == "")
+                    	v[convertedField] = NaN;
+                    else
+                        v[convertedField] = v[field];
+                }
+            }
+            else
+            {
+                for (; i < n; i++)
+                {
+                    v = cache[i];
+                    v[convertedField] = parseFloat(v[field]);
+                }
+            }
+        }
+    }
+
+    /**
+     *  @copy mx.charts.chartClasses.IAxis#filterCache()
+     *
+     *  @langversion 3.0
+     *  @playerversion Flash 9
+     *  @playerversion AIR 1.1
+     *  @productversion Flex 3
+     */
+    public function filterCache(cache:Array /* of Object */, field:String,
+                                filteredField:String):void
+    {
+        update();
+
+        // Avoid roundoff errors.
+        var max:Number = computedMaximum + 0.00001;
+        var min:Number = computedMinimum - 0.00001;
+
+        var n:int = cache.length;
+        for (var i:int = 0; i < n; i++)
+        {
+            var v:Object = cache[i][field];
+            cache[i][filteredField] = v >= min && v <= max ? v : NaN;
+        }
+    }
+
+    /**
+     *  @copy mx.charts.chartClasses.IAxis#transformCache()
+     *
+     *  @langversion 3.0
+     *  @playerversion Flash 9
+     *  @playerversion AIR 1.1
+     *  @productversion Flex 3
+     */
+    public function transformCache(cache:Array /* of Object */, field:String,
+                                   convertedField:String):void
+    {
+        update();
+
+        var r:Number = computedMaximum - computedMinimum;
+
+        var n:int = cache.length;
+        for (var i:int = 0; i < n; i++)
+        {
+            cache[i][convertedField] = (cache[i][field] - computedMinimum) / r;
+        }
+    }
+
+    /**
+     *  @copy mx.charts.chartClasses.IAxis#invertTransform()
+     *
+     *  @langversion 3.0
+     *  @playerversion Flash 9
+     *  @playerversion AIR 1.1
+     *  @productversion Flex 3
+     */
+    public function invertTransform(value:Number):Object
+    {
+        update();
+        return value * (computedMaximum - computedMinimum) + computedMinimum;
+    }
+
+    /**
+     *  @copy mx.charts.chartClasses.IAxis#formatForScreen()
+     *
+     *  @langversion 3.0
+     *  @playerversion Flash 9
+     *  @playerversion AIR 1.1
+     *  @productversion Flex 3
+     */
+    public function formatForScreen(value:Object):String
+    {
+    	if(direction == "inverted")
+    		value = -(Number(value)) as Object;
+    	else
+    		value = Number(value) as Object;
+        return value.toString();
+    }
+
+    /**
+     *  @copy mx.charts.chartClasses.IAxis#getLabelEstimate()
+     *
+     *  @langversion 3.0
+     *  @playerversion Flash 9
+     *  @playerversion AIR 1.1
+     *  @productversion Flex 3
+     */
+    public function getLabelEstimate():AxisLabelSet
+    {
+        update();
+
+        var updated:Boolean = buildLabelCache();
+        if (updated)
+        {
+            _labelSet = new AxisLabelSet();
+            _labelSet.labels = labelCache;
+            _labelSet.accurate = _cachedValuesHaveBounds == false;
+            _labelSet.minorTicks = minorTicks;
+            _labelSet.ticks = ticks;
+        }
+
+        return _labelSet;
+    }
+
+    /**
+     *  @copy mx.charts.chartClasses.IAxis#preferDropLabels()
+     *
+     *  @langversion 3.0
+     *  @playerversion Flash 9
+     *  @playerversion AIR 1.1
+     *  @productversion Flex 3
+     */
+    public function preferDropLabels():Boolean
+    {
+        return true;
+    }
+
+    /**
+     *  @copy mx.charts.chartClasses.IAxis#getLabels()
+     *
+     *  @langversion 3.0
+     *  @playerversion Flash 9
+     *  @playerversion AIR 1.1
+     *  @productversion Flex 3
+     */
+    public function getLabels(minimumAxisLength:Number):AxisLabelSet
+    {
+        var updated:Boolean;
+        if (_cachedValuesHaveBounds || !labelCache)
+        {
+            _regenerateAutoValues = true;
+            updateCache(true,minimumAxisLength);
+            updated = buildLabelCache();
+        }
+        else
+        {
+            updated = false;
+        }
+
+        if (updated)
+        {
+            _labelSet = new AxisLabelSet();
+            _labelSet.labels =  labelCache;
+            _labelSet.minorTicks = minorTicks;
+            _labelSet.ticks = ticks;
+        }
+
+        return _labelSet;
+    }
+
+    /**
+     *  @copy mx.charts.chartClasses.IAxis#reduceLabels()
+     *
+     *  @langversion 3.0
+     *  @playerversion Flash 9
+     *  @playerversion AIR 1.1
+     *  @productversion Flex 3
+     */
+    public function reduceLabels(intervalStart:AxisLabel,
+                                 intervalEnd:AxisLabel):AxisLabelSet
+    {
+        return _labelSet;
+    }
+
+    /**
+     *  Populates the labelCache property with labels representing the current
+     *  values of the axis. Subclasses must implement this function. This function is called
+     *  many times, so you should check to see if the labelCache property
+     *  is null before performing any calculations.
+     *
+     *  @return true if the labels were regenerated.
+     *
+     *  @langversion 3.0
+     *  @playerversion Flash 9
+     *  @playerversion AIR 1.1
+     *  @productversion Flex 3
+     */
+    protected function buildLabelCache():Boolean
+    {
+        return false;
+    }
+
+    /**
+     *  Builds an Array of positions for the minor tick marks Array that is generated by this axis.
+     *  Subclasses must implement this function. This function is  called automatically
+     *  by the NumericAxis. You should access the minorTicks property
+     *  instead of calling this function directly.
+     *
+     *  @return An Array of positions from 0 to 1 that represent points between the axis
+     *  minimum and maximum values where minor tick marks are rendered.
+     *
+     *  @langversion 3.0
+     *  @playerversion Flash 9
+     *  @playerversion AIR 1.1
+     *  @productversion Flex 3
+     */
+    protected function buildMinorTickCache():Array /* of Number */
+    {
+        return [];
+    }
+
+    /**
+    * @private
+     */
+    private function updateCache(checkForMargins:Boolean,
+                                   minimumAxisLength:Number):void
+    {
+        if (_regenerateAutoValues)
+        {
+            // We're going to remember these.
+            // As an optimization, if after going through all of this
+            // the values that generate our labels haven't changed,
+            // we won't bother regenerating the labels.
+            var oldMin:Number = computedMinimum;
+            var oldMax:Number = computedMaximum;
+            var oldInterval:Number = computedInterval;
+
+            // First we check and see if the author has provided
+            // any set min/max values.
+            if (!isNaN(assignedMinimum))
+                computedMinimum = assignedMinimum;
+            if (!isNaN(assignedMaximum))
+                computedMaximum = assignedMaximum;
+
+            // If either min or max is unset, we need to generate it.
+            var autoGen:Boolean = isNaN(assignedMinimum) ||
+                                  isNaN(assignedMaximum);
+
+            // If we still need either a min or a max, we'll autogenerate here.
+            if (autoGen)
+                autoGenerate(checkForMargins, minimumAxisLength);
+
+            // At this point we know we've got a valid min/max pair,
+            // either specified by the author or generated from the data.
+            // Next, we go into our adjustment routine.
+            // This is where we push those min/max values out to be nice,
+            // clean values that look good when you make labels out of them.
+            // The same algorithm is also how we generate a nice usable interval
+            // from the min/max values we have.so we're going to execute
+            // this section if either the user has asked us to autoadjust
+            // the min/max to nice clean values, or if the interval hasn't
+            // been set by the user.
+            // Once we've invoked the routine, we'll decide what we want
+            // to do with the numbers it generated based on why the routine
+            // got called in the first place.
+            adjustMinMax(computedMinimum,computedMaximum);
+
+            // OK, we've now calculated the ideal min/max values
+            // to show on the chart.
+            // However, there may be reasons we want to make the actual range
+            // of the chart spread a little bit further.
+            // Specifically, if there are series that need a little extra space
+            // around their data points, either for labels, or just pretty
+            // drawing,or other reasons (like BubbleSeries which render more
+            // than one axis in each dimension).
+            // But whatever the final range ends up being, we'll use
+            // the min/max values we have now as the outer labels of the chart.
+            labelMinimum = computedMinimum;
+            labelMaximum = computedMaximum;
+
+            // When do we adjust for margins?
+            // In general, it's if we autogenerated our min/max values
+            // and the user has asked us to make nice clean numbers around them.
+            // We also have two optimizations in here.
+            // First of all, if we auto generated our min/max from data
+            // and found that none of our data needed any space around
+            // their values, then this would be wasted effort.
+            // Secondly, there are times this function gets called
+            // when we're looking for an estimate...so we don't want to bother
+            // with margins at that point.
+            if ((autoAdjust || autoGen) &&
+                checkForMargins &&
+                _cachedValuesHaveBounds)
+            {
+                adjustForMargins(minimumAxisLength);
+            }
+
+            // If the author asked for additional padding outside
+            // the min/max values, give it to them here.
+            // However, it's possible that our margin calculations
+            // have already generated more padding than was requested.
+            // In which case we don't add more.
+            var us:Number = unitSize;
+            if (!isNaN(_padding))
+            {
+                if (labelMinimum - computedMinimum < _padding * us)
+                    computedMinimum = labelMinimum - _padding * us;
+
+                if (computedMaximum - labelMaximum < _padding * us)
+                    computedMaximum = labelMaximum + _padding * us;
+            }
+
+            // Authors don't get all the fun...
+            // series can ask for padding too.
+            // Check and see if any series have asked for padding,
+            // and do the same calculation for them.
+            var cachedDataDescriptions:Array /* of DataDescription */ = dataDescriptions;
+            var n:int = cachedDataDescriptions.length;
+            for (var i:int = 0; i < n; i++)
+            {
+                var desc:DataDescription =  cachedDataDescriptions[i]
+                if (!isNaN(desc.padding))
+                {
+                    if (isNaN(assignedMinimum) &&
+                        desc.min - computedMinimum < desc.padding * us)
+                    {
+                        computedMinimum = desc.min - desc.padding * us;
+                    }
+
+                    if (isNaN(assignedMaximum) &&
+                        computedMaximum - desc.max < desc.padding * us)
+                    {
+                        computedMaximum = desc.max + desc.padding * us;
+                    }
+                }
+            }
+
+            if (computedMinimum == computedMaximum)
+            {
+                var us2:Number = unitSize/2;
+                computedMinimum -= us2;
+                computedMaximum += us2;
+            }
+
+            // Finally, if the min/max/interval has changed, invalidate it here.
+            if (oldMin != computedMinimum ||
+                oldMax != computedMaximum ||
+                oldInterval != computedInterval)
+            {
+                labelCache = null;
+                minorTickCache = null;
+            }
+
+            _regenerateAutoValues = false;
+        }
+    }
+
+    /**
+     *  Invalidates the cached labels and tick marks that represent this axis's values.
+     *  Derived classes should call this function whenever values used in the calculation
+     *  of labels and tick marks change.
+     *
+     *  @langversion 3.0
+     *  @playerversion Flash 9
+     *  @playerversion AIR 1.1
+     *  @productversion Flex 3
+     */
+    protected function invalidateCache():void
+    {
+        minorTickCache = null;
+        _regenerateAutoValues = true;
+        labelCache = null;
+    }
+
+    /**
+     *  @inheritDoc
+     *
+     *  @langversion 3.0
+     *  @playerversion Flash 9
+     *  @playerversion AIR 1.1
+     *  @productversion Flex 3
+     */
+    public function update():void
+    {
+        updateCache(true, 0);
+    }
+
+    /**
+     *  @private
+     */
+    private function adjustForMargins(minimumAxisLength:Number):void
+    {
+        // Make sure we have room for bounded values.
+        // These are values that specify required padding in screen space
+        // (i.e., a bar chart will specify space for its label,
+        // in screen space).
+        // This is imperfect, because by necessity at this point we don't know
+        // how much space we'll really have on the axis.
+        // But if we calc now, and the axis gets smaller (it won't get bigger)
+        // we'll be conservative but safe.
+
+        var min:Number = computedMinimum;
+        var max:Number = computedMaximum;
+
+        var n:int;
+        var i:int;
+
+        var boundedValues:Array /* of BoundedValue */ = [];
+        var cachedDataDescriptions:Array /* of DataDescription */ = dataDescriptions;
+        var boundsWithinRegion:Boolean = true;
+        n = cachedDataDescriptions.length;
+        for (i = 0; i < n; i++)
+        {
+            if (cachedDataDescriptions[i].boundedValues)
+            {
+                boundedValues = boundedValues.concat(
+                    cachedDataDescriptions[i].boundedValues);
+            }
+        }
+        n = boundedValues.length;
+        for (i = 0; i < n; i++)
+        {
+            if (!(boundedValues[i].lowerMargin < minimumAxisLength && boundedValues[i].upperMargin < minimumAxisLength))
+                    boundsWithinRegion = false;
+        }
+
+        if (boundedValues.length > 0 && minimumAxisLength > 0 && boundsWithinRegion)
+        {
+            if (isNaN(min))
+                min = boundedValues[0].value;
+            if (isNaN(max))
+                max = boundedValues[0].value;
+
+            var axisLength:Number = minimumAxisLength;
+            var currentRange:Number = max - min;
+            var itrCount:int = 0;
+            n = boundedValues.length;
+
+            var verify:Boolean = true;
+            while (verify)
+            {
+                var lowestOverlap:Number = minimumAxisLength;
+                var lowestValue:BoundedValue;
+                var highestOverlap:Number = 0;
+                var highestValue:BoundedValue;
+
+                var v1:Number = max;
+                var m1:Number = 0;
+                var v2:Number = min;
+                var m2:Number = 0;
+
+                for (i = 0; i < n; i++)
+                {
+                    var v:BoundedValue = boundedValues[i];
+
+                    var vpos:Number =
+                        (v.value - min) / currentRange * minimumAxisLength;
+
+                    if ((!isNaN(v.lowerMargin)) &&
+                        vpos - v.lowerMargin < lowestOverlap)
+                    {
+                        lowestOverlap = vpos - v.lowerMargin;
+                        lowestValue = v;
+                    }
+
+                    if ((!isNaN(v.upperMargin)) &&
+                        vpos + v.upperMargin> highestOverlap)
+                    {
+                        highestOverlap = vpos + v.upperMargin;
+                        highestValue = v;
+                    }
+                }
+
+                if (lowestOverlap > -0.0001 &&
+                    highestOverlap < minimumAxisLength + 0.0001)
+                {
+                    break;
+                }
+
+                if (highestOverlap > minimumAxisLength)
+                {
+                    v1 = highestValue.value;
+                    m1 = highestValue.upperMargin;
+                }
+                else
+                {
+                    // If we're only adjusting one side of the equation,
+                    // we know we're 100% accurate.
+                    verify = false;
+                }
+
+                if (lowestOverlap < 0)
+                {
+                    v2 = lowestValue.value;
+                    m2 = lowestValue.lowerMargin;
+                }
+                else
+                {
+                    // If we're only adjusting one side of the equation,
+                    // we know we're 100% accurate.
+                    verify = false;
+                }
+
+                var p1:Number = minimumAxisLength - m1;
+                min = (p1 * v2 - m2 * v1) / Math.abs(p1 - m2);
+                max = minimumAxisLength * (v1 - min) /
+                      (minimumAxisLength - m1) + min;
+                currentRange = max - min;
+
+                if (itrCount++ == 3)
+                    break;
+            }
+        }
+
+        var adjusted:Array /* of Number */ = guardMinMax(min, max);
+        if (adjusted)
+        {
+            min = adjusted[0];
+            max = adjusted[1];
+        }
+
+        if (isNaN(assignedMinimum))
+            computedMinimum = min;
+        if (isNaN(assignedMaximum))
+            computedMaximum = max;
+    }
+
+    /**
+     *  An Array of DataDescription structures describing the data being represented by the chart.
+     *  An axis can use this property to generate values for properties, such as its range.
+     *
+     *  @langversion 3.0
+     *  @playerversion Flash 9
+     *  @playerversion AIR 1.1
+     *  @productversion Flex 3
+     */
+    protected function get dataDescriptions():Array /* of DataDescription */
+    {
+        if (!_cachedDataDescriptions)
+        {
+            _cachedDataDescriptions = describeData(requiredDescribedFields);
+            _cachedValuesHaveBounds = false;
+        }
+        return _cachedDataDescriptions;
+    }
+
+    /**
+     *  @private
+     */
+    private function autoGenerate(checkForMargins:Boolean,
+                                    minimumAxisLength:Number):void
+    {
+
+        var min:Number;
+        var max:Number;
+        var v:Object;
+
+        var cachedDataDescriptions:Array /* of DataDescription */ = this.dataDescriptions;
+
+        if (autoAdjust && baseAtZero)
+        {
+        	if(direction == "inverted")
+        		max = zeroValue;
+        	else
+            	min = zeroValue;
+        }
+
+        var n:int = cachedDataDescriptions.length;
+        var val:Number;
+
+        if (n > 0)
+        {
+			var temp:int;
+        	if(direction == "inverted")
+        	{
+           		min = (cachedDataDescriptions[0].min);
+				if(!isNaN(max) && min > max)	//if min > max, swap them
+				{
+					temp = max;
+					max = min;
+					min = temp;
+				}
+            	if (isNaN(max))
+            		max = (cachedDataDescriptions[0].max);
+            	else if (!isNaN(cachedDataDescriptions[0].max))
+            		max = Math.max(max, (cachedDataDescriptions[0].max));
+         	}
+         	else
+         	{
+         		max = (cachedDataDescriptions[0].max);
+				if(!isNaN(min) && min > max)	//if min > max, swap them
+				{
+					temp = max;
+					max = min;
+					min = temp;
+				}
+             	if (isNaN(min))
+            		min = (cachedDataDescriptions[0].min);
+            	else if (!isNaN(cachedDataDescriptions[0].min))
+            		min = Math.min(min, (cachedDataDescriptions[0].min));
+         	}
+            for (var i:int = 0; i < n; i++)
+            {
+                var desc:DataDescription = cachedDataDescriptions[i];
+                if (isNaN(min))
+                    min = desc.min;
+                else if (!isNaN(desc.min))
+                    min = Math.min(min,desc.min);
+                if (isNaN(max))
+                    max= desc.max;
+                else if (!isNaN(desc.max))
+                    max = Math.max(max,desc.max);
+
+                _cachedValuesHaveBounds = _cachedValuesHaveBounds ||
+                    (desc.boundedValues &&
+                     desc.boundedValues.length > 0);
+            }
+
+        }
+
+		var adjusted:Array /* of Number */ = guardMinMax(min,max);
+
+        if (adjusted)
+        {
+            min = adjusted[0];
+            max = adjusted[1];
+        }
+
+        if (isNaN(assignedMinimum))
+            computedMinimum = min;
+        if (isNaN(assignedMaximum))
+            computedMaximum = max;
+    }
+
+    /**
+     *  Adjusts the generated or assigned range of the axis's labels.
+     *  This method is called during the update cycle of the axis. Subclasses can override this method
+     *  to do special processing on the values. By default, no adjustments are made to the range.
+     *
+     *  @param minValue The computed minimum value.
+     *  @param maxValue The computed maximum value.
+     *
+     *  @langversion 3.0
+     *  @playerversion Flash 9
+     *  @playerversion AIR 1.1
+     *  @productversion Flex 3
+     */
+    protected function adjustMinMax(minValue:Number,
+                                    maxValue:Number):void
+    {
+    }
+
+
+    /**
+     *  Protects the range against invalid values for this axis type.
+     *  This function is called during the update cycle of the axis to guarantee that invalid
+     *  ranges are not generated. Subclasses can override this class and define logic that
+     *  is appropriate to their axis type.
+     *
+     *  @param min The computed minimum value.
+     *  @param max The computed maximum value.
+     *
+     *  @return null if no adjustment is necessary, or an Array containing the adjusted
+     *  values of the form [min,max].
+     *
+     *  @langversion 3.0
+     *  @playerversion Flash 9
+     *  @playerversion AIR 1.1
+     *  @productversion Flex 3
+     */
+    protected function guardMinMax(min:Number, max:Number):Array /* of Number */
+    {
+        if (isNaN(min) || !isFinite(min))
+            return [ 0, 100 ];
+
+        else if (isNaN(max) || !isFinite(max) || min == max)
+            return [ min, min + 100 ];
+
+        return null;
+    }
+
+    /**
+     *  @private
+     */
+     mx_internal function getSortOrder():Boolean
+     {
+        return computedMinimum < computedMaximum
+     }
+}
+
+}


Transferred from the Adobe Open Source Subversion Repository

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

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

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

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

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

 package mx.messaging.channels.amfx
 {


Transferred from the Adobe Open Source Subversion Repository

Revision: 5099
Author:   gauravj@adobe.com
Date:     2009-02-27T03:43:02.639229Z

Log Message:
-----------
Update action script files with asdoc version tags.

QE Notes: None.
Doc Notes: Please review and update as necessary.
tests: checkintests

Modified Paths:
--------------
147 paths were modified

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

--- frameworks/projects/rpc/src/mx/messaging/messages/AbstractMessage.as
+++ frameworks/projects/rpc/src/mx/messaging/messages/AbstractMessage.as
@@ -36,6 +36,12 @@
  *  delivered and processed by the remote destination.
  *  The body is an object and is the payload for a message.
  *

+ *
+ *  @langversion 3.0
+ *  @playerversion Flash 9
+ *  @playerversion AIR 1.1
+ *  @productversion BlazeDS 4
+ *  @productversion LCDS 3
  */
 public class AbstractMessage implements IMessage
 {
@@ -50,18 +56,36 @@
      *  batch potentially targeted to different Consumer instances.
      *  Each message will contain this header identifying the Consumer instance that
      *  will receive the message.
+     *
+     *  @langversion 3.0
+     *  @playerversion Flash 9
+     *  @playerversion AIR 1.1
+     *  @productversion BlazeDS 4
+     *  @productversion LCDS 3
      */
     public static const DESTINATION_CLIENT_ID_HEADER:String = "DSDstClientId";

     /**
      *  Messages are tagged with the endpoint id for the Channel they are sent over.
      *  Channels set this value automatically when they send a message.
+     *
+     *  @langversion 3.0
+     *  @playerversion Flash 9
+     *  @playerversion AIR 1.1
+     *  @productversion BlazeDS 4
+     *  @productversion LCDS 3
      */
 	public static const ENDPOINT_HEADER:String = "DSEndpoint";

 	/**
 	 *  This header is used to transport the global FlexClient Id value in outbound
 	 *  messages once it has been assigned by the server.
+	 *
+	 *  @langversion 3.0
+	 *  @playerversion Flash 9
+	 *  @playerversion AIR 1.1
+	 *  @productversion BlazeDS 4
+	 *  @productversion LCDS 3
 	 */
 	public static const FLEX_CLIENT_ID_HEADER:String = "DSId";

@@ -69,12 +93,24 @@
      *  Messages sent by a MessageAgent can have a priority header with a 0-9
      *  numerical value (0 being lowest) and the server can choose to use this
      *  numerical value to prioritize messages to clients.
+     *
+     *  @langversion 3.0
+     *  @playerversion Flash 9
+     *  @playerversion AIR 1.1
+     *  @productversion BlazeDS 4
+     *  @productversion LCDS 3
      */
     public static const PRIORITY_HEADER:String = "DSPriority";

 	/**
      *  Messages that need to set remote credentials for a destination
      *  carry the Base64 encoded credentials in this header.
+	 *
+	 *  @langversion 3.0
+	 *  @playerversion Flash 9
+	 *  @playerversion AIR 1.1
+	 *  @productversion BlazeDS 4
+	 *  @productversion LCDS 3
 	 */
 	public static const REMOTE_CREDENTIALS_HEADER:String = "DSRemoteCredentials";

@@ -82,6 +118,12 @@
      *  Messages that need to set remote credentials for a destination
      *  may also need to report the character-set encoding that was used to
      *  create the credentials String using this header.
+	 *
+	 *  @langversion 3.0
+	 *  @playerversion Flash 9
+	 *  @playerversion AIR 1.1
+	 *  @productversion BlazeDS 4
+	 *  @productversion LCDS 3
 	 */
 	public static const REMOTE_CREDENTIALS_CHARSET_HEADER:String = "DSRemoteCredentialsCharset";

@@ -91,6 +133,12 @@
 	 *  channels and the value controls how long the corresponding MessageResponder
 	 *  will wait for an acknowledgement, result or fault response for the message
 	 *  before timing out the request.
+	 *
+	 *  @langversion 3.0
+	 *  @playerversion Flash 9
+	 *  @playerversion AIR 1.1
+	 *  @productversion BlazeDS 4
+	 *  @productversion LCDS 3
 	 */
 	public static const REQUEST_TIMEOUT_HEADER:String = "DSRequestTimeout";

@@ -98,6 +146,12 @@
      *  A status code can provide context about the nature of a response
      *  message. For example, messages received from an HTTP based channel may
      *  need to report the HTTP response status code (if available).
+     *
+     *  @langversion 3.0
+     *  @playerversion Flash 9
+     *  @playerversion AIR 1.1
+     *  @productversion BlazeDS 4
+     *  @productversion LCDS 3
      */
     public static const STATUS_CODE_HEADER:String = "DSStatusCode";

@@ -129,6 +183,12 @@
     /**
      *  Constructs an instance of an AbstractMessage with an empty body and header.
      *  This message type should not be instantiated or used directly.
+     *
+     *  @langversion 3.0
+     *  @playerversion Flash 9
+     *  @playerversion AIR 1.1
+     *  @productversion BlazeDS 4
+     *  @productversion LCDS 3
      */
     public function AbstractMessage()
     {
@@ -153,6 +213,12 @@
     /**
      *  The body of a message contains the specific data that needs to be
      *  delivered to the remote destination.
+     *
+     *  @langversion 3.0
+     *  @playerversion Flash 9
+     *  @playerversion AIR 1.1
+     *  @productversion BlazeDS 4
+     *  @productversion LCDS 3
      */
     public function get body():Object
     {
@@ -183,6 +249,12 @@

     /**
      *  The clientId indicates which MessageAgent sent the message.
+     *
+     *  @langversion 3.0
+     *  @playerversion Flash 9
+     *  @playerversion AIR 1.1
+     *  @productversion BlazeDS 4
+     *  @productversion LCDS 3
      */
     public function get clientId():String
     {
@@ -209,6 +281,12 @@

     /**
      *  The message destination.
+     *
+     *  @langversion 3.0
+     *  @playerversion Flash 9
+     *  @playerversion AIR 1.1
+     *  @productversion BlazeDS 4
+     *  @productversion LCDS 3
      */
     public function get destination():String
     {
@@ -239,6 +317,12 @@
      *  specific message instance.
      *  Core header names begin with a 'DS' prefix. Custom header names should start
      *  with a unique prefix to avoid name collisions.
+     *
+     *  @langversion 3.0
+     *  @playerversion Flash 9
+     *  @playerversion AIR 1.1
+     *  @productversion BlazeDS 4
+     *  @productversion LCDS 3
      */
     public function get headers():Object
     {
@@ -272,6 +356,12 @@

     /**
      *  The unique id for the message.
+     *
+     *  @langversion 3.0
+     *  @playerversion Flash 9
+     *  @playerversion AIR 1.1
+     *  @productversion BlazeDS 4
+     *  @productversion LCDS 3
      */
     public function get messageId():String
     {
@@ -307,6 +397,12 @@
      *  message expiration.
      *
      *  @see #timeToLive
+     *
+     *  @langversion 3.0
+     *  @playerversion Flash 9
+     *  @playerversion AIR 1.1
+     *  @productversion BlazeDS 4
+     *  @productversion LCDS 3
      */
     public function get timestamp():Number
     {
@@ -340,6 +436,12 @@
      *  and the timeToLive value is 5000, then this message will
      *  expire at 04/05/05 1:30:50 PST.
      *  Once a message expires it will not be delivered to any other clients.
+     *
+     *  @langversion 3.0
+     *  @playerversion Flash 9
+     *  @playerversion AIR 1.1
+     *  @productversion BlazeDS 4
+     *  @productversion LCDS 3
      */
     public function get timeToLive():Number
     {
@@ -441,6 +543,12 @@
      *  Returns a string representation of the message.
      *
      *  @return String representation of the message.
+     *
+     *  @langversion 3.0
+     *  @playerversion Flash 9
+     *  @playerversion AIR 1.1
+     *  @productversion BlazeDS 4
+     *  @productversion LCDS 3
      */
     public function toString():String
     {


Transferred from the Adobe Open Source Subversion Repository

Revision: 18410
Author:   doug.lee@ssbbartgroup.com
Date:     2010-11-02T17:28:47.100709Z

Log Message:
-----------
Implemented accessible sort indicators for DataGrid:
	- MSAA header cell elements get "sorted" or "sorted descending" appended to their names as appropriate.
	- For multicolumn sorts, a sort level is appended to each sort column's MSAA name as well.
	- There are new components.properties localized strings for this update.

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

Modified Paths:
--------------
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/spark/bundles/en_US/components.properties</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/spark/src/spark/accessibility/DataGridAccImpl.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/spark/src/spark/components/DataGrid.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/asdoc/build.xml</path>

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

--- frameworks/projects/spark/src/spark/accessibility/DataGridAccImpl.as
+++ frameworks/projects/spark/src/spark/accessibility/DataGridAccImpl.as
@@ -279,7 +279,14 @@

         if (dgAccInfo.isColumnHeader)
         {
-            // TODO: Allow doDefaultAction to sort columns
+            if (dgAccInfo.dataGrid.sortableColumns
+            && dgAccInfo.dataGrid.columns.getItemAt(dgAccInfo.columnIndex).sortable)
+            {
+                // TODO: This only allows sorting by one column at a time.
+                dgAccInfo.dataGrid.sortByColumns(
+                    Vector.<int>([dgAccInfo.columnIndex])
+                );
+            }
             return;
         }

@@ -365,8 +372,27 @@
         dgAccInfo.setup(master, childID);
         if (dgAccInfo.isInvalid || !dgAccInfo.dataGrid.columns)
             return null;
+        var resourceManager:IResourceManager;
         if (dgAccInfo.isColumnHeader)
-            return dgAccInfo.dataGrid.columns.getItemAt(dgAccInfo.columnIndex).headerText;
+        {
+            var column:Object = dgAccInfo.dataGrid.columns.getItemAt(dgAccInfo.columnIndex);
+            var headerName:String = column.headerText;
+            var sortColumnIndices:Vector.<int> = dgAccInfo.dataGrid.columnHeaderGroup.visibleSortIndicatorIndices;
+            var sortIndex:int = sortColumnIndices.indexOf(dgAccInfo.columnIndex);
+            if (sortIndex < 0)
+                return headerName;
+            resourceManager = ResourceManager.getInstance();
+            var sortString:String;
+            if (column.sortDescending)
+                sortString = resourceManager.getString("components", "sortedDescending");
+            else
+                sortString = resourceManager.getString("components", "sortedAscending");
+            if (sortColumnIndices.length > 1)
+                sortString += resourceManager.getString("components", "sortLevel"
+                ).replace("%1", String(sortIndex+1));
+            headerName = headerName +" " +sortString;
+            return headerName;
+        }
         if (!dgAccInfo.dataGrid.dataProvider)
             return null;

@@ -376,7 +402,7 @@
         var rowString:String = "";
         if ((dgAccInfo.isCellMode && dgAccInfo.columnIndex == 0) || !dgAccInfo.isCellMode)
         {
-            var resourceManager:IResourceManager = ResourceManager.getInstance();
+            resourceManager = ResourceManager.getInstance();
             rowString = resourceManager.getString("components", "rowMofN");
             rowString = rowString.replace("%1", dgAccInfo.reachableRowIndex + 1).replace("%2", dgAccInfo.reachableRowCount);
         }


Transferred from the Adobe Open Source Subversion Repository

Revision: 23247
Author:   cframpto@adobe.com
Date:     2011-12-20T19:21:13.134833Z

Log Message:
-----------
Remove ADOBE SYSTEMS license and replace with Apache license in headers - frameworks.  A 2nd pass will be needed to get the files not handled up by the scripts.

Modified Paths:
--------------
4959 paths were modified

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

--- frameworks/projects/automation_spark/src/spark/automation/delegates/skins/spark/SparkDefaultGridItemRendererAutomationImpl.as
+++ frameworks/projects/automation_spark/src/spark/automation/delegates/skins/spark/SparkDefaultGridItemRendererAutomationImpl.as
@@ -1,11 +1,19 @@
 ////////////////////////////////////////////////////////////////////////////////
 //
-//  ADOBE SYSTEMS INCORPORATED
-//  Copyright 2009 Adobe Systems Incorporated
-//  All Rights Reserved.
+//  Licensed to the Apache Software Foundation (ASF) under one or more
+//  contributor license agreements.  See the NOTICE file distributed with
+//  this work for additional information regarding copyright ownership.
+//  The ASF licenses this file to You under the Apache License, Version 2.0
+//  (the "License"); you may not use this file except in compliance with
+//  the License.  You may obtain a copy of the License at
 //
-//  NOTICE: Adobe permits you to use, modify, and distribute this file
-//  in accordance with the terms of the license agreement accompanying it.
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+//  Unless required by applicable law or agreed to in writing, software
+//  distributed under the License is distributed on an "AS IS" BASIS,
+//  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//  See the License for the specific language governing permissions and
+//  limitations under the License.
 //
 ////////////////////////////////////////////////////////////////////////////////
 package spark.automation.delegates.skins.spark


Update InAppPurchase.as

Update InAppPurchase.as

Restore from appstore not from memory

--- actionscript/src/com/freshplanet/ane/AirInAppPurchase/InAppPurchase.as
+++ actionscript/src/com/freshplanet/ane/AirInAppPurchase/InAppPurchase.as
@@ -167,9 +167,12 @@
 			}
 			else if (Capabilities.manufacturer.indexOf("iOS") > -1)
 			{
-				var jsonPurchases:String = "[" + _iosPendingPurchases.join(",") + "]";
-				var jsonData:String = "{ \"purchases\": " + jsonPurchases + "}";
-				dispatchEvent(new InAppPurchaseEvent(InAppPurchaseEvent.RESTORE_INFO_RECEIVED, jsonData));
+				extCtx.call("restoreTransaction");
+
+				//This restore purchases in memory not from appstore
+				//var jsonPurchases:String = "[" + _iosPendingPurchases.join(",") + "]";
+				//var jsonData:String = "{ \"purchases\": " + jsonPurchases + "}";
+				//dispatchEvent(new InAppPurchaseEvent(InAppPurchaseEvent.RESTORE_INFO_RECEIVED, jsonData));
 			}
 		}


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

--- frameworks/projects/automation_spark/src/spark/automation/delegates/components/supportClasses/SparkSkinnableComponentAutomationImpl.as
+++ frameworks/projects/automation_spark/src/spark/automation/delegates/components/supportClasses/SparkSkinnableComponentAutomationImpl.as
@@ -0,0 +1,66 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  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 spark.automation.delegates.components.supportClasses
+{
+	import flash.display.DisplayObject;
+
+	import mx.automation.Automation;
+	import mx.automation.delegates.core.UIComponentAutomationImpl;
+	import mx.core.mx_internal;
+
+	import spark.components.supportClasses.SkinnableComponent;
+
+	use namespace mx_internal;
+
+	[Mixin]
+	/**
+	 *
+	 *  Defines methods and properties required to perform instrumentation for the
+	 *  SkinnableComponent control.
+	 *
+	 *  @see spark.components.supportClasses.SkinnableComponent
+	 *
+	 */
+	public class SparkSkinnableComponentAutomationImpl extends UIComponentAutomationImpl
+	{
+		include "../../../../core/Version.as";
+
+		//--------------------------------------------------------------------------
+		//
+		//  Class methods
+		//
+		//--------------------------------------------------------------------------
+
+		/**
+		 *  Registers the delegate class for a component class with automation manager.
+		 *
+		 *  @param root The SystemManger of the application.
+		 */
+		public static function init(root:DisplayObject):void
+		{
+			Automation.registerDelegateClass(spark.components.supportClasses.SkinnableComponent, SparkSkinnableComponentAutomationImpl);
+		}
+
+		/**
+		 *  Constructor.
+		 * @param obj SkinnableComponent object to be automated.
+		 */
+		public function SparkSkinnableComponentAutomationImpl(obj:spark.components.supportClasses.SkinnableComponent)
+		{
+			super(obj);
+
+		}
+
+
+	}
+
+}


Transferred from the Adobe Open Source Subversion Repository

Revision: 5101
Author:   gauravj@adobe.com
Date:     2009-02-27T05:22:45.887116Z

Log Message:
-----------
Update action script files with asdoc version tags.

QE Notes: None.
Doc Notes: Please review and update as necessary.
tests: checkintests

Modified Paths:
--------------
663 paths were modified

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

--- frameworks/projects/framework/src/mx/events/PropertyChangeEventKind.as
+++ frameworks/projects/framework/src/mx/events/PropertyChangeEventKind.as
@@ -17,6 +17,11 @@
  *  for the kind property of the PropertyChangeEvent class.
  *
  *  @see mx.events.PropertyChangeEvent
+ *
+ *  @langversion 3.0
+ *  @playerversion Flash 9
+ *  @playerversion AIR 1.1
+ *  @productversion Flex 3
  */
 public final class PropertyChangeEventKind
 {
@@ -30,11 +35,21 @@

     /**
 	 *  Indicates that the value of the property changed.
+	 *
+	 *  @langversion 3.0
+	 *  @playerversion Flash 9
+	 *  @playerversion AIR 1.1
+	 *  @productversion Flex 3
 	 */
 	public static const UPDATE:String = "update";

     /**
 	 *  Indicates that the property was deleted from the object.
+	 *
+	 *  @langversion 3.0
+	 *  @playerversion Flash 9
+	 *  @playerversion AIR 1.1
+	 *  @productversion Flex 3
 	 */
 	public static const DELETE:String = "delete";
 }


Transferred from the Adobe Open Source Subversion Repository

Revision: 19332
Author:   smgilson@adobe.com
Date:     2010-12-13T21:25:51.702982Z

Log Message:
-----------
ASDoc update

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

Modified Paths:
--------------
/private/flex/sdk/branches/hero_private/frameworks/projects/mobilecomponents/src/spark/components/ActionBar.as

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

--- frameworks/projects/mobilecomponents/src/spark/components/ActionBar.as
+++ frameworks/projects/mobilecomponents/src/spark/components/ActionBar.as
@@ -29,6 +29,8 @@

 /**
  *  Alignment of the title relative to the ActionBar dimensions.
+ *  Possible values are "left", "right",
+ *  and "center".
  *
  *  @default "center"
  *
@@ -65,6 +67,8 @@

 /**
  *  @copy spark.components.SkinnableContainer#style:contentBackgroundAlpha
+ *
+ *  @default 1.0
  *
  *  @langversion 3.0
  *  @playerversion Flash 10
@@ -75,6 +79,8 @@

 /**
  *  @copy spark.components.supportClasses.GroupBase#style:contentBackgroundColor
+ *
+ *  @default 0xFFFFFF
  *
  *  @langversion 3.0
  *  @playerversion Flash 10
@@ -122,7 +128,8 @@
 //--------------------------------------

 /**
- *  Base state of ActionBar with titleDisplay and no content
+ *  Base state of ActionBar with the titleDisplay
+ *  skin part and no content
  *
  *  @langversion 3.0
  *  @playerversion Flash 10
@@ -132,7 +139,9 @@
 [SkinState("title")]

 /**
- *  ActionBar with titleDisplay and actionContent only
+ *  ActionBar with content defined for the titleDisplay
+ *  skin part, and components defined in the actionContent
+ *  property for display in the actionGroup skin part.
  *
  *  @langversion 3.0
  *  @playerversion Flash 10
@@ -142,7 +151,9 @@
 [SkinState("titleWithAction")]

 /**
- *  ActionBar with titleDisplay and navigationContent only
+ *  ActionBar with content defined for the titleDisplay
+ *  skin part, and components defined in the navigationContent
+ *  property for display in the navigationGroup skin part.
  *
  *  @langversion 3.0
  *  @playerversion Flash 10
@@ -152,7 +163,10 @@
 [SkinState("titleWithNavigation")]

 /**
- *  ActionBar with title both action and navigation content
+ *  ActionBar with content defined for the titleDisplay
+ *  skin part, and components for display in
+ *  the actionGroup skin part and in
+ *  the navigationGroup skin part.
  *
  *  @langversion 3.0
  *  @playerversion Flash 10
@@ -162,7 +176,8 @@
 [SkinState("titleWithActionAndNavigation")]

 /**
- *  ActionBar with titleContent in place of titleDisplay
+ *  ActionBar with content in the titleContent
+ *  skin part, but not in the titleDisplay skin part.
  *
  *  @langversion 3.0
  *  @playerversion Flash 10
@@ -172,7 +187,9 @@
 [SkinState("titleContent")]

 /**
- *  ActionBar with title and action content
+ *  ActionBar with content in the titleContent
+ *  skin part, and components defined in the actionContent
+ *  property for display in the actionGroup skin part.
  *
  *  @langversion 3.0
  *  @playerversion Flash 10
@@ -183,7 +200,9 @@

 /**
- *  ActionBar with title and navigation content
+ *  ActionBar with content in the titleContent
+ *  skin part, and components defined in the navigationContent
+ *  property for display in the navigationGroup skin part.
  *
  *  @langversion 3.0
  *  @playerversion Flash 10
@@ -193,7 +212,10 @@
 [SkinState("titleContentWithNavigation")]

 /**
- *  ActionBar with title, action and navigation content
+ *  ActionBar with content defined for the titleContent
+ *  skin part, and components for display in
+ *  the actionGroup skin part and in
+ *  the navigationGroup skin part.
  *
  *  @langversion 3.0
  *  @playerversion Flash 10
@@ -204,10 +226,46 @@

 /**
  *  The ActionBar class defines a component that includes title, navigation
- *  and action content groups. In the context of a ViewNavigator and
- *  ViewNavigatorApplication, the ActionBar is used as application chrome which
- *  has content contributed by the active View. ActionBar has limited
- *  utility when used otherwise.
+ *  and action content groups.
+ *  The ActionBar control provides a standard area for navigation and action controls.
+ *  It lets you define global controls that can be used from anywhere in the application,
+ *  or controls specific to a view.
+ *
+ *
The ActionBar control defines three distinct areas:

+ *
+ *

+ *
Navigation area
+ *
Contains components that let the user navigate the section.
+ *         For example, you can define a home button in the navigation area.
+ *         Use the navigationContent property to define
+ *         the components that appear in the navigation area.
+ *         Use the navigationLayout property to define
+ *         the layout of the navigation area.

+ *
Title area
+ *
Contains either a String containing title text, or components.
+ *         If you specify components, you cannot specify a title String.
+ *         Use the title property to specify the String to appear in
+ *         the title area.
+ *         Use the titleContent property to define the
+ *         components that appear in the title area.
+ *         Use the titleLayout property to define the
+ *         layout of the title area.
+ *         If you specify a value for the titleContent property,
+ *         the ActionBar skin ignores the title property.

+ *
Action area
+ *
Contains components that define actions the user can take in a view.
+ *         For example, you might define a search or refresh button as part of
+ *         the action area.
+ *         Use the actionContent property to define the components
+ *         that appear in the action area.
+ *         Use the actionLayout property to define the layout
+ *         of the action area.

+ *

+ *
+ *
For a mobile application with a single section, meaning a single
+ *  ViewNavigator container, all views share the same action bar.
+ *  For a mobile application with multiple sections, meaning one with multiple
+ *  ViewNavigator containers, each section defines its own action bar.

  *
  *  @mxml
  *
@@ -217,22 +275,21 @@
  *

  *  <s:ActionBar
  *   Properties
+ *    actionContent="null"
+ *    actionLayout="HorizontalLayout"
+ *    navigationContent="null"
+ *    navigationLayout="HorizontalLayout"
  *    title=""
  *    titleContent="null"
  *    titleLayout="HorizontalLayout"
- *    navigationContent="null"
- *    navigationLayout="HorizontalLayout"
- *    actionContent="null"
- *    actionLayout="HorizontalLayout"
  *
  *   Styles
  *    backgroundAlpha="1.0"
  *    titleAlign="left"
- *
- *  <
+ *  >
  *

  *
- *  @see SkinnableComponent
+ *  @see spark.components.SkinnableContainer
  *  @see ViewNavigator
  *  @see View
  *  @see ViewNavigatorApplication
@@ -395,7 +452,14 @@
     /**
      *  Title or caption displayed in the title area.
      *
+     *
Use the titleContent property to define
+     *  the components that appear in the title area.
+     *  If you specify a value for the titleContent property,
+     *  the ActionBar skin ignores the title property.

+     *
      *  @default ""
+     *
+     *  @see #titleContent
      *
      *  @langversion 3.0
      *  @playerversion Flash 10
@@ -431,20 +495,22 @@
     [ArrayElementType("mx.core.IVisualElement")]

     /**
-     *  The set of components to include in the navigationGroup of the
-     *  ActionBar. The location and appearance of the navigationGroup of the
-     *  ActionBar container is determined by the
-     *  spark.skins.mobile.ActionBarSkin.
-     *
-     *
The default ActionBarSkin class defines the navigationGroup to appear
-     *  to the left of the titleGroup area of the ActionBar.

-     *
+     *  The components that define navigation for the user.
+     *  These components appear in the navigation area of the control,
+     *  in the navigationGroup skin part.
+     *
+     *
The location and appearance of the navigationGroup
+     *  skin part is determined by the skin.
+     *  The default ActionBarSkin class defines the navigationGroup
+     *  to appear to the left of the titleGroup area of the ActionBar.

+     *
      *
Create a custom skin to change the default location and appearance of
-     *  the navigationGroup.

+     *  the navigationGroup skin part.

      *
      *  @default null
      *
      *  @see spark.skins.mobile.ActionBarSkin
+     *  @see #navigationLayout
      *
      *  @langversion 3.0
      *  @playerversion Flash 10
@@ -482,9 +548,12 @@
     //----------------------------------

     /**
-     *  Defines the layout of the navigationGroup.
+     *  Defines the layout of the components contained in
+     *  the navigationGroup skin part.
      *
      *  @default HorizontalLayout
+     *
+     *  @see #navigationContent
      *
      *  @langversion 3.0
      *  @playerversion Flash 10
@@ -522,24 +591,29 @@
     [ArrayElementType("mx.core.IVisualElement")]

     /**
-     *  The set of components to include in the titleGroup of the
-     *  ActionBar. If titleContent is not null, it's visual elements replace
-     *  the mxmlContent of titleGroup. If titleContent is null, the
-     *  titleDisplay skin part, if present, is displayed in place of the
-     *  titleGroup.
-     *
-     *
The location and appearance of the titleGroup of the
-     *  ActionBar container is determined by the
-     *  spark.skins.mobile.ActionBarSkin class. By default, the ActionBarSkin
-     *  class defines the titleGroup to appear in the center of the ActionBar,
-     *  using the space remaining between navigationGroup and actionGroup.

-     *
+     *  The components that appear in the title area of the control.
+     *  These components appear in the titleGroup
+     *  skin part of the ActionBar control.
+     *
+     *
The location and appearance of the titleGroup
+     *  skin part is determined by the skin.
+     *  The default ActionBarSkin class defines the titleGroup
+     *  to appear in the center of the ActionBar,
+     *  using the space remaining between navigationGroup
+     *  and actionGroup skin parts.

+     *
+     *
If titleContent is null, the
+     *  titleDisplay skin part, if present, is displayed
+     *  in place of the titleGroup skin part.

+     *
      *
Create a custom skin to change the default location and appearance of
-     *  the titleGroup.

+     *  the titleGroup skin part.

      *
      *  @default null
      *
      *  @see spark.skins.mobile.ActionBarSkin
+     *  @see #title
+     *  @see #titleLayout
      *
      *  @langversion 3.0
      *  @playerversion Flash 10
@@ -579,12 +653,15 @@
     //----------------------------------

     /**
-     *  Defines the layout of titleGroup and titleDisplay.
-     *
-     *
If titleContent is null, titleDisplay is displayed in place of
-     *  titleGroup. In this case, titleDisplay is positioned with
-     *  padded using paddingLeft and paddingRight properties of
-     *  titleLayout if defined.

+     *  Defines the layout of the titleGroup
+     *  and titleDisplay skin parts.
+     *
+     *
If titleContent is null, titleDisplay
+     *  is displayed in place of titleGroup.
+     *  In this case, titleDisplay is positioned
+     *  by using the padding specified by the
+     *  paddingLeft and paddingRight properties of
+     *  titleLayout, if defined.

      *
      *  @default HorizontalLayout
      *  @see #titleContent
@@ -625,19 +702,22 @@
     [ArrayElementType("mx.core.IVisualElement")]

     /**
-     *  The set of components to include in the actionGroup of the
-     *  ActionBar. The location and appearance of the actionGroup of the
-     *  ActionBar container is determined by the skin.
-     *
-     *
The default ActionBarSkin class defines the actionGroup to appear
-     *  to the right of the title display area of the ActionBar.

+     *  The components that define actions the user can take in a view.
+     *  These components appear in the action area of the control,
+     *  using the actionGroup skin part.
+     *
+     *
The location and appearance of the actionGroup
+     *  skin part is determined by the skin.
+     *  The default ActionBarSkin class defines the actionGroup
+     *  to appear to the right of the title display area of the ActionBar.

      *
      *
Create a custom skin to change the default location and appearance of
-     *  the actionGroup.

+     *  the actionGroup skin part.

      *
      *  @default null
      *
      *  @see spark.skins.mobile.ActionBarSkin
+     *  @see #actionLayout
      *
      *  @langversion 3.0
      *  @playerversion Flash 10
@@ -675,9 +755,12 @@
     //----------------------------------

     /**
-     *  Defines the layout of the actionGroup.
+     *  Defines the layout of the components defined in the
+     *  action area by the actionGroup property.
      *
      *  @default HorizontalLayout
+     *
+     *  @see #actionContent
      *
      *  @langversion 3.0
      *  @playerversion Flash 10


Transferred from the Adobe Open Source Subversion Repository

Revision: 23247
Author:   cframpto@adobe.com
Date:     2011-12-20T19:21:13.134833Z

Log Message:
-----------
Remove ADOBE SYSTEMS license and replace with Apache license in headers - frameworks.  A 2nd pass will be needed to get the files not handled up by the scripts.

Modified Paths:
--------------
4959 paths were modified

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

--- frameworks/projects/mobiletheme/src/spark/skins/mobile/TextAreaSkin.as
+++ frameworks/projects/mobiletheme/src/spark/skins/mobile/TextAreaSkin.as
@@ -1,11 +1,19 @@
 ////////////////////////////////////////////////////////////////////////////////
 //
-//  ADOBE SYSTEMS INCORPORATED
-//  Copyright 2010 Adobe Systems Incorporated
-//  All Rights Reserved.
+//  Licensed to the Apache Software Foundation (ASF) under one or more
+//  contributor license agreements.  See the NOTICE file distributed with
+//  this work for additional information regarding copyright ownership.
+//  The ASF licenses this file to You under the Apache License, Version 2.0
+//  (the "License"); you may not use this file except in compliance with
+//  the License.  You may obtain a copy of the License at
 //
-//  NOTICE: Adobe permits you to use, modify, and distribute this file
-//  in accordance with the terms of the license agreement accompanying it.
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+//  Unless required by applicable law or agreed to in writing, software
+//  distributed under the License is distributed on an "AS IS" BASIS,
+//  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//  See the License for the specific language governing permissions and
+//  limitations under the License.
 //
 ////////////////////////////////////////////////////////////////////////////////


Transferred from the Adobe Open Source Subversion Repository

Revision: 8121
Author:   hmuller@adobe.com
Date:     2009-06-23T22:04:05.964881Z

Log Message:
-----------
Restored Jason's (elegant!) floating point precision fix to Range/nearestValidValue().  Fixed a bug that could prevent slider's thumb from reaching the minimum.  Made the IVisualElement depth property work more reliably for virtualized DataGroups.  Defended against viewport.width/height = NaN in H,VScrollBar.

QE Notes:
Doc Notes:
Bugs:  sdk-21953, sdk-21951, sdk-21903, sdk-21964
Reviewer: Jason, Chet

Modified Paths:
--------------
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/spark/src/spark/components/VScrollBar.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/spark/src/spark/components/HScrollBar.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/spark/src/spark/components/supportClasses/Slider.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/spark/src/spark/components/DataGroup.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/spark/src/spark/components/supportClasses/Range.as</path>

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

--- frameworks/projects/spark/src/spark/components/supportClasses/Range.as
+++ frameworks/projects/spark/src/spark/components/supportClasses/Range.as
@@ -377,12 +377,27 @@
     {
         if (interval == 0)
             return Math.max(minimum, Math.min(maximum, value));
-
+
         var lower:Number = Math.max(minimum, Math.floor(value / interval) * interval);
         var upper:Number = Math.min(maximum, Math.floor((value + interval) / interval) * interval);
-        return ((value - lower) >= ((upper - lower) / 2)) ? upper : lower;
-    }
-
+        var validValue:Number = ((value - lower) >= ((upper - lower) / 2)) ? upper : lower;
+
+        // If interval isn't an integer, there's a possibility that the
+        // floating point approximation of validValue will be slightly larger
+        // or smaller than what one would expect.  For example if value=6 and interval=0.1
+        // then validValue=0.6000000000000001.  This confuses code which converts Range
+        // values to/from strings, so we limit the number of significant decimals to the
+        // number present in interval.
+        if (interval != Math.round(interval))
+        {
+            var parts:Array = (new String(1 + interval)).split(".");
+            var scale:Number = Math.pow(10, parts[1].length);
+            validValue = Math.round(validValue * scale) / scale;
+        }
+
+        return validValue;
+    }
+
     /**
      *  Sets the backing store for the value property and
      *  dispatches a valueCommit event if the property changes.


Transferred from the Adobe Open Source Subversion Repository

Revision: 22206
Author:   jszeto@adobe.com
Date:     2011-08-25T05:05:31.305350Z

Log Message:
-----------
SpinnerList and BorderContainer bug fixes

SDK-31257 - DateSpinner doesn't show today's date with a certain application

Added a resize listener to SpinnerList

SDK-31335 - SpinnerList with NumericDataProvider doesn't spin

Copy enabled logic from DateSpinnerItemRenderer

SDK-31171 - BorderContainerSkin's minHeight is too big

Changed minimum dimensions from 112 to 30

QE notes: none
Doc notes: none
Bugs: SDK-31257, SDK-31335, SDK-31171
Reviewer: Tom K, Chiedo
Tests run: checkintests
Is noteworthy for integration: no

Modified Paths:
--------------
<path kind="file" action="M">/private/flex/sdk/branches/4.y/frameworks/projects/mobilecomponents/src/spark/components/SpinnerList.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/4.y/frameworks/projects/spark/src/spark/skins/spark/BorderContainerSkin.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/4.y/frameworks/projects/mobilecomponents/src/spark/layouts/VerticalSpinnerLayout.as</path>

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

--- frameworks/projects/spark/src/spark/skins/spark/BorderContainerSkin.as
+++ frameworks/projects/spark/src/spark/skins/spark/BorderContainerSkin.as
@@ -63,7 +63,8 @@
 	{
 	    super();

-        minWidth = minHeight = 112;
+        minWidth = 30;
+        minHeight = 30;

 	    states = [
             new State({name:"normal"}),


added z-order control to geometry plotter

--- WeaveUISpark/src/weave/visualization/plotters/GeometryPlotter.as
+++ WeaveUISpark/src/weave/visualization/plotters/GeometryPlotter.as
@@ -35,14 +35,15 @@
 	import weave.api.primitives.IBounds2D;
 	import weave.api.registerLinkableChild;
 	import weave.api.setSessionState;
-	import weave.api.ui.ISelectableAttributes;
 	import weave.api.ui.IPlotTask;
 	import weave.api.ui.IPlotter;
 	import weave.api.ui.IPlotterWithGeometries;
+	import weave.api.ui.ISelectableAttributes;
 	import weave.compiler.Compiler;
 	import weave.core.LinkableBoolean;
 	import weave.core.LinkableHashMap;
 	import weave.core.LinkableNumber;
+	import weave.data.AttributeColumns.DynamicColumn;
 	import weave.data.AttributeColumns.ImageColumn;
 	import weave.data.AttributeColumns.ReprojectedGeometryColumn;
 	import weave.data.AttributeColumns.StreamedGeometryColumn;
@@ -70,8 +71,8 @@
 			line.color.defaultValue.value = 0x000000;

 			linkSessionState(StreamedGeometryColumn.geometryMinimumScreenArea, pixellation);
-
-			setSingleKeySource(geometryColumn);
+
+			updateKeySources();

 			// not every change to the geometries changes the keys
 			geometryColumn.removeCallback(_filteredKeySet.triggerCallbacks);
@@ -95,7 +96,18 @@
 		/**
 		 * This is the reprojected geometry column to draw.
 		 */
-		public const geometryColumn:ReprojectedGeometryColumn = newLinkableChild(this, ReprojectedGeometryColumn);
+		public const geometryColumn:ReprojectedGeometryColumn = newLinkableChild(this, ReprojectedGeometryColumn);
+
+		/**
+		 * Determines the Z order of geometries
+		 */
+		public const zOrderColumn:DynamicColumn = newLinkableChild(this, DynamicColumn);
+		public const zOrderAscending:LinkableBoolean = registerLinkableChild(this, new LinkableBoolean(true), updateKeySources);
+
+		private function updateKeySources():void
+		{
+			setColumnKeySources([geometryColumn, zOrderColumn], [0, zOrderAscending.value ? 1 : -1]);
+		}

 		/**
 		 *  This is the default URL path for images, when using images in place of points.


use 0 as default value when viewportWidth/viewportHeight is not defined in the scene bindings

--- src/aerys/minko/scene/node/camera/Camera.as
+++ src/aerys/minko/scene/node/camera/Camera.as
@@ -59,8 +59,12 @@
 			var zNear			: Number		= _cameraData.zNear;
 			var zFar			: Number		= _cameraData.zFar;
 			var fovDiv2			: Number		= _cameraData.fieldOfView * 0.5;
-			var width			: Number		= sceneBindings.getProperty('viewportWidth');
-			var height			: Number		= sceneBindings.getProperty('viewportHeight');
+			var width			: Number		= sceneBindings.propertyExists('viewportWidth')
+                ? sceneBindings.getProperty('viewportWidth')
+                : 0.;
+			var height			: Number		= sceneBindings.propertyExists('viewportHeight')
+                ? sceneBindings.getProperty('viewportHeight')
+                : 0.;
 			var xPercent		: Number		= 2.0 * (x / width - 0.5);
 			var yPercent 		: Number		= 2.0 * (y / height - 0.5);
 			var dx				: Number 		= Math.tan(fovDiv2) * xPercent * (width / height);


No longer can delete fixed modules in blocs

--- src/Components/Bloc.as
+++ src/Components/Bloc.as
@@ -89,7 +89,8 @@
 			place(p);

 			for each (var module:Module in modules)
-				module.manifest();
+				if (!module.FIXED)
+					module.manifest();

 			for each (var link:Link in links)
 				Link.place(link);
@@ -99,7 +100,8 @@

 		public function demanifest():Boolean {
 			for each (var module:Module in modules)
-				module.demanifest();
+				if (!module.FIXED)
+					module.demanifest();

 			exists = false;
 			return true;


Flash: Bunch of fixes to avoid various errors during cancellation of the current upload. As suggested in #513.

--- src/flash/plupload/src/com/plupload/File.as
+++ src/flash/plupload/src/com/plupload/File.as
@@ -49,6 +49,8 @@
 		private var _id:String, _fileName:String, _size:Number, _imageData:ByteArray;
 		private var _multipart:Boolean, _fileDataName:String, _chunking:Boolean, _chunk:int, _chunks:int, _chunkSize:int, _postvars:Object;
 		private var _headers:Object, _settings:Object;
+		private var _removeAllListeners:Function;
+		private var _removeAllURLStreamListeners:Function;

 		/**
 		 * Id property of file.
@@ -98,9 +100,27 @@
 		{
 			if (this.canUseSimpleUpload(this._settings)) {
 				this._fileRef.cancel();
-			} else if (this._urlStream && this._urlStream.connected) {
+			} else if (!this._urlStream) {
+				// In case of a large file and before _fileRef.load#COMPLETE.
+				// Need to cancel() twice, not sure why.
+				// If single cancel(), #2037 will occurred at _fileRef.load().
+				this._fileRef.cancel();
+				this._fileRef.cancel();
+				this._removeAllListeners();
+			} else if (this._urlStream.connected) {
+				// just in case
+				this._removeAllURLStreamListeners();
+
 				this._urlStream.close();
-			}
+
+				// In case of a large file and after the first uploadNextChunk().
+				// #2174 will occur at _fileRef.load() and
+				// #2029 will occur at _urlStream.readUTFBytes as well
+				// after loading file is stopped before _fileRef.load#COMPLETE.
+
+				// Uploaded file will be broken as well if the following line does not exist.
+				this._urlStream = null;
+			}
 		}

 		/**
@@ -133,15 +153,16 @@
 		}

 		public function simpleUpload(url:String, settings:Object):void {
-			var file:File = this, request:URLRequest, postData:URLVariables, fileDataName:String,
-				onProgress:Function, onUploadComplete:Function, onIOError:Function, onSecurityErrorEvent:Function,
-
-				removeAllListeners:Function = function () : void {
+			var file:File = this, request:URLRequest, postData:URLVariables, fileDataName:String;
+			var onProgress:Function, onUploadComplete:Function, onIOError:Function, onSecurityErrorEvent:Function;
+			var removeAllListeners:Function = function () : void {
 					file._fileRef.removeEventListener(ProgressEvent.PROGRESS, onProgress);
 					file._fileRef.removeEventListener(DataEvent.UPLOAD_COMPLETE_DATA, onUploadComplete);
 					file._fileRef.removeEventListener(IOErrorEvent.IO_ERROR, onIOError);
 					file._fileRef.removeEventListener(SecurityErrorEvent.SECURITY_ERROR, onSecurityErrorEvent);
 				};
+
+			this._removeAllListeners = removeAllListeners;

 			file._postvars = settings["multipart_params"];
 			file._chunk = 0;
@@ -214,8 +235,8 @@
 		public function advancedUpload(url:String, settings:Object):void {
 			var file:File = this, width:int, height:int, quality:int, multipart:Boolean, chunking:Boolean, fileDataName:String;
 			var chunk:int, chunks:int, chunkSize:int, postvars:Object;
-			var onComplete:Function, onIOError:Function,
-				removeAllListeneres:Function = function() : void {
+			var onComplete:Function, onIOError:Function;
+			var removeAllListeners:Function = function() : void {
 					file._fileRef.removeEventListener(Event.COMPLETE, onComplete);
 					file._fileRef.removeEventListener(IOErrorEvent.IO_ERROR, onIOError);
 				};
@@ -225,6 +246,9 @@
 			this._cancelled = false;
 			this._headers = settings.headers;
 			this._mimeType = settings.mime;
+
+			// make it available for whole class (cancelUpload requires it for example)
+			this._removeAllListeners = removeAllListeners;

 			multipart = new Boolean(settings["multipart"]);
 			fileDataName = new String(settings["file_data_name"]);
@@ -235,7 +259,7 @@

 			// When file is loaded start uploading
 			onComplete = function(e:Event):void {
-				removeAllListeneres();
+				removeAllListeners();

 				var startUpload:Function = function() : void
 				{
@@ -302,8 +326,8 @@

 			// File load IO error
 			onIOError = function(e:Event):void {
-				removeAllListeneres();
-				this.dispatchEvent(e);
+				removeAllListeners();
+				dispatchEvent(e);
 			};
 			this._fileRef.addEventListener(IOErrorEvent.IO_ERROR, onIOError);

@@ -318,10 +342,12 @@
 			var file:File = this, fileData:ByteArray, chunkData:ByteArray, req:URLRequest, url:String;
 			var onComplete:Function, onIOError:Function, onSecurityError:Function;
 			var removeAllEventListeners:Function = function() : void {
-				file._urlStream.removeEventListener(Event.COMPLETE, onComplete);
-				file._urlStream.removeEventListener(IOErrorEvent.IO_ERROR, onIOError);
-				file._urlStream.removeEventListener(SecurityErrorEvent.SECURITY_ERROR, onSecurityError);
-			};
+					file._urlStream.removeEventListener(Event.COMPLETE, onComplete);
+					file._urlStream.removeEventListener(IOErrorEvent.IO_ERROR, onIOError);
+					file._urlStream.removeEventListener(SecurityErrorEvent.SECURITY_ERROR, onSecurityError);
+				};
+
+			this._removeAllURLStreamListeners = removeAllEventListeners;

 			// All chunks uploaded?
 			if (this._chunk >= this._chunks) {