Transferred from the Adobe Open Source Subversion Repository

Revision: 21305
Author:   tkraikit@adobe.com
Date:     2011-05-27T15:17:12.462309Z

Log Message:
-----------
SDK-30438: extend caching of screen dimensions to deal with any pre- and post-orientation change pairs, e.g. portrait/landscape, p/l+(soft keyboard active), p/l+(full screen). etc. Fixes bug where on iOS if soft keyboard is up then screen resizes incorrectly post-rotation

QE notes: -
Doc notes: -
Bugs: SDK-30438
Reviewer: Jason Szeto, Chiedo, Jason San Jose
Tests run: checkintests, cyclone
Is noteworthy for integration: no

Modified Paths:
--------------
/private/flex/sdk/branches/4.y/frameworks/projects/spark/src/spark/components/Application.as

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

--- frameworks/projects/spark/src/spark/components/Application.as
+++ frameworks/projects/spark/src/spark/components/Application.as
@@ -14,7 +14,6 @@

 import flash.display.DisplayObject;
 import flash.display.InteractiveObject;
-import flash.display.Stage;
 import flash.events.ContextMenuEvent;
 import flash.events.Event;
 import flash.events.EventDispatcher;
@@ -27,6 +26,7 @@
 import flash.system.Capabilities;
 import flash.ui.ContextMenu;
 import flash.ui.ContextMenuItem;
+import flash.utils.Dictionary;
 import flash.utils.setInterval;

 import mx.core.EventPriority;
@@ -295,14 +295,37 @@
      *  Flag set to true if the application has temporarily set its explicit
      *  width and height to deal with orientation.
      */
-    private var restoreApplicationWidthAndHeight:Boolean = false;
-
-    /**
-     *  @private
-     *  Caches the application's width and height values for the portrait
-     *  and landscape orientations.
-     */
-    private var cachedSizes:Object;
+    private var explicitSizingForOrientation:Boolean = false;
+
+    /**
+     *  @private
+     *  Caches the application's width and height values for better resizing
+     *  of the screen during orientation changes. Keys are composed of the width and
+     *  height values in a string of the form "w:h", e.g. "1004:768" and represent
+     *  the screen dimensions before the orientation change. Values are
+     *  objects containing width and height properties that represent the screen dimensions
+     *  after the orientation change.
+     */
+    private var cachedDimensions:Dictionary;
+
+    /**
+     *  @private
+     *  Previous width of the application prior to an orientation change
+     */
+    private var previousWidth:Number;
+
+    /**
+     *  @private
+     *  Previous height of the application prior to an orientation change
+     */
+    private var previousHeight:Number;
+
+    /**
+     *  @private
+     *  Flag to determine if the keyboard is active during an orientation change,
+     *  to minimize renders during the orientation change.
+     */
+    private var keyboardActiveInOrientationChange:Boolean = false;

     /**
      *  @private
@@ -360,6 +383,18 @@
      */
     private var viewSourceCMI:ContextMenuItem;

+    /**
+     * @private
+     * Return the density scaling factor for the application
+     */
+    private function get scaleFactor():Number
+    {
+        if (systemManager)
+            return (systemManager as SystemManager).densityScale;
+
+        return 1;
+    }
+
     //----------------------------------
     //  colorCorrection
     //----------------------------------
@@ -1323,69 +1358,56 @@
         // orientation on their own.
         if (isNaN(explicitWidth) && isNaN(explicitHeight))
         {
-            if (!cachedSizes)
-                cachedSizes = {};
+            if (!cachedDimensions)
+                cachedDimensions = new Dictionary();

-            // Cache the current percentWidth and height values.  These will
-            // be lost when width and height are set, and restored later.
-            cachedSizes.oldPercentWidth = percentWidth;
-            cachedSizes.oldPercentHeight = percentHeight;
-
-            // If the application is currently in landscape orientation
-            if (sm.stage.stageWidth > sm.stage.stageHeight)
+            // remember the current dimensions
+            previousWidth = width;
+            previousHeight = height;
+
+            var key:String = width + ":" + height;
+
+            // On some platforms (e.g. iOS and Playbook) if the soft keyboard is up
+            // it deactivates before orientation change and reactivates after it;
+            // the value of isSoftKeyboardActive thus changes during orientation change.
+            // We are remembering the initial value of isSoftKeyboardActivate in this
+            // situation for use in avoiding excessive resizing during the orientation change.
+            keyboardActiveInOrientationChange = isSoftKeyboardActive;
+
+            // if we're rotating 180 degrees don't do any screen resizing
+            var beforeOrientation:String = event["beforeOrientation"];
+            var afterOrientation:String = event["afterOrientation"];
+
+            if ((beforeOrientation == "default" && afterOrientation == "upsideDown") ||
+                (beforeOrientation == "upsideDown" && afterOrientation == "default") ||
+                (beforeOrientation == "rotatedLeft" && afterOrientation == "rotatedRight") ||
+                (beforeOrientation == "rotatedRight" && afterOrientation == "rotatedLeft"))
+                return;
+
+            var newWidth:Number;
+            var newHeight:Number;
+
+            // if we have a cached value, use it
+            if (cachedDimensions[key])
             {
-                if (!cachedSizes.landscapeWidth)
-                {
-                    cachedSizes.landscapeWidth = width;
-                    cachedSizes.landscapeHeight = height;
-                }
-
-                // If the size for portrait has been saved, use it.  Otherwise
-                // just swap width and height
-                if (cachedSizes.portraitWidth)
-                {
-                    width = cachedSizes.portraitWidth;
-                    height = cachedSizes.portraitHeight;
-                }
-                else
-                    swapApplicationDimensions();
+                newWidth = cachedDimensions[key].width;
+                newHeight = cachedDimensions[key].height;
             }
-            else
+            else // no cached value; just swap the numbers for now
             {
-                if (!cachedSizes.portraitWidth)
-                {
-                    cachedSizes.portraitWidth = width;
-                    cachedSizes.portraitHeight = height;
-                }
-
-                // If the size for landscape has been saved, use it.  Otherwise
-                // just swap width and height
-                if (cachedSizes.landscapeWidth)
-                {
-                    width = cachedSizes.landscapeWidth;
-                    height = cachedSizes.landscapeHeight;
-                }
-                else
-                    swapApplicationDimensions();
+                // use stageHeight as the new width if you can get it
+                newWidth = stage ? stage.stageHeight / scaleFactor : height;
+                newHeight = width;
             }

-            // Indicate that the width and heigth have changed because of orientation
-            restoreApplicationWidthAndHeight = true;
+            setActualSize(newWidth, newHeight);
+
+            // Indicate that the width and height have changed because of orientation
+            explicitSizingForOrientation = true;

             // Force a validation
             validateNow();
         }
-    }
-
-    /**
-     *  @private
-     *  Swaps the applications width and height
-     */
-    private function swapApplicationDimensions():void
-    {
-        var tmp:Number = width;
-        width = height;
-        height = tmp;
     }

     /**
@@ -1397,20 +1419,58 @@
      */
     private function stage_orientationChange(event:Event):void
     {
-        if (restoreApplicationWidthAndHeight)
-        {
-            percentWidth = cachedSizes.oldPercentWidth;
-            percentHeight = cachedSizes.oldPercentHeight;
+        if (explicitSizingForOrientation)
+        {
+            // update cache if keyboard was not previously active
+            if (!keyboardActiveInOrientationChange)
+            {
+                updateScreenSizeCache(stage.stageWidth / scaleFactor, stage.stageHeight / scaleFactor);
+            }

-            // Reset the explicitWidth and explictHeight property so that the application
-            // resizes on the next frame to deal with situations where the landscape and
-            // portrait application dimensions aren't symetrical
-            explicitWidth = NaN;
-            explicitHeight = NaN;
+            explicitSizingForOrientation = false;
+        }
+    }
+
+    /**
+     *  @private
+     *  Update the screen size cache with the new values. The previous values are
+     *  pulled from the values currently set in the cache.
+     *  Note that if the old and new width/height values are unchanged no values are
+     *  cached under the assumption that this was a 180 degree rotation.
+     *
+     */
+    private function updateScreenSizeCache(newWidth:Number, newHeight:Number):void
+    {
+        // same dimensions, probably 180 degree rotation; don't cache
+        if (previousWidth == newWidth && previousHeight == newHeight)
+            return;
+
+        var key:String = previousWidth + ":" + previousHeight;
+
+        if (cachedDimensions[key])
+        {
+            // update the cached values if they are different
+            cachedDimensions[key].width = newWidth;
+            cachedDimensions[key].height = newHeight;
+        }
+        else
+        {
+            var orientationChangeKey:String = previousWidth + ":" + previousHeight;
+            var reverseOrientationChangeKey:String = newWidth + ":" + newHeight;

-            restoreApplicationWidthAndHeight = false;
-        }
-    }
+            // cache values both ways, i.e. old -> new and new -> old
+            cachedDimensions[orientationChangeKey] = {
+                width:newWidth,
+                height:newHeight
+            };
+            cachedDimensions[reverseOrientationChangeKey] = {
+                width:previousWidth,
+                height:previousHeight
+            };
+        }
+    }
+
+

     /**
      *  @private
@@ -1439,7 +1499,7 @@
                     addEventListener(Event.DEACTIVATE, nativeApplication_deactivateHandler);
         }
     }
-
+
     /**
      *  @private
      */
@@ -1766,19 +1826,20 @@

             if (softKeyboardBehavior == "none" && resizeForSoftKeyboard)
             {
-                var sm:SystemManager = systemManager as SystemManager;
-                var scaleFactor:Number = 1;
+                var appHeight:Number = (stage.stageHeight - keyboardRect.height) / scaleFactor;
+                var appWidth:Number = stage.stageWidth / scaleFactor;

-                // Account for any density scaling
-                if (sm)
-                    scaleFactor = sm.densityScale;
+                if (appHeight != height || appWidth != width)
+                {
+                    setActualSize(appWidth, appHeight);
+                    validateNow(); // Validate so that other listeners like Scroller get the updated dimensions
+                }

-                var appHeight:Number = (stage.stageHeight - keyboardRect.height) / scaleFactor;
-
-                if (appHeight != height)
+                // update the screen size cache
+                if (keyboardActiveInOrientationChange)
                 {
-                    setActualSize(width, appHeight);
-                    validateNow(); // Validate so that other listeners like Scroller get the updated dimensions
+                    keyboardActiveInOrientationChange = false;
+                    updateScreenSizeCache(appWidth, appHeight);
                 }
             }
         }
