Transferred from the Adobe Open Source Subversion Repository

Revision: 22367
Author:   aaltman@adobe.com
Date:     2011-09-01T20:57:29.293486Z

Log Message:
-----------
Added bitmap swapping to StyleableStageText. StageText is swapped for a bitmap representation when effects are run, when popups appear above (in z-order) the StyleableStageText, or when a flag is set to always show the bitmaps.
Stopped default UIComponent focus behavior when setting focus to StageText.

QE notes: None
Doc notes: None
Bugs: SDK-31177, SDK-31129
Reviewer: cframpto
Tests run: checkintests, mustella-mobile
Is noteworthy for integration: no

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

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

--- frameworks/projects/mobilecomponents/src/spark/components/supportClasses/StyleableStageText.as
+++ frameworks/projects/mobilecomponents/src/spark/components/supportClasses/StyleableStageText.as
@@ -42,11 +42,14 @@
 import mx.core.LayoutDirection;
 import mx.core.UIComponent;
 import mx.core.mx_internal;
+import mx.events.DynamicEvent;
 import mx.events.EffectEvent;
 import mx.events.FlexEvent;
 import mx.events.MoveEvent;
 import mx.events.ResizeEvent;
+import mx.managers.FocusManager;
 import mx.managers.SystemManager;
+import mx.managers.systemClasses.ActiveWindowManager;

 import spark.components.Application;
 import spark.core.IEditableText;
@@ -316,6 +319,14 @@
     //
     //--------------------------------------------------------------------------

+    /**
+     *  A reference to the ActiveWindowManager is necessary for detecting when a
+     *  popup is displayed. If that popup obscures any StyleableStageText, the
+     *  StageText within needs to be hidden so it doesn't draw on top of the
+     *  popup.
+     */
+    private static var awm:ActiveWindowManager;
+
     private static var supportedStyles:String = "textAlign fontFamily fontWeight fontStyle fontSize color locale";

     /**
@@ -340,10 +351,10 @@
      *  this adjustment, single-line text on Android will be clipped or will
      *  scroll vertically.
      */
-    private static const androidHeightMultiplier:Number = 1.15;
+    mx_internal static var androidHeightMultiplier:Number = 1.15;
     private static const isAndroid:Boolean = Capabilities.version.indexOf("AND") == 0;

-   //--------------------------------------------------------------------------
+    //--------------------------------------------------------------------------
     //
     //  Constructor
     //
@@ -441,13 +452,48 @@
      */
     private var deferredViewPortUpdate:Boolean = false;

-   /*
-    * Along with the text, need to save the selection, when the StageText is removed from
-    * the stage, so that when the StageText is restored, the selection can be restored.
-    */
+    /**
+     *  Along with the text, need to save the selection, when the StageText is
+     *  removed from the stage, so that when the StageText is restored, the
+     *  selection can be restored.
+     */
     private var savedSelectionAnchorIndex:int = 0;
     private var savedSelectionActiveIndex:int = 0;
-
+
+    /**
+     *  When transitions run or when a popup is displayed over this component,
+     *  the StageText needs to be hidden and replaced with a bitmap proxy. This
+     *  prevents StageText, which is always in a layer above everything else,
+     *  from obscuring UI which is supposed to be on top and from handling
+     *  gestures intended for other components. In transitons, it allows text to
+     *  animate smoothly.
+     */
+    private var textImage:Bitmap = null;
+    private var showTextImage:Boolean = false;
+    private var numEffectsRunning:int = 0;
+
+    /**
+     *  DesignView need to always display a bitmap instead of a StageText so it
+     *  can draw its adornments and prevent users from interacting with the
+     *  component.
+     */
+    private var _alwaysShowProxyImage:Boolean = false;
+
+    /**
+     *  Because StageText exists outside of the display hierarchy, its visiblity
+     *  needs to be calculated as the aggregate visibility of all of its
+     *  ancestors.
+     */
+    private var ancestorsVisible:Boolean;
+    private var invalidateAncestorsVisibleFlag:Boolean = true;
+
+    /**
+     *  Ancestors watched for changes in visibility or geometry. Any change in
+     *  an ancestor's visibility or position may affect the StageText's
+     *  visibility or position.
+     */
+    private var watchedAncestors:Vector.<UIComponent> = new Vector.<UIComponent>();
+
     //--------------------------------------------------------------------------
     //
     //  Overridden properties
@@ -575,8 +621,6 @@
             return;

         _visible = value;
-
-        invalidateViewPortFlag = true;
         invalidateProperties();
     }

@@ -1039,17 +1083,24 @@
         if (value == null)
             value = "";

-        // Like TextField, preserve the selection when setting text.  This is necessary so that
-        // if there is a binding to the text property, the insertion poiint doesn't reset after
-        // every character typed.
-        if (stageText != null)
-        {
-            var anchorIndex:int = stageText.selectionAnchorIndex;
-            var activeIndex:int = stageText.selectionActiveIndex;
-            stageText.text = value;
-            stageText.selectRange(anchorIndex, activeIndex);
-        }
-        _text = value;
+        if (value != _text)
+        {
+            // Like TextField, preserve the selection when setting text.  This is necessary so that
+            // if there is a binding to the text property, the insertion poiint doesn't reset after
+            // every character typed.
+            if (stageText != null)
+            {
+                var anchorIndex:int = stageText.selectionAnchorIndex;
+                var activeIndex:int = stageText.selectionActiveIndex;
+                stageText.text = value;
+                stageText.selectRange(anchorIndex, activeIndex);
+            }
+
+            _text = value;
+
+            dispatchEvent(new TextOperationEvent(TextOperationEvent.CHANGE));
+            updateProxyImage();
+        }
     }

     //----------------------------------
@@ -1099,6 +1150,11 @@
      *  @playerversion AIR 3.0
      *  @productversion Flex 4.5.2
      */
+    public function get autoCapitalize():String
+    {
+        return stageText ? stageText.autoCapitalize : _autoCapitalize;
+    }
+
     public function set autoCapitalize(value:String):void
     {
         if (value == "")
@@ -1108,11 +1164,6 @@
             stageText.autoCapitalize = value;

         _autoCapitalize = value;
-    }
-
-    public function get autoCapitalize():String
-    {
-        return stageText ? stageText.autoCapitalize : _autoCapitalize;
     }

     //----------------------------------
@@ -1248,9 +1299,13 @@
     {
         if (effectiveEnabled)
         {
-            super.setFocus();
             if (stageText != null)
             {
+                // If alwaysShowProxyImage is set, don't dispose the image.
+                // We shouldn't get here in this case; this is just a backstop.
+                if (!_alwaysShowProxyImage)
+                    disposeProxyImage();
+
                 // assignFocus doesn't bring up the soft keyboard. We need to
                 // ask for it.
                 requestSoftKeyboard();
@@ -1322,15 +1377,19 @@
     override protected function commitProperties():void
     {
         super.commitProperties();
-
-        if (stageText != null)
+
+        if (stageText != null)
             stageText.editable = _editable && effectiveEnabled;
+
+        commitVisible();

         if (invalidateViewPortFlag)
         {
             updateViewPort();
             invalidateViewPortFlag = false;
         }
+
+        updateProxyImage();
     }

     //--------------------------------------------------------------------------
@@ -1361,6 +1420,41 @@
             stageText.selectRange(_text.length, _text.length);

             dispatchEvent(new TextOperationEvent(TextOperationEvent.CHANGE));
+
+            updateProxyImage();
+        }
+    }
+
+    /**
+     *  Calculate whether the StageText needs to be shown or hidden. If any
+     *  ancestor of this StyleableStageText is hidden, the StageText itself must
+     *  be hidden. This will not happen automatically because the StageText is
+     *  not part of the display hierarchy.
+     */
+    private function commitVisible():void
+    {
+        if (showTextImage)
+        {
+            if (textImage != null)
+            {
+                textImage.x = 0;
+                textImage.y = 0;
+
+                if (stageText != null)
+                    stageText.visible = false;
+            }
+        }
+        else
+        {
+            if (stageText != null)
+                stageText.visible = _visible && calcAncestorsVisible();
+
+            if (textImage != null)
+            {
+                removeChild(textImage);
+                textImage.bitmapData.dispose();
+                textImage = null;
+            }
         }
     }

@@ -1420,6 +1514,8 @@
         // TODO: scrollToRange so the insertion point is visible

         dispatchEvent(new TextOperationEvent(TextOperationEvent.CHANGE));
+
+        updateProxyImage();
     }

     /**
@@ -1447,7 +1543,10 @@
     public function selectAll():void
     {
         if (stageText != null && stageText.text != null)
+        {
             stageText.selectRange(0, stageText.text.length);
+            updateProxyImage();
+        }
     }

     /**
@@ -1460,7 +1559,10 @@
     public function selectRange(anchorIndex:int, activeIndex:int):void
     {
         if (stageText != null)
+        {
             stageText.selectRange(anchorIndex, activeIndex);
+            updateProxyImage();
+        }
     }

     /**
@@ -1531,11 +1633,31 @@
                 stageText.locale = defaultStyles["locale"];

             invalidateStyleFlag = false;
-        }
-    }
-
-    private var textImage:Bitmap = null;
-    private var numEffectsRunning:int = 0;
+
+            updateProxyImage();
+        }
+    }
+
+    /**
+     *  Flag to always show a bitmap image of the StageText instead of the
+     *  StageText itself. Used by DesignView to prevent users from interacting
+     *  with the stage text and to allow DesignView adornments to be drawn over
+     *  StageText-based componentry.
+     */
+    mx_internal function get alwaysShowProxyImage():Boolean
+    {
+        return _alwaysShowProxyImage;
+    }
+
+    mx_internal function set alwaysShowProxyImage(value:Boolean):void
+    {
+        _alwaysShowProxyImage = value;
+
+        if (_alwaysShowProxyImage)
+            createProxyImage();
+        else
+            disposeProxyImage();
+    }

     /**
      *  If a StageText is visible, this will capture a bitmap copy of what it is
@@ -1545,9 +1667,8 @@
      */
     mx_internal function captureBitmapData():BitmapData
     {
-        if (!stageText || !localViewPort ||
-            localViewPort.width == 0 || localViewPort.height == 0 ||
-            !visible || !calcAncestorsVisible())
+        if (!stageText || !stageText.stage || !localViewPort ||
+            localViewPort.width == 0 || localViewPort.height == 0)
             return null; // The StageText is invisible.

         if (stageText.viewPort.width == 0 || stageText.viewPort.height == 0)
@@ -1579,9 +1700,34 @@
                 textImage.scaleY = 1.0 / densityScale;
                 addChild(textImage);

-                // Don't just invalidate the viewport. Update it now so the
-                // StageText doesn't lag the animation.
-                updateViewPort();
+                showTextImage = true;
+                commitVisible();
+            }
+        }
+    }
+
+    /**
+     *  Replace the existing proxy image representing this StageText with a new
+     *  one. Call this whenever the StageText's properties, contents, or
+     *  geometry changes. This does nothing if there is no proxy image, so it is
+     *  safe to call updateProxyImage even if the state of the proxy image is
+     *  unknown.
+     */
+    private function updateProxyImage():void
+    {
+        if (stageText == null)
+            return;
+
+        if (textImage != null)
+        {
+            var newImageData:BitmapData = captureBitmapData();
+
+            if (newImageData)
+            {
+                var oldImageData:BitmapData = textImage.bitmapData;
+
+                textImage.bitmapData = newImageData;
+                oldImageData.dispose();
             }
         }
     }
