Transferred from the Adobe Open Source Subversion Repository

Revision: 9179
Author:   cframpto@adobe.com
Date:     2009-08-07T22:02:27.062142Z

Log Message:
-----------
Spark RichEditableText doesn't display focus rect when clicking in the text (unlike TextArea and TextInput)

QE notes:
Doc notes:
Bugs: SDK-22603
Reviewer: Alex
Tests run:
Is noteworthy for integration: no

Modified Paths:
--------------
/flex/sdk/trunk/frameworks/projects/spark/src/spark/primitives/RichEditableText.as

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

--- frameworks/projects/spark/src/spark/components/RichEditableText.as
+++ frameworks/projects/spark/src/spark/components/RichEditableText.as
@@ -73,6 +73,7 @@
 import mx.core.UIComponent;
 import mx.core.mx_internal;
 import mx.events.FlexEvent;
+import mx.managers.IFocusManager;
 import mx.managers.IFocusManagerComponent;
 import mx.managers.ISystemManager;
 import mx.resources.ResourceManager;
@@ -1707,8 +1708,10 @@
         if (isFocused)
         {
             // For some composite components, the focused object may not
-            // be "this". If so, we don't want to draw the focus.
-            if (focusManager.getFocus() != this)
+            // be "this". If so, we don't want to draw the focus.  This
+            // replaces the parentDrawsFocus variable used in halo.
+            var fm:IFocusManager = focusManager;
+            if (fm && fm.getFocus() != this)
                 return;
         }

@@ -3204,17 +3207,25 @@
      *  @private
      *  RichEditableTextContainerManager overrides focusInHandler and calls
      *  this before executing its own focusInHandler.