@@ -1798,15 +1859,8 @@

             isSoftKeyboardActive = false;

-            if (softKeyboardBehavior == "none" && resizeForSoftKeyboard)
+            if (softKeyboardBehavior == "none" && resizeForSoftKeyboard && !keyboardActiveInOrientationChange)
             {
-                var sm:SystemManager = systemManager as SystemManager;
-                var scaleFactor:Number = 1;
-
-                // Account for any density scaling
-                if (sm)
-                    scaleFactor = sm.densityScale;
-
                 // Restore the original values
                 setActualSize(stage.stageWidth / scaleFactor, stage.stageHeight / scaleFactor);

@@ -1921,6 +1975,10 @@
      */
     private function resizeHandler(event:Event):void
     {
+        // don't run while keyboard is up and orientation is changing
+        if (keyboardActiveInOrientationChange)
+            return;
+
         // If we're already due to update our bounds on the next
         // commitProperties pass, avoid the redundancy.
         if (!percentBoundsChanged)
@@ -1960,7 +2018,11 @@
         // based on the current SystemManager's width/height.
         // If developer has specified min/max values,
         // then application will not resize beyond those values.
-
+
+        // ignore updateBounds while orientation is changing
+        if (keyboardActiveInOrientationChange)
+            return;
+
         var w:Number;
         var h:Number


Transferred from the Adobe Open Source Subversion Repository

Revision: 19330
Author:   klin@adobe.com
Date:     2010-12-13T21:11:45.439252Z

Log Message:
-----------
Fix for DataGroup and List baselinePosition calculations. DataGroup now uses the typicalItem's renderer to calculate its baselinePosition. To do this, DataGroup delegates the calculations to the layout. ListBase uses the baselinePosition of the DataGroup to calculate its own.

QE notes: No
Doc notes: No
Bugs: SDK-28596
Reviewer: Hans
Tests run: cyclone server, checkintests
Is noteworthy for integration: No

Modified Paths:
--------------
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/spark/src/spark/components/DataGroup.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/spark/src/spark/layouts/TileLayout.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/spark/src/spark/layouts/supportClasses/LayoutBase.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/spark/src/spark/components/supportClasses/ListBase.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/spark/src/spark/layouts/HorizontalLayout.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/spark/src/spark/layouts/VerticalLayout.as</path>

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

--- frameworks/projects/spark/src/spark/layouts/VerticalLayout.as
+++ frameworks/projects/spark/src/spark/layouts/VerticalLayout.as
@@ -943,6 +943,21 @@
         super.useVirtualLayout = value;
     }

+    //----------------------------------
+    //  typicalLayoutElementBaselinePosition
+    //----------------------------------
+
+    /**
+     *  @private
+     */
+    override mx_internal function get typicalLayoutElementBaselinePosition():Number
+    {
+        if (!typicalLayoutElement)
+            return paddingTop;
+
+        return typicalLayoutElement.baselinePosition + paddingTop;
+    }
+
     //--------------------------------------------------------------------------
     //
     //  Methods


- fixed a bug where the case was not handled, that tooltipRendererId could be null

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

--- src/reprise/core/UIRendererFactory.as
+++ src/reprise/core/UIRendererFactory.as
@@ -248,6 +248,10 @@

 		public function tooltipRendererById(id : String) : AbstractTooltip
 		{
+			if (id == null)
+			{
+				return new m_defaultTooltipRenderer();
+			}
 			var renderer:Class = m_tooltipRenderers[id.toLowerCase()];
 			if (renderer == null)
 			{


Fixed sliderbar bug

Fixed sliderbar bug

--- src/UI/Sliderbar.as
+++ src/UI/Sliderbar.as
@@ -92,6 +92,8 @@
 			rail.y = y + slider.height / 2;

 			var posFraction:Number = (value - valueRange.min) / (valueRange.max - valueRange.min);
+			if (isNaN(posFraction))
+				posFraction = 0.5;
 			slider.x = rail.x + rail.width * posFraction;
 			slider.y = y;


Working async timeout set up and tear down with default values

--- asunit-4.0/src/asunit/runners/TestRunner.as
+++ asunit-4.0/src/asunit/runners/TestRunner.as
@@ -119,7 +119,7 @@
             }

             if(methodsToRun.readyToSetUp) {
-                injectMembers();
+                prepareForSetUp();
             }

             runMethod(methodsToRun.next());
@@ -278,6 +278,10 @@
         protected function removeInjectedMember(member:ReflectionVariable):void {
             if(!member) return;
             currentTest[member.name] = null;
+        }
+
+        protected function prepareForSetUp():void {
+            injectMembers();
         }

         protected function injectMembers():void {


tests

tests

--- testSrc/TestArrayApi.as
+++ testSrc/TestArrayApi.as
@@ -24,6 +24,43 @@
             Log.addTarget(new TraceTarget());
         }

+
+        [Test]
+        public function testShift():void
+        {
+            var s:Stream = $(1, 2, 3);
+            var l:Number = s.shift();
+
+            assertEquals(s.length, 2);
+            assertEquals(l, 1);
+            assertEquals(s.first, 2);
+        }
+
+
+        [Test]
+        public function testUnShift():void
+        {
+            var s:Stream = $(2, 3);
+            var l:uint = s.unshift(1);
+
+            assertEquals(s.length, 3);
+            assertEquals(l, 3);
+            assertEquals(s.first, 1);
+        }
+
+        [Test]
+        public function testSplice():void
+        {
+            var s:Stream = $(1, 2, 3);
+
+            s.splice(0, 1);
+            assertEquals(s.length, 2);
+            assertEquals(s.first, 2);
+
+            s.splice(0, 0, 1);
+            assertEquals(s.length, 3);
+            assertEquals(s.first, 1);
+        }

         [Test]
         public function testSort():void


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

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

 package mx.charts.chartClasses
 {


Transferred from the Adobe Open Source Subversion Repository

Revision: 17396
Author:   chiedozi@adobe.com
Date:     2010-08-19T23:20:11.495099Z

Log Message:
-----------
Removed the enabled property from IPersistenceManager
Fixed a small issue where the timestamp wasn't correctly saved when an application's state was persisted

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

Modified Paths:
--------------
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/mobilecomponents/src/spark/core/managers/IPersistenceManager.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/mobilecomponents/src/spark/components/MobileApplication.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/mobilecomponents/src/spark/components/TabbedMobileApplication.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/mobilecomponents/src/spark/core/managers/PersistenceManager.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/mobilecomponents/src/spark/components/supportClasses/MobileApplicationBase.as</path>

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

--- frameworks/projects/mobilecomponents/src/spark/managers/PersistenceManager.as
+++ frameworks/projects/mobilecomponents/src/spark/managers/PersistenceManager.as
@@ -58,7 +58,12 @@
     //  Variables
     //
     //--------------------------------------------------------------------------
-
+
+    /**
+     *  @private
+     */
+    private var enabled:Boolean = false;
+
     /**
      *  @private
      *  Returns whether the persistence manager has been initialized.
@@ -80,37 +85,16 @@

     //--------------------------------------------------------------------------
     //
-    //  Properties
-    //
-    //--------------------------------------------------------------------------
-
-    //----------------------------------
-    //  enabled
-    //----------------------------------
-    private var _enabled:Boolean = true;
-
-    /**
-     *  @inheritDoc
-     */
-    public function get enabled():Boolean
-    {
-        return _enabled;
-    }
-    /**
-     * @private
-     */
-    public function set enabled(value:Boolean):void
-    {
-        _enabled = value;
-    }
-
-    //--------------------------------------------------------------------------
-    //
     //  IPersistenceManager Methods
     //
     //--------------------------------------------------------------------------
     /**
      *  @inheritDoc
+     *
+     *  @langversion 3.0
+     *  @playerversion Flash 10
+     *  @playerversion AIR 2.5
+     *  @productversion Flex 4.5
      */
     public function initialize():void
     {
@@ -131,6 +115,11 @@
     // TODO (chiedozi): Add a try/catch for all operations for custom RTE i throw
     /**
      *  @inheritDoc
+     *
+     *  @langversion 3.0
+     *  @playerversion Flash 10
+     *  @playerversion AIR 2.5
+     *  @productversion Flex 4.5
      */
     public function setProperty(key:String, value:Object):void
     {
@@ -147,6 +136,11 @@

     /**
      *  @inheritDoc
+     *
+     *  @langversion 3.0
+     *  @playerversion Flash 10
+     *  @playerversion AIR 2.5
+     *  @productversion Flex 4.5
      */
     public function getProperty(key:String):Object
     {
@@ -161,6 +155,11 @@

     /**
      *  @inheritDoc
+     *
+     *  @langversion 3.0
+     *  @playerversion Flash 10
+     *  @playerversion AIR 2.5
+     *  @productversion Flex 4.5
      */
     public function clear():void
     {
@@ -176,6 +175,11 @@

     /**
      *  @inheritDoc
+     *
+     *  @langversion 3.0
+     *  @playerversion Flash 10
+     *  @playerversion AIR 2.5
+     *  @productversion Flex 4.5
      */
     public function flush():void
     {


Transferred from the Adobe Open Source Subversion Repository

Revision: 4551
Author:   rfrishbe@adobe.com
Date:     2009-01-16T02:09:53.612857Z

Log Message:
-----------
Cleanup the way we do binding on the data property in MXMLComponent.  Also cleaned up some imports on ItemRenderer.

QE Notes: None
Doc Notes: None
Bugs: SDK-18646
Reviewer: Hans
tests: checkintests, mustella DataGroup, List

Modified Paths:
--------------
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/mx/components/ItemRenderer.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/mx/components/MXMLComponent.as</path>

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

--- frameworks/projects/spark/src/spark/components/supportClasses/ItemRenderer.as
+++ frameworks/projects/spark/src/spark/components/supportClasses/ItemRenderer.as
@@ -11,16 +11,12 @@

 package mx.components
 {
+import flash.events.Event;
 import flash.events.MouseEvent;
 import flash.geom.Point;

-import mx.components.DataGroup;
-import mx.components.MXMLComponent;
 import mx.core.mx_internal;
 import mx.graphics.graphicsClasses.TextGraphicElement;
-import mx.layout.HorizontalLayout;
-import mx.layout.VerticalLayout;
-import flash.events.Event;

 /**
  *  The ItemRenderer class is the base class for List item renderers.


Transferred from the Adobe Open Source Subversion Repository

Revision: 4380
Author:   rfrishbe@adobe.com
Date:     2008-12-23T10:00:21.848800Z

Log Message:
-----------
Mostly rename changes in Group and FxContainer.

1.  GraphicElement.elementHost:GroupBase -> GraphicElement.parent:DisplayObjectContainer (parent already exists in the current code-base...I’m just removing elementHost now)

2.  Group content APIs now use “element” instead of “item.”  The new methods were added a while ago, but the old ones co-existed.  These particular changes remove the old methods and strongly type the new ones to deal with IVisualElements rather than Objects.  Here are the overall changes:

numItems:int -> numElements:int
getItemAt(int):Object -> getElementAt(int):IVisualElement
addItem(Object):Object -> addElement(IVisualElement):IVisualElement
addItemAt(Object, int):Object -> addElementAt(IVisualElement, int):IVisualElement
removeItem(Object):Object -> removeElement(IVisualElement):IVisualElement
removeItemAt(int):Object -> removeElementAt(int):IVisualElement
getItemIndex(Object):int -> getElementIndex(IVisualElement):int
setItemIndex(Object, int):void -> setElementIndex(IVisualElement, int):void
swapItems(Object, Object):void -> swapElements(IVisualElement, IVisualElement):void
swapItemsAt(int, int):void -> swapElementsAt(int, int):void

3.  Group and FxContainer's mxmlContent property is now strongly typed as an Array of IVisualElements instead of an Object

4.  Removing ITransformable...there's no need for it.

5.  Had to update Mustella for these changes (the Perforce changes are checked in, and here's the mustella.swc change for checkintests)

QE Notes: Joan and Steve worked with me on changing all the SDK QA tests.
Doc Notes: None
Bugs: SDK-18063
Reviewer: Jason
tests: checkintests, Mustella FxContainer, Group, and DataGroup (Joan ran all tests on an earlier version of these changes, so hopefully nothing broke in the meantime).  Some of the Group/DataGroup ones were failing for me, but I'm pretty sure they're all excluded (tests don't seem to exclude for me when I VPN in...)

Modified Paths:
--------------
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/geom/TransformOffsets.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/mx/components/FxScroller.as</path>
<path kind="file" action="M">/flex/sdk/trunk/development/eclipse/flex/flex4test/src/layouts/WheelLayout.as</path>
<path kind="file" action="D">/flex/sdk/trunk/frameworks/projects/framework/src/mx/geom/ITransformable.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/mx/components/ItemRenderer.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/mx/effects/RemoveAction.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/tests/flex4/flex4test_testScript.mxml</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/mx/core/IViewport.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/mx/components/Group.as</path>
<path kind="file" action="M">/flex/sdk/trunk/development/eclipse/flex/flex4test/src/testWheel.mxml</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/core/Container.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/wireframe/src/wireframe/FxDefaultComplexItemRenderer.mxml</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/core/IVisualElement.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/mx/effects/effectClasses/FxAnimateInstance.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/core/IVisualElementContainer.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/mx/states/AddItems.as</path>
<path kind="file" action="M">/flex/sdk/trunk/mustella/mustella.swc</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/mx/skins/spark/FxDefaultComplexItemRenderer.mxml</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/mx/graphics/graphicsClasses/GraphicElement.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/mx/effects/AddAction.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/mx/components/FxContainer.as</path>

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

--- frameworks/projects/spark/src/spark/effects/supportClasses/AnimateInstance.as
+++ frameworks/projects/spark/src/spark/effects/supportClasses/AnimateInstance.as
@@ -11,27 +11,22 @@

 package mx.effects.effectClasses
 {
-import flash.events.Event;
 import flash.events.TimerEvent;
-import flash.geom.Point;
 import flash.utils.Timer;

-import mx.components.Group;
-import mx.components.baseClasses.GroupBase;
+import mx.core.IVisualElement;
+import mx.core.IVisualElementContainer;
 import mx.core.UIComponent;
 import mx.core.mx_internal;
 import mx.effects.Animation;
 import mx.effects.EffectInstance;
-import mx.effects.EffectManager;
 import mx.effects.PropertyValuesHolder;
 import mx.effects.interpolation.IEaser;
 import mx.effects.interpolation.IInterpolator;
 import mx.events.AnimationEvent;
 import mx.core.ILayoutElement;
 import mx.layout.LayoutElementFactory;
-import mx.managers.LayoutManager;
 import mx.styles.IStyleClient;
-import mx.core.IVisualElementContainer;

 use namespace mx_internal;

@@ -592,7 +587,7 @@
                 if (parentStart && !parentEnd)
                 {
                     if (parentStart is IVisualElementContainer)
-                        IVisualElementContainer(parentStart).addElement(target);
+                        IVisualElementContainer(parentStart).addElement(target as IVisualElement);
                     else
                         parentStart.addChild(target);
                     needsRemoval = true;
@@ -623,7 +618,7 @@
                 if (parentStart && !parentEnd)
                 {
                     if (parentStart is IVisualElementContainer)
-                        IVisualElementContainer(parentStart).removeElement(target);
+                        IVisualElementContainer(parentStart).removeElement(target as IVisualElement);
                     else
                         parentStart.removeChild(target);
                 }


Add utility function in Flash test.

Add utility function in Flash test.

--- tests/misc/flashtest.as
+++ tests/misc/flashtest.as
@@ -21,12 +21,15 @@
 		private function dumpValues():void {
 			tf.text = "";
 			var b:ByteArray = new ByteArray();
-			var a:Dictionary = new Dictionary();
-			a["x"] = a;
-			tf.appendText(a.toString() + "\n");
-			tf.appendText(a["x"].toString() + "\n");
+			var a:Array = [];
+			a["x"] = "x";
+			b.writeObject(a);
 			b.writeObject(a);
 			dumpByteArray(b);
+		}
+
+		private function log(o:*):void {
+			tf.appendText(o + "\n");
 		}

 		private function readValues():void {
@@ -48,13 +51,14 @@
 			];
 			*/
 			var data:Array = [
-				0x11, 0x03, 0x00, 0x06, 0x03, 0x78, 0x00
+				0x09, 0x05, 0x01,
+					0x09, 0x01, 0x03, 0x78, 0x06, 0x00, 0x01,
+					0x09, 0x01, 0x00, 0x06, 0x00, 0x01,
 			];
 			var b:ByteArray = createByteArray(data);

 			var o:* = b.readObject();
-			tf.appendText(o + "\n");
-			tf.appendText(o.x + "\n");
+			log(o); log(o.length); log(o[0].x); log(o[1].x);
 		}

 		private function testExternalizable():void {


Don't generate a TypeError if we're not in an EZGame environment.

It may be well worth adding an isConnected() method that can be used to test
whether the EZGame stuff is connected or whether we should just show
demo graphics or something.

git-svn-id: a3e1eb16dde062992de22c830ed8045c8013209a@141 c613c5cb-e716-0410-b11b-feb51c14d237

--- src/as/com/threerings/ezgame/EZGameControl.as
+++ src/as/com/threerings/ezgame/EZGameControl.as
@@ -26,7 +26,11 @@
         event.userProps = new Object();
         populateProperties(event.userProps);
         disp.root.loaderInfo.sharedEvents.dispatchEvent(event);
-        setEZProps(event.ezProps);
+        if (event.ezProps != null) {
+            setEZProps(event.ezProps);
+        } else {
+            trace("The game is not being run in the ezgame environment");
+        }

         // set up our focusing click handler
         disp.root.addEventListener(MouseEvent.CLICK, handleRootClick);
@@ -100,9 +104,7 @@

     /**
      * Register an object to receive whatever events it should receive,
-     * based on which event listeners it implements. Note that it is not
-     * necessary to register any objects which appear on the display list,
-     * as they'll be registered automatically.
+     * based on which event listeners it implements.
      */
     public function registerListener (obj :Object) :void
     {


moar bettar

moar bettar

git-svn-id: a3e1eb16dde062992de22c830ed8045c8013209a@468 c613c5cb-e716-0410-b11b-feb51c14d237

--- src/as/com/threerings/ezgame/EZGameControl.as
+++ src/as/com/threerings/ezgame/EZGameControl.as
@@ -394,7 +394,7 @@
     }

     /**
-     * Requests a check to see if the dictionary for the given locale contains the given word.
+     * Checks to see if the dictionary for the given locale contains the given word.
      *
      * @param RFC 3066 string that represents language settings
      * @param word the string contains the word to be checked


Fix data group header visualization using long labels

--- collect-client/src/main/flex/org/openforis/collect/ui/UIBuilder.as
+++ collect-client/src/main/flex/org/openforis/collect/ui/UIBuilder.as
@@ -322,24 +322,20 @@

 		public static function getAttributeDataGroupHeaderHeight(defn:AttributeDefinitionProxy, ancestorEntity:EntityProxy):Number {
 			var directionByColumns:Boolean = defn.parent != null && defn.parent.direction == UIOptions$Direction.BY_COLUMNS;
+			var result:Number;
 			if ( directionByColumns ) {
-				return NaN;
-			} else {
-				var result:Number;
-				if ( directionByColumns ) {
-					if ( defn is CoordinateAttributeDefinitionProxy ) {
-						result = 3 * ATTRIBUTE_INPUT_FIELD_HEIGHT + 3 * COMPOSITE_ATTRIBUTE_LABELS_V_GAP;
-					} else if ( defn is TaxonAttributeDefinitionProxy ) {
-						result = 5 * ATTRIBUTE_INPUT_FIELD_HEIGHT + 4 * COMPOSITE_ATTRIBUTE_LABELS_V_GAP;
-					} else {
-						result = ATTRIBUTE_INPUT_FIELD_HEIGHT;
-					}
+				if ( defn is CoordinateAttributeDefinitionProxy ) {
+					result = 3 * ATTRIBUTE_INPUT_FIELD_HEIGHT + 3 * COMPOSITE_ATTRIBUTE_LABELS_V_GAP;
+				} else if ( defn is TaxonAttributeDefinitionProxy ) {
+					result = 5 * ATTRIBUTE_INPUT_FIELD_HEIGHT + 4 * COMPOSITE_ATTRIBUTE_LABELS_V_GAP;
 				} else {
 					result = ATTRIBUTE_INPUT_FIELD_HEIGHT;
 				}
-				result += VALIDATION_DISPLAY_DOUBLE_BORDER_SIZE;
-				return result;
-			}
+			} else {
+				result = NaN;
+			}
+			result += VALIDATION_DISPLAY_DOUBLE_BORDER_SIZE;
+			return result;
 		}

 		public static function getEnumeratedCodeHeaderWidth(def:AttributeDefinitionProxy, ancestorEntity:EntityProxy):Number {


Transferred from the Adobe Open Source Subversion Repository

Revision: 5770
Author:   gruehle@adobe.com
Date:     2009-03-30T20:58:54.529722Z

Log Message:
-----------
Add [Alternative] metadata to the Halo components that have a Gumbo replacement.

Bugs: SDK-20190
QA notes: none
Doc notes: Additional ASDoc comments added for many of the classes. These should all be reviewed.
Reviewer: Chet

Modified Paths:
--------------
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/controls/TileList.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/controls/RadioButton.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/controls/HSlider.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/controls/ButtonBar.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/effects/Zoom.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/controls/ToggleButtonBar.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/containers/HBox.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/containers/ViewStack.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/controls/RadioButtonGroup.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/containers/ControlBar.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/effects/easing/Cubic.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/controls/VSlider.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/effects/Fade.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/controls/Button.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/effects/RemoveChildAction.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/effects/TweenEffect.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/controls/TextArea.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/effects/WipeRight.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/effects/easing/Sine.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/containers/VBox.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/effects/Glow.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/controls/CheckBox.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/core/Application.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/effects/easing/Quartic.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/containers/Box.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/effects/WipeLeft.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/controls/HScrollBar.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/containers/ApplicationControlBar.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/effects/easing/Linear.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/effects/easing/Quintic.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/effects/Tween.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/containers/Tile.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/effects/easing/Quadratic.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/containers/Panel.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/controls/TextInput.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/effects/AddChildAction.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/controls/ComboBox.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/effects/WipeDown.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/controls/VScrollBar.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/effects/Rotate.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/effects/SetPropertyAction.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/controls/List.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/containers/Canvas.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/effects/Resize.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/controls/Label.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/effects/Blur.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/controls/LinkBar.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/effects/Move.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/controls/Text.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/controls/HorizontalList.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/effects/WipeUp.as</path>

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

--- frameworks/projects/mx/src/mx/core/Application.as
+++ frameworks/projects/mx/src/mx/core/Application.as
@@ -160,6 +160,8 @@
 [Frame(factoryClass="mx.managers.SystemManager")]

 [ResourceBundle("core")]
+
+[Alternative(replacement="spark.components.Application", since="4.0")]

 /**
  *  Flex defines a default, or Application, container that lets you start


tests

tests


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

--- frameworks/projects/automation_spark/src/AutomationSparkClasses.as
+++ frameworks/projects/automation_spark/src/AutomationSparkClasses.as
@@ -0,0 +1,71 @@
+
+
+
+
+package
+{
+
+	/**
+	 *  @private
+	 *  In some projects, this class is used to link additional classes
+	 *  into the SWC beyond those that are found by dependency analysis
+	 *  starting from the classes specified in manifest.xml.
+	 *  This project has no manifest file (because there are no MXML tags
+	 *  corresponding to any classes in it) so all the classes linked into
+	 *  the SWC are found by a dependency analysis starting from the classes
+	 *  listed here.
+	 */
+	internal class AutomationSparkClasses
+	{
+		import mx.automation.delegates.core.UIFTETextFieldAutomationImpl;UIFTETextFieldAutomationImpl;
+		import mx.automation.delegates.controls.dataGridClasses.FTEDataGridItemRendererAutomationImpl;FTEDataGridItemRendererAutomationImpl;
+
+		import spark.automation.delegates.components.SparkApplicationAutomationImpl;SparkApplicationAutomationImpl;
+		import spark.automation.delegates.components.SparkBorderContainerAutomationImpl;SparkBorderContainerAutomationImpl;
+		import spark.automation.delegates.components.SparkButtonAutomationImpl;SparkButtonAutomationImpl;
+		import spark.automation.delegates.components.SparkButtonBarAutomationImpl;SparkButtonBarAutomationImpl;
+		import spark.automation.delegates.components.SparkButtonBarButtonAutomationImpl;SparkButtonBarButtonAutomationImpl;
+		import spark.automation.delegates.components.SparkCheckBoxAutomationImpl;SparkCheckBoxAutomationImpl;
+		import spark.automation.delegates.components.SparkComboBoxAutomationImpl;SparkComboBoxAutomationImpl;
+		import spark.automation.delegates.components.SparkDropDownListAutomationImpl;SparkDropDownListAutomationImpl;
+		import spark.automation.delegates.components.SparkGroupAutomationImpl;SparkGroupAutomationImpl;
+		import spark.automation.delegates.components.SparkLabelAutomationImpl;SparkLabelAutomationImpl;
+		import spark.automation.delegates.components.SparkListAutomationImpl;SparkListAutomationImpl;
+		import spark.automation.delegates.components.SparkNavigatorContentAutomationImpl;SparkNavigatorContentAutomationImpl;
+		import spark.automation.delegates.components.SparkNumericStepperAutomationImpl;SparkNumericStepperAutomationImpl;
+		import spark.automation.delegates.components.SparkPanelAutomationImpl;SparkPanelAutomationImpl;
+		import spark.automation.delegates.components.SparkRadioButtonAutomationImpl;SparkRadioButtonAutomationImpl;
+		import spark.automation.delegates.components.SparkSkinnableContainerAutomationImpl;SparkSkinnableContainerAutomationImpl;
+		import spark.automation.delegates.components.SparkSpinnerAutomationImpl;SparkSpinnerAutomationImpl;
+		import spark.automation.delegates.components.SparkTabBarAutomationImpl;SparkTabBarAutomationImpl;
+		import spark.automation.delegates.components.SprakTextAreaAutomationImpl;SprakTextAreaAutomationImpl;
+		import spark.automation.delegates.components.SprakTextInputAutomationImpl;SprakTextInputAutomationImpl;
+		import spark.automation.delegates.components.SparkTileGroupAutomationImpl;SparkTileGroupAutomationImpl;
+		import spark.automation.delegates.components.SparkTitleWindowAutomationImpl;SparkTitleWindowAutomationImpl;
+		import spark.automation.delegates.components.SparkVideoPlayerAutomationImpl;SparkVideoPlayerAutomationImpl;
+
+		import spark.automation.delegates.components.mediaClasses.SparkMuteButtonAutomationImpl;SparkMuteButtonAutomationImpl;
+		import spark.automation.delegates.components.mediaClasses.SparkVolumeBarAutomationImpl;SparkVolumeBarAutomationImpl;
+
+		import spark.automation.delegates.components.supportClasses.SparkButtonBarBaseAutomationImpl;SparkButtonBarBaseAutomationImpl;
+		import spark.automation.delegates.components.supportClasses.SparkButtonBaseAutomationImpl;SparkButtonBaseAutomationImpl;
+		import spark.automation.delegates.components.supportClasses.SparkDropDownListBaseAutomationImpl;SparkDropDownListBaseAutomationImpl;
+		import spark.automation.delegates.components.supportClasses.SparkGroupBaseAutomationImpl;SparkGroupBaseAutomationImpl;
+		import spark.automation.delegates.components.supportClasses.SparkItemRendererAutomationImpl;SparkItemRendererAutomationImpl;
+		import spark.automation.delegates.components.supportClasses.SparkListBaseAutomationImpl;SparkListBaseAutomationImpl;
+		import spark.automation.delegates.components.supportClasses.SparkRangeAutomationImpl;SparkRangeAutomationImpl;
+		import spark.automation.delegates.components.supportClasses.SparkScrollBarBaseAutomationImpl;SparkScrollBarBaseAutomationImpl;
+		import spark.automation.delegates.components.supportClasses.SparkSkinnableComponentAutomationImpl;SparkSkinnableComponentAutomationImpl;
+		import spark.automation.delegates.components.supportClasses.SparkSliderBaseAutomationImpl;SparkSliderBaseAutomationImpl;
+		import spark.automation.delegates.components.supportClasses.SparkToggleButtonBaseAutomationImpl;SparkToggleButtonBaseAutomationImpl;
+		import spark.automation.delegates.components.supportClasses.SprakSkinnableTextBaseAutomationImpl;SprakSkinnableTextBaseAutomationImpl;
+
+		import spark.automation.delegates.components.SparkRichEditableTextAutomationImpl;SparkRichEditableTextAutomationImpl;
+		import spark.automation.delegates.skins.spark.SparkDefaultItemRendererAutomationImpl;SparkDefaultItemRendererAutomationImpl;
+		import spark.automation.tabularData.SkinnableContainerTabularData;SkinnableContainerTabularData;
+
+
+		//Maintain alphabetical order
+	}
+
+}


FLEX-34034 handle degenerate case when copying single newline into TextInput

--- frameworks/projects/spark/src/spark/components/RichEditableText.as
+++ frameworks/projects/spark/src/spark/components/RichEditableText.as
@@ -4767,6 +4767,9 @@
                             TextClipboard.importToScrap(pastedText,
                                 TextConverter.PLAIN_TEXT_FORMAT);
                     }
+                    // don't do anything if nothing left on clipboard
+                    if (pastedText.length == 0)
+                        event.preventDefault();
                 }
             }
             else if (op is DeleteTextOperation || op is CutOperation)


Transferred from the Adobe Open Source Subversion Repository

Revision: 4707
Author:   cframpto@adobe.com
Date:     2009-01-28T17:00:45.138399Z

Log Message:
-----------
Dispatch propertyChange event for horizontalScrollPosition/verticalScrollPosition so the thumbnail in the scroller will track the movement made via the keyboard.

QE Notes:
Doc Notes:
Bugs: SDK-18887
Reviewers: Gordon

Modified Paths:
--------------
/flex/sdk/trunk/frameworks/projects/flex4/src/mx/components/TextView.as

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

--- frameworks/projects/spark/src/spark/components/RichEditableText.as
+++ frameworks/projects/spark/src/spark/components/RichEditableText.as
@@ -1147,16 +1147,28 @@

         if (horizontalScrollPositionChanged)
         {
+            var oldHorizontalScrollPosition:Number =
+                containerController.horizontalScrollPosition;
             containerController.horizontalScrollPosition =
-                _horizontalScrollPosition;
-            horizontalScrollPositionChanged = false;
-        }
-
+                _horizontalScrollPosition;
+            dispatchPropertyChangeEvent("horizontalScrollPosition",
+                oldHorizontalScrollPosition,
+                containerController.horizontalScrollPosition);
+
+            horizontalScrollPositionChanged = false;
+        }
+
         if (verticalScrollPositionChanged)
         {
+            var oldVerticalScrollPosition:Number =
+                containerController.verticalScrollPosition;
             containerController.verticalScrollPosition =
                 _verticalScrollPosition;
-            verticalScrollPositionChanged = false;
+            dispatchPropertyChangeEvent("verticalScrollPosition",
+                oldVerticalScrollPosition,
+                containerController.verticalScrollPosition);
+
+            verticalScrollPositionChanged = false;
         }
     }


Transferred from the Adobe Open Source Subversion Repository

Revision: 18432
Author:   dloverin@adobe.com
Date:     2010-11-03T20:02:02.380580Z

Log Message:
-----------
Initial check-in for RSL Sharing Among Modules Feature

QE notes: testable but not PARB'd
Doc notes: None.
Bugs: SDK-27917
Reviewer: Alex
Tests run: cylone server, checkintests
Is noteworthy for integration: No.

Modified Paths:
--------------
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/framework/src/mx/core/CrossDomainRSLItem.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/modules/compiler/src/java/flex2/compiler/config/ConfigurationException_en.properties</path>
<path kind="file" action="A">/private/flex/sdk/branches/hero_private/frameworks/projects/framework/src/mx/core/ApplicationDomainTarget.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/modules/compiler/src/java/flex2/configuration_en.properties</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/modules/compiler/src/java/flex2/tools/PreLink.java</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/framework/src/mx/managers/SystemManager.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/modules/compiler/src/java/flex2/compiler/config/ConfigurationException.java</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/framework/src/mx/core/IFlexModuleFactory.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/modules/compiler/src/java/flex2/compiler/common/RuntimeSharedLibrarySettingsConfiguration.java</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/framework/src/mx/core/RSLData.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/framework/src/mx/core/FlexModuleFactory.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/framework/src/mx/utils/LoaderUtil.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/tools/dependencychecker/flex/tools/dependencychecker/FrameworkSwcDependencyRules.java</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/framework/src/mx/events/RSLEvent.as</path>

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

--- frameworks/projects/framework/src/mx/core/FlexModuleFactory.as
+++ frameworks/projects/framework/src/mx/core/FlexModuleFactory.as
@@ -16,6 +16,7 @@
 import flash.display.MovieClip;
 import flash.events.ErrorEvent;
 import flash.events.Event;
+import flash.events.IEventDispatcher;
 import flash.events.IOErrorEvent;
 import flash.events.SecurityErrorEvent;
 import flash.events.TimerEvent;
@@ -30,6 +31,7 @@
 import mx.core.RSLListLoader;
 import mx.events.ModuleEvent;
 import mx.events.Request;
+import mx.events.RSLEvent;
 import mx.managers.SystemManagerGlobals;
 import mx.resources.IResourceManager;
 import mx.resources.ResourceManager;
@@ -212,6 +214,13 @@
      */
     private var resourceBundles:Array;

+    /**
+     *  @private
+     *  Array of RSLData objects that represent the list of RSLs this
+     *  module factory is loading.
+     */
+    private var rslDataList:Array;
+
 	//--------------------------------------------------------------------------
 	//
 	//  Properties: IFlexModuleFactory
@@ -235,6 +244,24 @@
         return null;
     }

+    /**
+     *  @private
+     *  Add an RSL to the preloadedRSLs list. This method is called by child
+     *  module factories when they add load an RSL into this module factory's
+     *  application domain.
+     */
+    public function addPreloadedRSL(loaderInfo:LoaderInfo, rsl:Array):void
+    {
+        preloadedRSLs[loaderInfo] = rsl;
+        if (hasEventListener(RSLEvent.RSL_ADD_PRELOADED))
+        {
+            var rslEvent:RSLEvent = new RSLEvent(RSLEvent.RSL_ADD_PRELOADED);
+            rslEvent.loaderInfo = loaderInfo;
+            dispatchEvent(rslEvent);
+        }
+
+    }
+
     //--------------------------------------------------------------------------
     //
     //  Methods: IFlexModuleFactory
@@ -487,35 +514,26 @@
         var cdRsls:Array = info()["cdRsls"];

         // Put cross-domain RSL information in the RSL list.
-        var rslList:Array = [];
+        var rslItemList:Array = [];
         var n:int;
         var i:int;
         if (cdRsls && cdRsls.length > 0)
         {
-            var request:Request = new Request(Request.GET_PARENT_FLEX_MODULE_FACTORY_REQUEST);
-            dispatchEvent(request);
-            var parentModuleFactory:IFlexModuleFactory = request.value as IFlexModuleFactory;
+            rslDataList = LoaderUtil.processRequiredRSLs(this, cdRsls);
+
             var normalizedURL:String = LoaderUtil.normalizeURL(this.loaderInfo);
             var crossDomainRSLItem:Class = Class(getDefinitionByName("mx.core::CrossDomainRSLItem"));
-            n = cdRsls.length;
+            n = rslDataList.length;
             for (i = 0; i < n; i++)
             {
-                var rslWithFailoverArray:Array = cdRsls[i];
-
-                if (parentModuleFactory &&
-                    LoaderUtil.getRSLLoadData(parentModuleFactory,
-                        cdRsls[i][0]["digest"]))
-                {
-                    continue; // if the rsl is already loaded then skip loading it.
-                }
+                var rslWithFailovers:Array = rslDataList[i];

                 // If crossDomainRSLItem is null, then this is a compiler error. It should not be null.
-                var cdNode:Object = new crossDomainRSLItem(rslWithFailoverArray,
+                var cdNode:Object = new crossDomainRSLItem(rslWithFailovers,
                     normalizedURL,
                     this);
-                rslList.push(cdNode);
+                rslItemList.push(cdNode);
             }
-
         }

         // Append RSL information in the RSL list.
@@ -530,11 +548,11 @@
                 var node:RSLItem = new RSLItem(rsls[i].url,
                                                normalizedURL,
                                                this);
-                rslList.push(node);
+                rslItemList.push(node);
             }
         }

-        rslListLoader = new RSLListLoader(rslList);
+        rslListLoader = new RSLListLoader(rslItemList);
     }

     /**
@@ -695,9 +713,20 @@
 	 */
     private function rslCompleteHandler(event:Event):void
     {
-        var rsl:RSLItem = rslListLoader.getItem(rslListLoader.getIndex());
         if (event.target is LoaderInfo)
-            preloadedRSLs[event.target] = rsl.urlRequest.url;
+        {
+            var rslIndex:int = rslListLoader.getIndex();
+            var rsl:Array = rslDataList[rslIndex];
+            var moduleFactory:IFlexModuleFactory = this;
+            if (rsl && rsl[0].moduleFactory)
+                moduleFactory = rsl[0].moduleFactory;
+
+            if (moduleFactory == this)
+                preloadedRSLs[event.target] =  rsl;
+            else if ("addPreloadedRSL" in moduleFactory)
+                moduleFactory["addPreloadedRSL"](event.target, rsl);
+        }
+
         update();
     }