@@ -1592,18 +1738,22 @@
      */
     private function disposeProxyImage():void
     {
-        if (textImage != null)
-        {
-            removeChild(textImage);
-            textImage.bitmapData.dispose();
-            textImage = null;
-
-            // The animation is done playing. It isn't necessary (and isn't
-            // desirable on Android) to udpate the viewport immediately. On
-            // Android, this may result in a hidden StageText flashing because
-            // its ancestors' visibility hasn't been udpated yet.
-            invalidateViewPortFlag = true;
+        if (showTextImage)
+        {
+            showTextImage = false;
             invalidateProperties();
+        }
+    }
+
+    private function updateProxyImageForForm(form:Object):void
+    {
+        if (form && form.hasOwnProperty("focusManager"))
+        {
+            if (form.focusManager != focusManager)
+                createProxyImage();
+                // If alwaysShowProxyImage is set, don't dispose the image.
+            else if (!_alwaysShowProxyImage)
+                disposeProxyImage();
         }
     }

@@ -1630,22 +1780,8 @@
                 // or non-integer values. Fix those here.
                 globalRect.x = Math.floor(Math.min(globalTopLeft.x, globalBottomRight.x));
                 globalRect.y = Math.floor(Math.min(globalTopLeft.y, globalBottomRight.y));
-                var globalWidth:Number = Math.ceil(Math.abs(globalBottomRight.x - globalTopLeft.x));
-                var globalHeight:Number = Math.ceil(Math.abs(globalBottomRight.y - globalTopLeft.y));
-
-                if (_visible && calcAncestorsVisible())
-                {
-                    if (textImage)
-                    {
-                        textImage.x = 0;
-                        textImage.y = 0;
-                    }
-                    else
-                    {
-                        globalRect.width = globalWidth;
-                        globalRect.height = globalHeight;
-                    }
-                }
+                globalRect.width = Math.ceil(Math.abs(globalBottomRight.x - globalTopLeft.x));
+                globalRect.height = Math.ceil(Math.abs(globalBottomRight.y - globalTopLeft.y));

                 stageText.viewPort = globalRect;
                 deferredViewPortUpdate = false;
@@ -1675,15 +1811,12 @@
         return lineMetrics.height;
     }

-    private var ancestorsVisible:Boolean;
-    private var ancestorsVisibleInvalidateFlag:Boolean = true;
-
     /**
      *  Returns true if every ancestor of this object is visible.
      */
     private function calcAncestorsVisible():Boolean
     {
-        if (ancestorsVisibleInvalidateFlag)
+        if (invalidateAncestorsVisibleFlag)
         {
             var result:Boolean = visible;
             var ancestor:DisplayObject = parent;
@@ -1695,13 +1828,11 @@
             }

             ancestorsVisible = result;
-            ancestorsVisibleInvalidateFlag = false;
+            invalidateAncestorsVisibleFlag = false;
         }

         return ancestorsVisible;
     }
-
-    private var watchedAncestors:Vector.<UIComponent> = new Vector.<UIComponent>();

     private function gatherAncestorComponents():Vector.<UIComponent>
     {
@@ -1770,6 +1901,25 @@
         watchedAncestors = newWatchedAncestors;
     }

+    /**
+     *  Stop watching for visibility and geometry events on all ancestors. Call
+     *  this when disposing the StageText.
+     */
+    private function clearWatchedAncestors():void
+    {
+        while (watchedAncestors.length > 0)
+        {
+            var ancestor:UIComponent = watchedAncestors.pop();
+
+            ancestor.removeEventListener(MoveEvent.MOVE, ancestor_moveHandler);
+            ancestor.removeEventListener(ResizeEvent.RESIZE, ancestor_resizeHandler);
+            ancestor.removeEventListener(FlexEvent.SHOW, ancestor_showHandler);
+            ancestor.removeEventListener(FlexEvent.HIDE, ancestor_hideHandler);
+            ancestor.removeEventListener(PopUpEvent.CLOSE, ancestor_closeHandler);
+            ancestor.removeEventListener(PopUpEvent.OPEN, ancestor_openHandler);
+        }
+    }
+
     private function restoreStageText():void
     {
         if (stageText != null)
@@ -1802,7 +1952,7 @@

             // Make sure viewPort and enabled state are recalculated
             invalidateViewPortFlag = true;
-            ancestorsVisibleInvalidateFlag = true;
+            invalidateAncestorsVisibleFlag = true;
             invalidateProperties();
         }
     }
@@ -1843,8 +1993,6 @@
     {
         //  Forward the focus event to the StageText. The focusedStageText flag
         //  is modified by the StageText's focus event handlers, not this one.
-        super.focusInHandler(event);
-
         if (stageText != null && focusedStageText != stageText && effectiveEnabled)
         {
             requestSoftKeyboard();
@@ -1861,9 +2009,7 @@
     private function ancestor_closeHandler(event:PopUpEvent):void
     {
         ancestorsVisible = false;
-        ancestorsVisibleInvalidateFlag = false;
-        invalidateViewPortFlag = true;
-
+        invalidateAncestorsVisibleFlag = false;
         invalidateProperties();
     }

@@ -1872,9 +2018,7 @@
         // Shortcut: If any ancestor hid, the StageText must hide. No need to
         // recalculate visibility.
         ancestorsVisible = false;
-        ancestorsVisibleInvalidateFlag = false;
-        invalidateViewPortFlag = true;
-
+        invalidateAncestorsVisibleFlag = false;
         invalidateProperties();
     }

@@ -1887,9 +2031,7 @@

     private function ancestor_openHandler(event:PopUpEvent):void
     {
-        ancestorsVisibleInvalidateFlag = true;
-        invalidateViewPortFlag = true;
-
+        invalidateAncestorsVisibleFlag = true;
         invalidateProperties();
     }

@@ -1904,12 +2046,26 @@
     {
         // An ancestor was shown, but some other ancestor may still be hidden.
         // Invalidate visibility and recalculate it later.
-        ancestorsVisibleInvalidateFlag = true;
-        invalidateViewPortFlag = true;
-
+        invalidateAncestorsVisibleFlag = true;
         invalidateProperties();
     }
-
+
+    private function awm_activatedFormHandler(event:DynamicEvent):void
+    {
+        var form:Object = event.hasOwnProperty("form") ? event.form : null;
+        // Both the activatedForm and deactivatedForm events pass the form that
+        // is becoming active as the "form" property.
+        updateProxyImageForForm(form);
+    }
+
+    private function awm_deactivatedFormHandler(event:DynamicEvent):void
+    {
+        var form:Object = event.hasOwnProperty("form") ? event.form : null;
+        // Both the activatedForm and deactivatedForm events pass the form that
+        // is becoming active as the "form" property.
+        updateProxyImageForForm(form);
+    }
+
     private function stageText_changeHandler(event:Event):void
     {
         var foundChange:Boolean = false;
@@ -1990,7 +2146,8 @@
         {
             // The last effect affecting the StageText to end causes us to put
             // the live StageText back and remove the bitmap.
-            if (--numEffectsRunning == 0)
+            // If alwaysShowProxyImage is set, don't dispose the image.
+            if (--numEffectsRunning == 0 && !_alwaysShowProxyImage)
                 disposeProxyImage();
         }
     }
@@ -2013,9 +2170,40 @@
             updateWatchedAncestors();
     }