-     *
-     *  NOTE: In some cases TCM calls the focusInHandler twice during one
-     *  focusIn event.  Ensure that this code works correctly if it is
-     *  called twice.
      */
     mx_internal function focusInHandler(event:FocusEvent):void
     {
+        // When TCM is simulating a focusIn event, event will be null.
+        // Ignore these and wait for the actual focus in event.
+        if (event == null)
+            return;
+
         //trace("focusIn handler");
-
+
+        var fm:IFocusManager = focusManager;
+        if (fm && editingMode == EditingMode.READ_WRITE)
+            fm.showFocusIndicator = true;
+
+        // showFocusIndicator must be set before this is called.
+        super.focusInHandler(event);
+
         if (editingMode == EditingMode.READ_WRITE)
-        {
+        {
             // If the focusIn was because of a mouseDown event, let TLF
             // handle the selection.  Otherwise it was because we tabbed in
             // or we programatically set the focus.
@@ -3277,6 +3288,8 @@
     {
         //trace("focusOut handler");

+        super.focusOutHandler(event);
+
         // By default, we clear the undo history when a RichEditableText loses
         // focus.
         if (clearUndoOnFocusOut && undoManager)


Transferred from the Adobe Open Source Subversion Repository

Revision: 12433
Author:   cframpto@adobe.com
Date:     2009-12-03T15:01:54.719958Z

Log Message:
-----------
Finish reverting the part of rev 12322 which added custom menu support since it only works on the player and not on AIR.  SDK-23926 has been reopened.

QE notes:
Doc notes:
Bugs: SDK-23926
Reviewer:
Tests run: checkintests, TextArea
Is noteworthy for integration: no

Modified Paths:
--------------
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/spark/src/spark/components/supportClasses/RichEditableTextContainerManager.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/spark/src/spark/components/supportClasses/SkinnableTextBase.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/spark/src/spark/components/RichEditableText.as</path>

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

--- frameworks/projects/spark/src/spark/components/RichEditableText.as
+++ frameworks/projects/spark/src/spark/components/RichEditableText.as
@@ -29,7 +29,6 @@
 import flash.text.engine.TextBlock;
 import flash.text.engine.TextElement;
 import flash.text.engine.TextLine;
-import flash.ui.ContextMenu;
 import flash.ui.Keyboard;

 import flashx.textLayout.compose.ISWFContext;
@@ -1012,57 +1011,6 @@
     }

     //----------------------------------
-    //  contextMenu
-    //----------------------------------
-
-    /**
-     *  @private
-     *  Use to distinguish between null because it hasn't been set yet and
-     *  null because it was set to null to remove the default context menu.
-     */
-    mx_internal var contextMenuSet:Boolean;
-
-    /**
-     *  The context menu associated with this component.  If the context menu
-     *  has not been set this is the default context menu which will be used.
-     *  Set the context menu to null to remove the default menu.
-     *
-     *  @see flash.display.InteractiveObject
-     *
-     *  @langversion 3.0
-     *  @playerversion Flash 10
-     *  @playerversion AIR 1.5
-     *  @productversion Flex 4
-     */
-//    override public function get contextMenu():ContextMenu
-//    {
-//        if (!contextMenuSet)
-//        {
-//            super.contextMenu = _textContainerManager.getContextMenu();
-//            contextMenuSet = true;
-//        }
-//
-//        return super.contextMenu;
-//    }
-
-    /**
-     *  @private
-     */
-//    override public function set contextMenu(value:ContextMenu):void
-//    {
-//        if (contextMenuSet && super.contextMenu == value)
-//            return;
-//
-//        // If the context menu is being reset need to update the menu listeners.
-//        if (contextMenuSet && super.contextMenu)
-//            _textContainerManager.resetContextMenuListener(value);
-//
-//        super.contextMenu = value;
-//
-//        contextMenuSet = true;
-//    }
-
-    //----------------------------------
     //  horizontalScrollPosition
     //----------------------------------


Transferred from the Adobe Open Source Subversion Repository

Revision: 10475
Author:   jimurphy@adobe.com
Date:     2009-09-21T23:58:45.057679Z

Log Message:
-----------
Merged 3.x revisions 10063,10086,10098,10123,10176,10397,10416-10418,10420 -> trunk

checkintests: pass

Modified Paths:
--------------
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/rpc/src/mx/messaging/channels/AMFChannel.as</path>
<path kind="dir" action="M">/flex/sdk/trunk</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/collections/ListCollectionView.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/controls/DataGrid.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/controls/listClasses/ListBase.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/controls/scrollClasses/ScrollBar.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/formatters/CurrencyFormatter.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/controls/TextInput.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/controls/dataGridClasses/DataGridHeader.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/rpc/src/mx/messaging/ChannelSet.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/collections/SortField.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/rpc/src/mx/rpc/http/HTTPService.as</path>

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

--- frameworks/projects/framework/src/mx/collections/ListCollectionView.as
+++ frameworks/projects/framework/src/mx/collections/ListCollectionView.as
@@ -679,6 +679,23 @@
     }

     /**
+     * @inheritDoc
+     */
+    mx_internal function getLocalItemIndex(item:Object):int
+    {
+        var i:int;
+
+        var len:int = localIndex.length;
+        for (i = 0; i < len; i++)
+        {
+            if (localIndex[i] == item)
+                return i;
+        }
+
+        return -1;
+    }
+
+    /**
      * @private
      */
     private function getFilteredItemIndex(item:Object):int
@@ -1226,7 +1243,14 @@
             // and only then calling getItemAt.
             if (bm.index < 0 || bm.index >= length || getItemAt(bm.index) != bm.value)
             {
-                bm.index = getItemIndex(bm.value);
+                try
+                {
+                    bm.index = getItemIndex(bm.value);
+                }
+                catch (e:SortError)
+                {
+                    bm.index = getLocalItemIndex(bm.value);
+                }
             }

             bm.viewRevision = revision;
@@ -2489,7 +2513,17 @@
             case CollectionEventKind.REFRESH:
                 if (!(beforeFirst || afterLast))
                 {
-                    currentIndex = ListCollectionView(view).getItemIndex(currentValue);
+                    try
+                    {
+                        currentIndex = ListCollectionView(view).getItemIndex(currentValue);
+                    }
+                    catch (e:SortError)
+                    {
+                        if (ListCollectionView(view).sort)
+                        {
+                            currentIndex = ListCollectionView(view).getLocalItemIndex(currentValue);
+                        }
+                    }
                     if (currentIndex == -1)
                     {
                         setCurrent(null);


Transferred from the Adobe Open Source Subversion Repository

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

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

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

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

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

--- frameworks/projects/framework/src/mx/preloaders/DownloadProgressBar.as
+++ frameworks/projects/framework/src/mx/preloaders/DownloadProgressBar.as
@@ -57,6 +57,11 @@
  *  @see mx.core.Application
  *  @see mx.preloaders.IPreloaderDisplay
  *  @see mx.preloaders.Preloader
+ *
+ *  @langversion 3.0
+ *  @playerversion Flash 9
+ *  @playerversion AIR 1.1
+ *  @productversion Flex 3
  */
 public class DownloadProgressBar extends Sprite implements IPreloaderDisplay
 {
@@ -70,6 +75,11 @@

 	/**
 	 *  Constructor.
+	 *
+	 *  @langversion 3.0
+	 *  @playerversion Flash 9
+	 *  @playerversion AIR 1.1
+	 *  @productversion Flex 3
 	 */
 	public function DownloadProgressBar()
 	{
@@ -90,6 +100,11 @@
 	 *  of time before dispatching the complete event.
 	 *
 	 *  @default 0
+	 *
+	 *  @langversion 3.0
+	 *  @playerversion Flash 9
+	 *  @playerversion AIR 1.1
+	 *  @productversion Flex 3
 	 */
 	protected var MINIMUM_DISPLAY_TIME:uint = 0;

@@ -100,6 +115,11 @@
 	 *  This should be a value from 0 to 100.
 	 *
 	 *  @default 60
+	 *
+	 *  @langversion 3.0
+	 *  @playerversion Flash 9
+	 *  @playerversion AIR 1.1
+	 *  @productversion Flex 3
 	 */
 	protected var DOWNLOAD_PERCENTAGE:uint = 60;

@@ -246,6 +266,11 @@
 	 *  the Preloader control modifies it, and perform any necessary actions.

 	 *
 	 *  @default false
+	 *
+	 *  @langversion 3.0
+	 *  @playerversion Flash 9
+	 *  @playerversion AIR 1.1
+	 *  @productversion Flex 3
 	 */
 	override public function get visible():Boolean
 	{
@@ -293,6 +318,11 @@
 	 *
 	 *  @default 1.0
 	 *
+	 *
+	 *  @langversion 3.0
+	 *  @playerversion Flash 9
+	 *  @playerversion AIR 1.1
+	 *  @productversion Flex 3
 	 */
 	public function get backgroundAlpha():Number
 	{
@@ -324,6 +354,11 @@
      *  Background color of a download progress bar.
      *  You can have either a backgroundColor or a
      *  backgroundImage, but not both.
+	 *
+	 *  @langversion 3.0
+	 *  @playerversion Flash 9
+	 *  @playerversion AIR 1.1
+	 *  @productversion Flex 3
 	 */
 	public function get backgroundColor():uint
 	{
@@ -362,6 +397,11 @@
 	 *  You can only use images loaded at runtime.

 	 *
 	 *  @default null
+	 *
+	 *  @langversion 3.0
+	 *  @playerversion Flash 9
+	 *  @playerversion AIR 1.1
+	 *  @productversion Flex 3
 	 */
 	public function get backgroundImage():Object
 	{
@@ -396,6 +436,11 @@
      *  the original size of the image.
 	 *
 	 *  @default "auto"
+	 *
+	 *  @langversion 3.0
+	 *  @playerversion Flash 9
+	 *  @playerversion AIR 1.1
+	 *  @productversion Flex 3
 	 */
 	public function get backgroundSize():String
 	{
@@ -423,6 +468,11 @@
 	/**
 	 *  The Preloader class passes in a reference to itself to the display class
 	 *  so that it can listen for events from the preloader.
+	 *
+	 *  @langversion 3.0
+	 *  @playerversion Flash 9
+	 *  @playerversion AIR 1.1
+	 *  @productversion Flex 3
 	 */
 	public function set preloader(value:Sprite):void
 	{
@@ -452,6 +502,11 @@
 	/**
 	 *  The height of the stage,
 	 *  which is passed in by the Preloader class.
+	 *
+	 *  @langversion 3.0
+	 *  @playerversion Flash 9
+	 *  @playerversion AIR 1.1
+	 *  @productversion Flex 3
 	 */
 	public function get stageHeight():Number
 	{
@@ -479,6 +534,11 @@
 	/**
 	 *  The width of the stage,
 	 *  which is passed in by the Preloader class.
+	 *
+	 *  @langversion 3.0
+	 *  @playerversion Flash 9
+	 *  @playerversion AIR 1.1
+	 *  @productversion Flex 3
 	 */
 	public function get stageWidth():Number
 	{
@@ -507,6 +567,11 @@
 	 *  The dimensions of the progress bar border.
 	 *  This is a read-only property which you must override
 	 *  if you need to change it.
+	 *
+	 *  @langversion 3.0
+	 *  @playerversion Flash 9
+	 *  @playerversion AIR 1.1
+	 *  @productversion Flex 3
 	 */
 	protected function get barFrameRect():RoundedRectangle
 	{
@@ -521,6 +586,11 @@
 	 *  The dimensions of the progress bar.
 	 *  This is a read-only property which you must override
 	 *  if you need to change it.
+	 *
+	 *  @langversion 3.0
+	 *  @playerversion Flash 9
+	 *  @playerversion AIR 1.1
+	 *  @productversion Flex 3
 	 */
 	protected function get barRect():RoundedRectangle
 	{
@@ -535,6 +605,11 @@
 	 *  The dimensions of the border of the display.
 	 *  This is a read-only property which you must override
 	 *  if you need to change it.
+	 *
+	 *  @langversion 3.0
+	 *  @playerversion Flash 9
+	 *  @playerversion AIR 1.1
+	 *  @productversion Flex 3
 	 */
 	protected function get borderRect():RoundedRectangle
 	{
@@ -555,6 +630,11 @@
 	 *  The string to display as the label while in the downloading phase.
 	 *
 	 *  @default "Loading"
+	 *
+	 *  @langversion 3.0
+	 *  @playerversion Flash 9
+	 *  @playerversion AIR 1.1
+	 *  @productversion Flex 3
 	 */
 	protected function get downloadingLabel():String
 	{
@@ -583,6 +663,11 @@
   	 *  The string to display as the label while in the initializing phase.
 	 *
 	 *  @default "Initializing"
+  	 *
+  	 *  @langversion 3.0
+  	 *  @playerversion Flash 9
+  	 *  @playerversion AIR 1.1
+  	 *  @productversion Flex 3
   	 */
   	public static function get initializingLabel():String
   	{
@@ -614,6 +699,11 @@
 	 *  Implementing this property in a subclass is optional.
 	 *
 	 *  @default ""
+	 *
+	 *  @langversion 3.0
+	 *  @playerversion Flash 9
+	 *  @playerversion AIR 1.1
+	 *  @productversion Flex 3
 	 */
 	protected function get label():String
 	{
@@ -639,6 +729,11 @@
 	 *  The TextFormat object of the TextField component of the label.
 	 *  This is a read-only property which you must override
 	 *  if you need to change it.
+	 *
+	 *  @langversion 3.0
+	 *  @playerversion Flash 9
+	 *  @playerversion AIR 1.1
+	 *  @productversion Flex 3
 	 */
 	protected function get labelFormat():TextFormat
 	{
@@ -657,6 +752,11 @@
 	 *  The dimensions of the TextField component for the label.
 	 *  This is a read-only property which you must override
 	 *  if you need to change it.
+	 *
+	 *  @langversion 3.0
+	 *  @playerversion Flash 9
+	 *  @playerversion AIR 1.1
+	 *  @productversion Flex 3
 	 */
 	protected function get labelRect():Rectangle
 	{
@@ -671,6 +771,11 @@
 	 *  The TextFormat of the TextField component for displaying the percent.
 	 *  This is a read-only property which you must override
 	 *  if you need to change it.
+	 *
+	 *  @langversion 3.0
+	 *  @playerversion Flash 9
+	 *  @playerversion AIR 1.1
+	 *  @productversion Flex 3
 	 */
 	protected function get percentFormat():TextFormat
 	{
@@ -690,6 +795,11 @@
 	 *  The dimensions of the TextField component for displaying the percent.
 	 *  This is a read-only property which you must override
 	 *  if you need to change it.
+	 *
+	 *  @langversion 3.0
+	 *  @playerversion Flash 9
+	 *  @playerversion AIR 1.1
+	 *  @productversion Flex 3
 	 */
 	protected function get percentRect():Rectangle
 	{
@@ -711,6 +821,11 @@
 	 *  or not, false.
 	 *
 	 *  @default true
+	 *
+	 *  @langversion 3.0
+	 *  @playerversion Flash 9
+	 *  @playerversion AIR 1.1
+	 *  @productversion Flex 3
 	 */
 	protected function get showLabel():Boolean
 	{
@@ -742,6 +857,11 @@
 	 *  or not, false.
 	 *
 	 *  @default true
+	 *
+	 *  @langversion 3.0
+	 *  @playerversion Flash 9
+	 *  @playerversion AIR 1.1
+	 *  @productversion Flex 3
 	 */
 	protected function get showPercentage():Boolean
 	{
@@ -768,6 +888,11 @@
 	 *  Called by the Preloader after the download progress bar
 	 *  has been added as a child of the Preloader.
 	 *  This should be the starting point for configuring your download progress bar.
+	 *
+	 *  @langversion 3.0
+	 *  @playerversion Flash 9
+	 *  @playerversion AIR 1.1
+	 *  @productversion Flex 3
 	 */
 	public function initialize():void
 	{
@@ -788,6 +913,11 @@
 	 *  @param width The width of the area in which to center the download progress bar.
 	 *
 	 *  @param height The height of the area in which to center the download progress bar.
+	 *
+	 *  @langversion 3.0
+	 *  @playerversion Flash 9
+	 *  @playerversion AIR 1.1
+	 *  @productversion Flex 3
 	 */
 	protected function center(width:Number, height:Number):void
 	{
@@ -856,6 +986,11 @@

 	/**
 	 *  Creates the subcomponents of the display.
+	 *
+	 *  @langversion 3.0
+	 *  @playerversion Flash 9
+	 *  @playerversion AIR 1.1
+	 *  @productversion Flex 3
 	 */
 	protected function createChildren():void
 	{
@@ -1083,6 +1218,11 @@
 	 *  that have been downloaded.
 	 *
 	 *  @param total Size of the application SWF file in bytes.
+	 *
+	 *  @langversion 3.0
+	 *  @playerversion Flash 9
+	 *  @playerversion AIR 1.1
+	 *  @productversion Flex 3
 	 */
 	protected function setProgress(completed:Number, total:Number):void
 	{
@@ -1106,6 +1246,11 @@
 	 *  @param total Size of the application SWF file in bytes.
 	 *
 	 *  @return The percentage value of the loaded application.
+	 *
+	 *  @langversion 3.0
+	 *  @playerversion Flash 9
+	 *  @playerversion AIR 1.1
+	 *  @productversion Flex 3
 	 */
 	protected function getPercentLoaded(loaded:Number, total:Number):Number
 	{
@@ -1201,6 +1346,11 @@
 	 *  The default behavior is to show the download progress bar
 	 *  if more than 700 milliseconds have elapsed
 	 *  and if Flex has downloaded less than half of the bytes of the SWF file.
+	 *
+	 *  @langversion 3.0
+	 *  @playerversion Flash 9
+	 *  @playerversion AIR 1.1
+	 *  @productversion Flex 3
 	 */
 	protected function showDisplayForDownloading(elapsedTime:int,
 											  event:ProgressEvent):Boolean
@@ -1221,6 +1371,11 @@
 	 *  has been received from the application.
 	 *
 	 *  @return If true, then show the download progress bar.
+	 *
+	 *  @langversion 3.0
+	 *  @playerversion Flash 9
+	 *  @playerversion AIR 1.1
+	 *  @productversion Flex 3
 	 */
 	protected function showDisplayForInit(elapsedTime:int, count:int):Boolean
 	{
@@ -1347,6 +1502,11 @@
 	 *  with the percentage of bytes downloaded.
 	 *
 	 *  @param event The event object.
+	 *
+	 *  @langversion 3.0
+	 *  @playerversion Flash 9
+	 *  @playerversion AIR 1.1
+	 *  @productversion Flex 3
 	 */
 	protected function progressHandler(event:ProgressEvent):void
 	{
@@ -1374,6 +1534,11 @@
 	 *  The default implementation does nothing.
 	 *
 	 *  @param event The event object.
+	 *
+	 *  @langversion 3.0
+	 *  @playerversion Flash 9
+	 *  @playerversion AIR 1.1
+	 *  @productversion Flex 3
 	 */
 	protected function completeHandler(event:Event):void
 	{
@@ -1384,6 +1549,11 @@
 	 *  The default implementation does nothing.
 	 *
 	 *  @param event The event object.
+	 *
+	 *  @langversion 3.0
+	 *  @playerversion Flash 9
+	 *  @playerversion AIR 1.1
+	 *  @productversion Flex 3
 	 */
 	protected function rslProgressHandler(event:RSLEvent):void
 	{
@@ -1393,6 +1563,11 @@
 	 *  Event listener for the RSLEvent.RSL_COMPLETE event.
 	 *
 	 *  @param event The event object.
+	 *
+	 *  @langversion 3.0
+	 *  @playerversion Flash 9
+	 *  @playerversion AIR 1.1
+	 *  @productversion Flex 3
 	 */
 	protected function rslCompleteHandler(event:RSLEvent):void
 	{
@@ -1404,6 +1579,11 @@
 	 *  This event listner handles any errors detected when downloading an RSL.
 	 *
 	 *  @param event The event object.
+	 *
+	 *  @langversion 3.0
+	 *  @playerversion Flash 9
+	 *  @playerversion AIR 1.1
+	 *  @productversion Flex 3
 	 */
 	protected function rslErrorHandler(event:RSLEvent):void
 	{
@@ -1457,6 +1637,11 @@
 	 *  each time the event is dispatched, and changes the text of the label.
 	 *
 	 *  @param event The event object.
+	 *
+	 *  @langversion 3.0
+	 *  @playerversion Flash 9
+	 *  @playerversion AIR 1.1
+	 *  @productversion Flex 3
 	 */
 	protected function initProgressHandler(event:Event):void
 	{
@@ -1562,6 +1747,11 @@
 	 *  The TextFormat object of the TextField component of the label.
 	 *  This is a read-only property which you must override
 	 *  if you need to change it.
+	 *
+	 *  @langversion 3.0
+	 *  @playerversion Flash 9
+	 *  @playerversion AIR 1.1
+	 *  @productversion Flex 3
 	 */
 	protected function get labelFormat():TextFormat
 	{
@@ -1589,6 +1779,11 @@
     * Create and show the error message.
     *
     * @param errorText - text for error message.
+    *
+    *  @langversion 3.0
+    *  @playerversion Flash 9
+    *  @playerversion AIR 1.1
+    *  @productversion Flex 3
     */
     public function show(errorText:String):void
     {


Transferred from the Adobe Open Source Subversion Repository

Revision: 18385
Author:   jasonsj@adobe.com
Date:     2010-10-30T00:16:31.091793Z

Log Message:
-----------
Mobile Theme feature work. TextArea now supports borderVisible and promptDisplay. Refactored common TextInput and TextArea behavior to TextSkinBase.

QE notes: TextArea borderVisible style and prompt property.
Doc notes:
Bugs:
Reviewer: gruehle
Tests run: checkintests
Is noteworthy for integration: No

Modified Paths:
--------------
<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/mobiletheme/src/spark/skins/mobile/TextInputSkin.as</path>
<path kind="file" action="A">/private/flex/sdk/branches/hero_private/frameworks/projects/mobiletheme/src/spark/skins/mobile/supportClasses/TextSkinBase.as</path>

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

--- frameworks/projects/mobiletheme/src/spark/skins/mobile/TextAreaSkin.as
+++ frameworks/projects/mobiletheme/src/spark/skins/mobile/TextAreaSkin.as
@@ -11,16 +11,16 @@

 package spark.skins.mobile
 {
-
-import flash.display.DisplayObject;
+
 import flash.events.Event;

+import mx.core.mx_internal;
 import mx.events.FlexEvent;

 import spark.components.TextArea;
-import spark.components.supportClasses.StyleableTextField;
-import spark.skins.mobile.assets.TextInput_border;
-import spark.skins.mobile.supportClasses.MobileSkin;
+import spark.skins.mobile.supportClasses.TextSkinBase;
+
+use namespace mx_internal;

 /**
  *  Actionscript based skin for mobile text input.
@@ -30,23 +30,13 @@
  *  @playerversion AIR 2.5
  *  @productversion Flex 4.5
  */
- public class TextAreaSkin extends MobileSkin
- {
-     //--------------------------------------------------------------------------
-     //
-     //  Class statics
-     //
-     //--------------------------------------------------------------------------
-     private static const HORIZONTAL_PADDING:int = 8;
-     private static const VERTICAL_PADDING:int = 12;
-     private static const TEXT_HEIGHT_PADDING:int = 6;
-     private static const CORNER_ELLIPSE_SIZE:uint = 16;
-
-     //--------------------------------------------------------------------------
-     //
-     //  Constructor
-     //
-     //--------------------------------------------------------------------------
+public class TextAreaSkin extends TextSkinBase
+{
+    //--------------------------------------------------------------------------
+    //
+    //  Constructor
+    //
+    //--------------------------------------------------------------------------
     public function TextAreaSkin()
     {
         super();
@@ -56,18 +46,6 @@
      *  A strongly typed property that references the component to which this skin is applied.
      */
     public var hostComponent:TextArea; // SkinnableComponent will populate
-
-    /**
-     *  textDisplay skin part.
-     */
-    public var textDisplay:StyleableTextField;
-
-    /**
-     *  @private
-     *
-     *  Instance of the border graphics.
-     */
-    private var border:DisplayObject;

     //--------------------------------------------------------------------------
     //
@@ -82,17 +60,8 @@
     {
         super.createChildren();

-        border = new TextInput_border;
-        addChild(border);
-
-        textDisplay = StyleableTextField(createInFontContext(StyleableTextField));
-        textDisplay.styleProvider = this;
-        textDisplay.editable = true;
-        textDisplay.multiline = true;
-        textDisplay.wordWrap = true;
         textDisplay.addEventListener(Event.CHANGE, textDisplay_changeHandler);
         textDisplay.addEventListener(FlexEvent.VALUE_COMMIT, textDisplay_changeHandler);
-        addChild(textDisplay);
     }

     /**
@@ -102,6 +71,9 @@
     {
         super.measure();

+        var paddingTop:Number = getStyle("paddingTop");
+        var paddingBottom:Number = getStyle("paddingBottom");
+
         // TextDisplay always defaults to 440 pixels wide, and tall enough to
         // show all text.
         //
@@ -109,54 +81,17 @@
         // is not true: setting an explicit height will not adjust the width accordingly.
         textDisplay.commitStyles();
         measuredWidth = 440;
-        measuredHeight = Math.max(textDisplay.textHeight + (VERTICAL_PADDING * 2), 55);
+        measuredHeight = Math.max(textDisplay.textHeight + paddingTop + paddingBottom + (TEXT_HEIGHT_PADDING * 2), 55);
     }

     /**
      *  @private
+     *  Default verticalAlign="top"
      */
-    override protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void
+    override mx_internal function getTextTop(unscaledHeight:Number, paddingTop:Number):Number
     {
-        super.updateDisplayList(unscaledWidth, unscaledHeight);
-
-        // Draw the contentBackgroundColor
-        graphics.clear();
-        graphics.beginFill(getStyle("contentBackgroundColor"), getStyle("contentBackgroundAlpha"));
-    	graphics.drawRoundRect(1, 1, unscaledWidth - 2, unscaledHeight - 2, CORNER_ELLIPSE_SIZE, CORNER_ELLIPSE_SIZE);
-        graphics.endFill();
-
-        // position & size border
-        resizePart(border, unscaledWidth, unscaledHeight);
-        positionPart(border, 0, 0);
-
-        // position & size the text
-        textDisplay.commitStyles();
-        resizePart(textDisplay, unscaledWidth - (HORIZONTAL_PADDING * 2), unscaledHeight - (VERTICAL_PADDING * 2) + TEXT_HEIGHT_PADDING);
-        positionPart(textDisplay, HORIZONTAL_PADDING, VERTICAL_PADDING);
+        return paddingTop;
     }
-
-    /**
-     *  @private
-     */
-    override public function styleChanged(styleProp:String):void
-    {
-        if (textDisplay)
-            textDisplay.styleChanged(styleProp);
-        super.styleChanged(styleProp);
-    }
-
-	/**
-	 *  @private
-	 */
-	override protected function commitCurrentState():void
-	{
-		super.commitCurrentState();
-
-		if (currentState == "normal")
-			alpha = 1;
-		else
-			alpha = 0.5;
-	}

     /**
      *  @private


Transferred from the Adobe Open Source Subversion Repository

Revision: 8
Author:   open-source-svn-admin@adobe.com
Date:     2007-12-15T01:49:31.087529Z

Log Message:
-----------
The beginning of the open-source Flex SDK.

Populated the flex/sdk/trunk directory with an open-source subset of files from //depot/flex/sdk/...@191097 in the Faramir Perforce server. This changelist is a bit past the 3.0rc0 build.

The Ant scripts will not successfully build yet. They need to be adapted to the open-source subset.

Modified Paths:
--------------
2532 paths were modified

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

--- frameworks/projects/mx/src/mx/controls/treeClasses/TreeItemRenderer.as
+++ frameworks/projects/mx/src/mx/controls/treeClasses/TreeItemRenderer.as
@@ -0,0 +1,597 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  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.treeClasses
+{
+
+import flash.display.DisplayObject;
+import flash.display.InteractiveObject;
+import flash.events.Event;
+import flash.events.MouseEvent;
+import flash.geom.Point;
+import flash.geom.Rectangle;
+import flash.utils.getDefinitionByName;
+import mx.controls.Tree;
+import mx.controls.listClasses.BaseListData;
+import mx.controls.listClasses.IDropInListItemRenderer;
+import mx.controls.listClasses.IListItemRenderer;
+import mx.core.FlexVersion;
+import mx.core.IDataRenderer;
+import mx.core.IFlexDisplayObject;
+import mx.core.IFlexModuleFactory
+import mx.core.IFontContextComponent;
+import mx.core.IToolTip;
+import mx.core.IUITextField;
+import mx.core.SpriteAsset;
+import mx.core.UIComponent;
+import mx.core.UITextField;
+import mx.core.mx_internal;
+import mx.events.FlexEvent;
+import mx.events.ToolTipEvent;
+import mx.events.TreeEvent;
+
+use namespace mx_internal;
+
+/**
+ *  Dispatched when the data property changes.
+ *
+ *
When you use a component as an item renderer,
+ *  the data property contains the data to display.
+ *  You can listen for this event and update the component
+ *  when the data property changes.

+ *
+ *  @eventType mx.events.FlexEvent.DATA_CHANGE
+ */
+[Event(name="dataChange", type="mx.events.FlexEvent")]
+
+/**
+ *  Text color of a component label.
+ *  The default value is 0x0B333C.
+ */
+[Style(name="color", type="uint", format="Color", inherit="yes")]
+
+/**
+ *  Color of the component if it is disabled.
+ *  The default value is 0xAAB3B3.
+ *
+ */
+[Style(name="disabledColor", type="uint", format="Color", inherit="yes")]
+
+/**
+ *  The TreeItemRenderer class defines the default item renderer for a Tree control.
+ *  By default, the item renderer draws the text associated with each item in the tree,
+ *  an optional icon, and an optional disclosure icon.
+ *
+ *
You can override the default item renderer by creating a custom item renderer.

+ *
+ *  @see mx.controls.Tree
+ *  @see mx.core.IDataRenderer
+ *  @see mx.controls.listClasses.IDropInListItemRenderer
+ */
+public class TreeItemRenderer extends UIComponent
+	   implements IDataRenderer, IDropInListItemRenderer, IListItemRenderer,
+	   		      IFontContextComponent
+{
+    include "../../core/Version.as";
+
+	//--------------------------------------------------------------------------
+	//
+	//  Constructor
+	//
+	//--------------------------------------------------------------------------
+
+	/**
+	 *  Constructor.
+	 */
+	public function TreeItemRenderer()
+	{
+		super();
+	}
+
+    //--------------------------------------------------------------------------
+    //
+    //  Variables
+    //
+    //--------------------------------------------------------------------------
+
+	/**
+	 *  @private
+	 */
+	private var listOwner:Tree;
+
+    //--------------------------------------------------------------------------
+    //
+    //  Overridden properties: UIComponent
+    //
+    //--------------------------------------------------------------------------
+
+    //----------------------------------
+    //  baselinePosition
+    //----------------------------------
+
+    /**
+     *  @private
+     *  The baselinePosition of a TreeItemRenderer is calculated
+     *  for its label.
+     */
+    override public function get baselinePosition():Number
+    {
+		if (FlexVersion.compatibilityVersion < FlexVersion.VERSION_3_0)
+			super.baselinePosition;
+
+		if (!validateBaselinePosition())
+			return NaN;
+
+		return label.y + label.baselinePosition;
+    }
+
+    //--------------------------------------------------------------------------
+    //
+    //  Properties
+    //
+    //--------------------------------------------------------------------------
+
+    //----------------------------------
+	//  data
+    //----------------------------------
+
+	/**
+	 *  @private
+	 *  Storage for the data property.
+	 */
+	private var _data:Object;
+
+	[Bindable("dataChange")]
+
+	/**
+	 *  The implementation of the data property as
+	 *  defined by the IDataRenderer interface.
+	 *
+	 *  @see mx.core.IDataRenderer
+	 */
+	public function get data():Object
+	{
+		return _data;
+	}
+
+	/**
+	 *  @private
+	 */
+	public function set data(value:Object):void
+	{
+		_data = value;
+
+		invalidateProperties();
+
+		dispatchEvent(new FlexEvent(FlexEvent.DATA_CHANGE));
+	}
+
+    //----------------------------------
+	//  disclosureIcon
+    //----------------------------------
+
+	/**
+	 *  The internal IFlexDisplayObject that displays the disclosure icon
+	 *  in this renderer.
+	 */
+	protected var disclosureIcon:IFlexDisplayObject;
+
+    //----------------------------------
+    //  fontContext
+    //----------------------------------
+
+    /**
+     *  @private
+     */
+    public function get fontContext():IFlexModuleFactory
+    {
+        return moduleFactory;
+    }
+
+    /**
+     *  @private
+     */
+    public function set fontContext(moduleFactory:IFlexModuleFactory):void
+    {
+        this.moduleFactory = moduleFactory;
+    }
+
+    //----------------------------------
+	//  icon
+    //----------------------------------
+
+	/**
+	 *  The internal IFlexDisplayObject that displays the icon in this renderer.
+	 */
+	protected var icon:IFlexDisplayObject;
+
+    //----------------------------------
+	//  label
+    //----------------------------------
+
+	/**
+	 *  The internal UITextField that displays the text in this renderer.
+	 */
+	protected var label:IUITextField;
+
+    //----------------------------------
+	//  listData
+    //----------------------------------
+
+	/**
+	 *  @private
+	 *  Storage for the listData property.
+	 */
+	private var _listData:TreeListData;
+
+	[Bindable("dataChange")]
+
+	/**
+	 *  The implementation of the listData property as
+	 *  defined by the IDropInListItemRenderer interface.
+	 *
+	 *  @see mx.controls.listClasses.IDropInListItemRenderer
+	 */
+	public function get listData():BaseListData
+	{
+		return _listData;
+	}
+
+	/**
+	 *  @private
+	 */
+	public function set listData(value:BaseListData):void
+	{
+		_listData = TreeListData(value);
+
+		invalidateProperties();
+	}
+
+    //--------------------------------------------------------------------------
+    //
+    //  Overridden methods
+    //
+    //--------------------------------------------------------------------------
+
+	/**
+	 *  @private
+	 */
+	override protected function createChildren():void
+	{
+        super.createChildren();
+
+		createLabel(-1);
+
+		addEventListener(ToolTipEvent.TOOL_TIP_SHOW, toolTipShowHandler);
+	}
+
+	/**
+	 *  @private
+	 */
+	override protected function commitProperties():void
+	{
+		super.commitProperties();
+
+	    // if the font changed and we already created the label, we will need to
+        // destory it so it can be re-created, possibly in a different swf context.
+		if (hasFontContextChanged() && label != null)
+        {
+      		var index:int = getChildIndex(DisplayObject(label));
+            removeLabel();
+ 			createLabel(index);
+        }
+
+		if (icon)
+		{
+			removeChild(DisplayObject(icon));
+			icon = null;
+		}
+
+		if (disclosureIcon)
+		{
+			disclosureIcon.removeEventListener(MouseEvent.MOUSE_DOWN,
+			      							   disclosureMouseDownHandler);
+			removeChild(DisplayObject(disclosureIcon));
+			disclosureIcon = null;
+		}
+
+		if (_data != null)
+		{
+			listOwner = Tree(_listData.owner);
+
+			if (_listData.disclosureIcon)
+			{
+				var disclosureIconClass:Class = _listData.disclosureIcon;
+				var disclosureInstance:* = new disclosureIconClass();
+
+				// If not already an interactive object, then we'll wrap
+				// in one so we can dispatch mouse events.
+				if (!(disclosureInstance is InteractiveObject))
+				{
+					var wrapper:SpriteAsset = new SpriteAsset();
+					wrapper.addChild(disclosureInstance as DisplayObject);
+					disclosureIcon = wrapper as IFlexDisplayObject;
+				}
+				else
+				{
+					disclosureIcon = disclosureInstance;
+				}
+
+				addChild(disclosureIcon as DisplayObject);
+				disclosureIcon.addEventListener(MouseEvent.MOUSE_DOWN,
+												disclosureMouseDownHandler);
+			}
+
+			if (_listData.icon)
+			{
+				var iconClass:Class = _listData.icon;
+				icon = new iconClass();
+
+				addChild(DisplayObject(icon));
+			}
+
+			label.text = _listData.label;
+			label.multiline = listOwner.variableRowHeight;
+			label.wordWrap = listOwner.wordWrap;
+		}
+		else
+		{
+			label.text = " ";
+			toolTip = null;
+		}
+
+		invalidateDisplayList();
+	}
+
+	/**
+	 *  @private
+	 */
+	override protected function measure():void
+	{
+		super.measure();
+
+		var w:Number = _data ? _listData.indent : 0;
+
+		if (disclosureIcon)
+			w += disclosureIcon.width;
+
+		if (icon)
+			w += icon.measuredWidth;
+
+		// guarantee that label width isn't zero because it messes up ability to measure
+		if (label.width < 4 || label.height < 4)
+		{
+			label.width = 4;
+			label.height = 16;
+		}
+
+		if (isNaN(explicitWidth))
+		{
+			w += label.getExplicitOrMeasuredWidth();
+			measuredWidth = w;
+			measuredHeight = label.getExplicitOrMeasuredHeight();
+		}
+		else
+		{
+			label.width = Math.max(explicitWidth - w, 4);
+			measuredHeight = label.getExplicitOrMeasuredHeight();
+			if (icon && icon.measuredHeight > measuredHeight)
+				measuredHeight = icon.measuredHeight;
+		}
+	}
+
+	/**
+	 *  @private
+	 */
+	override protected function updateDisplayList(unscaledWidth:Number,
+												  unscaledHeight:Number):void
+	{
+		super.updateDisplayList(unscaledWidth, unscaledHeight);
+
+		var startx:Number = _data ? _listData.indent : 0;
+
+		if (disclosureIcon)
+		{
+			disclosureIcon.x = startx;
+
+			startx = disclosureIcon.x + disclosureIcon.width;
+
+			disclosureIcon.setActualSize(disclosureIcon.width,
+										 disclosureIcon.height);
+
+			disclosureIcon.visible = _data ?
+									 _listData.hasChildren :
+									 false;
+		}
+
+		if (icon)
+		{
+			icon.x = startx;
+			startx = icon.x + icon.measuredWidth;
+			icon.setActualSize(icon.measuredWidth, icon.measuredHeight);
+		}
+
+		label.x = startx;
+		label.setActualSize(unscaledWidth - startx, measuredHeight);
+
+		var verticalAlign:String = getStyle("verticalAlign");
+		if (verticalAlign == "top")
+		{
+			label.y = 0;
+			if (icon)
+				icon.y = 0;
+			if (disclosureIcon)
+				disclosureIcon.y = 0;
+		}
+		else if (verticalAlign == "bottom")
+		{
+			label.y = unscaledHeight - label.height + 2; // 2 for gutter
+			if (icon)
+				icon.y = unscaledHeight - icon.height;
+			if (disclosureIcon)
+				disclosureIcon.y = unscaledHeight - disclosureIcon.height;
+		}
+		else
+		{
+			label.y = (unscaledHeight - label.height) / 2;
+			if (icon)
+				icon.y = (unscaledHeight - icon.height) / 2;
+			if (disclosureIcon)
+				disclosureIcon.y = (unscaledHeight - disclosureIcon.height) / 2;
+		}
+
+		var labelColor:Number;
+
+		if (data && parent)
+		{
+			if (!enabled)
+				labelColor = getStyle("disabledColor");
+
+			else if (listOwner.isItemHighlighted(listData.uid))
+        		labelColor = getStyle("textRollOverColor");
+
+			else if (listOwner.isItemSelected(listData.uid))
+        		labelColor = getStyle("textSelectedColor");
+
+			else
+        		labelColor = getStyle("color");
+
+       		label.setColor(labelColor);
+		}
+
+		if (_data != null)
+		{
+			if (listOwner.showDataTips)
+			{
+				if (label.textWidth > label.width ||
+					listOwner.dataTipFunction != null)
+				{
+					toolTip = listOwner.itemToDataTip(_data);
+				}
+				else
+				{
+					toolTip = null;
+				}
+			}
+			else
+			{
+				toolTip = null;
+			}
+		}
+	}
+
+    //--------------------------------------------------------------------------
+    //
+    //  Methods
+    //
+    //--------------------------------------------------------------------------
+
+    /**
+     *  @private
+     *  Creates the label and adds it as a child of this component.
+     *
+     *  @param childIndex The index of where to add the child.
+	 *  If -1, the text field is appended to the end of the list.
+     */
+    mx_internal function createLabel(childIndex:int):void
+    {
+        if (!label)
+        {
+			label = IUITextField(createInFontContext(UITextField));
+			label.styleName = this;
+
+            if (childIndex == -1)
+                addChild(DisplayObject(label));
+            else
+                addChildAt(DisplayObject(label), childIndex);
+        }
+    }
+
+    /**
+     *  @private
+     *  Removes the label from this component.
+     */
+    mx_internal function removeLabel():void
+    {
+        if (label != null)
+        {
+        	removeChild(DisplayObject(label));
+        	label = null;
+        }
+    }
+
+	//--------------------------------------------------------------------------
+	//
+	//  Event handlers
+	//
+	//--------------------------------------------------------------------------
+
+	/**
+	 *  @private
+	 */
+	private function toolTipShowHandler(event:ToolTipEvent):void
+	{
+		var toolTip:IToolTip = event.toolTip;
+
+		// Calculate global position of label.
+		var pt:Point = new Point(0, 0);
+		pt = label.localToGlobal(pt);
+		pt = stage.globalToLocal(pt);
+
+		toolTip.move(pt.x, pt.y + (height - toolTip.height) / 2);
+
+		var screen:Rectangle = systemManager.screen;
+		var screenRight:Number = screen.x + screen.width;
+		if (toolTip.x + toolTip.width > screenRight)
+			toolTip.move(screenRight - toolTip.width, toolTip.y);
+	}
+
+	/**
+	 *  @private
+	 */
+	private function disclosureMouseDownHandler(event:Event):void
+	{
+		event.stopPropagation();
+
+		if (listOwner.isOpening || !listOwner.enabled)
+			return;
+
+		var open:Boolean = _listData.open;
+		_listData.open = !open;
+
+		listOwner.dispatchTreeEvent(TreeEvent.ITEM_OPENING,
+		                        _listData.item, //item
+                                this,  	//renderer
+                                event, 	//trigger
+                                !open, 	//opening
+    							true,  	//animate
+    							true)   //dispatch
+	}
+
+	/**
+	 *  @private
+	 */
+	mx_internal function getLabel():IUITextField
+	{
+		return label;
+	}
+
+	/**
+	 *  @private
+	 */
+	mx_internal function getDisclosureIcon():IFlexDisplayObject
+	{
+		return disclosureIcon;
+	}
+
+}
+
+}


further improved imageresources attach behaviour to allow an arbitrary amount of subpaths

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

--- src/reprise/external/ImageResource.as
+++ src/reprise/external/ImageResource.as
@@ -101,9 +101,10 @@
 					var pieces:Array = symbolId.split('.');
 					symbolId = pieces[0];
 	                var symbolClass : Class = getDefinitionByName(symbolId) as Class;
-					if (pieces.length > 1)
+					for (var i:int = 1; i < pieces.length; i++)
 					{
-						symbolClass = symbolClass[pieces[1]];
+						log('f ' + symbolClass, pieces[i]);
+						symbolClass = symbolClass[pieces[i]];
 					}
 					m_resource = new symbolClass() as DisplayObject;
 					m_httpStatus = new HTTPStatus(200, m_url);


animate the buffering spinner:

animate the buffering spinner:

--- kdp3Lib/src/com/kaltura/kdpfl/view/controls/BufferAnimationMediator.as
+++ kdp3Lib/src/com/kaltura/kdpfl/view/controls/BufferAnimationMediator.as
@@ -5,7 +5,10 @@
 	import com.kaltura.kdpfl.model.type.NotificationType;
 	import com.kaltura.kdpfl.view.media.KMediaPlayerMediator;

+	import flash.events.TimerEvent;
+	import flash.geom.ColorTransform;
 	import flash.geom.Point;
+	import flash.utils.Timer;
 	import flash.utils.getQualifiedClassName;

 	import org.osmf.media.MediaPlayerState;
@@ -50,14 +53,19 @@
 			_currConfig = facade.retrieveProxy(ConfigProxy.NAME) as ConfigProxy;
 		}

+		private var d:Date;
+
 		override public function handleNotification(note:INotification):void
 		{
 			var flashvars : Object = _currConfig.vo.flashvars;
 			var noteName : String = note.getName();
+/*			if(noteName != "playerUpdatePlayhead")
+				trace("^^^" , noteName);*/
 			switch(noteName)
 			{
 				case NotificationType.SKIN_LOADED:
 					//					spinner.swapLoadingWithAnimation( applicationLoadStyleName == '' ? SPINNER_CLASS : applicationLoadStyleName );
+					trace("^^^ 1 ");
 					spinner.visible = false;
 					break;
 				case NotificationType.LAYOUT_READY:
@@ -72,6 +80,27 @@
 					break;
 				case NotificationType.KDP_READY:
 				case NotificationType.READY_TO_PLAY:
+					trace("^^^ 0 ");
+					var spinnerColor:Number = -1;
+					if(flashvars.spinnerColorAttribute && flashvars[flashvars.spinnerColorAttribute] )
+					{
+						spinnerColor = flashvars[flashvars.spinnerColorAttribute]
+					}
+					if(flashvars.spinnerColor)
+					{
+						spinnerColor = flashvars.spinnerColor;
+					}
+
+					if(spinnerColor> -1 )
+					{
+						var color_transform:ColorTransform= new ColorTransform;
+						color_transform.color= spinnerColor ;
+						spinner.transform.colorTransform=color_transform;
+
+					}
+					if(flashvars.spinnerFadeTime)
+						_animationTime = Number(flashvars.spinnerFadeTime) * 1000;
+
 					spinner.visible = false;
 					_reachedEnd = false;
 					if (flashvars.usePreloaderBufferAnimation && flashvars.usePreloaderBufferAnimation=='true' && flashvars.preloader)
@@ -88,10 +117,17 @@
 					{
 						_notBuffering = false;
 						if(_reachedEnd)
+						{
 							spinner.visible = false;
+							trace("^^^ 2 ");
+						}
+						else if (!_prevStatePaused)
+						{
+							trace("^^^ 3 ");
 							//fix OSMF bug: sometimes "buffering" was sent after player paused, the spinner shouldn't be visible in this case
-						else if (!_prevStatePaused)
-							spinner.visible = true;
+							//spinner.visible = true; //TODO
+							fadeInSpinner();
+						}

 					}
 					else
@@ -112,11 +148,13 @@
 						}
 						if(note.getBody() == MediaPlayerState.PAUSED)
 						{
+							trace("^^^ 4 ");
 							spinner.visible = false;
 							_prevStatePaused = true;
 						}
 						if( note.getBody() == MediaPlayerState.READY)
 						{
+							trace("^^^ 5 ");
 							spinner.visible = false;
 						}
 					}
@@ -130,8 +168,9 @@
 				case NotificationType.PLAYER_UPDATE_PLAYHEAD:
 					//if _bufferChangeStart the next bufferChange event will make the spinner invisible
 					if(_notBuffering && !_bufferChangeStart)
-					{
-						spinner.visible = false;
+					{
+						trace("^^^ 6 ");
+						//spinner.visible = false; //TODO
 					}
 					//fix another OSMF bug: we are buffering even though movie plays
 					else if (spinner.visible)
@@ -140,7 +179,8 @@
 						var curPos:Number = parseFloat(Number(note.getBody()).toFixed(2));
 						if ((curPos - _lastPlayheadPos)<=updateIntervalInSeconds)
 						{
-							spinner.visible = false;
+							trace("^^^ 7 ");
+							//spinner.visible = false; //TODO
 						}
 						_lastPlayheadPos = curPos;
 					}
@@ -148,14 +188,26 @@
 					break;
 				case NotificationType.BUFFER_CHANGE:
 					_bufferChangeStart = note.getBody();
-					spinner.visible = _bufferChangeStart;
+					if(_bufferChangeStart)
+					{
+						//spinner.visible = _bufferChangeStart;
+						fadeInSpinner()
+					}
+					if(!_bufferChangeStart)
+					{
+						fadeOutSpinner();
+						//statistics
+						//trace("^^^ Date delta in seeks:", ((new Date().getTime() - d.getTime())/1000));
+					}
 					break;
 				case NotificationType.PLAYER_PLAY_END:
 					_reachedEnd=true;
+					trace("^^^ 8 ");
 					spinner.visible = false;
 					break;
 				case NotificationType.KDP_EMPTY:
 				case NotificationType.READY_TO_LOAD:
+					trace("^^^ 9 ");
 					spinner.visible = false;
 					_reachedEnd=false;
 					if (flashvars.usePreloaderBufferAnimation && flashvars.usePreloaderBufferAnimation=='true' && flashvars.preloader)
@@ -175,13 +227,20 @@
 				//in case we are trying to connect to a live stream but it is not on air yet
 				case NotificationType.LIVE_ENTRY:
 					if (flashvars.hideSpinnerOnOffline=="true")
+					{
+						trace("^^^ 10 ");
 						spinner.visible = false;
-					else
+					}
+					else
+					{
+						trace("^^^ 11 ");
 						spinner.visible = true;
+					}
 					break;

 				//in case the live stream we are trying to connect to was found to be on air
 				case LiveStreamCommand.LIVE_STREAM_READY:
+					trace("^^^ 12 ");
 					spinner.visible = false;
 					break;

@@ -197,6 +256,67 @@

 			}
 		}
+
+
+		private var _fadeInTimer:Timer;
+		private var _fadeOutTimer:Timer;
+		private var _animationTime:Number = 0;
+
+		private function fadeOutSpinner():void
+		{
+			_bufferChangeStart = true;
+			if(_animationTime == 0)
+			{
+				spinner.visible = false;
+				return;
+			}
+			//trace("^^^^^^^^^   fadeOutSpinner start >>>>>>>>>>");
+			spinner.visible = true;
+			spinner.alpha = 1;
+			_fadeOutTimer = new Timer(_animationTime/10,10);
+			_fadeOutTimer.addEventListener(TimerEvent.TIMER , onFadeOutTimer);
+			_fadeOutTimer.addEventListener(TimerEvent.TIMER_COMPLETE , onFadeOutComplete);
+			_fadeOutTimer.start();
+		}
+		private function onFadeOutTimer(event:TimerEvent):void
+		{
+			spinner.alpha -=0.1;
+		}
+		private function onFadeOutComplete(event:TimerEvent):void
+		{
+			//trace("^^^^^^^^^   fadeOutSpinner END >>>>>>>>>>");
+			_fadeOutTimer.removeEventListener(TimerEvent.TIMER , onFadeOutTimer);
+			_fadeOutTimer.removeEventListener(TimerEvent.TIMER_COMPLETE , onFadeOutComplete);
+			spinner.visible = false;
+		}
+		private function fadeInSpinner():void
+		{
+			if(_animationTime == 0)
+			{
+				spinner.visible = true;
+				return;
+			}
+			spinner.alpha = 0;
+			spinner.visible = true;
+			_fadeInTimer = new Timer(_animationTime/10,10);
+			_fadeInTimer.addEventListener(TimerEvent.TIMER , onFadeInTimer);
+			_fadeInTimer.addEventListener(TimerEvent.TIMER_COMPLETE , onFadeInComplete);
+			_fadeInTimer.start();
+		}
+
+		private function onFadeInTimer(event:TimerEvent):void
+		{
+			spinner.alpha +=0.1;
+		}
+		private function onFadeInComplete(event:TimerEvent):void
+		{
+			_fadeInTimer.removeEventListener(TimerEvent.TIMER , onFadeInTimer);
+			_fadeInTimer.removeEventListener(TimerEvent.TIMER_COMPLETE , onFadeInComplete);
+		}
+
+
+
+

 		override public function listNotificationInterests():Array
 		{


Transferred from the Adobe Open Source Subversion Repository

Revision: 12651
Author:   smgilson@adobe.com
Date:     2009-12-08T15:04:12.651288Z

Log Message:
-----------
ASDoc prep for L10N, and add a few new examples

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

Modified Paths:
--------------
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/spark/src/spark/components/mediaClasses/VolumeBar.as</path>
<path kind="file" action="A">/flex/sdk/trunk/frameworks/projects/spark/asdoc/en_US/spark/components/examples/VideoDisplayExample.mxml</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/spark/src/spark/components/VideoDisplay.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/spark/src/spark/components/mediaClasses/ScrubBar.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/spark/src/spark/components/mediaClasses/DynamicStreamingVideoItem.as</path>
<path kind="file" action="A">/flex/sdk/trunk/frameworks/projects/spark/asdoc/en_US/spark/components/examples/VideoPlayerExample.mxml</path>
<path kind="file" action="A">/flex/sdk/trunk/frameworks/projects/spark/asdoc/en_US/spark/components/mediaClasses/examples/DynamicStreamingVideoSourceExample.mxml</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/mediaClasses/DynamicStreamingVideoSource.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/spark/src/spark/components/mediaClasses/MuteButton.as</path>
<path kind="dir" action="A">/flex/sdk/trunk/frameworks/projects/spark/asdoc/en_US/spark/components/mediaClasses/examples</path>
<path kind="dir" action="A">/flex/sdk/trunk/frameworks/projects/spark/asdoc/en_US/spark/components/mediaClasses</path>

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

--- frameworks/projects/spark/src/spark/components/mediaClasses/DynamicStreamingVideoItem.as
+++ frameworks/projects/spark/src/spark/components/mediaClasses/DynamicStreamingVideoItem.as
@@ -14,11 +14,31 @@
 {

 /**
- *  The DynamicStreamingVideoItem class represents a stream on the server plus a
- *  bitrate for that stream.
+ *  The DynamicStreamingVideoItem class represents a video stream on the server plus a
+ *  bitrate for that stream.
+ *  Use this class to define the values of the streamItems property
+ *  of the DynamicStreamingVideoSource class.
+ *  The DynamicStreamingVideoSource class represents a streaming video source and can be
+ *  used for streaming pre-recorded video or live streaming video.
+ *
+ *  @mxml
+ *
+ *
The <s:DynamicStreamingVideoItem> tag inherits all of the tag
+ *  attributes of its superclass and adds the following tag attributes:

+ *
+ *

+ *  <s:DynamicStreamingVideoItem
+ *    Properties
+ *    bitrate="0"
+ *    streamName=""
+ *  />
+ *

  *
  *  @see spark.components.VideoPlayer
  *  @see spark.components.VideoDisplay
+ *  @see spark.components.mediaClasses.DynamicStreamingVideoSource
+ *
+ *  @includeExample examples/DynamicStreamingVideoSourceExample.mxml
  *
  *  @langversion 3.0
  *  @playerversion Flash 10
@@ -33,6 +53,14 @@
     //
     //--------------------------------------------------------------------------

+    /**
+     *  Constructor.
+     *
+     *  @langversion 3.0
+     *  @playerversion Flash 10
+     *  @playerversion AIR 1.5
+     *  @productversion Flex 4
+     */
     public function DynamicStreamingVideoItem()
     {
         super();
@@ -53,7 +81,7 @@
     private var _bitrate:Number = 0;

     /**
-     *  The bitRate for this particular stream.
+     *  The bit rate for the video stream.
      *
      *  @default 0
      *
@@ -84,7 +112,11 @@
     [Inspectable(category="General")]

     /**
-     *  The stream name on the server
+     *  The stream name on the server.
+     *  Use the host property of the DynamicStreamingVideoSource class
+     *  to specify the URI of the server.
+     *
+     *  @see spark.components.mediaClasses.DynamicStreamingVideoSource#host
      *
      *  @langversion 3.0
      *  @playerversion Flash 10


Transferred from the Adobe Open Source Subversion Repository

Revision: 19402
Author:   mhorn@adobe.com
Date:     2010-12-15T20:52:49.446395Z

Log Message:
-----------
Temporary ASDoc updates for bug fix SDK-28907

Modified Paths:
--------------
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/advancedgrids/src/mx/controls/advancedDataGridClasses/AdvancedDataGridSortItemRenderer.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/advancedgrids/src/mx/controls/AdvancedDataGridBaseEx.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/framework/src/mx/managers/CursorManager.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/framework/src/mx/managers/DragManager.as</path>

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

--- frameworks/projects/advancedgrids/src/mx/controls/advancedDataGridClasses/AdvancedDataGridSortItemRenderer.as
+++ frameworks/projects/advancedgrids/src/mx/controls/advancedDataGridClasses/AdvancedDataGridSortItemRenderer.as
@@ -93,7 +93,9 @@
  *  The class to use as the skin for the arrow that indicates the column sort
  *  direction.
  *
- *  @default mx.skins.halo.DataGridSortArrow
+ *
The default skin class is based on the theme. For example, with the Halo theme,
+ *  the default skin class is mx.skins.halo.DataGridSortArrow. For the Spark theme, the default skin
+ *  class is mx.skins.spark.DataGridSortArrow.

  *
  *  @langversion 3.0
  *  @playerversion Flash 9


Transferred from the Adobe Open Source Subversion Repository

Revision: 15368
Author:   smgilson@adobe.com
Date:     2010-04-13T12:31:21.786591Z

Log Message:
-----------
integrate 15352: Update ASDoc version tags

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

Modified Paths:
--------------
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/automation_spark/src/spark/automation/delegates/components/SparkCheckBoxAutomationImpl.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/automation_spark/src/spark/automation/delegates/components/supportClasses/SparkSliderBaseAutomationImpl.as</path>
<path kind="dir" action="M">/flex/sdk/trunk</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/spark/src/spark/skins/spark/DefaultItemRenderer.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/automation_spark/src/spark/automation/delegates/components/SparkButtonBarButtonAutomationImpl.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/automation_spark/src/spark/automation/delegates/components/SparkTextAreaAutomationImpl.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/automation_spark/src/spark/automation/delegates/components/supportClasses/SparkButtonBaseAutomationImpl.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/automation_spark/src/spark/automation/delegates/components/supportClasses/SparkListBaseAutomationImpl.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/automation_spark/src/spark/automation/delegates/components/supportClasses/SparkSkinnableTextBaseAutomationImpl.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/spark/src/spark/accessibility/TitleWindowAccImpl.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/spark/src/spark/accessibility/RadioButtonAccImpl.as</path>

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

--- frameworks/projects/automation_spark/src/spark/automation/delegates/components/SparkTextAreaAutomationImpl.as
+++ frameworks/projects/automation_spark/src/spark/automation/delegates/components/SparkTextAreaAutomationImpl.as
@@ -11,98 +11,98 @@

 package spark.automation.delegates.components
 {
-	import flash.display.DisplayObject;
-
-	import mx.automation.Automation;
-	import mx.core.mx_internal;
-
-	import spark.automation.delegates.components.supportClasses.SparkSkinnableTextBaseAutomationImpl;
-	import spark.components.TextArea;
-
-	use namespace mx_internal;
-
-	[Mixin]
-	/**
-	 *
-	 *  Defines methods and properties required to perform instrumentation for the
-	 *  TextArea control.
-	 *
-	 *  @see spark.components.TextArea
-	 *
-	 *
-	 *  @langversion 3.0
-	 *  @playerversion Flash 9
-	 *  @playerversion AIR 1.1
-	 *  @productversion Flex 3
-	 */
-	public class SparkTextAreaAutomationImpl extends SparkSkinnableTextBaseAutomationImpl
-	{
-		include "../../../core/Version.as";
-
-		//--------------------------------------------------------------------------
-		//
-		//  Class methods
-		//
-		//--------------------------------------------------------------------------
-
-		/**
-		 *  Registers the delegate class for a component class with automation manager.
-		 *
-		 *  @param root The SystemManger of the application.
-		 *
-		 *  @langversion 3.0
-		 *  @playerversion Flash 9
-		 *  @playerversion AIR 1.1
-		 *  @productversion Flex 4
-		 */
-		public static function init(root:DisplayObject):void
-		{
-			Automation.registerDelegateClass(spark.components.TextArea, SparkTextAreaAutomationImpl);
-		}
-
-		//--------------------------------------------------------------------------
-		//
-		//  Constructor
-		//
-		//--------------------------------------------------------------------------
-
-		/**
-		 *  Constructor.
-		 * @param obj TextArea object to be automated.
-		 *
-		 *  @langversion 3.0
-		 *  @playerversion Flash 9
-		 *  @playerversion AIR 1.1
-		 *  @productversion Flex 3
-		 */
-		public function SparkTextAreaAutomationImpl(obj:spark.components.TextArea)
-		{
-			super(obj);
-		}
-
-
-		//--------------------------------------------------------------------------
-		//
-		//  Variables
-		//
-		//--------------------------------------------------------------------------
-
-		/**
-		 *  @private
-		 *  storage for the owner component
-		 */
-		protected function get  textArea():spark.components.TextArea
-		{
-			return uiComponent as spark.components.TextArea;
-		}
-
-		/**
-		 *  @private
-		 */
-		override public function get automationName():String
-		{
-			return  textArea.id || super.automationName ;
-		}
-
-	}
+    import flash.display.DisplayObject;
+
+    import mx.automation.Automation;
+    import mx.core.mx_internal;
+
+    import spark.automation.delegates.components.supportClasses.SparkSkinnableTextBaseAutomationImpl;
+    import spark.components.TextArea;
+
+    use namespace mx_internal;
+
+    [Mixin]
+    /**
+     *
+     *  Defines methods and properties required to perform instrumentation for the
+     *  TextArea control.
+     *
+     *  @see spark.components.TextArea
+     *
+     *
+     *  @langversion 3.0
+     *  @playerversion Flash 10
+     *  @playerversion AIR 1.5
+     *  @productversion Flex 4
+     */
+    public class SparkTextAreaAutomationImpl extends SparkSkinnableTextBaseAutomationImpl
+    {
+        include "../../../core/Version.as";
+
+        //--------------------------------------------------------------------------
+        //
+        //  Class methods
+        //
+        //--------------------------------------------------------------------------
+
+        /**
+         *  Registers the delegate class for a component class with automation manager.
+         *
+         *  @param root The SystemManger of the application.
+         *
+         *  @langversion 3.0
+         *  @playerversion Flash 10
+         *  @playerversion AIR 1.5
+         *  @productversion Flex 4
+         */
+        public static function init(root:DisplayObject):void
+        {
+            Automation.registerDelegateClass(spark.components.TextArea, SparkTextAreaAutomationImpl);
+        }
+
+        //--------------------------------------------------------------------------
+        //
+        //  Constructor
+        //
+        //--------------------------------------------------------------------------
+
+        /**
+         *  Constructor.
+         * @param obj TextArea object to be automated.
+         *
+         *  @langversion 3.0
+         *  @playerversion Flash 10
+         *  @playerversion AIR 1.5
+         *  @productversion Flex 4
+         */
+        public function SparkTextAreaAutomationImpl(obj:spark.components.TextArea)
+        {
+            super(obj);
+        }
+
+
+        //--------------------------------------------------------------------------
+        //
+        //  Variables
+        //
+        //--------------------------------------------------------------------------
+
+        /**
+         *  @private
+         *  storage for the owner component
+         */
+        protected function get  textArea():spark.components.TextArea
+        {
+            return uiComponent as spark.components.TextArea;
+        }
+
+        /**
+         *  @private
+         */
+        override public function get automationName():String
+        {
+            return  textArea.id || super.automationName ;
+        }
+
+    }
 }


removed debug code

removed debug code

Change-Id: Id2ea378b0d55b9e8f5d2f0c08c515bf5a56ba6da

--- WeaveUI/src/weave/visualization/layers/SimpleInteractiveVisualization.as
+++ WeaveUI/src/weave/visualization/layers/SimpleInteractiveVisualization.as
@@ -222,6 +222,8 @@

 			super.updateFullDataBounds();

+			// adjust fullDataBounds based on auto zoom settings
+
 			tempBounds.copyFrom(fullDataBounds);
 			if(_xAxisLayer && enableAutoZoomXToNiceNumbers.value)
 			{
@@ -256,7 +258,6 @@
 			}

 			getCallbackCollection(this).resumeCallbacks();
-			//trace('fullDataBounds =',fullDataBounds);
 		}

 		override protected function updateZoom():void
@@ -265,10 +266,6 @@
 			getCallbackCollection(zoomBounds).delayCallbacks();

 			super.updateZoom();
-			zoomBounds.getDataBounds(tempBounds);
-			//trace('dataBounds =',tempBounds);
-
-			// adjust dataBounds based on auto zoom settings

 			// when the data bounds change, we need to update the min,max values for axes
 			if (_xAxisLayer)


Aesthetic sliderbar changes

Aesthetic sliderbar changes

--- src/UI/Sliderbar.as
+++ src/UI/Sliderbar.as
@@ -30,7 +30,7 @@
 			x = X;
 			y = Y;
 			width = 80;
-			height = 56;
+			height = 48;

 			valueRange = ValueRange ? ValueRange : new Range(-16, 15);
 			value = valueRange.initial;


Fixed dmem tooltip locs

Fixed dmem tooltip locs

--- src/UI/TextTooltipParasite.as
+++ src/UI/TextTooltipParasite.as
@@ -17,14 +17,14 @@
 		}

 		override public function update():void {
-			tooltip.visible = C.textOverlapsPoint(text, new Point(FlxG.mouse.x - FlxG.camera.scroll.x,
-																  FlxG.mouse.y - FlxG.camera.scroll.y))
-			tooltip.x = FlxG.mouse.x + 20;
+			var descrolledMouse:Point = new Point(FlxG.mouse.x - FlxG.camera.scroll.x, FlxG.mouse.y - FlxG.camera.scroll.y);
+			tooltip.visible = C.textOverlapsPoint(text, descrolledMouse);
+			tooltip.x = descrolledMouse.x + 20;
 			if (tooltip.x + tooltip.width >= FlxG.width - 5)
-				tooltip.x = FlxG.mouse.x - (tooltip.width + 10);
-			tooltip.y = FlxG.mouse.y + 30;
+				tooltip.x = descrolledMouse.x - (tooltip.width + 10);
+			tooltip.y = descrolledMouse.y + 30;
 			if (tooltip.y + tooltip.height >= FlxG.height - 5)
-				tooltip.y = FlxG.mouse.y - (tooltip.height + 10);
+				tooltip.y = descrolledMouse.y - (tooltip.height + 10);
 		}

 	}


Transferred from the Adobe Open Source Subversion Repository

Revision: 19674
Author:   cframpto@adobe.com
Date:     2011-01-10T21:50:40.535000Z

Log Message:
-----------
Add sortChanging and sortChange events to DataGrid for interactive sorting.  For now, until PARB'ed, change sortByColumns() signature to
    public function sortByColumns(columnIndices:Vector.<int>, isInteractive:Boolean=false):Boolean
Fix some doc nits in the other grid events.

QE notes:
Doc notes:
Bugs: SDK-28617
Reviewer: Hans, 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/events/GridCaretEvent.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/spark/src/spark/events/GridSelectionEvent.as</path>
<path kind="file" action="A">/private/flex/sdk/branches/hero_private/frameworks/projects/spark/src/spark/events/GridSortEvent.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/spark/src/spark/components/DataGrid.as</path>

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

--- frameworks/projects/spark/src/spark/events/GridSelectionEvent.as
+++ frameworks/projects/spark/src/spark/events/GridSelectionEvent.as
@@ -42,8 +42,12 @@
     /**
      *  The GridSelectionEvent.SELECTION_CHANGE constant defines
      *  the value of the type property of the event object for a
-     *  selectionChanging event, which indicates that the current
+     *  selectionChange event, which indicates that the current
      *  selection has just been changed.
+     *
+     *
This event is dispatched when the user interacts with the control.
+     *  When you sort the data provider's collection programmatically,
+     *  the component does not dispatch the selectionChange event.

      *
      *
The properties of the event object have the following values:

      *

@@ -87,6 +91,10 @@
      *  selection is about to change. Call preventDefault() on this event
      *  to prevent the selection from changing.
      *
+     *
This event is dispatched when the user interacts with the control.
+     *  When you sort the data provider's collection programmatically,
+     *  the component does not dispatch the selectionChanging event.

+     *
      *
The properties of the event object have the following values:

      *

      *
Property	Value


fixed bin labeling bug

fixed bin labeling bug

--- WeaveData/src/weave/data/BinClassifiers/NumberClassifier.as
+++ WeaveData/src/weave/data/BinClassifiers/NumberClassifier.as
@@ -20,10 +20,13 @@
 package weave.data.BinClassifiers
 {
 	import weave.api.core.ICallbackCollection;
+	import weave.api.data.ColumnMetadata;
+	import weave.api.data.DataTypes;
 	import weave.api.data.IBinClassifier;
 	import weave.api.data.IPrimitiveColumn;
 	import weave.api.getCallbackCollection;
 	import weave.api.newLinkableChild;
+	import weave.compiler.StandardLib;
 	import weave.core.LinkableBoolean;
 	import weave.core.LinkableNumber;
 	import weave.data.AttributeColumns.StringColumn;
@@ -91,54 +94,49 @@
 		 * @param toStringColumn The primitive column to use that provides a number-to-string conversion function.
 		 * @return A generated label for this NumberClassifier.
 		 */
-		private static const lessThanString:String = '< ';//'less than ';
-		private static const moreThanString:String = '> ';//'more than ';
 		public function generateBinLabel(toStringColumn:IPrimitiveColumn = null):String
 		{
-			// make classifiers have readable labels
-			var minStr:String;
-			var maxStr:String;
+			var minStr:String = null;
+			var maxStr:String = null;
+
+			// get labels from column
 			if (toStringColumn != null)
 			{
-				minStr = toStringColumn.deriveStringFromNumber(min.value);
-				maxStr = toStringColumn.deriveStringFromNumber(max.value);
+				minStr = toStringColumn.deriveStringFromNumber(min.value) || '';
+				maxStr = toStringColumn.deriveStringFromNumber(max.value) || '';
+			}
+
+			// if the column produced no labels, use default number formatting
+			if (!minStr && !maxStr)
+			{
+				minStr = StandardLib.formatNumber(min.value);
+				maxStr = StandardLib.formatNumber(max.value);
+			}
+
+			// if both labels are the same, return the label
+			if (minStr && maxStr && minStr == maxStr)
+				return minStr;
+
+			// if the column dataType is string, put quotes around the labels
+			if (toStringColumn && toStringColumn.getMetadata(ColumnMetadata.DATA_TYPE) == DataTypes.STRING)
+			{
+				minStr = lang('"{0}"', minStr);
+				maxStr = lang('"{0}"', maxStr);
 			}
 			else
 			{
-				//TEMPORARY SOLUTION
-				minStr = '' + min.value;
-				maxStr = '' + max.value;
+				if (!minInclusive.value)
+					minStr = lang("> {0}", minStr);
+				if (!maxInclusive.value)
+					maxStr = lang("< {0}", maxStr);
 			}

-			if (minStr == "" && maxStr == "")
-			{
-				return "Undefined";
-			}
-			else if (minStr == maxStr)
-			{
-				return minStr;
-			}
-			else
-			{
-				if (toStringColumn is StringColumn)
-				{
-					minStr = '"' + minStr + '"';
-					maxStr = '"' + maxStr + '"';
-				}
-				else
-				{
-					if (!minInclusive.value)
-						minStr = moreThanString + minStr;
-					if (!maxInclusive.value)
-						maxStr = lessThanString + maxStr;
-				}
-
-				if (minStr == "")
-					minStr = "Undefined";
-				if (maxStr == "")
-					maxStr = "Undefined";
-				return minStr + " to " + maxStr;
-			}
+			if (minStr == '')
+				minStr = lang('Undefined');
+			if (maxStr == '')
+				maxStr = lang('Undefined');
+
+			return lang("{0} to {1}", minStr, maxStr);
 		}

 		public function toString():String
@@ -146,7 +144,6 @@
 			return (minInclusive.value ? '[' : '(')
 				+ min.value + ', ' + max.value
 				+ (maxInclusive.value ? ']' : ')');
-//			return min + ' to ' + max;
 		}
 	}
 }


fixed weird rendering bug

fixed weird rendering bug

--- WeaveUISpark/src/weave/visualization/plotters/WMSPlotter.as
+++ WeaveUISpark/src/weave/visualization/plotters/WMSPlotter.as
@@ -221,11 +221,18 @@

 			// draw the triangles and end the fill
 			var newShape:Shape = new Shape();
+
+			////////////////////////////////////
+			// NOTE: if we don't call lineStyle() with thickness=1 prior to calling beginBitmapFill() and drawTriangles(), it does not always render correctly.
+			newShape.graphics.lineStyle(1, 0, 0); // thickness=1, alpha=0
+			////////////////////////////////////
+
 			if (debug)
 			{
 				newShape.graphics.lineStyle(1, Math.random() * 0xFFFFFF, 0.5, false, LineScaleMode.NONE);
 				//newShape.graphics.lineStyle(1, 0, 1, true, LineScaleMode.NONE);
 			}
+
 			newShape.graphics.beginBitmapFill(tile.bitmapData, null, false, true); // it's important to disable the repeat option
 			newShape.graphics.drawTriangles(vertices, indices, uvtData, TriangleCulling.NEGATIVE);
 			newShape.graphics.endFill();


FLEX-33058 Lengthened the test's timeout.

--- frameworks/projects/advancedgrids/tests/mx/controls/FLEX_33058_Tests.as
+++ frameworks/projects/advancedgrids/tests/mx/controls/FLEX_33058_Tests.as
@@ -69,7 +69,7 @@
             noEnterFramesRemaining = NaN;
         }

-        [Test(async, timeout=500)]
+        [Test(async, timeout=1000)]
         public function test_sorting_doesnt_throw_fatal():void
         {
             //given
@@ -81,7 +81,7 @@
             //then wait a few frames
             noEnterFramesRemaining = NO_ENTER_FRAMES_TO_ALLOW;
             UIImpersonator.testDisplay.addEventListener(Event.ENTER_FRAME, onEnterFrame);
-            Async.handleEvent(this, _finishNotifier, Event.COMPLETE, onGridAddedToStage);
+            Async.handleEvent(this, _finishNotifier, Event.COMPLETE, onGridAddedToStage, 300);
         }

         private function onGridAddedToStage(event:Event, passThroughData:Object):void
@@ -92,7 +92,7 @@
             //then - wait a few more frames
             noEnterFramesRemaining = NO_ENTER_FRAMES_TO_ALLOW;
             UIImpersonator.testDisplay.addEventListener(Event.ENTER_FRAME, onEnterFrame);
-            Async.handleEvent(this, _finishNotifier, Event.COMPLETE, onGridDrawn);
+            Async.handleEvent(this, _finishNotifier, Event.COMPLETE, onGridDrawn, 300);
         }

         private function onGridDrawn(event:Event, passThroughData:Object):void
@@ -106,7 +106,7 @@
             //then - wait a few more frames
             noEnterFramesRemaining = NO_ENTER_FRAMES_TO_ALLOW;
             UIImpersonator.testDisplay.addEventListener(Event.ENTER_FRAME, onEnterFrame);
-            Async.handleEvent(this, _finishNotifier, Event.COMPLETE, onGridSetupComplete);
+            Async.handleEvent(this, _finishNotifier, Event.COMPLETE, onGridSetupComplete, 300);
         }

         private static function onGridSetupComplete(event:Event, passThroughData:Object):void


Transferred from the Adobe Open Source Subversion Repository

Revision: 6801
Author:   smgilson@adobe.com
Date:     2009-05-11T20:42:31.171280Z

Log Message:
-----------
ASDoc updates for AIR comps

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

Modified Paths:
--------------
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/airframework/src/spark/skins/default/MinimizeButtonSkin.mxml</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/airframework/src/spark/skins/default/MacMinimizeButtonSkin.mxml</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/airframework/src/spark/components/WindowedApplication.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/airframework/src/spark/skins/default/MaximizeButtonSkin.mxml</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/airframework/src/spark/skins/default/RestoreButtonSkin.mxml</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/airframework/src/spark/skins/default/MacMaximizeButtonSkin.mxml</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/airframework/src/spark/skins/default/CloseButtonSkin.mxml</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/airframework/src/spark/components/Window.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/airframework/src/spark/skins/default/MacCloseButtonSkin.mxml</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/airframework/src/spark/skins/default/WindowedApplicationSkin.mxml</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/airframework/src/spark/components/windowClasses/TitleBar.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/airframework/src/spark/skins/default/TitleBarSkin.mxml</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/airframework/src/spark/skins/default/MacTitleBarSkin.mxml</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/airframework/src/spark/skins/default/GripperSkin.mxml</path>

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

--- frameworks/projects/airspark/src/spark/components/WindowedApplication.as
+++ frameworks/projects/airspark/src/spark/components/WindowedApplication.as
@@ -193,7 +193,7 @@

 /**
  *  Dispatched when the WindowedApplication completes its initial layout.
- *  By default, the WindowedApplication will be visbile at this time.
+ *  By default, the WindowedApplication will be visible at this time.
  *
  *  @eventType mx.events.AIREvent.WINDOW_COMPLETE
  *
@@ -348,6 +348,7 @@
  *    Events
  *    applicationActivate="No default"
  *    applicationDeactivate="No default"
+ *    close="No default"
  *    closing="No default"
  *    displayStateChange="No default"
  *    displayStateChanging="No default"
@@ -355,7 +356,9 @@
  *    moving="No default"
  *    networkChange="No default"
  *    resizing="No default"
+ *    windowActivate="No default"
  *    windowComplete="No default"
+ *    windowDeactivate="No default"
  *    windowMove="No default"
  *    windowResize="No default"
  *  />
@@ -509,7 +512,7 @@
     //----------------------------------

     /**
-     *  A skin part that defines the gripper button used to resize the window.
+     *  The skin part that defines the gripper button used to resize the window.
      *
      *  @langversion 3.0
      *  @playerversion Flash 10
@@ -524,7 +527,7 @@
     //----------------------------------

     /**
-     *  The SkinPart that displays the status bar.
+     *  The skin part that defines the display of the status bar.
      *
      *  @langversion 3.0
      *  @playerversion AIR 1.5
@@ -538,10 +541,10 @@
     //----------------------------------

     /**
-     *  A reference to the UITextField that displays the status bar's text.
-     *
-     *  @langversion 3.0
-     *  @playerversion AIR 1.1
+     *  The skin part that defines the display of the status bar's text.
+     *
+     *  @langversion 3.0
+     *  @playerversion AIR 1.5
      *  @productversion Flex 3
      */
     [SkinPart (required="false")]
@@ -552,7 +555,7 @@
     //----------------------------------

     /**
-     *  The UIComponent that displays the title bar.
+     *  The skin part that defines the display of the title bar.
      *
      *  @langversion 3.0
      *  @playerversion AIR 1.5
@@ -639,6 +642,8 @@

     /**
      *  Specifies the maximum height of the application's window.
+     *
+     *  @default 10000
      *
      *  @langversion 3.0
      *  @playerversion AIR 1.5
@@ -684,6 +689,8 @@

     /**
      *  Specifies the maximum width of the application's window.
+     *
+     *  @default 10000
      *
      *  @langversion 3.0
      *  @playerversion AIR 1.5
@@ -717,6 +724,8 @@

     /**
      *  Specifies the minimum height of the application's window.
+     *
+     *  @default 100
      *
      *  @langversion 3.0
      *  @playerversion AIR 1.5
@@ -762,6 +771,8 @@

     /**
      *  Specifies the minimum width of the application's window.
+     *
+     *  @default 100
      *
      *  @langversion 3.0
      *  @playerversion AIR 1.5
@@ -2011,7 +2022,7 @@
      *  @param window The IWindow (Window or WindowedAplication)
      *  to order this window behind.
      *
-     *  @return true if the window was succesfully sent behind;
+     *  @return true if the window was successfully sent behind;
      *  false if the window is invisible or minimized.
      *
      *  @langversion 3.0
@@ -2034,7 +2045,7 @@
      *  @param window The IWindow (Window or WindowedAplication)
      *  to order this window in front of.
      *
-     *  @return true if the window was succesfully sent in front;
+     *  @return true if the window was successfully sent in front;
      *  false if the window is invisible or minimized.
      *
      *  @langversion 3.0
@@ -2052,7 +2063,7 @@
      /**
       *  Orders the window behind all others in the same application.
       *
-      *  @return true if the window was succesfully sent to the back;
+      *  @return true if the window was successfully sent to the back;
       *  false if the window is invisible or minimized.
       *
       *  @langversion 3.0
@@ -2070,7 +2081,7 @@
  /**
   *  Orders the window in front of all others in the same application.
   *
-  *  @return true if the window was succesfully sent to the front;
+  *  @return true if the window was successfully sent to the front;
   *  false if the window is invisible or minimized.
   *
   *  @langversion 3.0
@@ -2085,7 +2096,7 @@
             return false;
      }

-	//--------------------------------------------------------------------------
+    //--------------------------------------------------------------------------
     //
     // Skin states support
     //
@@ -2101,7 +2112,6 @@
      *  @return A string specifying the name of the state to apply to the skin.
      *
      *  @langversion 3.0
-     *  @playerversion Flash 10
      *  @playerversion AIR 1.5
      *  @productversion Flex 4
      */


Revert "This closes #37"

Revert "This closes #37"

This reverts commit 813fb8eed7fd85fd6a409bb398dbff51bab96124.

--- frameworks/projects/airspark/src/spark/components/WindowedApplication.as
+++ frameworks/projects/airspark/src/spark/components/WindowedApplication.as
@@ -690,7 +690,7 @@
      */
     override public function get maxHeight():Number
     {
-        if (nativeWindow && nativeWindow.maxSize && !maxHeightChanged)
+        if (nativeWindow && !maxHeightChanged)
             return nativeWindow.maxSize.y - chromeHeight();
         else
             return _maxHeight;
@@ -738,7 +738,7 @@
      */
     override public function get maxWidth():Number
     {
-        if (nativeWindow && nativeWindow.maxSize && !maxWidthChanged)
+        if (nativeWindow && !maxWidthChanged)
             return nativeWindow.maxSize.x - chromeWidth();
         else
             return _maxWidth;
@@ -792,7 +792,7 @@
      */
     override public function get minHeight():Number
     {
-        if (nativeWindow && nativeWindow.minSize && !minHeightChanged)
+        if (nativeWindow && !minHeightChanged)
             return nativeWindow.minSize.y - chromeHeight();
         else
             return _minHeight;
@@ -840,7 +840,7 @@
      */
     override public function get minWidth():Number
     {
-        if (nativeWindow && nativeWindow.minSize && !minWidthChanged)
+        if (nativeWindow && !minWidthChanged)
             return nativeWindow.minSize.x - chromeWidth();
         else
             return _minWidth;


FLEX-33058 Testing the behaviour of sealed class instances in ObjectUtil.compare().

--- frameworks/projects/framework/tests/mx/utils/ObjectUtil_Compare_Tests.as
+++ frameworks/projects/framework/tests/mx/utils/ObjectUtil_Compare_Tests.as
@@ -83,6 +83,34 @@
         }

         [Test]
+        public function test_sealed_class_instance_larger_than_anonymous_object_with_same_properties_and_same_values():void
+        {
+            //given
+            var objectA:PersonVO = new PersonVO("John", 23);
+            var objectB:Object = {name:"John", age:23};
+
+            //when
+            var compareResult:int = ObjectUtil.compare(objectA, objectB);
+
+            //then
+            assertEquals(A_LARGER_THAN_B, compareResult);
+        }
+
+        [Test]
+        public function test_sealed_class_instance_larger_than_dynamic_class_instance_with_same_properties_and_same_values():void
+        {
+            //given
+            var objectA:PersonVO = new PersonVO("John", 23);
+            var objectB:DynamicPersonVO = new DynamicPersonVO("John", 23);
+
+            //when
+            var compareResult:int = ObjectUtil.compare(objectA, objectB);
+
+            //then
+            assertEquals(A_LARGER_THAN_B, compareResult);
+        }
+
+        [Test]
         public function test_null_and_undefined_are_seen_equal():void
         {
             //given
@@ -111,3 +139,23 @@
         }
     }
 }
+
+class PersonVO
+{
+    public var name:String;
+    public var age:uint;
+
+    public function PersonVO(name:String, age:uint)
+    {
+        this.name = name;
+        this.age = age;
+    }
+}
+
+dynamic class DynamicPersonVO extends PersonVO
+{
+    public function DynamicPersonVO(name:String, age:uint)
+    {
+        super(name, age);
+    }
+}


Transferred from the Adobe Open Source Subversion Repository

Revision: 22501
Author:   tkraikit@adobe.com
Date:     2011-09-12T18:58:36.127907Z

Log Message:
-----------
Remove trailing period from @default in ASDoc for selectedDate -- was resulting in ".." in ASDoc.

QE notes: none
Doc notes: none
Bugs: none
Reviewer: Jason San Jose
Tests run: ran ant asdoc
Is noteworthy for integration: no

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

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

--- frameworks/projects/mobilecomponents/src/spark/components/DateSpinner.as
+++ frameworks/projects/mobilecomponents/src/spark/components/DateSpinner.as
@@ -611,7 +611,7 @@
      *  DateSpinner. To modify the DateSpinner's date, get and modify the
      *  current selectedDate and then re-set the selectedDate.</p>
      *
-     *  @default Current date when the DateSpinner was instantiated.
+     *  @default Current date when the DateSpinner was instantiated
      *
      *  @langversion 3.0
      *  @playerversion AIR 3


Transferred from the Adobe Open Source Subversion Repository

Revision: 3499
Author:   rfrishbe@adobe.com
Date:     2008-10-06T23:57:04.003486Z

Log Message:
-----------
Code cleanup:

1.  Remove IDisplayObjectElement and IAssignableDisplayObjectElement.  No one was actually using these interfaces...a few classes were implementing them though.

2.  Big ASDoc comment scrub for Group, DataGroup, and GroupBase.  Fixed some ASDoc in LayoutBase, IViewport, and ResizeMode.

3.  Spit and finish on Group.  No more variables or parameters typed as "*".  Got the content APIs in-line with Flash's DisplayObjectContainer, which means exceptions are now thrown where appropriate.

4.  Fixed a bug in DataGround where graphic items with item renderers had trouble in itemRemoved() (SDK-17175)

QE: Yes - Please revamp the excluded test cases to look for the new exceptions.
Doc: Yes
Bugs: SDK-17175
Reviewer: Glenn

Modified Paths:
--------------
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/flex/graphics/TextBox.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/flex/core/DataGroup.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/flex/core/ResizeMode.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/flex/core/GroupBase.as</path>
<path kind="file" action="D">/flex/sdk/trunk/frameworks/projects/flex4/src/flex/graphics/IDisplayObjectElement.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/flex/graphics/TextGraphic.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/flex/core/Group.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/flex/graphics/StrokedElement.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/flex/graphics/graphicsClasses/GraphicElement.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/flex/layout/LayoutBase.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/flex/component/ItemsComponent.as</path>
<path kind="file" action="D">/flex/sdk/trunk/frameworks/projects/flex4/src/flex/graphics/IAssignableDisplayObjectElement.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/flex/intf/IViewport.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/flex/graphics/BitmapGraphic.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/flex/graphics/graphicsClasses/TextGraphicElement.as</path>

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

--- frameworks/projects/spark/src/spark/layouts/supportClasses/LayoutBase.as
+++ frameworks/projects/spark/src/spark/layouts/supportClasses/LayoutBase.as
@@ -83,20 +83,7 @@
     [Inspectable(category="General")]

     /**
-     *  The X coordinate of the origin of the region the target is
-     *  scrolled to.
-     *
-     *  Setting this property causes the target's
-     *  scrollRect to be set, if necessary, to:
-     *

-     *  new Rectangle(horizontalScrollPosition, verticalScrollPosition, width, height)
-     *

-     *  Where width and height are properties
-     *  of the target.
-     *
-     *  @default 0
-     *  @see target
-     *  @see verticalScrollPosition
+     *  @copy flex.intf.IViewport#horizontalScrollPosition
      */
     public function get horizontalScrollPosition():Number
     {
@@ -125,19 +112,7 @@
     [Inspectable(category="General")]

     /**
-     *  The Y coordinate of the origin of the region this Group is
-     *  scrolled to.
-     *
-     *  Setting this property causes the scrollRect to
-     *  be set, if necessary, to:
-     *

-     *  new Rectangle(horizontalScrollPosition, verticalScrollPosition, width, height)
-     *

-     *  Where width and height are properties
-     *  of the target.
-     *
-     *  @default 0
-     *  @see horizontalScrollPosition
+     *  @copy flex.intf.IViewport#verticalScrollPosition
      */
     public function get verticalScrollPosition():Number
     {
@@ -165,17 +140,7 @@
     [Inspectable(category="General")]

     /**
-     *  When scrolling is enabled, clip the target's contents by
-     *  setting its scrollRect.  If this property is set to false,
-     *  then the target's scrollRect will be null, even if its
-     *  scrollPosition is non-zero or its content size is larger
-     *  than its actual size.
-     *
-     *  @default true
-     *  @see target
-     *  @see updateScrollRect
-     *  @see verticalScrollPosition
-     *  @see horizontalScrollPosition
+     *  @copy flex.intf.IViewport#clipContent
      */
     public function get clipContent():Boolean
     {
@@ -204,14 +169,52 @@
     //--------------------------------------------------------------------------

     /**
-     *  Returns the amount one would have to add to the viewport's current
-     *  verticalScrollPosition to scroll by the requested "scrolling" unit.
-     *
-     *  The value of unit must be one of the following flash.ui.Keyboard
-     *  constants: UP, DOWN, PAGE_UP, PAGE_DOWN, HOME, END.
-     *
-     *  To scroll by a single row use UP or DOWN and to scroll to the
-     *  first or last row, use HOME or END.
+     *  @copy flex.intf.IViewport#horizontalScrollPositionDelta
+     */
+    public function horizontalScrollPositionDelta(unit:uint):Number
+    {
+        var g:GroupBase = target;
+        if (!g)
+            return 0;
+
+        var maxIndex:int = g.numLayoutItems -1;
+        if (maxIndex < 0)
+            return 0;
+
+        var scrollR:Rectangle = g.scrollRect;
+        if (!scrollR)
+            return 0;
+
+        var maxDelta:Number = g.contentWidth - scrollR.width - scrollR.x;
+        var minDelta:Number = -scrollR.x;
+
+        switch (unit)
+        {
+            case Keyboard.UP:
+                return (scrollR.x <= 0) ? 0 : -1;
+
+            case Keyboard.DOWN:
+                return (scrollR.x >= maxDelta) ? 0 : 1;
+
+            case Keyboard.PAGE_UP:
+                return Math.max(minDelta, -scrollR.width);
+
+            case Keyboard.PAGE_DOWN:
+                return Math.min(maxDelta, scrollR.width);
+
+            case Keyboard.HOME:
+                return minDelta;
+
+            case Keyboard.END:
+                return maxDelta;
+
+            default:
+                return 0;
+        }
+    }
+
+    /**
+     *  @copy flex.intf.IViewport#verticalScrollPositionDelta
      */
     public function verticalScrollPositionDelta(unit:uint):Number
     {
@@ -254,58 +257,6 @@
                 return 0;
         }
     }
-
-    /**
-     *  Returns the amount one would have to add to the viewport's current
-     *  verticalScrollPosition to scroll by the requested "scrolling" unit.
-     *
-     *  The value of unit must be one of the following flash.ui.Keyboard
-     *  constants: UP, DOWN, PAGE_UP, PAGE_DOWN, HOME, END.
-     *
-     *  To scroll by a single row use UP or DOWN and to scroll to the
-     *  first or last row, use HOME or END.
-     */
-    public function horizontalScrollPositionDelta(unit:uint):Number
-    {
-        var g:GroupBase = target;
-        if (!g)
-            return 0;
-
-        var maxIndex:int = g.numLayoutItems -1;
-        if (maxIndex < 0)
-            return 0;
-
-        var scrollR:Rectangle = g.scrollRect;
-        if (!scrollR)
-            return 0;
-
-        var maxDelta:Number = g.contentWidth - scrollR.width - scrollR.x;
-        var minDelta:Number = -scrollR.x;
-
-        switch (unit)
-        {
-            case Keyboard.UP:
-                return (scrollR.x <= 0) ? 0 : -1;
-
-            case Keyboard.DOWN:
-                return (scrollR.x >= maxDelta) ? 0 : 1;
-
-            case Keyboard.PAGE_UP:
-                return Math.max(minDelta, -scrollR.width);
-
-            case Keyboard.PAGE_DOWN:
-                return Math.min(maxDelta, scrollR.width);
-
-            case Keyboard.HOME:
-                return minDelta;
-
-            case Keyboard.END:
-                return maxDelta;
-
-            default:
-                return 0;
-        }
-    }

     /**
      *  Called when the verticalScrollPosition or horizontalScrollPosition


- fixed a potential exception (which already happened sometimes)

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

--- src/reprise/controls/TextInput.as
+++ src/reprise/controls/TextInput.as
@@ -306,7 +306,7 @@

 		override protected function updateHover(mouseOut : Boolean = false) : void
 		{
-			if (stage.focus == m_labelDisplay)
+			if (!stage || stage.focus == m_labelDisplay)
 			{
 				return;
 			}


Controller created snapshot before executing commands

--- src/ru/whitered/mvc/Controller.as
+++ src/ru/whitered/mvc/Controller.as
@@ -69,12 +69,15 @@
 		 */
 		public function execute(notification:Notification, notificationListener:Function):Boolean
 		{
-			const commandsLength:int = commands.length;
+			const snapshot:Vector.<Command> = commands.concat();
+			const commandsLength:int = snapshot.length;
+
 			var command:Command;
 			var result:Boolean;
+
 			for (var i:int = 0;i < commandsLength; i++)
 			{
-				command = commands[i];
+				command = snapshot[i];
 				command.signalNotification.addListener(notificationListener);
 				result = command.execute(notification);
 				command.signalNotification.removeListener(notificationListener);