Modify log position of KrewStateMachine

Modify log position of KrewStateMachine

--- krew-framework/krewfw/builtin_actor/system/KrewStateMachine.as
+++ krew-framework/krewfw/builtin_actor/system/KrewStateMachine.as
@@ -198,12 +198,12 @@
                 oldState.end(newState);
             }

+            _log("[Info] [KrewFSM] SWITCHED: " + newState.stateId + "  <-  " + oldStateId);
+
             // Hello new state
             _currentState = newState;
             newState.begin(oldState);
             newState.enter();
-
-            _log("[Info] [KrewFSM] SWITCHED: " + newState.stateId + "  <-  " + oldStateId);
         }

         /**


Fix start playing even if previous socket is invalid

If the previous socket got invalid the teardown request will throw an
error. Since the play function will stop the current client and wait for
the STOPPED event to trigger the new url will never be played.

This fix makes sure the STOPPED event gets triggered even if the socket
is invalid.

--- src/com/axis/rtspclient/RTSPClient.as
+++ src/com/axis/rtspclient/RTSPClient.as
@@ -566,7 +566,13 @@
         auth.authorizationHeader("TEARDOWN", authState, authOpts, urlParsed, digestNC++) +
         "\r\n";
       Logger.log('RTSP OUT:', req);
-      handle.writeUTFBytes(req);
+      try {
+        handle.writeUTFBytes(req);
+      } catch (error) {
+        // If we got an IO error trying to tear down the stream, dispatch
+        // STOPPED to let listeners know the stream is stopped.
+        dispatchEvent(new ClientEvent(ClientEvent.STOPPED));
+      }

       prevMethod = sendTeardownReq;
     }


Transferred from the Adobe Open Source Subversion Repository

Revision: 18990
Author:   klin@adobe.com
Date:     2010-12-03T01:38:08.791332Z

Log Message:
-----------
Add ASDoc for DataGrid not supporting transitions. The transitions property will also not be code hinted in FB.

QE notes: No
Doc notes: No
Bugs: N/A
Reviewer: Carol, Darrell
Tests run: checkintests
Is noteworthy for integration: No

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

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

--- frameworks/projects/spark/src/spark/components/gridClasses/GridItemRenderer.as
+++ frameworks/projects/spark/src/spark/components/gridClasses/GridItemRenderer.as
@@ -44,6 +44,12 @@
  */
 [Event(name="dataChange", type="mx.events.FlexEvent")]