+    private function addHierarchyListeners():void
+    {
+        if (stageText == null)
+            return;
+
+        updateWatchedAncestors();
+
+        stageText.stage.addEventListener(Event.ADDED, stage_hierarchyChangedHandler, false, 0, true);
+        stageText.stage.addEventListener(Event.REMOVED, stage_hierarchyChangedHandler, false, 0, true);
+    }
+
+    private function removeHierarchyListeners():void
+    {
+        if (stageText == null)
+            return;
+
+        stageText.stage.removeEventListener(Event.ADDED, stage_hierarchyChangedHandler);
+        stageText.stage.removeEventListener(Event.REMOVED, stage_hierarchyChangedHandler);
+
+        clearWatchedAncestors();
+    }
+
     private function addedToStageHandler(event:Event):void
     {
         var needsRestore:Boolean = false;
+
+        if (!awm)
+            awm = ActiveWindowManager(systemManager.getImplementation("mx.managers::IActiveWindowManager"));
+
+        if (awm)
+        {
+            awm.addEventListener("activatedForm", awm_activatedFormHandler, false, 0, true);
+            awm.addEventListener("deactivatedForm", awm_deactivatedFormHandler, false, 0, true);
+        }

         if (stageText == null)
         {
@@ -2028,12 +2216,9 @@
         stageText.stage.addEventListener(EffectEvent.EFFECT_START, stage_effectStartHandler, true, 0, true);
         stageText.stage.addEventListener(EffectEvent.EFFECT_END, stage_effectEndHandler, true, 0, true);

-        stageText.stage.addEventListener(Event.ADDED, stage_hierarchyChangedHandler, false, 0, true);
-        stageText.stage.addEventListener(Event.REMOVED, stage_hierarchyChangedHandler, false, 0, true);
-
         stageText.stage.addEventListener("enabledChanged", stage_enabledChangedHandler, true, 0, true);

-        updateWatchedAncestors();
+        addHierarchyListeners();

         if (needsRestore)
             restoreStageText();
@@ -2042,10 +2227,20 @@
             updateViewPort();

         registerStageTextListeners();
+
+        invalidateAncestorsVisibleFlag = true;
+        invalidateEffectiveEnabledFlag = true;
+        invalidateProperties();
     }

     private function removedFromStageHandler(event:Event):void
     {
+        if (awm)
+        {
+            awm.removeEventListener("activatedForm", awm_activatedFormHandler);
+            awm.removeEventListener("deactivatedForm", awm_deactivatedFormHandler);
+        }
+
         if (stageText == null)
             return;

@@ -2055,12 +2250,11 @@

         stageText.stage.removeEventListener(EffectEvent.EFFECT_START, stage_effectStartHandler, true);
         stageText.stage.removeEventListener(EffectEvent.EFFECT_END, stage_effectEndHandler, true);
-
-        stageText.stage.removeEventListener(Event.ADDED, stage_hierarchyChangedHandler);
-        stageText.stage.removeEventListener(Event.REMOVED, stage_hierarchyChangedHandler);
-
+
         stageText.stage.removeEventListener("enabledChanged", stage_enabledChangedHandler, true);
-
+
+        removeHierarchyListeners();
+
         stageText.stage = null;

         stageText.removeEventListener(Event.CHANGE, stageText_changeHandler);


CheckBox databindings

CheckBox databindings

--- src/ras3r/reaction_view/helpers/CheckBoxHelper.as
+++ src/ras3r/reaction_view/helpers/CheckBoxHelper.as
@@ -1,7 +1,11 @@
 package ras3r.reaction_view.helpers
 {
+	import fl.controls.*;
+	import flash.utils.*;
+	import mx.events.PropertyChangeEvent;
 	import ras3r.*;
-	import fl.controls.*;
+
+	use namespace flash_proxy;

 	public class CheckBoxHelper extends UIComponentHelper
 	{
@@ -32,6 +36,20 @@
 		**/
 		public var display_object:CheckBox = new CheckBox();

+		/**
+		*	proxy for display_object.width
+		**/
+		public function get width () :Number
+		{
+			return getProperty('width');
+		}
+
+		public function set width (w:Number) :void
+		{
+			setProperty('width', w);
+			display_object.textField.width = (w - display_object.textField.x);
+		}
+

 		// >>> PUBLIC METHODS
 		/**
@@ -40,6 +58,7 @@
 		public function CheckBoxHelper ()
 		{
 			super(display_object);
+			display_object.textField.wordWrap = true;
 		}

 		/**
@@ -47,8 +66,37 @@
 		**/
 		override public function bind_to (object:*, property:String) :void
 		{
+			// helper responds to changes to object[property]
+			object.addEventListener(property + '_change', after_property_change);
+
+			// object[property] responds to changes to text_input.text
+			display_object.addEventListener('change', function (e:Object) :void
+			{
+				// convert true/false to 1/0
+				var val:int = (e.target.selected ? 1 : 0);
+				// prevent superfluous event firing
+				if (object[property] == val) return;
+				// update data object
+				object[property] = val;
+			});
+
 			// setup validation handlers
 			// super.bind_to(object, property);
 		}
+
+
+		// >>> EVENT HANDLERS
+		/**
+		*	update display_object.selected
+		**/
+		private function after_property_change (e:PropertyChangeEvent) :void
+		{
+			// convert 1/0 to true/false
+			var selected:Boolean = Boolean(e.newValue);
+			// prevent superfluous event firing
+			if (selected == this['selected']) return;
+			// update display object
+			this['selected'] = selected;
+		}
 	}
 }


FLVTag : fix regression introduced by https://github.com/mangui/flashls/commit/4147ac4b5a3c0036b557ba4fd3675a44c01bf2fe

fix ambiguity between length class member and length parameter

--- src/org/mangui/hls/flv/FLVTag.as
+++ src/org/mangui/hls/flv/FLVTag.as
@@ -190,11 +190,13 @@
         }

         /** push a data pointer into the frame. **/
-        public function push(array : ByteArray, start : int, length : int) : void {
-            pointers.push(new TagData(array, start, length));
-            length += length;
-            if (type == AVC_NALU) {
-                length += 4;
+        public function push(array : ByteArray, start : int, len : int) : void {
+            if(len) {
+                pointers.push(new TagData(array, start, len));
+                length += len;
+                if (type == AVC_NALU) {
+                    length += 4;
+                }
             }
         }


no longer locking menu toggles in hash map (was causing history undo bugs)


fix rollovers and other mouseevents

fix rollovers and other mouseevents

--- frameworks/projects/Core/as/src/org/apache/flex/events/MouseEvent.as
+++ frameworks/projects/Core/as/src/org/apache/flex/events/MouseEvent.as
@@ -22,10 +22,15 @@
     {
         import flash.events.MouseEvent;
     }
+    COMPILE::JS
+    {
+        import window.MouseEvent;
+    }

     import org.apache.flex.core.IUIBase;
     import org.apache.flex.geom.Point;
     import org.apache.flex.utils.PointUtils;
+

 	/**
 	 *  Mouse events
@@ -37,15 +42,27 @@
 	 */
 	public class MouseEvent extends Event
 	{
-		public static const MOUSE_DOWN:String = "mouseDown";
-        public static const MOUSE_MOVE:String = "mouseMove";
-		public static const MOUSE_UP:String = "mouseUp";
-		public static const MOUSE_OUT:String = "mouseOut";
-		public static const MOUSE_OVER:String = "mouseOver";
-		public static const ROLL_OVER:String = "rollOver";
-		public static const ROLL_OUT:String = "rollOut";
+        private static function platformConstant(s:String):String
+        {
+            COMPILE::AS3
+            {
+                return s;
+            }
+            COMPILE::JS
+            {
+                return s.toLowerCase();
+            }
+        }
+
+		public static const MOUSE_DOWN:String = platformConstant("mouseDown");
+        public static const MOUSE_MOVE:String = platformConstant("mouseMove");
+		public static const MOUSE_UP:String = platformConstant("mouseUp");
+		public static const MOUSE_OUT:String = platformConstant("mouseOut");
+		public static const MOUSE_OVER:String = platformConstant("mouseOver");
+		public static const ROLL_OVER:String = platformConstant("rollOver");
+		public static const ROLL_OUT:String = platformConstant("rollOut");
         public static const CLICK:String = "click";
-
+
          /**
          *  Constructor.
          *
@@ -160,5 +177,114 @@
             }
             return _stagePoint.y;
         }
+
+        /**
+         * @private
+         */
+        COMPILE::JS
+        private static function installRollOverMixin():Boolean
+        {
+            window.addEventListener(MOUSE_OVER,
+                mouseOverHandler, false);
+            return true;
+        }
+
+
+        /**
+         * @param e The event.
+         * RollOver/RollOut is entirely implemented in mouseOver because
+         * when a parent and child share an edge, you only get a mouseout
+         * for the child and not the parent and you need to send rollout
+         * to both.  A similar issue exists for rollover.
+         */
+        COMPILE::JS
+        private static function mouseOverHandler(e:MouseEvent):void
+        {
+            var j:int;
+            var m:int;
+            var outs:Array;
+            var me:window.MouseEvent;
+            var parent:Object;
+            var target:Object = e.target.flexjs_wrapper;
+            if (target == null)
+                return; // probably over the html tag
+            var targets:Array = MouseEvent.targets;
+            var index:int = targets.indexOf(target);
+            if (index != -1) {
+                // get all children
+                outs = targets.slice(index + 1);
+                m = outs.length;
+                for (j = 0; j < m; j++) {
+                    me = makeMouseEvent(
+                        ROLL_OUT, e);
+                    outs[j].element.dispatchEvent(me);
+                }
+                MouseEvent.targets = targets.slice(0, index + 1);
+            }
+            else {
+                var newTargets:Array = [target];
+                if (!('parent' in target))
+                    parent = null;
+                else
+                    parent = target.parent;
+                while (parent) {
+                    index = targets.indexOf(parent);
+                    if (index == -1) {
+                        newTargets.unshift(parent);
+                        if (!('parent' in parent))
+                            break;
+                        parent = parent.parent;
+                    }
+                    else {
+                        outs = targets.slice(index + 1);
+                        m = outs.length;
+                        for (j = 0; j < m; j++) {
+                            me = makeMouseEvent(
+                                ROLL_OUT, e);
+                            outs[j].element.dispatchEvent(me);
+                        }
+                        targets = targets.slice(0, index + 1);
+                        break;
+                    }
+                }
+                var n:int = newTargets.length;
+                for (var i:int = 0; i < n; i++) {
+                    me = makeMouseEvent(
+                        ROLL_OVER, e);
+                    newTargets[i].element.dispatchEvent(me);
+                }
+                MouseEvent.targets = targets.concat(newTargets);
+            }
+        }
+
+
+        /**
+         */
+        COMPILE::JS
+        private static var rollOverMixin:Boolean =
+            installRollOverMixin();
+
+
+        /**
+         */
+        COMPILE::JS
+        private static var targets:Array = [];
+
+        /**
+         * @param {string} type The event type.
+         * @param {Event} e The mouse event.
+         * @return {MouseEvent} The new event.
+         */
+        COMPILE::JS
+        private static function makeMouseEvent(type:String, e:window.MouseEvent):window.MouseEvent
+        {
+            var out:window.MouseEvent = new window.MouseEvent(type);
+            out.initMouseEvent(type, false, false,
+                e.view, e.detail, e.screenX, e.screenY,
+                e.clientX, e.clientY, e.ctrlKey, e.altKey,
+                e.shiftKey, e.metaKey, e.button, e.relatedTarget);
+            return out;
+        };
+
 	}
 }


Transferred from the Adobe Open Source Subversion Repository

Revision: 18173
Author:   jasonsj@adobe.com
Date:     2010-10-15T17:03:20.801634Z

Log Message:
-----------
Mobile Theme Initial check-in

* New light-look visuals from XD
* Changed airmobile-config.xml to use standalone Mobile theme instead of Spark overlay
* Added theme="spark, mobile" where spark was already white-listed and support is implemented and/or planned for Mobile/spark.css (see https://zerowing.corp.adobe.com/display/flexmobile/Mobile+Theme+Styles+Spec)
* MobileSkin has symbolColor and chromeColor support. Override beginChromeColorFill and drawChromeColor when defining custom chromeColor visuals.
* CheckBox and RadioButton now have chromeColor and symbolColor support
* Added textShadowColor and textShadowAlpha support to Button and ActionBar
* Added chromeColor support to HScrollBar and VScrollBar

QE notes: All mobile skins have been updaetd.
Doc notes: Update mobile skinning documentation for new APIs
Bugs:
SDK-28043 Investigate usage of "viewWidth", "viewHeight" for the Flex Mobile Skin Assets
SDK-27609 Mobile scroll bar skins should use chromeColor
SDK-27646 cornerradius has no effect on button in mobile application
Reviewer: gruehle
Tests run: checkintests
Is noteworthy for integration: Yes

Modified Paths:
--------------
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/mobiletheme/src/spark/skins/mobile/VScrollBarTrackSkin.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/mobiletheme/src/spark/skins/mobile/supportClasses/MobileSkin.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/mobiletheme/defaults.css</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/mobiletheme/src/spark/skins/mobile/ActionBarSkin.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/spark/src/spark/components/Button.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/framework/src/mx/styles/metadata/BorderStyles.as</path>
<path kind="file" action="A">/private/flex/sdk/branches/hero_private/frameworks/projects/mobiletheme/src/spark/skins/mobile/assets/CheckBox_symbol.fxg</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/mobiletheme/src/spark/skins/mobile/ActionButtonSkin.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/spark/src/spark/components/Image.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/spark/src/spark/components/supportClasses/SkinnableComponent.as</path>
<path kind="file" action="A">/private/flex/sdk/branches/hero_private/frameworks/projects/mobiletheme/src/spark/skins/mobile/assets/RadioButton_symbol.fxg</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/mobiletheme/src/spark/skins/mobile/assets/Button_up.fxg</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/framework/src/mx/styles/metadata/ContainerBackgroundStyles.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/spark/src/spark/components/CheckBox.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/spark/src/spark/components/Group.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/mobilecomponents/src/spark/components/ActionBar.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/mobiletheme/src/spark/skins/mobile/assets/CheckBox_up.fxg</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/spark/src/spark/components/supportClasses/ButtonBase.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/spark/src/spark/components/supportClasses/SkinnableTextBase.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/mobiletheme/src/spark/skins/mobile/ActionBarButtonSkinBase.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/mobiletheme/src/spark/skins/mobile/HScrollBarThumbSkin.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/spark/src/spark/components/SkinnableDataContainer.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/mobiletheme/src/spark/skins/mobile/assets/RadioButton_up.fxg</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/mobiletheme/src/spark/skins/mobile/assets/TextInput_border.fxg</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/spark/src/spark/components/supportClasses/SliderBase.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/mobiletheme/src/spark/skins/mobile/supportClasses/ButtonSkinBase.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/mobiletheme/src/spark/skins/mobile/assets/Button_down.fxg</path>
<path kind="file" action="D">/private/flex/sdk/branches/hero_private/frameworks/projects/mobiletheme/src/spark/skins/mobile/assets/CheckBox_upSelected.fxg</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/spark/src/spark/components/SkinnableContainer.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/spark/src/spark/components/List.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/spark/src/spark/skins/spark/DefaultItemRenderer.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/mobiletheme/src/spark/skins/mobile/TextInputSkin.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/mobiletheme/src/spark/skins/mobile/assets/RadioButton_upSelected.fxg</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/mobiletheme/src/spark/skins/mobile/VScrollBarThumbSkin.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/spark/src/spark/components/supportClasses/GroupBase.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/mobiletheme/src/spark/skins/mobile/assets/CheckBox_down.fxg</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/mobiletheme/src/spark/skins/mobile/ButtonSkin.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/mobiletheme/src/spark/skins/mobile/TextAreaSkin.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/spark/src/spark/components/Scroller.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/mobiletheme/src/spark/skins/mobile/ViewMenuItemSkin.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/mobiletheme/src/spark/skins/mobile/assets/RadioButton_down.fxg</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/mobiletheme/src/spark/skins/mobile/HScrollBarTrackSkin.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/framework/src/mx/controls/ToolTip.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/spark/src/spark/components/RadioButton.as</path>
<path kind="file" action="D">/private/flex/sdk/branches/hero_private/frameworks/projects/mobiletheme/src/spark/skins/mobile/assets/CheckBox_downSelected.fxg</path>
<path kind="file" action="D">/private/flex/sdk/branches/hero_private/frameworks/themes/Mobile/spark.css</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/mobiletheme/src/spark/skins/mobile/supportClasses/SelectableButtonSkinBase.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/airmobile-config.xml</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/mobiletheme/src/spark/skins/mobile/CheckBoxSkin.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/mobiletheme/src/spark/skins/mobile/assets/RadioButton_downSelected.fxg</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/mobiletheme/src/spark/skins/mobile/RadioButtonSkin.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/mobiletheme/src/spark/skins/mobile/NavigationButtonSkin.as</path>

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

--- frameworks/projects/framework/src/mx/styles/metadata/BorderStyles.as
+++ frameworks/projects/framework/src/mx/styles/metadata/BorderStyles.as
@@ -87,7 +87,7 @@
  *  @playerversion AIR 1.1
  *  @productversion Flex 3
  */
-[Style(name="borderColor", type="uint", format="Color", inherit="no", theme="halo, spark")]
+[Style(name="borderColor", type="uint", format="Color", inherit="no", theme="halo, spark, mobile")]

 /**
  *  Bounding box sides.


Transferred from the Adobe Open Source Subversion Repository

Revision: 19920
Author:   doug.lee@ssbbartgroup.com
Date:     2011-01-24T22:09:23.961234Z

Log Message:
-----------
Full ASDoc block included in DataGridAccImpl, taken directly from the posted spec.

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

Modified Paths:
--------------
/private/flex/sdk/branches/hero_private/frameworks/projects/spark/src/spark/accessibility/DataGridAccImpl.as

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

--- frameworks/projects/spark/src/spark/accessibility/DataGridAccImpl.as
+++ frameworks/projects/spark/src/spark/accessibility/DataGridAccImpl.as
@@ -35,8 +35,275 @@
 use namespace mx_internal;

 /**
- *  DataGridAccImpl is a subclass of AccessibilityImplementation
- *  which implements accessibility for the DataGrid class.
+ *  This is the accessibility implementation class for
+ *  spark.components.DataGrid.
+ *
+ *
When a Spark DataGrid is created, its focusOwner child
+ *  object's accessibilityImplementation property is set to an
+ *  instance of this class. The accessibility implementation is placed on
+ *  this placeholder focusOwner object so that the DataGrid's
+ *  accessibility implementation does not obscure the item editor's
+ *  accessibility implementation.  The DataGrid component itself does not
+ *  have an accessibility implementation.  This step is required as the
+ *  current version of the Flash Player does not support multiple levels of
+ *  MSAA objects.  Item editors can be any component and need to be full MSAA
+ *  objects.  The item editor objects appear as sibling objects to the
+ *  DataGrid in the MSAA tree structure.  The accessibility implementation
+ *  for each item editor is thus handled by the accessibility implementation
+ *  associated with that component, such as CheckBoxAccImpl for
+ *  a CheckBox.  The item editor's accessibility implementation only exists
+ *  when there is an item editor session, and there can only be one item
+ *  editor active at one time; thus, there is one or zero instances of the
+ *  item editor accessibility implementation active at any time.

+ *
+ *
Two methods are overwritten in the DataGrid class to
+ *  properly handle focus among DataGrid and the
+ *  focusOwner child of DataGrid.  The
+ *  GridItemRenderer class turns accessibility off for item
+ *  renderers, as by default these will be handled as simple objects under
+ *  the DataGrid accessibility implementation.  While this limits how
+ *  non-item editor components such as CheckBox, Panel, etc. can be used in
+ *  DataGrids, it prevents these items from showing up as siblings to the
+ *  DataGrid in the MSAA tree.  Allowing all grid item renderers to show up
+ *  as siblings to the DataGrid in the MSAA tree would be very confusing to
+ *  users of screen readers as there would be no context or relationship.
+ *  Developers can of course override this default behavior if desired to
+ *  display these renderers with accessibility enabled.

+ *
+ *
The Flash Player then uses this class to allow MSAA clients such as
+ *  screen readers to see and manipulate the DataGrid. See the
+ *  mx.accessibility.AccImpl and
+ *  flash.accessibility.AccessibilityImplementation classes for background
+ *  information about accessibility implementation classes and MSAA.

+ *
+ *
The DataGridAccImpl extends the
+ *  ListBaseAccImpl (as the DataGrid extends the
+ *  DataGridBase which extends the ListBase class).
+ *  The Spark DataGridAccImpl is most similar to the MX
+ *  AdvancedDataGridAccImpl as the AdvancedDataGrid also
+ *  supports single cell and row selection which the MX DataGrid did not.

+ *
+ *
Children

+ *
+ *
The MSAA children of a DataGrid are, in this order

+ *

+ *
One child for each visible header cell, starting from the left.
+ *  "Visible" here means not hidden by the developer
+ *  (column.visible=false).  The header for a column that is not
+ *  marked invisible by the developer but which is scrolled off screen is
+ *  considered "visible" here.
+ *
In row selection mode, one child for each data row in the grid; OR
+ *
In cell selection mode, one child for each cell in the grid,
+ *  excluding cells in invisible (as just described) columns.
+ *

+ *
+ *
The number of children depends on the number of rows and columns in
+ *  the dataProvider, not on the number of items currently
+ *  displayed on screen.

+ *
+ *
Note that, unlike for ListBase, DataGrid child count does
+ *  not reflect the number of data rows in the control.  Assistive technology
+ *  should therefore avoid using AccChildCount as a means of
+ *  reporting row count.

+ *
+ *
This property is not handled by the DataGrid accessibility
+ *  implementation for item editors as item editors manage themselves.

+ *
+ *
Role

+ *
+ *
The MSAA Role of a DataGrid is ROLE_SYSTEM_LIST.

+ *
+ *
The Role of each data row or cell in the DataGrid is
+ *  ROLE_SYSTEM_LISTITEM.

+ *
+ *
The Role of each header cell in the DataGrid is
+ *  ROLE_SYSTEM_COLUMNHEADER.

+ *
+ *
This property is not handled by the DataGrid accessibility
+ *  implementation for item editors as item editors manage themselves.

+ *
+ *
Name

+ *
+ *
The MSAA Name of a DataGrid is, by default, an empty string. When
+ *  wrapped in a FormItem element, the Name is the FormItem's
+ *  label. To override this behavior, set the DataGrids's
+ *  accessibilityName property.  Setting the
+ *  accessibilityName property will also apply the accessible
+ *  name to the focusOwner child object of the DataGrid which
+ *  represents the DataGrid.

+ *
+ *
The Name of each data row (when in row selection mode) is a string of
+ *  the form "_column1Name_: _column1Value_, _column2Name_: _column2Value_,
+ *  ..., _columnNName_: _columnNValue_, Row _m_ of _n_."  Columns are
+ *  separated from each other by commas, and column names and values are
+ *  separated from each other by colons.  Columns hidden by the developer are
+ *  omitted entirely from the Name string.  Example Name string: "Contact
+ *  Name: Doug, Contact Phone: 555-1212, Contact Zip: 12345, row 3 of 7."

+ *
Note that "Row _m_ of _n_" is localized.

+ *
+ *
The Name of each data cell in column 1 (when in cell selection mode)
+ *  is a string of the form "_columnName_: _columnValue_, Row _m_ of _n_."
+ *  Example:  "Contact Phone: 555-1212, Row 2 of 5."  Subsequent columns use
+ *  the same format but omit the "Row _m_ of _n_" portion.

+ *
Note that "Row _m_ of _n_" is localized.

+ *
+ *
The Name string for a column header (in cell or row selection mode) is
+ *  normally the text of the header.  Example:  "Contact Phone."  If the grid
+ *  is sorted by the corresponding column however, the string "sorted" or
+ *  "sorted descending" is appended to the column name, to indicate the sort
+ *  and its direction.  Example:  "Contact Name sorted."  For a multicolumn
+ *  sort, level strings are also appended indicating each column's level in
+ *  the set of sorting columns.  For example, if a grid is sorted first by
+ *  column 3 and then by column 2, and column 2 is sorted in descending
+ *  order, column 3's name will end with "Sorted Level 1," and column 2's
+ *  name will end with "Sorted descending level 2."  The strings for
+ *  indicating ascending sort, descending sort, and sort level are
+ *  localized.

+ *
+ *
When the Name of the DataGrid or one of its items changes, a DataGrid
+ *  dispatches the MSAA event EVENT_OBJECT_NAMECHANGE with the
+ *  proper childID for a row or cell or 0 for itself.

+ *
+ *
If an accessibility name is not set for an item editor, one is set
+ *  based on the column header name for the cell.

+ *
+ *
Description

+ *
+ *
The MSAA Description of a DataGrid is, by default, an empty string,
+ *  but you can set the DataGrid's accessibilityDescription
+ *  property.

+ *
+ *
The Description of each row, cell, or header is the empty string and
+ *  can not be set by an AccImpl.

+ *
+ *
This property is not handled by the DataGrid accessibility
+ *  implementation for item editors as item editors manage themselves.

+ *
+ *
State

+ *
+ *
The MSAA State of a DataGrid is a combination of:

+ *

+ *
STATE_SYSTEM_UNAVAILABLE (when enabled is
+ *  false)
+ *
STATE_SYSTEM_FOCUSABLE (when enabled is
+ *  true)
+ *
STATE_SYSTEM_FOCUSED (when enabled is
+ *  true and the DataGrid has focus)
+ *
STATE_SYSTEM_MULTISELECTABLE (when
+ *  allowMultipleSelection is true)
+ *

+ *
+ *
The State of a data row or cell is a combination of:

+ *

+ *
STATE_SYSTEM_FOCUSABLE
+ *
STATE_SYSTEM_FOCUSED (when focused)
+ *
STATE_SYSTEM_OFFSCREEN (when the row or cell has
+ *  scrolled offscreen)
+ *
STATE_SYSTEM_SELECTABLE
+ *
STATE_SYSTEM_SELECTED (when it is selected)
+ *

+ *
+ *
The State of a header cell is STATE_SYSTEM_NORMAL, since
+ *  header cells may not receive focus or be selected.  As currently
+ *  implemented, header cells may not report
+ *  STATE_SYSTEM_OFFSCREEN even if the grid itself is moved such
+ *  that its headers are offscreen.

+ *
+ *
When the State of the DataGrid or one of its items changes, a DataGrid
+ *  dispatches the MSAA event EVENT_OBJECT_STATECHANGE with the
+ *  proper childID for the row or cell or 0 for itself.

+ *
+ *
This property is not handled by the DataGrid accessibility
+ *  implementation for item editors as item editors manage themselves.

+ *
+ *
Value

+ *
+ *
DataGrids and their children (rows, cells, and headers) do not have
+ *  MSAA Values.

+ *
+ *
Location

+ *
+ *
The MSAA Location of a DataGrid or a row, data cell, or header cell
+ *  within it is its bounding rectangle.  The Location of an item that is
+ *  currently not displayed on screen is undefined.

+ *
+ *
This property is not handled by the DataGrid accessibility
+ *  implementation for item editors as item editors manage themselves.

+ *
+ *
Default Action

+ *
+ *
A DataGrid does not have an MSAA DefaultAction. The MSAA DefaultAction
+ *  for a row or cell is "Double Click" and for a header cell is "Click," and
+ *  the corresponding localized string will be returned when the default
+ *  action string is requested.

+ *
+ *
Performing the default action on a data row or cell will cause it to
+ *  be focused and selected and may cause other behavior depending on
+ *  cell/row type.  Performing the default action on a header will cause the
+ *  grid to be sorted by that column.  Repeated default actions on the header
+ *  will toggle the sort order between ascending and descending.  At this
+ *  writing, there is no way via the AccImpl to arrange for a multilevel sort
+ *  on several columns at once.

+ *
+ *
This property is not handled by the DataGrid accessibility
+ *  implementation for item editors as item editors manage themselves.

+ *
+ *
Focus

+ *
+ *
When there is no specific item (row or cell depending on selection
+ *  mode) in focus within the grid, Focus returns 0 indicating that the grid
+ *  itself has focus.  This should only happen when the grid contains no
+ *  data.

+ *
+ *
When a row (row selection mode) or cell (cell selection mode) has
+ *  focus, Focus returns the childID of the focused item.

+ *
+ *
When a DataGrid receives focus, it dispatches the MSAA event
+ *  EVENT_OBJECT_FOCUS.  This event is also dispatched when
+ *  focus moves among rows or cells within the grid.

+ *
+ *
A focus change event is fired on the item editor when it
+ *  starts/appears.  A focus change event is fired on the DataGrid when the
+ *  item editor is saved or closed.

+ *
+ *
Selection

+ *
+ *
A DataGrid allows either a single row or cell or multiple rows or
+ *  cells to be selected, depending on the
+ *  allowMultipleSelection property.  Selection returns an array
+ *  of the integer childIDs of the selected items.

+ *
+ *
When an item is selected exclusively, it dispatches MSAA event
+ *  EVENT_OBJECT_SELECTION.  When a cell (cell selection mode)
+ *  or row (row selection mode) is added to the current set of selections,
+ *  the dispatched event is EVENT_OBJECT_SELECTIONADD.
+ *  Similarly, if an item (cell or row) is removed from selection, the
+ *  dispatched event is EVENT_OBJECT_SELECTIONREMOVE.  If all
+ *  selections are cleared (regardless of how many items were selected) or a
+ *  select-all or select-region action is performed, the dispatched event is
+ *  EVENT_OBJECT_SELECTIONWITHIN.  Any selection operation not
+ *  matching one of those listed above will dispatch
+ *  EVENT_OBJECT_SELECTION.

+ *
+ *
This property is not handled by the DataGrid accessibility
+ *  implementation for item editors as item editors manage themselves.

+ *
+ *
Select

+ *
+ *
The accSelect method implements requests made via MSAA
+ *  for changes in selection and/or focus within the DataGrid.  The AccImpl
+ *  for the DataGrid supports the setting of focus to a DataGrid itself or to
+ *  a data item or set of items (row or cell depending on selection mode)
+ *  within it.  Supported actions include setting focus, exclusively
+ *  selecting one item, and adding and removing an item or set of items from
+ *  selection, all as defined in the Microsoft Active Accessibility
+ *  specification.  At this writing, attempting to use accSelect
+ *  to extend an already-selected multi-cell region in cell multiselection
+ *  mode to include more rows and columns at once may yield different results
+ *  than doing the same action with a mouse.

+ *
+ *
This property is not handled by the DataGrid accessibility
+ *  implementation for item editors as item editors manage themselves.

  *
  *  @langversion 3.0
  *  @playerversion Flash 10
@@ -349,8 +616,6 @@
         dgAccInfo.setup(master, 0);
         if (!dgAccInfo.dataGrid.columns || !dgAccInfo.dataGrid.dataProvider)
             return null;
-
-        // TODO: handle editable

         return dgAccInfo.childIDFromRowAndColumn(
             dgAccInfo.dataGrid.grid.caretRowIndex,


Transferred from the Adobe Open Source Subversion Repository

Revision: 5097
Author:   gauravj@adobe.com
Date:     2009-02-27T02:06:23.424936Z

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

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

Modified Paths:
--------------
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/airframework/src/mx/core/Window.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/airframework/src/mx/controls/fileSystemClasses/FileSystemTreeDataDescriptor.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/airframework/src/mx/core/FlexHTMLLoader.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/airframework/src/mx/controls/FileSystemEnumerationMode.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/airframework/src/mx/controls/FileSystemHistoryButton.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/airframework/src/mx/controls/FileSystemTree.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/airframework/src/mx/controls/HTML.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flash-integration/src/mx/flash/UIMovieClip.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flash-integration/src/mx/flash/FlexContentHolder.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/airframework/src/mx/utils/DirectoryEnumeration.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flash-integration/src/mx/flash/ContainerMovieClip.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/airframework/src/mx/controls/FileSystemComboBox.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/airframework/src/mx/utils/DirectoryEnumerationMode.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/airframework/src/mx/events/AIREvent.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/airframework/src/mx/controls/FileSystemList.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/airframework/src/mx/core/windowClasses/StatusBar.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/airframework/src/mx/events/FileEvent.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/airframework/src/mx/events/WindowExistenceEvent.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/airframework/src/mx/controls/FileSystemDataGrid.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/airframework/src/mx/skins/halo/ApplicationTitleBarBackgroundSkin.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/airframework/src/mx/controls/fileSystemClasses/FileSystemControlHelper.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/airframework/src/mx/core/WindowedApplication.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/airframework/src/mx/managers/NativeDragManagerImpl.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/airframework/src/mx/events/FlexNativeMenuEvent.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/airframework/src/mx/managers/WindowedSystemRawChildrenList.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/airframework/src/mx/skins/halo/WindowMinimizeButtonSkin.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/airframework/src/mx/skins/halo/WindowRestoreButtonSkin.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/airframework/src/mx/skins/halo/WindowMaximizeButtonSkin.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/airframework/src/mx/skins/halo/StatusBarBackgroundSkin.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/airframework/src/mx/core/IWindow.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/airframework/src/mx/controls/FileSystemSizeDisplayMode.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/airframework/src/mx/managers/WindowedSystemManager.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/airframework/src/mx/events/FlexNativeWindowBoundsEvent.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/airframework/src/mx/skins/halo/WindowBackground.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/airframework/src/mx/core/windowClasses/TitleBar.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/airframework/src/mx/managers/WindowedSystemChildrenList.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/airframework/src/mx/skins/halo/WindowCloseButtonSkin.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/airframework/src/mx/controls/FlexNativeMenu.as</path>

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

--- frameworks/projects/airframework/src/mx/controls/FileSystemDataGrid.as
+++ frameworks/projects/airframework/src/mx/controls/FileSystemDataGrid.as
@@ -35,6 +35,10 @@
  *  changes for any reason.
  *
  *  @eventType mx.events.FileEvent.DIRECTORY_CHANGE
+ *
+ *  @langversion 3.0
+ *  @playerversion AIR 1.1
+ *  @productversion Flex 3
  */
 [Event(name="directoryChange", type="mx.events.FileEvent")]

@@ -62,6 +66,10 @@
  *  the directoryChange event is dispatched.

  *
  *  @eventType mx.events.FileEvent.DIRECTORY_OPENING
+ *
+ *  @langversion 3.0
+ *  @playerversion AIR 1.1
+ *  @productversion Flex 3
  */
 [Event(name="directoryChanging", type="mx.events.FileEvent")]

@@ -70,6 +78,10 @@
  *  or by selecting it and pressing Enter.
  *
  *  @eventType mx.events.FileEvent.FILE_CHOOSE
+ *
+ *  @langversion 3.0
+ *  @playerversion AIR 1.1
+ *  @productversion Flex 3
  */
 [Event(name="fileChoose", type="mx.events.FileEvent")]

@@ -84,6 +96,10 @@
  *  directoryIcon="@Embed(source='directoryIcon.jpg');"
  *
  *  @default TreeNodeIcon
+ *
+ *  @langversion 3.0
+ *  @playerversion AIR 1.1
+ *  @productversion Flex 3
  */
 [Style(name="directoryIcon", type="Class", format="EmbeddedFile", inherit="no")]

@@ -94,6 +110,10 @@
  *  fileIcon="@Embed(source='fileIcon.jpg');"
  *
  *  @default TreeNodeIcon
+ *
+ *  @langversion 3.0
+ *  @playerversion AIR 1.1
+ *  @productversion Flex 3
  */
 [Style(name="fileIcon", type="Class", format="EmbeddedFile", inherit="no")]

@@ -258,6 +278,10 @@
  *
  *  @see flash.filesystem.File
  *
+ *
+ *  @langversion 3.0
+ *  @playerversion AIR 1.1
+ *  @productversion Flex 3
  */
 public class FileSystemDataGrid extends DataGrid
 {
@@ -271,6 +295,10 @@

     /**
      *  @copy mx.controls.FileSystemList#COMPUTER
+     *
+     *  @langversion 3.0
+     *  @playerversion AIR 1.1
+     *  @productversion Flex 3
      */
     public static const COMPUTER:File = FileSystemControlHelper.COMPUTER;

@@ -282,6 +310,10 @@

     /**
      *  Constructor.
+     *
+     *  @langversion 3.0
+     *  @playerversion AIR 1.1
+     *  @productversion Flex 3
      */
     public function FileSystemDataGrid()
     {
@@ -317,6 +349,10 @@
     /**
      *  The DateFormatter object used to format the dates
      *  in the Created and Modified columns.
+     *
+     *  @langversion 3.0
+     *  @playerversion AIR 1.1
+     *  @productversion Flex 3
      */
     mx_internal var dateFormatter:DateFormatter = new DateFormatter();

@@ -362,6 +398,10 @@
      *  @see #canNavigateBack
      *  @see #navigateBack()
      *  @see mx.controls.FileSystemHistoryButton
+     *
+     *  @langversion 3.0
+     *  @playerversion AIR 1.1
+     *  @productversion Flex 3
      */
     public function get backHistory():Array
     {
@@ -394,6 +434,10 @@
      *
      *  @see #backHistory
      *  @see #navigateBack()
+     *
+     *  @langversion 3.0
+     *  @playerversion AIR 1.1
+     *  @productversion Flex 3
      */
     public function get canNavigateBack():Boolean
     {
@@ -425,6 +469,10 @@
      *  @default false
      *
      *  @see #navigateDown()
+     *
+     *  @langversion 3.0
+     *  @playerversion AIR 1.1
+     *  @productversion Flex 3
      */
     public function get canNavigateDown():Boolean
     {
@@ -457,6 +505,10 @@
      *
      *  @see #forwardHistory
      *  @see #navigateForward()
+     *
+     *  @langversion 3.0
+     *  @playerversion AIR 1.1
+     *  @productversion Flex 3
      */
     public function get canNavigateForward():Boolean
     {
@@ -489,6 +541,10 @@
      *  @default false
      *
      *  @see #navigateUp()
+     *
+     *  @langversion 3.0
+     *  @playerversion AIR 1.1
+     *  @productversion Flex 3
      */
     public function get canNavigateUp():Boolean
     {
@@ -508,6 +564,10 @@
      *  To remove this column entirely, or to change the column order,
      *  set the columns property to an array such as
      *  [ nameColumn, modificationDateColumn, sizeColumn ].

+     *
+     *  @langversion 3.0
+     *  @playerversion AIR 1.1
+     *  @productversion Flex 3
      */
     public var creationDateColumn:DataGridColumn;

@@ -533,6 +593,10 @@
      *  of an internal DateFormatter that this control creates.
      *
      *  @see mx.formatters.DateFormatter#formatString
+     *
+     *  @langversion 3.0
+     *  @playerversion AIR 1.1
+     *  @productversion Flex 3
      */
     public function get dateFormatString():String
     {
@@ -567,6 +631,10 @@

     /**
      *  @copy mx.controls.FileSystemList#directory
+     *
+     *  @langversion 3.0
+     *  @playerversion AIR 1.1
+     *  @productversion Flex 3
      */
     public function get directory():File
     {
@@ -591,6 +659,10 @@
      *  @default FileSystemEnumerationMode.DIRECTORIES_FIRST
      *
      *  @see mx.controls.FileSystemEnumerationMode
+     *
+     *  @langversion 3.0
+     *  @playerversion AIR 1.1
+     *  @productversion Flex 3
      */
     public function get enumerationMode():String
     {
@@ -613,6 +685,10 @@
      *  @copy mx.controls.FileSystemList#extensions
      *
      *  @default null
+     *
+     *  @langversion 3.0
+     *  @playerversion AIR 1.1
+     *  @productversion Flex 3
      */
     public function get extensions():Array /* of String */
     {
@@ -635,6 +711,10 @@
      *  @copy mx.controls.FileSystemList#filterFunction
      *
      *  @default null
+     *
+     *  @langversion 3.0
+     *  @playerversion AIR 1.1
+     *  @productversion Flex 3
      */
     public function get filterFunction():Function
     {
@@ -682,6 +762,10 @@
      *  @default []
      *
      * @see mx.controls.FileSystemHistoryButton
+     *
+     *  @langversion 3.0
+     *  @playerversion AIR 1.1
+     *  @productversion Flex 3
      */
     public function get forwardHistory():Array
     {
@@ -701,6 +785,10 @@
      *  To remove this column entirely, or to change the column order,
      *  set the columns property to an array such as
      *  [ nameColumn, modificationDateColumn, sizeColumn ].

+     *
+     *  @langversion 3.0
+     *  @playerversion AIR 1.1
+     *  @productversion Flex 3
      */
     public var modificationDateColumn:DataGridColumn;

@@ -717,6 +805,10 @@
      *  To remove this column entirely, or to change the column order,
      *  set the columns property to an array such as
      *  [ nameColumn, modificationDateColumn, sizeColumn ].

+     *
+     *  @langversion 3.0
+     *  @playerversion AIR 1.1
+     *  @productversion Flex 3
      */
     public var nameColumn:DataGridColumn;

@@ -728,6 +820,10 @@
      *  @copy mx.controls.FileSystemList#nameCompareFunction
      *
      *  @default null
+     *
+     *  @langversion 3.0
+     *  @playerversion AIR 1.1
+     *  @productversion Flex 3
      */
     public function get nameCompareFunction():Function
     {
@@ -756,6 +852,10 @@
      *
      *  @see mx.controls.listClasses.ListBase#selectedIndex
      *  @see mx.controls.listClasses.ListBase#selectedItem
+     *
+     *  @langversion 3.0
+     *  @playerversion AIR 1.1
+     *  @productversion Flex 3
      */
     public function get selectedPath():String
     {
@@ -784,6 +884,10 @@
      *
      *  @see mx.controls.listClasses.ListBase#selectedIndex
      *  @see mx.controls.listClasses.ListBase#selectedItem
+     *
+     *  @langversion 3.0
+     *  @playerversion AIR 1.1
+     *  @productversion Flex 3
      */
     public function get selectedPaths():Array /* of String */
     {
@@ -804,6 +908,10 @@

     /**
      *  @copy mx.controls.FileSystemList#showExtensions
+     *
+     *  @langversion 3.0
+     *  @playerversion AIR 1.1
+     *  @productversion Flex 3
      */
     public function get showExtensions():Boolean
     {
@@ -824,6 +932,10 @@

     /**
      *  @copy mx.controls.FileSystemList#showHidden
+     *
+     *  @langversion 3.0
+     *  @playerversion AIR 1.1
+     *  @productversion Flex 3
      */
     public function get showHidden():Boolean
     {
@@ -844,6 +956,10 @@

     /**
      *  @copy mx.controls.FileSystemList#showIcons
+     *
+     *  @langversion 3.0
+     *  @playerversion AIR 1.1
+     *  @productversion Flex 3
      */
     public function get showIcons():Boolean
     {
@@ -871,6 +987,10 @@
      *  To remove this column entirely, or to change the column order,
      *  set the columns property to an array such as
      *  [ nameColumn, modificationDateColumn, sizeColumn ].

+     *
+     *  @langversion 3.0
+     *  @playerversion AIR 1.1
+     *  @productversion Flex 3
      */
     public var sizeColumn:DataGridColumn;

@@ -892,6 +1012,10 @@
      *  by the FileSystemSizeDisplayMode class.
      *
      *  @see mx.controls.FileSystemSizeDisplayMode
+     *
+     *  @langversion 3.0
+     *  @playerversion AIR 1.1
+     *  @productversion Flex 3
      */
     public function get sizeDisplayMode():String
     {
@@ -921,6 +1045,10 @@
      *  To remove this column entirely, or to change the column order,
      *  set the columns property to an array such as
      *  [ nameColumn, modificationDateColumn, sizeColumn ].

+     *
+     *  @langversion 3.0
+     *  @playerversion AIR 1.1
+     *  @productversion Flex 3
      */
     public var typeColumn:DataGridColumn;

@@ -1101,6 +1229,10 @@

     /**
      *  @copy mx.controls.FileSystemList#findIndex()
+     *
+     *  @langversion 3.0
+     *  @playerversion AIR 1.1
+     *  @productversion Flex 3
      */
     public function findIndex(nativePath:String):int
     {
@@ -1109,6 +1241,10 @@

     /**
      *  @copy mx.controls.FileSystemList#findItem()
+     *
+     *  @langversion 3.0
+     *  @playerversion AIR 1.1
+     *  @productversion Flex 3
      */
     public function findItem(nativePath:String):File
     {
@@ -1139,6 +1275,10 @@
      *      click="fileSystemViewer.navigateDown();"/>

      *
      *  @see #canNavigateDown
+     *
+     *  @langversion 3.0
+     *  @playerversion AIR 1.1
+     *  @productversion Flex 3
      */
     public function navigateDown():void
     {
@@ -1170,6 +1310,10 @@
      *      click="fileSystemViewer.navigateUp();"/>

      *
      *  @see #canNavigateUp
+     *
+     *  @langversion 3.0
+     *  @playerversion AIR 1.1
+     *  @productversion Flex 3
      */
     public function navigateUp():void
     {
@@ -1213,6 +1357,10 @@
      *
      *  @see #backHistory
      *  @see #canNavigateBack
+     *
+     *  @langversion 3.0
+     *  @playerversion AIR 1.1
+     *  @productversion Flex 3
      */
     public function navigateBack(index:int = 0):void
     {
@@ -1256,6 +1404,10 @@
      *
      *  @see #canNavigateForward
      *  @see #forwardHistory
+     *
+     *  @langversion 3.0
+     *  @playerversion AIR 1.1
+     *  @productversion Flex 3
      */
     public function navigateForward(index:int = 0):void
     {
@@ -1264,6 +1416,10 @@

     /**
      *  @copy mx.controls.FileSystemList#navigateTo()
+     *
+     *  @langversion 3.0
+     *  @playerversion AIR 1.1
+     *  @productversion Flex 3
      */
     public function navigateTo(directory:File):void
     {
@@ -1272,6 +1428,10 @@

     /**
      *  @copy mx.controls.FileSystemList#refresh()
+     *
+     *  @langversion 3.0
+     *  @playerversion AIR 1.1
+     *  @productversion Flex 3
      */
     public function refresh():void
     {
@@ -1280,6 +1440,10 @@

     /**
      *  @copy mx.controls.FileSystemList#clear()
+     *
+     *  @langversion 3.0
+     *  @playerversion AIR 1.1
+     *  @productversion Flex 3
      */
     public function clear():void
     {
@@ -1531,6 +1695,10 @@

     /**
      *  Constructor.
+     *
+     *  @langversion 3.0
+     *  @playerversion AIR 1.1
+     *  @productversion Flex 3
      */
     public function CustomDataGridColumn(columnName:String = null)
     {
@@ -1576,6 +1744,10 @@

     /**
      *  Constructor.
+     *
+     *  @langversion 3.0
+     *  @playerversion AIR 1.1
+     *  @productversion Flex 3
      */
     public function NameColumnRenderer()
     {
@@ -1641,6 +1813,10 @@
      *  to trigger a relayout of the component.
      *
      *  @see mx.core.IDataRenderer
+     *
+     *  @langversion 3.0
+     *  @playerversion AIR 1.1
+     *  @productversion Flex 3
      */
     public function get data():Object
     {
@@ -1665,6 +1841,10 @@

     /**
      *  The internal IFlexDisplayObject that displays the icon in this renderer.
+     *
+     *  @langversion 3.0
+     *  @playerversion AIR 1.1
+     *  @productversion Flex 3
      */
     protected var icon:IFlexDisplayObject;

@@ -1674,6 +1854,10 @@

     /**
      *  The internal IUITextField that displays the text in this renderer.
+     *
+     *  @langversion 3.0
+     *  @playerversion AIR 1.1
+     *  @productversion Flex 3
      */
     protected var label:IUITextField;

@@ -1694,6 +1878,10 @@
      *  as defined by the IDropInListItemRenderer interface.
      *
      *  @see mx.controls.listClasses.IDropInListItemRenderer
+     *
+     *  @langversion 3.0
+     *  @playerversion AIR 1.1
+     *  @productversion Flex 3
      */
     public function get listData():BaseListData
     {


Transferred from the Adobe Open Source Subversion Repository

Revision: 17205
Author:   jasonsj@adobe.com
Date:     2010-08-05T23:51:36.193522Z

Log Message:
-----------
Removed skin states from ActionBar (ViewNavigatorSkin now manages both orientation and overlay).
Added ASDoc comments.

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

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

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

--- frameworks/projects/mobilecomponents/src/spark/components/ActionBar.as
+++ frameworks/projects/mobilecomponents/src/spark/components/ActionBar.as
@@ -24,19 +24,41 @@
  */
 [Style(name="backgroundAlpha", type="Number", inherit="no")]

-//--------------------------------------
-//  Skin states
-//--------------------------------------
-
-/*
-* Skin states to support ViewNavigator
-*/
-[SkinState("portrait")]
-[SkinState("landscape")]
-[SkinState("portraitAndOverlay")]
-[SkinState("landscapeAndOverlay")]
-
 /**
+ *  The ActionBar class defines a component that includes title, navigation
+ *  and action content groups. In the context of a ViewNavigator and
+ *  MobileApplication, the ActionBar is used as application chrome which
+ *  is has content contributed by the active View. ActionBar has limited
+ *  utility when used otherwise.
+ *
+ *  @mxml
+ *
+ *
The <s:ActionBar> tag inherits all of the tag
+ *  attributes of its superclass and adds the following tag attributes:

+ *
+ *

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

+ *
+ *  @see SkinnableComponent
+ *  @see ViewNavigator
+ *  @see View
+ *  @see MobileApplication
+ *  @see spark.skins.mobile.ActionBarSkin
+ *
  *  @langversion 3.0
  *  @playerversion Flash 10
  *  @playerversion AIR 2.5
@@ -112,8 +134,6 @@
     //
     //--------------------------------------------------------------------------

-    private var _dataProvider:ViewNavigator;
-
     //--------------------------------------------------------------------------
     //
     //  Skin parts
@@ -123,6 +143,13 @@
     [SkinPart(required="false")]

     /**
+     *  The skin part that defines the appearance of the
+     *  navigation area of the component.
+     *  By default, the ActionBarSkin class defines the navigation area to appear
+     *  to the left of the title area.
+     *
+     *  @see spark.skins.mobile.ActionBarSkin
+     *
      *  @langversion 3.0
      *  @playerversion Flash 10
      *  @playerversion AIR 2.5
@@ -133,6 +160,13 @@
     [SkinPart(required="false")]

     /**
+     *  The skin part that defines the appearance of the
+     *  title area of the component.
+     *  By default, the ActionBarSkin class defines the title area to appear
+     *  between the navigation and action areas.
+     *
+     *  @see spark.skins.mobile.ActionBarSkin
+     *
      *  @langversion 3.0
      *  @playerversion Flash 10
      *  @playerversion AIR 2.5
@@ -143,6 +177,13 @@
     [SkinPart(required="false")]

     /**
+     *  The skin part that defines the appearance of the
+     *  action area of the component.
+     *  By default, the ActionBarSkin class defines the action area to appear
+     *  to the right of the title area.
+     *
+     *  @see spark.skins.mobile.ActionBarSkin
+     *
      *  @langversion 3.0
      *  @playerversion Flash 10
      *  @playerversion AIR 2.5
@@ -154,7 +195,7 @@

     /**
      *  The skin part that defines the appearance of the
-     *  title text in the container.
+     *  title text in the component.
      *
      *  @see spark.skins.mobile.ActionBarSkin
      *
@@ -169,12 +210,16 @@
     //  title
     //----------------------------------

-    private var _title:String;
+    private var _title:String = "";
     private var _titleChanged:Boolean;

     [Bindable]

     /**
+     *  Title or caption displayed in the title area.
+     *
+     *  @default ""
+     *
      *  @langversion 3.0
      *  @playerversion Flash 10
      *  @playerversion AIR 2.5
@@ -207,6 +252,19 @@
     [ArrayElementType("mx.core.IVisualElement")]

     /**
+     *  The set of components to include in the navigationGroup of the
+     *  ActionBar. The location and appearance of the navigationGroup of the
+     *  ActionBar container is determined by the
+     *  spark.skins.mobile.ActionBarSkin.
+     *  The default ActionBarSkin class defines the navigationGroup to appear
+     *  to the left of the title display area of the ActionBar.
+     *  Create a custom skin to change the default location and appearance of
+     *  the navigationGroup.
+     *
+     *  @default null
+     *
+     *  @see spark.skins.mobile.ActionBarSkin
+     *
      *  @langversion 3.0
      *  @playerversion Flash 10
      *  @playerversion AIR 2.5
@@ -280,6 +338,21 @@
     [ArrayElementType("mx.core.IVisualElement")]

     /**
+     *  The set of components to include in the titleGroup of the
+     *  ActionBar. If titleContent is not null, it's visual elements replace
+     *  the mxmlContent of titleGroup. If titleContent is null, the
+     *  titleDisplay skin part, if present, replaces the mxmlContent of
+     *  titleGroup.
+     *  The location and appearance of the titleGroup of the ActionBar
+     *  container is determined by the spark.skins.mobile.ActionBarSkin class.
+     *  By default, the ActionBarSkin class defines the titleGroup to appear in
+     *  the center of the ActionBar.
+     *  Create a custom skin to change the default location and appearance of the titleGroup.
+     *
+     *  @default null
+     *
+     *  @see spark.skins.mobile.ActionBarSkin
+     *
      *  @langversion 3.0
      *  @playerversion Flash 10
      *  @playerversion AIR 2.5
@@ -373,6 +446,18 @@
     [ArrayElementType("mx.core.IVisualElement")]

     /**
+     *  The set of components to include in the actionGroup of the
+     *  ActionBar. The location and appearance of the actionGroup of the
+     *  ActionBar container is determined by the skin.
+     *  The default ActionBarSkin class defines the actionGroup to appear
+     *  to the right of the title display area of the ActionBar.
+     *  Create a custom skin to change the default location and appearance of
+     *  the actionGroup.
+     *
+     *  @default null
+     *
+     *  @see spark.skins.mobile.ActionBarSkin
+     *
      *  @langversion 3.0
      *  @playerversion Flash 10
      *  @playerversion AIR 2.5
@@ -445,6 +530,9 @@
     //
     //--------------------------------------------------------------------------

+    /**
+     *  @private
+     */
     override protected function commitProperties():void
     {
         super.commitProperties();
@@ -459,6 +547,9 @@
         }
     }

+    /**
+     *  @private
+     */
     override protected function partAdded(partName:String, instance:Object):void
     {
         super.partAdded(partName, instance);
@@ -531,6 +622,9 @@
         }
     }

+    /**
+     *  @private
+     */
     override protected function partRemoved(partName:String, instance:Object):void
     {
         super.partRemoved(partName, instance);


Transferred from the Adobe Open Source Subversion Repository

Revision: 19635
Author:   aharui@adobe.com
Date:     2011-01-07T00:25:18.039632Z

Log Message:
-----------
revert the layout changes from svn 18635.  Management feels that there isn't enough time to thoroughly test the changes.

Modified Paths:
--------------
<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/components/supportClasses/TextBase.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/framework/src/mx/managers/layoutClasses/PriorityQueue.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/spark/src/spark/components/supportClasses/ScrollerLayout.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/mx/src/mx/core/Application.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/mobiletheme/src/spark/skins/mobile/ViewNavigatorApplicationSkin.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/mobiletheme/src/spark/skins/mobile/SkinnableContainerSkin.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/spark/src/spark/components/supportClasses/SkinnableComponent.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/spark/src/spark/components/RichEditableText.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/framework/src/mx/core/UIComponent.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/framework/src/mx/controls/SWFLoader.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/spark/src/spark/primitives/BitmapImage.as</path>
<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/primitives/supportClasses/GraphicElement.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/spark/src/spark/layouts/BasicLayout.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/mobilecomponents/src/spark/components/IconItemRenderer.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/spark/src/spark/components/Group.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/mobiletheme/src/spark/skins/mobile/ViewNavigatorSkin.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/spark/src/spark/components/PopUpAnchor.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/flash-integration/src/mx/flash/UIMovieClip.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/spark/src/spark/layouts/supportClasses/LinearLayoutVector.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/framework/src/mx/events/FlexEvent.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/airspark/src/spark/components/Window.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/framework/src/mx/styles/StyleProtoChain.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/spark/src/spark/core/SpriteVisualElement.as</path>
<path kind="file" action="D">/private/flex/sdk/branches/hero_private/frameworks/projects/framework/src/mx/core/IContainerInvalidating.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/spark/src/spark/skins/spark/DefaultItemRenderer.as</path>
<path kind="file" action="D">/private/flex/sdk/branches/hero_private/frameworks/projects/framework/src/mx/managers/ILayoutManagerContainerClient.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/DataGrid.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/spark/src/spark/components/supportClasses/GroupBase.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/spark/src/spark/layouts/VerticalLayout.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/mobiletheme/src/spark/skins/mobile/TabbedViewNavigatorApplicationSkin.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/framework/src/mx/styles/IStyleManager.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/framework/src/mx/core/ILayoutElement.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/mobiletheme/src/spark/skins/mobile/TextAreaSkin.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/spark/src/spark/components/gridClasses/GridLayout.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/airframework/src/mx/core/Window.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/spark/src/spark/skins/spark/TextFieldGridItemRendererInclude.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/framework/src/mx/styles/StyleManagerImpl.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/mx/src/mx/core/Container.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/framework/src/mx/managers/LayoutManager.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/components/Application.as</path>

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

--- frameworks/projects/mobiletheme/src/spark/skins/mobile/TextAreaSkin.as
+++ frameworks/projects/mobiletheme/src/spark/skins/mobile/TextAreaSkin.as
@@ -194,10 +194,6 @@
         // now we need to measure textDisplay's height.  Unfortunately, this is tricky and
         // is dependent on textDisplay's width

-        // if we have an estimated width, use it here.  Otherwise, we'll keep it
-        // the same width as it was before
-        if (!isNaN(estimatedWidth))
-            textDisplayGroup.width = estimatedWidth;

         measuredHeight = Math.max(layoutMeasuredHeight, textDisplay.measuredTextSize.y + paddingTop + paddingBottom);
     }


Transferred from the Adobe Open Source Subversion Repository

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

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

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

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

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

 package mx.controls.dataGridClasses
 {


Transferred from the Adobe Open Source Subversion Repository

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

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

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

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

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


Transferred from the Adobe Open Source Subversion Repository

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

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

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

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

--- frameworks/projects/automation/src/mx/automation/delegates/core/ContainerAutomationImpl.as
+++ frameworks/projects/automation/src/mx/automation/delegates/core/ContainerAutomationImpl.as
@@ -1,13 +1,3 @@
-////////////////////////////////////////////////////////////////////////////////
-//
-//  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.automation.delegates.core
 {


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

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

 package mx.states
 {


Transferred from the Adobe Open Source Subversion Repository

Revision: 8386
Author:   srahim@adobe.com
Date:     2009-07-06T19:50:00.014831Z

Log Message:
-----------
ASDoc updates for Spark components

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

Modified Paths:
--------------
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/spark/src/spark/components/VSlider.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/spark/src/spark/components/VScrollBar.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/spark/src/spark/components/HSlider.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/spark/src/spark/components/Button.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/spark/src/spark/components/HScrollBar.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/spark/src/spark/components/TextArea.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/spark/src/spark/components/ToggleButton.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/spark/src/spark/components/PopUpAnchor.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/spark/src/spark/components/Spinner.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/spark/src/spark/components/VideoPlayer.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/spark/src/spark/components/TextInput.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/spark/src/spark/components/NumericStepper.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/spark/src/spark/components/Scroller.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/spark/src/spark/components/CheckBox.as</path>

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

--- frameworks/projects/spark/src/spark/components/CheckBox.as
+++ frameworks/projects/spark/src/spark/components/CheckBox.as
@@ -38,6 +38,28 @@
  *
When a user clicks a CheckBox component or its associated text,
  *  the CheckBox component sets its selected property
  *  to true for checked, and to false for unchecked.

+ *
+ *
+ *
The CheckBox control has the following default characteristics:

+ *

+ *

+ *           Characteristic
+ *           Description
+ *

+ *

+ *           Default size
+ *           Wide enough to display the text label of the control
+ *

+ *

+ *           Minimum size
+ *           18 pixels wide and 18 pixels high
+ *

+ *

+ *           Maximum size
+ *           10000 pixels wide and 10000 pixels high
+ *

+ *

+ *
  *  @mxml
  *
  *
The <CheckBox> tag inherits all of the tag


Transferred from the Adobe Open Source Subversion Repository

Revision: 18500
Author:   cframpto@adobe.com
Date:     2010-11-09T16:53:19.948108Z

Log Message:
-----------
The column header group should not be a focusable component and when setting the GridDimension/columnCount need to clear the cache even when the column count has not changed because the columns themselves could have changed and the new list of columns could have the same number of columns as the old list of columns.

QE notes:
Doc notes:
Bugs: SDK-28449, SDK-28420
Reviewer: Kevin
Tests run: cyclone
Is noteworthy for integration:

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/GridColumnHeaderGroup.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/spark/src/spark/components/DataGrid.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/spark/src/spark/components/gridClasses/GridDimensions.as</path>

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

--- frameworks/projects/spark/src/spark/components/DataGrid.as
+++ frameworks/projects/spark/src/spark/components/DataGrid.as
@@ -11,6 +11,7 @@

 package spark.components
 {
+import flash.display.DisplayObject;
 import flash.events.Event;
 import flash.events.EventPhase;
 import flash.events.FocusEvent;
@@ -1556,7 +1557,7 @@
     /**
      *  @private
      */
-    public function set selectionMode(value:String):void
+    public function  set selectionMode(value:String):void
     {
         if (selectionMode == value)
             return;
@@ -4014,22 +4015,20 @@

     /**
      *  @private
+     *  The UIComponent's focusInHandler and focusOutHandler draw the
+     *  focus.  This handler exists only when there is a caretIndicator part.
      */
     protected function dataGrid_focusHandler(event:FocusEvent):void
     {
         if (!grid || !(grid.layout is GridLayout))
             return;
-
-        // Show the caret if the focus is either on the DataGrid or the
-        // columnHeaderBar.
-
-        if (event.target == this ||
-            (columnHeaderGroup && event.target == columnHeaderGroup))
-        {
+
+        if (isOurFocus(DisplayObject(event.target)))
+        {
             GridLayout(grid.layout).showCaret =
                 event.type == FocusEvent.FOCUS_IN &&
                 selectionMode != GridSelectionMode.NONE;
-        }
+        }
     }

 }