+//--------------------------------------
+//  Excluded APIs
+//--------------------------------------
+
+[Exclude(name="transitions", kind="property")]
+
 /**
  *  The GridItemRenderer class defines the base class for custom item renderers
  *  for the Spark grid controls, such as DataGrid and Grid.
@@ -54,6 +60,9 @@
  *
Item renderers are associated with each column of a grid.
  *  Set the item renderer for a column by using
  *  the GridColumn.itemRenderer property.

+ *
+ *
Transitions in DataGrid item renderers aren't supported. The GridItemRenderer class
+ *  has disabled its transitions property so setting it will have no effect.

  *
  *  @see spark.components.DataGrid
  *  @see spark.components.Grid
@@ -110,7 +119,7 @@
      *  A flag determining if this renderer should play any
      *  associated transitions when a state change occurs.
      */
-    mx_internal var playTransitions:Boolean = false;
+    mx_internal const playTransitions:Boolean = false;

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


fixed bug where CSVDataSource would be busy if csvData was null

--- WeaveData/src/weave/data/DataSources/CSVDataSource.as
+++ WeaveData/src/weave/data/DataSources/CSVDataSource.as
@@ -147,9 +147,11 @@

 		protected function handleParsedRows(rows:Array):void
 		{
+			if (!rows)
+				rows = [];
 			cachedDataTypes = {};
 			parsedRows = rows;
-			columnIds = rows && rows[0] is Array ? (rows[0] as Array).concat() : [];
+			columnIds = rows[0] is Array ? (rows[0] as Array).concat() : [];
 			// make sure column names are unique - if not, use index values for columns with duplicate names
 			var nameLookup:Object = {};
 			for (var i:int = 0; i < columnIds.length; i++)


Corrected wrong script include path

Corrected wrong script include path

--- DroneAnarchy/Resources/Scripts/DroneAnarchy.as
+++ DroneAnarchy/Resources/Scripts/DroneAnarchy.as
@@ -1,5 +1,5 @@
 #include "GameObjects.as"
-#include "DroneAnarchy/InputController.as"
+#include "InputController.as"

 enum GameState
 {


Transferred from the Adobe Open Source Subversion Repository

Revision: 119
Author:   shodgson@adobe.com
Date:     2008-01-08T05:22:59.879412Z

Log Message:
-----------
[ private comments below ]

Bugs: 213924 - [NIO Server] Not failing over correctly when using streaming channel and per-session connection limit for user agent is reached.
QA: Yes - Alex has already run a test pass.
Doc: No

Details:
Streaming connections now wait to move their channel to a connected state until after reading an initial 'ack' message of the stream; previously they advanced to connected when the first byte over the connection arrived even if that byte was the beginning of an Http error response. Streaming connections are also now given a server assigned id (returned in the initial ack pushed down to the client) to support improved shutdown/disconnect.

Also, removed a dead private constant from PollingChannel.

Modified Paths:
--------------
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/rpc/src/mx/messaging/channels/PollingChannel.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/rpc/src/mx/messaging/channels/StreamingHTTPChannel.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/rpc/src/mx/messaging/channels/StreamingConnectionHandler.as</path>

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

--- frameworks/projects/rpc/src/mx/messaging/channels/StreamingConnectionHandler.as
+++ frameworks/projects/rpc/src/mx/messaging/channels/StreamingConnectionHandler.as
@@ -34,6 +34,7 @@
 import mx.messaging.messages.AbstractMessage;
 import mx.messaging.messages.CommandMessage;
 import mx.messaging.messages.IMessage;
+import mx.messaging.messages.AcknowledgeMessage;

 use namespace mx_internal;

@@ -85,6 +86,11 @@
      *  remote endpoint.
      */
     private static const CLOSE_COMMAND:String = "close";
+
+    /**
+     *  Parameter name for the stream id; passed with commands for an existing streaming connection.
+     */
+    private static const STREAM_ID_PARAM_NAME:String = "streamId";

     /**
      *  Parameter name for the version param passed in the request for a new streaming connection.
@@ -208,6 +214,12 @@
      *  Reference to the logger for the associated Channel.
      */
     protected var _log:ILogger;
+
+    /**
+     *  @private
+     *  The server-assigned id for the streaming connection.
+     */
+    protected var streamId:String;

     /**
      *  Storage for the hex-format chunk size value from the byte stream.
@@ -289,49 +301,53 @@
             }
         }

-		// Then, let the server know that streaming connection can be cleaned up.
-		if (streamingConnectionCloser == null)
-		{
-            var process:Function = function(event:Event):void
-            {
-                if (streamingConnectionCloser.connected)
+		// Then, let the server know that streaming connection can be cleaned up.
+		if (streamId != null)
+		{
+    		if (streamingConnectionCloser == null)
+    		{
+                var process:Function = function(event:Event):void
+                {
+                    if (streamingConnectionCloser.connected)
+                    {
+                        try
+                        {
+                            streamId = null;
+                            streamingConnectionCloser.close();
+                        }
+                        catch (ignore:Error)
+                        {
+                        }
+                    }
+                }
+
+                var ignore:Function = function(event:Event):void
                 {
-                    try
-                    {
-                        streamingConnectionCloser.close();
-                    }
-                    catch (ignore:Error)
-                    {
-                    }
-                }
-            }
-
-            var ignore:Function = function(event:Event):void
-            {
-                // Simply ignore the received event.
-            }
-
-			streamingConnectionCloser = new URLStream();
-			streamingConnectionCloser.addEventListener(Event.COMPLETE, process);
-            streamingConnectionCloser.addEventListener(IOErrorEvent.IO_ERROR, process);
-			// Handle these events with the complete handler, mainly to prevent
-			// them from being dispatched to the player.
-            streamingConnectionCloser.addEventListener(HTTPStatusEvent.HTTP_STATUS, ignore);
-            streamingConnectionCloser.addEventListener(SecurityErrorEvent.SECURITY_ERROR, ignore);
-		}
-
-		// Request the streaming connection to close, only if not already requested to close.
-		if (!streamingConnectionCloser.connected)
-		{
-			var request:URLRequest = new URLRequest();
-			request.url = channel.endpoint + "?" + COMMAND_PARAM_NAME + "=" + CLOSE_COMMAND + "&" + VERSION_PARAM_NAME + "=" + VERSION_1;
-			request.method = URLRequestMethod.POST;
-			var postParams:URLVariables = new URLVariables();
-			postParams[AbstractMessage.FLEX_CLIENT_ID_HEADER] = FlexClient.getInstance().id
-			request.data = postParams;
-
-			streamingConnectionCloser.load(request);
-		}
+                    // Ignore.
+                }
+
+    			streamingConnectionCloser = new URLStream();
+    			streamingConnectionCloser.addEventListener(Event.COMPLETE, process);
+                streamingConnectionCloser.addEventListener(IOErrorEvent.IO_ERROR, process);
+    			// Ignore the following events.
+                streamingConnectionCloser.addEventListener(HTTPStatusEvent.HTTP_STATUS, ignore);
+                streamingConnectionCloser.addEventListener(SecurityErrorEvent.SECURITY_ERROR, ignore);
+    		}
+
+    		// Request the streaming connection close, only if not already requested to close.
+    		if (!streamingConnectionCloser.connected)
+    		{
+    			var request:URLRequest = new URLRequest();
+    			request.url = channel.endpoint + "?" + COMMAND_PARAM_NAME + "=" + CLOSE_COMMAND + "&"
+    			              + STREAM_ID_PARAM_NAME + "=" + streamId + "&" + VERSION_PARAM_NAME + "=" + VERSION_1;
+    			request.method = URLRequestMethod.POST;
+    			var postParams:URLVariables = new URLVariables();
+    			postParams[AbstractMessage.FLEX_CLIENT_ID_HEADER] = FlexClient.getInstance().id
+    			request.data = postParams;
+
+    			streamingConnectionCloser.load(request);
+    		}
+        }
     }

     //--------------------------------------------------------------------------
@@ -413,14 +429,15 @@
     }

     /**
-     *  Handles open events dispatched by the streaming connection by re-dispatching
-     *  the event for the channel.
+     *  The open event is dispatched when the streaming connection has been established
+     *  to the server, but it may still fail or be rejected so ignore this event and do
+     *  not advance the channel to a connected state yet.
      *
      *  @param event The OPEN Event.
      */
     private function streamOpenHandler(event:Event):void
     {
-       dispatchEvent(event);
+       // Ignore.
     }

     /**
@@ -557,11 +574,19 @@
                         // Prepare for the next chunk.
                         if (message != null)
                         {
-                            // Watch for stream disconnect commands from the server.
-                            // When one is received, do not dispatch it, and instead notify the channel to
-                            // shut down and not attempt to reconnect.
-                            if ((message is CommandMessage) && (CommandMessage(message).operation == CommandMessage.DISCONNECT_OPERATION))
+                            if ((message is AcknowledgeMessage) && (AcknowledgeMessage(message).correlationId == OPEN_COMMAND))
                             {
+                                // Store the server-assigned stream id for use during disconnect.
+                                streamId = String(message.body);
+                                // Move the channel to a connected state.
+                                var openEvent:Event = new Event(Event.OPEN);
+                                dispatchEvent(openEvent);
+                            }
+                            else if ((message is CommandMessage) && (CommandMessage(message).operation == CommandMessage.DISCONNECT_OPERATION))
+                            {
+                                // Watch for stream disconnect commands from the server.
+                                // When one is received, do not dispatch it, and instead notify the channel to
+                                // shut down and not attempt to reconnect.
                                 var statusEvent:StatusEvent = new StatusEvent(StatusEvent.STATUS, false, false, DISCONNECT_CODE, "status");
                                 dispatchEvent(statusEvent);
                             }


Transferred from the Adobe Open Source Subversion Repository

Revision: 6257
Author:   smgilson@adobe.com
Date:     2009-04-24T21:28:52.430843Z

Log Message:
-----------
ASDoc edits for effects

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

Modified Paths:
--------------
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/spark/effects/easing/EaseInOutBase.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/spark/effects/animation/Animation.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/spark/effects/animation/IAnimationTarget.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/spark/effects/easing/IEaser.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/spark/effects/animation/RepeatBehavior.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/spark/effects/easing/Linear.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/spark/effects/AnimateTransformScale.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/spark/effects/easing/EasingFraction.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/spark/effects/easing/Power.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/spark/effects/interpolation/IInterpolator.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/spark/effects/interpolation/NumberInterpolator.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/spark/effects/easing/Sine.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/spark/effects/interpolation/RGBInterpolator.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/spark/effects/interpolation/HSBInterpolator.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/spark/effects/interpolation/ArrayInterpolator.as</path>

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

--- frameworks/projects/spark/src/spark/effects/interpolation/NumberInterpolator.as
+++ frameworks/projects/spark/src/spark/effects/interpolation/NumberInterpolator.as
@@ -10,7 +10,7 @@
 ////////////////////////////////////////////////////////////////////////////////
 package spark.effects.interpolation
 {
-
+
 import mx.resources.IResourceManager;
 import mx.resources.ResourceManager;

@@ -19,10 +19,10 @@
 //--------------------------------------

 [ResourceBundle("sparkEffects")]
-
+
 /**
  * The NumberInterpolator class provides interpolation between
- * Number start and end values.
+ * start and end values represented as Number instances.
  *
  *  @langversion 3.0
  *  @playerversion Flash 10
@@ -33,6 +33,14 @@
 {
     private static var theInstance:NumberInterpolator;

+    /**
+     *  Constructor.
+     *
+     *  @langversion 3.0
+     *  @playerversion Flash 10
+     *  @playerversion AIR 1.5
+     *  @productversion Flex 4
+     */
     public function NumberInterpolator()
     {
         super();
@@ -46,8 +54,9 @@
                                     ResourceManager.getInstance();

     /**
-     * Returns the singleton of this class. Since all NumberInterpolators
-     * have the same behavior, there is no need for more than one instance.
+     *  Returns the singleton of this class.
+     *  Since all NumberInterpolators
+     *  have the same behavior, there is no need for more than one instance.
      *
      *  @langversion 3.0
      *  @playerversion Flash 10
@@ -62,8 +71,8 @@
     }

     /**
-     * Returns the Number type, which is the type of
-     * object interpolated by NumberInterpolator
+     *  Returns Number, which is the data type of the
+     *  objects interpolated by the NumberInterpolator class.
      *
      *  @langversion 3.0
      *  @playerversion Flash 10
@@ -76,14 +85,21 @@
     }

     /**
-     * @inheritDoc
-     *
-     *
Interpolation for NumberInterpolator consists of a simple
-     * parametric calculation between startValue and
-     * endValue, using fraction as the
-     * fraction elapsed from start to end, like this:

-     *
-     *
return startValue + fraction * (endValue - startValue);

+     *  Interpolation for NumberInterpolator consists of a simple
+     *  parametric calculation between startValue and
+     *  endValue, using fraction as the
+     *  fraction of the elapsed time from start to end:
+     *
+     *
return startValue + fraction * (endValue - startValue);

+     *
+     *  @param fraction The fraction elapsed of the
+     *  animation, between 0.0 and 1.0.
+     *
+     *  @param startValue The start value of the interpolation.
+     *
+     *  @param endValue The end value of the interpolation.
+     *
+     *  @return The interpolated value.
      *
      *  @langversion 3.0
      *  @playerversion Flash 10
@@ -105,9 +121,7 @@
     }

     /**
-     * @inheritDoc
-     *
-     *
return baseValue + incrementValue;

+     *  @inheritDoc
      *
      *  @langversion 3.0
      *  @playerversion Flash 10
@@ -120,9 +134,7 @@
     }

     /**
-     * @inheritDoc
-     *
-     *
return baseValue - decrementValue;

+     *  @inheritDoc
      *
      *  @langversion 3.0
      *  @playerversion Flash 10


Transferred from the Adobe Open Source Subversion Repository

Revision: 3581
Author:   egeorgie@adobe.com
Date:     2008-10-10T23:52:26.296427Z

Log Message:
-----------
Fix for "http://bugs.adobe.com/jira/browse/SDK-15886 percentSize is not consistent between GraphicElement and UIComponent"

Reviewed by Chet

Modified Paths:
--------------
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/mx/layout/LayoutItemUIC.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/mx/layout/BasicLayout.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/mx/layout/HorizontalLayout.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/mx/layout/VerticalLayout.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/mx/graphics/graphicsClasses/GraphicElement.as</path>

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

--- frameworks/projects/spark/src/spark/primitives/supportClasses/GraphicElement.as
+++ frameworks/projects/spark/src/spark/primitives/supportClasses/GraphicElement.as
@@ -1048,7 +1048,6 @@
      */
     public function get percentHeight():Number
     {
-        // TODO!!! Examine this logic
         return _percentHeight;
     }

@@ -1088,7 +1087,6 @@
      */
     public function get percentWidth():Number
     {
-        // TODO!!! Examine this logic
         return _percentWidth;
     }


- bugfix: Fixed a regression that caused sorting of compositecommand queue to never actually happen for priority changes of queued elements

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

--- src/reprise/commands/CompositeCommand.as
+++ src/reprise/commands/CompositeCommand.as
@@ -109,6 +109,7 @@

 			m_isExecutingAsynchronously ||= commandExecutesAsynchronously(cmd);
 			cmd.id = m_nextResourceId++;
+			cmd.setQueueParent(this);
 			m_pendingCommands.push(cmd);

 			if (m_isExecuting)
@@ -417,7 +418,7 @@
 		protected function command_cancel(event : CommandEvent) : void
 		{
 			// cancel makes no difference to us to a unsuccessful command
-			var completeEvent:Event = new (event as Object).constructor(Event.COMPLETE, true);
+			var completeEvent:Event = new ((event as Object).constructor)(Event.COMPLETE, true);
 			IAsynchronousCommand(event.target).dispatchEvent(completeEvent);
 			// since execution is counted after a command completed its execution, cancelled
 			// commands don't fall into this category


- change: RadioButtonGroup now gets initialized with a selectedIndex of -1, so as to be able to differentiate between the first item and no item at all being selected

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

--- src/reprise/controls/RadioButtonGroup.as
+++ src/reprise/controls/RadioButtonGroup.as
@@ -25,7 +25,7 @@
 		protected static var g_radioGroups:Object;
 		protected var m_radioButtons:Array;
 		protected var m_name:String;
-		protected var m_selectedIndex:int;
+		protected var m_selectedIndex:int = -1;

@@ -64,6 +64,7 @@

 		public function setRadioButtonSelected(btn:RadioButton, bFlag:Boolean):void
 		{
+			var oldIndex : int = m_selectedIndex;
 			if (!bFlag)
 			{
 				btn.setSelected(false);
@@ -79,7 +80,10 @@
 					m_selectedIndex = i;
 				}
 			}
-			dispatchEvent(new Event(Event.CHANGE));
+			if (m_selectedIndex != oldIndex)
+			{
+				dispatchEvent(new Event(Event.CHANGE));
+			}
 		}

 		public function selectRadioButtonWithData(data:*):void


updating Playa.as. trying to find a way to manage this project.

--- script/Playa.as
+++ script/Playa.as
@@ -1,110 +1,113 @@
 package {
-  import flash.display.Sprite;
-  import flash.events.*;
-  import flash.external.ExternalInterface;
-  import flash.media.Sound;
-  import flash.media.SoundChannel;
-  import flash.net.URLRequest;
-  import flash.utils.Timer;
-
-  public class Playa extends Sprite {
-    private var channel:SoundChannel;
-    private var currentTrackUrl:String;
-    private var currentPlayaName:String;
-
-    public function Playa() {
-      if (ExternalInterface.available) {
-        try {
-          trace("Adding callbacks...");
-          ExternalInterface.addCallback("play", play);
-          ExternalInterface.addCallback("pause", pause);
-          ExternalInterface.addCallback("stop", stop);
-
-          if (checkJavaScriptReady()) {
-            trace("JavaScript is ready.");
-          } else {
-            trace("JavaScript is not ready, creating timer.");
-            var readyTimer:Timer = new Timer(100, 0);
-            readyTimer.addEventListener(TimerEvent.TIMER, timerHandler);
-            readyTimer.start();
-          }
-        } catch (error:SecurityError) {
-          trace("A SecurityError occurred: " + error.message);
-        } catch (error:Error) {
-          trace("An Error occurred: " + error.message);
-        }
-      } else {
-        trace("External interface is not available for this container.");
-      }
-    }
-
-    private function stopIfNewPlaya(playaName:String):void {
-      try{
-        if(playaName != currentPlayaName)
-          pause(currentPlayaName, true);
-      } catch(error:Error) {}
-    }
-
-    private function play(playaName:String, address:String, position:Number=0):void {
-      stopIfNewPlaya(playaName);
-      var req:URLRequest = new URLRequest(address);
-      var sound:Sound = new Sound();
-      try {
-        sound.load(req);
-        channel = sound.play(position);
-        ExternalInterface.call("Playa.get['"+playaName+"'].setPlayState(true)");
-        ExternalInterface.call("Playa.get['"+playaName+"'].setPlayHead(0)");
-        currentPlayaName = playaName;
-        currentTrackUrl  = address;
-      } catch (err:Error) {
-        trace(err.message);
-      }
-
-      channel.addEventListener(Event.SOUND_COMPLETE, soundCompleteHandler);
-    }
-
-    private function soundCompleteHandler(event:Event):void {
-      ExternalInterface.call("Playa.get['"+currentPlayaName+"'].playNext()");
-    }
-
-    private function pause(playaName:String, force:Boolean=false):void {
-      if(playaName == currentPlayaName || force==true){
-        ExternalInterface.call("Playa.get['"+playaName+"'].setPlayState(false)");
-        ExternalInterface.call("Playa.get['"+playaName+"'].setPlayHead("+channel.position+")");
-        channel.stop();
-      }
-    }
-
-    private function stop(playaName:String):void {
-      if(playaName == currentPlayaName){
-        ExternalInterface.call("Playa.get['"+currentPlayaName+"'].setPlayState(false)");
-        ExternalInterface.call("Playa.get['"+currentPlayaName+"'].setPlayHead(0)");
-        channel.stop();
-        playaName = "";
-        currentTrackUrl= "";
-      }
-    }
-
-    private function ioErrorHandler(event:Event):void {
-      trace("ioErrorHandler: " + event);
-    }
-
-    private function enterFrameHandler(event:ProgressEvent):void {
-      trace("progressHandler: " + event);
-    }
-
-    private function checkJavaScriptReady():Boolean {
-      var isReady:Boolean = ExternalInterface.call("FlashInterface.isReady()");
-      return isReady;
-    }
-
-    private function timerHandler(event:TimerEvent):void {
-      var isReady:Boolean = checkJavaScriptReady();
-      if (isReady) {
-        Timer(event.target).stop();
-      }
-    }
-  }
+	import flash.display.Sprite;
+	import flash.events.*;
+	import flash.external.ExternalInterface;
+	import flash.media.Sound;
+	import flash.media.SoundChannel;
+	import flash.net.URLRequest;
+	import flash.utils.Timer;
+
+	public class Playa extends Sprite {
+		private var channel:SoundChannel;
+		private var currentTrackUrl:String;
+		private var currentPlayaName:String;
+
+		public function Playa() {
+			if (ExternalInterface.available) {
+				try {
+					trace("Adding callbacks...");
+					ExternalInterface.addCallback("play", play);
+					ExternalInterface.addCallback("pause", pause);
+					ExternalInterface.addCallback("stop", stop);
+
+					if (checkJavaScriptReady()) {
+						trace("JavaScript is ready.");
+					} else {
+						trace("JavaScript is not ready, creating timer.");
+						var readyTimer:Timer = new Timer(100, 0);
+						readyTimer.addEventListener(TimerEvent.TIMER, timerHandler);
+						readyTimer.start();
+					}
+				} catch (error:SecurityError) {
+					trace("A SecurityError occurred: " + error.message);
+				} catch (error:Error) {
+					trace("An Error occurred: " + error.message);
+				}
+			} else {
+				trace("External interface is not available for this container.");
+
+			}
+
+		}
+
+		private function stopIfNewPlaya(playaName:String):void {
+			try{
+				if(playaName != currentPlayaName)
+					pause(currentPlayaName, true);
+			} catch(error:Error) {}
+		}
+
+		private function play(playaName:String, address:String, position:Number=0):void {
+			stopIfNewPlaya(playaName);
+			var req:URLRequest = new URLRequest(address);
+			var sound:Sound = new Sound();
+			try {
+				sound.load(req);
+				channel = sound.play(position);
+				ExternalInterface.call("Playa.get['"+playaName+"'].setPlayState(true)");
+				ExternalInterface.call("Playa.get['"+playaName+"'].setPlayHead(0)");
+				currentPlayaName = playaName;
+				currentTrackUrl  = address;
+			}
+			catch (err:Error) {
+				trace(err.message);
+			}
+
+			channel.addEventListener(Event.SOUND_COMPLETE, soundCompleteHandler);
+		}
+
+		private function soundCompleteHandler(event:Event):void {
+			ExternalInterface.call("Playa.get['"+currentPlayaName+"'].playNext()");
+		}
+
+		private function pause(playaName:String, force:Boolean=false):void {
+			if(playaName == currentPlayaName || force==true){
+				ExternalInterface.call("Playa.get['"+playaName+"'].setPlayState(false)");
+				ExternalInterface.call("Playa.get['"+playaName+"'].setPlayHead("+channel.position+")");
+				channel.stop();
+			}
+		}
+
+		private function stop(playaName:String):void {
+			if(playaName == currentPlayaName){
+				ExternalInterface.call("Playa.get['"+currentPlayaName+"'].setPlayState(false)");
+				ExternalInterface.call("Playa.get['"+currentPlayaName+"'].setPlayHead(0)");
+				channel.stop();
+				playaName = "";
+				currentTrackUrl= "";
+			}
+		}
+
+		private function ioErrorHandler(event:Event):void {
+			trace("ioErrorHandler: " + event);
+		}
+
+		private function enterFrameHandler(event:ProgressEvent):void {
+			trace("progressHandler: " + event);
+		}
+
+		private function checkJavaScriptReady():Boolean {
+			var isReady:Boolean = ExternalInterface.call("FlashInterface.isReady()");
+			return isReady;
+		}
+
+		private function timerHandler(event:TimerEvent):void {
+			var isReady:Boolean = checkJavaScriptReady();
+			if (isReady) {
+				Timer(event.target).stop();
+			}
+		}
+
+	}
 }

-


Transferred from the Adobe Open Source Subversion Repository

Revision: 4410
Author:   jszeto@adobe.com
Date:     2009-01-06T22:48:36.629482Z

Log Message:
-----------
FXG Bug Fixes

SDK-18287 RTE when trying to use databinding with FXG graphic assets

Added Bindable metadata back to FilledElement.fill and StrokedElement.stroke. These were causing RTEs because databinding was
attempting to access the fill or stroke before they were created.

SDK-17650 LinearGradient scaleX attribute doesn't work when linear gradient is rotated

When scaleX is set, we now honor the value when the gradient is rotated. Graphics.createGradientBox normally tries to "fit" the gradient into the available space when it is rotated.

SDK-17645 Data binding will not be able to detect assignments to LinearGradient rotation property

Added Bindable metadata to GradientBase.rotation

SDK-18293 mx.filters.ColorMatrixFilter matrix property needs to support a comma delimited String of values

Changed the matrix property from type Array to type Object. The underlying backing variable remains an array. The setter will convert a comma delimited string into an array. The getter will always return an array.

QE Notes: LinearGradient looks different than before when using scaleX and rotation together. Add tests for ColorMatrixFilter.
Doc Notes: Need docs for ColorMatrixFilter. Changed behavior of LinearGradient.scaleX and LinearGradient.rotation.
Bugs: SDK-18287, SDK-17650, SDK-17645, SDK-18293
Reviewer: Glenn

Modified Paths:
--------------
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/mx/graphics/FilledElement.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/mx/filters/ColorMatrixFilter.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/graphics/GradientBase.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/graphics/LinearGradient.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/mx/graphics/StrokedElement.as</path>

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

--- frameworks/projects/spark/src/spark/filters/ColorMatrixFilter.as
+++ frameworks/projects/spark/src/spark/filters/ColorMatrixFilter.as
@@ -1,10 +1,32 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  ADOBE SYSTEMS INCORPORATED
+//  Copyright 2004-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.filters
 {
 import flash.filters.BitmapFilter;
 import flash.filters.ColorMatrixFilter;
-import mx.filters.BaseFilter;
-import mx.filters.IBitmapFilter;

+/**
+ *  @review
+ *
+ *  The ColorMatrixFilter class lets you apply a 4 x 5 matrix transformation on the
+ *  RGBA color and alpha values of every pixel in the input image to produce a result
+ *  with a new set of RGBA color and alpha values. It allows saturation changes, hue
+ *  rotation, luminance to alpha, and various other effects. You can apply the filter
+ *  to any display object (that is, objects that inherit from the DisplayObject class),
+ *  such as MovieClip, SimpleButton, TextField, and Video objects, as well as to
+ *  BitmapData objects.
+ *
+ *  @see flash.filters.ColorMatrixFilter
+ */
 public class ColorMatrixFilter extends BaseFilter implements IBitmapFilter
 {
 	public function ColorMatrixFilter(matrix:Array = null)
@@ -25,29 +47,41 @@
 								  1,0];

 	/**
-	 *  The amount of horizontal blur. Valid values are 0 to 255. A blur of 1
-	 *  or less means that the original image is copied as is. The default
-	 *  value is 4. Values that are a power of 2 (such as 2, 4, 8, 16, and 32)
-	 *  are optimized to render more quickly than other values.
+	 *  @review
+	 *
+	 *  A comma delimited list of 20 doubles that comprise a 4x5 matrix applied to the
+	 *  rendered element.  The matrix is in row major order -- that is, the first five
+	 *  elements are multipled by the vector [srcR,srcG,srcB,srcA,1] to determine the
+	 *  output red value, the second five determine the output green value, etc.
+	 *
+	 *  The value must either be an array or comma delimited string of 20 numbers.
 	 */
-	public function get matrix():Array
+	public function get matrix():Object
 	{
 		return _matrix;
 	}

-	public function set matrix(value:Array):void
+	public function set matrix(value:Object):void
 	{
 		if (value != _matrix)
 		{
-			_matrix = value;
+			if (value is Array)
+			{
+				_matrix = value as Array;
+			}
+			else if (value is String)
+			{
+				_matrix = String(value).split(',');
+			}
+
 			notifyFilterChanged();
 		}
 	}

 	public function clone():BitmapFilter
 	{
-		return new flash.filters.ColorMatrixFilter(matrix);
+		return new flash.filters.ColorMatrixFilter(_matrix);
 	}

 }
-}+}


Updated docs so people know they can access the triggering event by creating a dependency of type eventClass

--- src/org/robotlegs/core/ICommandMap.as
+++ src/org/robotlegs/core/ICommandMap.as
@@ -35,7 +35,7 @@
 		 *
 		 * @param eventType The Event type to listen for
 		 * @param commandClass The Class to instantiate - must have an execute() method
-		 * @param eventClass Optional Event class for a stronger mapping. Defaults to flash.events.Event.
+		 * @param eventClass Optional Event class for a stronger mapping. Defaults to flash.events.Event. Your commandClass can optionally [Inject] a variable of this type to access the event that triggered the command.
 		 * @param oneshot Unmap the Class after execution?
 		 */
 		function mapEvent(eventType:String, commandClass:Class, eventClass:Class = null, oneshot:Boolean = false):void;


Transferred from the Adobe Open Source Subversion Repository

Revision: 4210
Author:   egreenfi@adobe.com
Date:     2008-12-01T23:35:46.830908Z

Log Message:
-----------
Enabled 3D effects support for Halo list based components.

Added ArrayList to the MXML manifest, with source as defaultProperty, so it can be used from MXML.

Review: Glenn
QA: None.

Modified Paths:
--------------
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/controls/listClasses/ListBase.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/mxml-2009-manifest.xml</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/manifest.xml</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/collections/ArrayList.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/core/UIComponent.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/core/AdvancedLayoutFeatures.as</path>

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

--- frameworks/projects/framework/src/mx/core/AdvancedLayoutFeatures.as
+++ frameworks/projects/framework/src/mx/core/AdvancedLayoutFeatures.as
@@ -10,11 +10,12 @@
 ////////////////////////////////////////////////////////////////////////////////
 package mx.core
 {
+	import flash.events.Event;
 	import flash.geom.Matrix;
 	import flash.geom.Matrix3D;
-    import flash.geom.Point;
+	import flash.geom.Point;
 	import flash.geom.Vector3D;
-	import flash.events.Event;
+
 	import mx.geom.CompoundTransform;
 	import mx.geom.TransformOffsets;
 	use namespace mx_internal;
@@ -447,7 +448,6 @@
 		_flags &= ~COMPUTED_MATRIX_VALID;
 		_flags &= ~COMPUTED_MATRIX3D_VALID;
 	}
-

 	/**