Transferred from the Adobe Open Source Subversion Repository

Revision: 5190
Author:   hmuller@adobe.com
Date:     2009-03-06T14:55:28.277220Z

Log Message:
-----------
Initial support for mirroring: added mirror and dir properties to IVisualElement, mirroring logic to UIComponent, GraphicElement, UIMovieClip.  Mirroring in mx.core.SpriteVisualElement is just a stub.  Support for the mirror bit and the mirror transform is in mx.core.AdvancedLayoutFeatures.

QE Notes: Mustella tests pass
Doc Notes: None
Bugs:
Reviewer: Ryan

Modified Paths:
--------------
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/controls/Button.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/core/IVisualElement.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/mx/core/SpriteVisualElement.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/mx/components/baseClasses/FxComponent.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/controls/Label.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flash-integration/src/mx/flash/UIMovieClip.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/mx/graphics/baseClasses/GraphicElement.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/mx/graphics/TextGraphic.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/core/UIComponent.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/mx/components/TextView.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/mx/graphics/baseClasses/TextGraphicElement.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/core/AdvancedLayoutFeatures.as</path>

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

--- frameworks/projects/spark/src/spark/primitives/supportClasses/GraphicElement.as
+++ frameworks/projects/spark/src/spark/primitives/supportClasses/GraphicElement.as
@@ -260,6 +260,44 @@
     //
     //--------------------------------------------------------------------------

+    //----------------------------------
+    //  mirror
+    //----------------------------------
+
+    public function get mirror():Boolean
+    {
+        return layoutFeatures && layoutFeatures.mirror;
+    }
+
+    public function set mirror(value:Boolean):void
+    {
+        if (value == mirror)
+            return;
+
+        if (layoutFeatures == null)
+            allocateLayoutFeatures();
+        layoutFeatures.mirror = value;
+        invalidateTransform();
+    }
+
+    //----------------------------------
+    //  dir
+    //----------------------------------
+
+    private var _dir:String;
+
+    public function get dir():String
+    {
+        return _dir;
+    }
+
+    public function set dir(value:String):void
+    {
+        if (_dir == value)
+            return;
+        _dir = value;
+    }
+
     /**
      *  Defines a set of adjustments that can be applied to the component's transform in a way that is
      *  invisible to the component's parent's layout. For example, if you want a layout to adjust
@@ -299,6 +337,7 @@
         layoutFeatures = new AdvancedLayoutFeatures();
         layoutFeatures.layoutX = _x;
         layoutFeatures.layoutY = _y;
+        layoutFeatures.layoutWidth = _width;
     }

     protected function invalidateTransform(changeInvalidatesLayering:Boolean = true,
@@ -2001,6 +2040,14 @@

         var oldValue:Number = _width;
         _width = value;
+
+        // The width is needed for the mirroring transform.
+        if (layoutFeatures)
+        {
+            layoutFeatures.layoutWidth = value;
+            invalidateTransform();
+        }
+
         dispatchPropertyChangeEvent("width", oldValue, value);

         // Invalidate the display list, since we're changing the actual height
@@ -3558,6 +3605,9 @@
             _width = width;
             _height = height;

+            if (layoutFeatures)
+                layoutFeatures.layoutWidth = width;
+
             dispatchPropertyChangeEvent("width", oldWidth, width);
             dispatchPropertyChangeEvent("height", oldHeight, height);


Transferred from the Adobe Open Source Subversion Repository

Revision: 3582
Author:   egreenfi@adobe.com
Date:     2008-10-11T00:13:59.101068Z

Log Message:
-----------
FxRotate3D effect now no longer uses the component's transform point to rotate, but rather adjusts x/y to simulate rotation around its transform center.  It does so using a new transformAround() method added to ITransformable (including implemetnations by UICompoennt, GraphicElement, and CompoundTransform)

REview: Chet
QA: shouldn't affect any existing test cases
Checkintests: passed

Modified Paths:
--------------
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/mx/effects/effectClasses/FxAnimateInstance.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/geom/ITransformable.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/mx/effects/effectClasses/FxAnimate3DInstance.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/mx/effects/effectClasses/FxRotate3DInstance.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/geom/CompoundTransform.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/core/UIComponent.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/mx/graphics/graphicsClasses/GraphicElement.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/core/AdvancedLayoutFeatures.as</path>

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

--- frameworks/projects/spark/src/spark/primitives/supportClasses/GraphicElement.as
+++ frameworks/projects/spark/src/spark/primitives/supportClasses/GraphicElement.as
@@ -1458,6 +1458,12 @@
 	{
 		return layoutFeatures.layoutMatrix3D;
 	}
+
+	public function transformAround(rx:Number,ry:Number,rz:Number,sx:Number,sy:Number,sz:Number,tx:Number,ty:Number,tz:Number):void
+	{
+		layoutFeatures.transformAround(rx,ry,rz,sx,sy,sz,tx,ty,tz,true);
+		invalidateTransform();
+	}

     //----------------------------------
     //  transformX


compiler tries to call length:SFloat insted of length method

--- src/aerys/minko/render/shader/part/projection/ParaboloidProjectionShaderPart.as
+++ src/aerys/minko/render/shader/part/projection/ParaboloidProjectionShaderPart.as
@@ -32,12 +32,12 @@
 			if (!_front)
 				vector = multiply(vector, float3(1, 1, -1));

-			var length : SFloat = length(vector);
+			var vectorLength : SFloat = length(vector);

-			vector = divide(vector, length);
+			vector = divide(vector, vectorLength);
 			vector = float3(
 				transform2DCoordinates(divide(vector.xy, add(vector.z, 1)), CLIPSPACE_RECTANGLE, target),
-				divide(subtract(length, zNear), zFar - zNear)
+				divide(subtract(vectorLength, zNear), zFar - zNear)
 			);

 			return vector;


Transferred from the Adobe Open Source Subversion Repository

Revision: 15021
Author:   smgilson@adobe.com
Date:     2010-03-25T14:35:43.815117Z

Log Message:
-----------
merge 15020: update ASDoc for execute() to use FaultEvent instead of ErrorMessage in the fault handler

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

Modified Paths:
--------------
/flex/sdk/trunk/frameworks/projects/datavisualization/src/mx/olap/IOLAPCube.as

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


Transferred from the Adobe Open Source Subversion Repository

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

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

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

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

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

 package spark.components
 {


Transferred from the Adobe Open Source Subversion Repository

Revision: 17165
Author:   cframpto@adobe.com
Date:     2010-08-03T14:10:22.792682Z

Log Message:
-----------
Fix pile of bugs.

- ASdoc is not happy if there is a private variable/getter and a mx_internal variable/getter with the same name in the same class because of bug ASC-4110.  Fix instances of this in UICompoments and Grid.
- SDK-27169. Update the metadata for DG selectionMode.
- SDK-26840.  Turn off the column resize icon until the resize functionality is implemented.
- SDK-26548.  When TI is disabled, also disable RET.
- SDK-26858.  Fix off-by-1 bug in RET.adjustContentBoundsForScroller().  Comment in header was correct, code was not.
- SDK-26951 - For cell mode, preserve selection when REFRESH collection change event.  There is the restriction that if the collection if filtered, the preservedSelection becomes whatever is selected in the filtered collection.  If the filter is then removed, the original selection is not preserved.

QE notes: see restriction on SDK-26951 above
Doc notes:
Bugs: SDK-27169, SDK-26840, SDK-26548, SDK-26868, SDK-26951
Reviewer: Hans
Tests run: checkintests
Is noteworthy for integration: no

Modified Paths:
--------------
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/framework/src/mx/core/UIComponent.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/spark/src/spark/components/RichEditableText.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/spark/src/spark/components/Grid.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/spark/src/spark/components/ColumnHeaderBar.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/spark/src/spark/components/DataGrid.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/spark/src/spark/components/supportClasses/SkinnableTextBase.as</path>

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

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

     [Bindable("selectionModeChanged")]
-    [Inspectable(category="General", enumeration="none,row,multipleRows,cell,multipleCells", defaultValue="row")]
+    [Inspectable(category="General", enumeration="none,singleRow,multipleRows,singleCell,multipleCells", defaultValue="singleRow")]

     /**
      *  @copy spark.components.Grid#selectionMode
@@ -863,27 +863,30 @@
             }
             else
             {
-                if (isRowSelectionMode())
+                if (grid.caretRowIndex != -1)
                 {
-                    // Add the row and leave the caret position unchanged.
-                    if (!commitInteractiveSelection(
-                        GridSelectionEventKind.ADD_ROW,
-                        grid.caretRowIndex, grid.caretColumnIndex))
+                    if (isRowSelectionMode())
                     {
-                        return;
+                        // Add the row and leave the caret position unchanged.
+                        if (!commitInteractiveSelection(
+                            GridSelectionEventKind.ADD_ROW,
+                            grid.caretRowIndex, grid.caretColumnIndex))
+                        {
+                            return;
+                        }
+                        event.preventDefault();
                     }
-                    event.preventDefault();
-                }
-                else if (isCellSelectionMode())
-                {
-                    // Add the cell and leave the caret position unchanged.
-                    if (!commitInteractiveSelection(
-                        GridSelectionEventKind.ADD_CELL,
-                        grid.caretRowIndex, grid.caretColumnIndex))
+                    else if (isCellSelectionMode() && grid.caretColumnIndex != -1)
                     {
-                        return;
+                        // Add the cell and leave the caret position unchanged.
+                        if (!commitInteractiveSelection(
+                            GridSelectionEventKind.ADD_CELL,
+                            grid.caretRowIndex, grid.caretColumnIndex))
+                        {
+                            return;
+                        }
+                        event.preventDefault();
                     }
-                    event.preventDefault();
                 }
             }
             return;


Transferred from the Adobe Open Source Subversion Repository

Revision: 16660
Author:   jszeto@adobe.com
Date:     2010-06-24T20:12:04.486901Z

Log Message:
-----------
Form Bug Fixes

SDK-26760 - Spark FormItem skin should use new Spark Image instead of MX image

Changed to use Spark Image

SDK-26711 - Spark BitmapImage isnt positioned correctly when used within s:FormItem container

GraphicElements now use its parent's font context to calculate the baselinePosition

SDK-26698 - Spark FormItem should support dynamically loaded icons for requiredIndicatorSource and errorIndicatorSource

Relaxed the type of the source styles from Class to Object

SDK-26697 - Cannot reset Spark Form to original state if form had validation errors

Changed from listening to VALID/INVALID to listening for errorString changes

QE notes: None
Doc notes: None
Bugs: SDK-26760, SDK-26711, SDK-26698, SDK-26697
Reviewer: Kevin
Tests run: checkintests, cyclone assist
Is noteworthy for integration: no

Modified Paths:
--------------
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/spark/src/spark/primitives/supportClasses/GraphicElement.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/spark/src/spark/components/FormItem.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/spark/src/spark/skins/spark/StackedFormItemSkin.mxml</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/spark/src/spark/skins/spark/FormItemSkin.mxml</path>

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

--- frameworks/projects/spark/src/spark/components/FormItem.as
+++ frameworks/projects/spark/src/spark/components/FormItem.as
@@ -39,7 +39,7 @@
  *  @playerversion AIR 1.5
  *  @productversion Flex 4.5
  */
-[Style(name="requiredIndicatorSource", type="Class", inherit="no")]
+[Style(name="requiredIndicatorSource", type="Object", inherit="no")]

 /**
  *  Specifies the image source to use for the required indicator.
@@ -51,7 +51,7 @@
  *  @playerversion AIR 1.5
  *  @productversion Flex 4.5
  */
-[Style(name="errorIndicatorSource", type="Class", inherit="no")]
+[Style(name="errorIndicatorSource", type="Object", inherit="no")]

 /**
@@ -349,8 +349,7 @@
         }
         else if (instance == contentGroup)
         {
-            contentGroup.addEventListener(FlexEvent.VALID, contentGroup_validHandler, true);
-            contentGroup.addEventListener(FlexEvent.INVALID, contentGroup_invalidHandler, true);
+            contentGroup.addEventListener("errorStringChanged", contentGroup_errorStringdHandler, true);
         }
     }

@@ -362,6 +361,8 @@
         // by a different skin's helpContentGroup
         if (instance == helpContentGroup)
             helpContentGroup.removeAllElements();
+        if (instance == contentGroup)
+            contentGroup.removeEventListener("errorStringChanged", contentGroup_errorStringdHandler, true);
     }

     //--------------------------------------------------------------------------
@@ -444,25 +445,13 @@
     //  Event Handlers
     //
     //--------------------------------------------------------------------------
-
-    /**
-     *  @private
-     */
-    private function contentGroup_validHandler(event:FlexEvent):void
-    {
-        // update error string
+    /**
+     *  @private
+     */
+    private function contentGroup_errorStringdHandler(event:Event):void
+    {
         updateErrorString();
     }
-
-    /**
-     *  @private
-     */
-    private function contentGroup_invalidHandler(event:FlexEvent):void
-    {
-        // update error string
-        updateErrorString();
-    }
-

 }


Transferred from the Adobe Open Source Subversion Repository

Revision: 14869
Author:   cframpto@adobe.com
Date:     2010-03-19T02:24:27.434644Z

Log Message:
-----------
Merge mirroring changes 14728-14730, 14772-14775, 14806 from 4.x to trunk.

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

Modified Paths:
--------------
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/controls/MenuBar.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/spark/src/spark/components/HSlider.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/controls/HScrollBar.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/spark/src/mx/core/UIFTETextField.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/spark/src/spark/components/PopUpAnchor.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flash-integration/src/mx/flash/UIMovieClip.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/airspark/src/spark/components/WindowedApplication.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/spark/defaults.css</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/controls/Menu.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/spark/src/spark/skins/spark/CheckBoxSkin.mxml</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/controls/ComboBox.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/spark/src/spark/components/VSlider.as</path>
<path kind="dir" action="M">/flex/sdk/trunk</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/core/UITextField.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/controls/ColorPicker.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/defaults.css</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/controls/DateField.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/controls/sliderClasses/Slider.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/sparkskins/src/mx/skins/spark/CheckBoxSkin.mxml</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/core/UIComponent.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/airframework/src/mx/core/WindowedApplication.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/spark/src/spark/components/Scroller.as</path>

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

--- frameworks/projects/spark/src/spark/components/Scroller.as
+++ frameworks/projects/spark/src/spark/components/Scroller.as
@@ -27,6 +27,7 @@
 import spark.core.NavigationUnit;
 import mx.core.IVisualElement;
 import mx.core.IVisualElementContainer;
+import mx.core.LayoutDirection;
 import mx.core.ScrollPolicy;
 import mx.events.PropertyChangeEvent;
 import mx.managers.IFocusManagerComponent;
@@ -929,12 +930,12 @@
             switch (event.keyCode)
             {
                 case Keyboard.LEFT:
-                    hspDelta = (layoutDirection == "ltr") ?
+                    hspDelta = (layoutDirection == LayoutDirection.LTR) ?
                         vp.getHorizontalScrollPositionDelta(NavigationUnit.LEFT) :
                         vp.getHorizontalScrollPositionDelta(NavigationUnit.RIGHT);
                     break;
                 case Keyboard.RIGHT:
-                    hspDelta = (layoutDirection == "ltr") ?
+                    hspDelta = (layoutDirection == LayoutDirection.LTR) ?
                         vp.getHorizontalScrollPositionDelta(NavigationUnit.RIGHT) :
                         vp.getHorizontalScrollPositionDelta(NavigationUnit.LEFT);
                     break;
@@ -949,7 +950,7 @@
                 case Keyboard.PAGE_UP:
                      if (!verticalScrollBar || !(verticalScrollBar.visible))
                      {
-                         hspDelta = (layoutDirection == "ltr") ?
+                         hspDelta = (LayoutDirection.LTR) ?
                              vp.getHorizontalScrollPositionDelta(NavigationUnit.LEFT) :
                              vp.getHorizontalScrollPositionDelta(NavigationUnit.RIGHT);
                      }
@@ -957,7 +958,7 @@
                 case Keyboard.PAGE_DOWN:
                      if (!verticalScrollBar || !(verticalScrollBar.visible))
                      {
-                         hspDelta = (layoutDirection == "ltr") ?
+                         hspDelta = (LayoutDirection.LTR) ?
                              vp.getHorizontalScrollPositionDelta(NavigationUnit.RIGHT) :
                              vp.getHorizontalScrollPositionDelta(NavigationUnit.LEFT);
                      }


Transferred from the Adobe Open Source Subversion Repository

Revision: 5545
Author:   jimurphy@adobe.com
Date:     2009-03-25T19:00:52.330680Z

Log Message:
-----------
1st pass of rename according to the spec http://opensource.adobe.com/wiki/display/flexsdk/Dropping+the+Fx+Prefix

Flex now requires CSS Style declarations to declare @namespace rules and disambiguate between halo and spark components using CSS 3 namespace prefixes on type selectors. At compile time, this namespace information will be used to map type names to qualified ActionScript class names. At runtime, type selectors are matched on qualified ActionScript class name (for example mx.controls.Button rather than just Button). Flex 3 applications must be compiled with -compatibility-version=3.0.0 to get unqualified CSS type selector behavior.

QE: Yes, this build may help in updating test cases to use the new namespaces and class names.
Dev: Not yet
Doc: Not yet

Modified Paths:
--------------
748 paths were modified

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

--- frameworks/projects/spark/src/spark/components/TextArea.as
+++ frameworks/projects/spark/src/spark/components/TextArea.as
@@ -9,15 +9,15 @@
 //
 ////////////////////////////////////////////////////////////////////////////////

-package mx.components
+package spark.components
 {

 import flash.events.Event;

-import mx.components.baseClasses.FxTextBase;
+import spark.components.supportClasses.TextBase;
 import mx.core.mx_internal;
 import mx.core.ScrollPolicy;
-import mx.events.TextOperationEvent;
+import spark.events.TextOperationEvent;

 //--------------------------------------
 //  Other metadata
@@ -35,7 +35,7 @@

 [DefaultProperty("content")]

-[IconFile("FxTextArea.png")]
+[IconFile("TextArea.png")]

 /**
  *  Normal State
@@ -60,14 +60,14 @@
 /**
  *  Documentation is not currently available.
  *
- *  @includeExample examples/FxTextAreaExample.mxml
+ *  @includeExample examples/TextAreaExample.mxml
  *
  *  @langversion 3.0
  *  @playerversion Flash 10
  *  @playerversion AIR 1.5
  *  @productversion Flex 4
  */
-public class FxTextArea extends FxTextBase
+public class TextArea extends TextBase
 {
     include "../core/Version.as";

@@ -85,7 +85,7 @@
      *  @playerversion AIR 1.5
      *  @productversion Flex 4
      */
-	public function FxTextArea()
+	public function TextArea()
 	{
 		super();
 	}
@@ -293,14 +293,14 @@
     [SkinPart(required="false")]

     /**
-     *  The optional FxScroller used to scroll the TextView.
+     *  The optional Scroller used to scroll the RichEditableText.
      *
      *  @langversion 3.0
      *  @playerversion Flash 10
      *  @playerversion AIR 1.5
      *  @productversion Flex 4
      */
-    public var scroller:FxScroller;
+    public var scroller:Scroller;

 	//----------------------------------
 	//  verticalScrollPolicy
@@ -398,7 +398,7 @@

 	/**
 	 *  @private
-	 *  Pushes various TextInput properties down into the TextView.
+	 *  Pushes various TextInput properties down into the RichEditableText.
 	 */
     override protected function commitProperties():void
 	{
@@ -446,12 +446,12 @@

 		if (instance == textView)
 		{
-			// Set the TextView to allow multiple lines of input.
-			// In default.css, the FxTextArea selector has a declaration
+			// Set the RichEditableText to allow multiple lines of input.
+			// In default.css, the TextArea selector has a declaration
 			// for lineBreak which sets it to "toFit".  It needs to be on
-			// FxTextArea rather than TextView so that if changed later it
+			// TextArea rather than RichEditableText so that if changed later it
 			// will be inherited.  It needs to be set with the default
-			// before the possibility that it is changed when FxTextArea is
+			// before the possibility that it is changed when TextArea is
 			// created.  In this case, setting it here, would overwrite
 			// that change.
 			textView.heightInLines = 10;
@@ -525,7 +525,7 @@

 	//--------------------------------------------------------------------------
     //
-    //  Overridden event handlers: FxTextBase
+    //  Overridden event handlers: TextBase
     //
     //--------------------------------------------------------------------------

@@ -538,14 +538,14 @@
 		// Note: We don't call the superhandler here
         // because it immediately fetches textView.text
         // to extract the text from the TextFlow.
-        // That's too expensive for an FxTextArea,
+        // That's too expensive for an TextArea,
         // which might have a lot of leaf nodes.

         // Update our storage variable for the content.
 		_content = textView.content;
         textInvalid = true;

-		// Redispatch the event that came from the TextView.
+		// Redispatch the event that came from the RichEditableText.
 		dispatchEvent(event);
 	}


Улучьшения

Улучьшения

--- csi/flash/src/main/actionscript/org/shypl/biser/csi/client/Client.as
+++ csi/flash/src/main/actionscript/org/shypl/biser/csi/client/Client.as
@@ -104,7 +104,7 @@
 		}

 		internal function processDisconnectWarning(timeout:int):void {
-			_logger.info("warning to disconnect after {} seconds", timeout);
+			_logger.info("Waiting to disconnect after {} seconds", timeout);
 			dispatchEvent(new ClientDisconnectWarningEvent(timeout));
 		}
 	}


Changed the inference text in order to make all functions work.

--- unittests/TestDisjunctiveSyllogism.as
+++ unittests/TestDisjunctiveSyllogism.as
@@ -23,8 +23,8 @@
 			* Reason 2
 			*/
 			//DisjunctiveSyllogism(claimText:String, reasonText:Array, reversePos:Boolean,inferenceText:String="", inferencePresent:Boolean=false)
-			djsReverse = new DisjunctiveSyllogism("Basic Claim", ["Reason 1", "Reason 2"], true, "Either Foo or Bar, and Baz", false);
-			djs = new DisjunctiveSyllogism("Basic Claim", ["Reason 1", "Reason 2"], false, "Either Foo or Bar, and Baz", false);
+			djsReverse = new DisjunctiveSyllogism("Basic Claim", ["Reason 1", "Reason 2"], true, "Either Foo or Bar, and Baz unless Quux", false);
+			djs = new DisjunctiveSyllogism("Basic Claim", ["Reason 1", "Reason 2"], false, "Either Foo or Bar, and Baz unless Quux", false);
 		}

 		[After]
@@ -55,7 +55,7 @@
 		[Test(order=1)]
 		public function testNotPTrue():void{
 			djs.notP(true);
-			trace("Printing all reasons in NotPTrue");
+			trace("~~ Printing all reasons in NotPTrue");
 			for each (var reason:String in djs.getReason()){
 				trace(reason);
 			}


fix an asdoc error

fix an asdoc error

--- frameworks/as/projects/FlexJSJX/src/org/apache/flex/effects/Tween.as
+++ frameworks/as/projects/FlexJSJX/src/org/apache/flex/effects/Tween.as
@@ -35,7 +35,7 @@
  *  Zoom effects; a change in visibility, as performed by the Fade or
  *  Dissolve effects; or other types of animations.
  *
- *  A Tween instance accepts the startValue,
+ *
A Tween instance accepts the startValue,
  *  endValue, and duration properties,
  *  and an optional easing function to define the animation.

  *


Transferred from the Adobe Open Source Subversion Repository

Revision: 12836
Author:   feiwang@adobe.com
Date:     2009-12-11T05:37:44.065569Z

Log Message:
-----------
bug fixing for SDK-24541.

Modified Paths:
--------------
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/bundles/zh_TW/formatters.properties</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/bundles/nb_NO/formatters.properties</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/bundles/ru_RU/formatters.properties</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/bundles/fr_FR/formatters.properties</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/bundles/es_ES/formatters.properties</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/bundles/de_DE/formatters.properties</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/bundles/zh_CN/formatters.properties</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/bundles/nl_NL/formatters.properties</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/bundles/da_DK/formatters.properties</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/formatters/NumberFormatter.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/bundles/ko_KR/formatters.properties</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/bundles/pt_BR/formatters.properties</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/bundles/it_IT/formatters.properties</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/bundles/en_US/formatters.properties</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/bundles/fi_FI/formatters.properties</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/bundles/sv_SE/formatters.properties</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/bundles/ja_JP/formatters.properties</path>

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

--- frameworks/projects/framework/src/mx/formatters/CurrencyFormatter.as
+++ frameworks/projects/framework/src/mx/formatters/CurrencyFormatter.as
@@ -528,7 +528,7 @@
 		_useNegativeSign = value != null ?
 						   Boolean(value) :
 						   resourceManager.getBoolean(
-						       "formatters", "useNegativeSign");
+						       "formatters", "useNegativeSignInCurrency");
 	}

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


Transferred from the Adobe Open Source Subversion Repository

Revision: 11995
Author:   doug.lee@ssbbartgroup.com
Date:     2009-11-19T18:50:30.831767Z

Log Message:
-----------
Updated all AccImpls that use MSAA constants (except TextLayout) to
use the new AccConst references instead of hard-coding hex numbers and
local copies of the constants.

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

Modified Paths:
--------------
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/accessibility/ListAccImpl.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/accessibility/ColorPickerAccImpl.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/spark/src/spark/accessibility/PanelAccImpl.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/accessibility/LabelAccImpl.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/accessibility/DataGridAccImpl.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/accessibility/SliderAccImpl.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/spark/src/spark/accessibility/TextInputAccImpl.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/accessibility/CheckBoxAccImpl.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/accessibility/ComboBaseAccImpl.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/accessibility/TabBarAccImpl.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/airframework/src/spark/accessibility/WindowedApplicationAccImpl.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/spark/src/spark/accessibility/SpinnerAccImpl.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/spark/src/spark/accessibility/TextBaseAccImpl.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/accessibility/PanelAccImpl.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/spark/src/spark/accessibility/SliderAccImpl.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/spark/src/spark/accessibility/DropDownListBaseAccImpl.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/spark/src/spark/accessibility/RichEditableTextAccImpl.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/spark/src/spark/accessibility/CheckBoxAccImpl.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/accessibility/ListBaseAccImpl.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/accessibility/AlertAccImpl.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/spark/src/spark/accessibility/RadioButtonAccImpl.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/accessibility/AccordionHeaderAccImpl.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/accessibility/ButtonAccImpl.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/spark/src/spark/accessibility/ButtonBarAccImpl.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/accessibility/DateFieldAccImpl.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/spark/src/spark/accessibility/NumericStepperAccImpl.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/spark/src/spark/accessibility/SkinnableTextBaseAccImpl.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/spark/src/spark/accessibility/ListBaseAccImpl.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/spark/src/spark/accessibility/ComboBoxAccImpl.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/framework/src/mx/accessibility/LinkButtonAccImpl.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/accessibility/MenuBarAccImpl.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/spark/src/spark/accessibility/ButtonAccImpl.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/accessibility/RadioButtonAccImpl.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/spark/src/spark/accessibility/ToggleButtonAccImpl.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/accessibility/TreeAccImpl.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/airframework/src/spark/accessibility/WindowAccImpl.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/accessibility/DateChooserAccImpl.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/spark/src/spark/accessibility/VideoPlayerAccImpl.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/accessibility/MenuAccImpl.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/accessibility/TitleWindowAccImpl.as</path>

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

--- frameworks/projects/spark/src/spark/accessibility/CheckBoxAccImpl.as
+++ frameworks/projects/spark/src/spark/accessibility/CheckBoxAccImpl.as
@@ -12,6 +12,7 @@
 package spark.accessibility
 {

+import mx.accessibility.AccConst;
 import mx.core.UIComponent;
 import mx.core.mx_internal;

@@ -32,17 +33,6 @@
 public class CheckBoxAccImpl extends ButtonAccImpl
 {
     include "../core/Version.as";
-
-    //--------------------------------------------------------------------------
-    //
-    //  Class constants
-    //
-    //--------------------------------------------------------------------------
-
-    /**
-     *  @private
-     */
-    private static const STATE_SYSTEM_CHECKED:uint = 0x00000010;

     //--------------------------------------------------------------------------
     //
@@ -104,7 +94,7 @@
     {
         super(master);

-        role = 0x2C; // ROLE_SYSTEM_CHECKBUTTON
+        role = AccConst.ROLE_SYSTEM_CHECKBUTTON;
     }

     //--------------------------------------------------------------------------
@@ -130,7 +120,7 @@
         var accState:uint = getState(childID);

         if (ToggleButtonBase(master).selected)
-            accState |= STATE_SYSTEM_CHECKED;
+            accState |= AccConst.STATE_SYSTEM_CHECKED;

         return accState;
     }


Transferred from the Adobe Open Source Subversion Repository

Revision: 12850
Author:   jimurphy@adobe.com
Date:     2009-12-11T14:57:14.623098Z

Log Message:
-----------
add 6 new DMV projects to the SDK:
automation
automation_air
automation_dmv
automation_flashflexkit
automation_spark
datavisualization

These projects are setup to build in an ant main call.  There are currently several warnings in the datavisualization project that will be cleaned up.  No checkintests exist for these projects as of yet.

I also modified the exisitng projects build files for easier management of the localization targets, bundle and fat-swc. If the projects that I updated:airframework,airspark,framework,playerglobal,rpc,and spark.  All the new projects have been implemented this same way.

QE notes: DMV folks should run through their tests
Doc notes: probably
Bugs: nope
Reviewer:
Tests run: ran the following targets: compile,checkintests,other.locales and doc
Is noteworthy for integration: no

Modified Paths:
--------------
1404 paths were modified

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

--- frameworks/projects/advancedgrids/src/mx/collections/GroupingCollection.as
+++ frameworks/projects/advancedgrids/src/mx/collections/GroupingCollection.as
@@ -0,0 +1,1736 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  ADOBE SYSTEMS INCORPORATED
+//  Copyright 2009 Adobe Systems Incorporated
+//  All Rights Reserved.
+//
+//  NOTICE: Adobe permits you to use, modify, and distribute this file
+//  in accordance with the terms of the license agreement accompanying it.
+//
+////////////////////////////////////////////////////////////////////////////////
+
+package mx.collections
+{
+
+import flash.events.TimerEvent;
+import flash.utils.Dictionary;
+import flash.utils.Timer;
+import flash.xml.XMLNode;
+
+import mx.collections.errors.ItemPendingError;
+import mx.core.mx_internal;
+import mx.events.CollectionEvent;
+import mx.events.CollectionEventKind;
+import mx.utils.UIDUtil;
+
+use namespace mx_internal;
+
+//--------------------------------------
+//  Other metadata
+//--------------------------------------
+
+[DefaultProperty("grouping")]
+
+/**
+ *  The GroupingCollection class lets you create grouped data from flat data
+ *  for display in the AdvancedDataGrid control.
+ *  When you create the instance of the GroupingCollection from your flat data,
+ *  you specify the field or fields of the data used to create the hierarchy.
+ *
+ *
To populate the AdvancedDataGrid control with grouped data,
+ *  you create an instance of the GroupingCollection class from your flat data,
+ *  and then pass that GroupingCollection instance to the data provider
+ *  of the AdvancedDataGrid control.
+ *  To specify the grouping fields of your flat data,
+ *  you pass a Grouping instance to
+ *  the GroupingCollection.grouping property.
+ *  The Grouping instance contains an Array of GroupingField instances,
+ *  one per grouping field.

+ *
+ *
The following example uses the GroupingCollection class to define
+ *  two grouping fields: Region and Territory.

+ *
+ *

+ *  <mx:AdvancedDataGrid id="myADG"
+ *    <mx:dataProvider>
+ *      <mx:GroupingCollection id="gc" source="{dpFlat}">
+ *        <mx:grouping>
+ *          <mx:Grouping>
+ *            <mx:GroupingField name="Region"/>
+ *            <mx:GroupingField name="Territory"/>
+ *          </mx:Grouping>
+ *        </mx:grouping>
+ *      </mx:GroupingCollection>
+ *    </mx:dataProvider>
+ *
+ *    <mx:columns>
+ *      <mx:AdvancedDataGridColumn dataField="Region"/>
+ *      <mx:AdvancedDataGridColumn dataField="Territory"/>
+ *      <mx:AdvancedDataGridColumn dataField="Territory_Rep"/>
+ *      <mx:AdvancedDataGridColumn dataField="Actual"/>
+ *      <mx:AdvancedDataGridColumn dataField="Estimate"/>
+ *    </mx:columns>
+ *  </mx:AdvancedDataGrid>
+ *

+ *
+ *  @mxml
+ *
+ *  The <mx.GroupingCollection> inherits all the tag attributes of its superclass,
+ *  and defines the following tag attributes:

+ *
+ *

+ *  <mx:GroupingCollection
+ *  Properties
+ *    grouping="No default"
+ *    source="No default"
+ *    summaries="No default"
+ *  />
+ *

+ *
+ *
This Class has been deprecated and replaced by a new Class
+ *  GroupingCollection2 which provide faster,
+ *  improved performance and a new summary calculation mechanism.
+ *  Class SummaryField has also been deprecated and
+ *  replaced by a new Class SummaryField2.
+ *  Properties operation and summaryFunction are
+ *  not present in the Class SummaryField2.
+ *  A new property summaryOperation is introduced in
+ *  SummaryField2.

+ *
+ *  @see mx.controls.AdvancedDataGrid
+ *  @see mx.collections.Grouping
+ *  @see mx.collections.GroupingField
+ *
+ *  @langversion 3.0
+ *  @playerversion Flash 9
+ *  @playerversion AIR 1.1
+ *  @productversion Flex 3
+ */
+[Deprecated(replacement="GroupingCollection2", since="4.0")]
+
+public class GroupingCollection extends HierarchicalData implements IGroupingCollection
+{
+    include "../core/Version.as";
+
+    //--------------------------------------------------------------------------
+    //
+    //  Constructor
+    //
+    //--------------------------------------------------------------------------
+
+    /**
+     *  Constructor.
+     *
+     *  @langversion 3.0
+     *  @playerversion Flash 9
+     *  @playerversion AIR 1.1
+     *  @productversion Flex 3
+     */
+    public function GroupingCollection()
+    {
+        super();
+
+        newCollection = new ArrayCollection();
+        super.source = newCollection;
+
+        objectSummaryMap = new Dictionary(false);
+
+        parentMap = {};
+    }
+
+    //--------------------------------------------------------------------------
+    //
+    //  Variables
+    //
+    //--------------------------------------------------------------------------
+
+    /**
+     *  @private
+     *
+     *  denotes if the refresh is asynchronous.
+     */
+    private var async:Boolean = false;
+
+    /**
+     *  @private
+     */
+    private var newCollection:ArrayCollection;
+
+    /**
+     *  @private
+     */
+    private var _sourceCol:ICollectionView;
+
+    /**
+     *  @private
+     *
+     *  the object summary map.
+     *  keeps summaries corresponding to different objects
+     */
+    private var objectSummaryMap:Dictionary;
+
+    /**
+     *  @private
+     *
+     *  the original sort applied to the source collection
+     */
+    private var oldSort:Sort;
+
+    /**
+     *  @private
+     */
+    private var prepared:Boolean = false;
+
+    /**
+     *  @private
+     */
+    private var flatView:ICollectionView;
+
+    /**
+     *  @private
+     */
+    private var flatCursor:IViewCursor;
+
+    /**
+     *  @private
+     */
+    private var hView:ICollectionView;
+
+    /**
+     *  @private
+     */
+    private var treeCursor:IViewCursor;
+
+    /**
+     *  @private
+     */
+    private var currentPosition:CursorBookmark = CursorBookmark.FIRST;
+
+    /**
+     *  @private
+     */
+    private var gf:Array;
+
+    /**
+     *  @private
+     */
+    private var fieldCount:int;
+
+    /**
+     *  @private
+     *
+     *  contains current data being compared
+     */
+    private var currentData:Object;
+
+    /**
+     *  @private
+     *
+     *  contains current group objects for different group fields
+     */
+    private var currentGroups:Array;
+
+    /**
+     *  @private
+     *
+     *  contains current group labels for different group fields
+     */
+    private var currentGroupLabels:Array;
+
+    /**
+     *  @private
+     *
+     *  contains next index for different group fields
+     */
+    private var currentIndices:Array;
+
+    /**
+     *  @private
+     *
+     *  item index
+     */
+    private var itemIndex:int;
+
+    /**
+     *  @private
+     *
+     *  the children array for the group
+     */
+    private var childrenArray:Array;
+
+    /**
+     *  @private
+     */
+    private var summaryPresent:Boolean;
+
+    /**
+     *  @private
+     */
+    mx_internal var optimizeSummaries:Boolean = false;
+
+    /**
+     *  The timer which is associated with an asynchronous refresh operation.
+     *  You can use it to change the timing interval, pause the refresh,
+     *  or perform other actions.
+     *
+     *  The default value for the delay property of the
+     *  Timer instance is 1, corresponding to 1 millisecond.
+     *
+     *
+     *  @langversion 3.0
+     *  @playerversion Flash 9
+     *  @playerversion AIR 1.1
+     *  @productversion Flex 3
+     */
+    protected var timer:Timer;
+
+    /**
+     *  @private
+     *  Mapping of UID to parents.  Must be maintained as things get removed/added
+     *  This map is created as objects are visited
+     */
+    protected var parentMap:Object;
+
+    //--------------------------------------------------------------------------
+    //
+    //  Properties
+    //
+    //--------------------------------------------------------------------------
+
+    //----------------------------------
+    // grouping
+    //----------------------------------
+
+    private var _grouping:Grouping;
+
+    /**
+     *  Specifies the Grouping instance applied to the source data.
+     *  Setting the grouping property
+     *  does not automatically refresh the view,
+     *  so you must call the refresh() method
+     *  after setting this property.
+     *
+     *  @see mx.collections.GroupingCollection#refresh()
+     *
+     *  @langversion 3.0
+     *  @playerversion Flash 9
+     *  @playerversion AIR 1.1
+     *  @productversion Flex 3
+     */
+    public function get grouping():Grouping
+    {
+        return _grouping;
+    }
+
+    /**
+     *  @private
+     */
+    public function set grouping(value:Grouping):void
+    {
+        _grouping = value;
+    }
+
+    //----------------------------------
+    // summaries
+    //----------------------------------
+
+    /**
+     *  Array of SummaryRow instances that define any root-level data summaries.
+     *  Specify one or more SummaryRow instances to define the data summaries,
+     *  as the following example shows:
+     *
+     *

+     *  <mx:AdvancedDataGrid id="myADG"
+     *     width="100%" height="100%"
+     *     initialize="gc.refresh();">
+     *     <mx:dataProvider>
+     *         <mx:GroupingCollection id="gc" source="{dpFlat}">
+     *             <mx:summaries>
+     *                 <mx:SummaryRow summaryPlacement="last">
+     *                     <mx:fields>
+     *                         <mx:SummaryField dataField="Actual"
+     *                             label="Min Actual" operation="MIN"/>
+     *                         <mx:SummaryField dataField="Actual"
+     *                             label="Max Actual" operation="MAX"/>
+     *                     </mx:fields>
+     *                   </mx:SummaryRow>
+     *                 </mx:summaries>
+     *             <mx:Grouping>
+     *                 <mx:GroupingField name="Region"/>
+     *                 <mx:GroupingField name="Territory"/>
+     *             </mx:Grouping>
+     *         </mx:GroupingCollection>
+     *     </mx:dataProvider>
+     *
+     *     <mx:columns>
+     *         <mx:AdvancedDataGridColumn dataField="Region"/>
+     *         <mx:AdvancedDataGridColumn dataField="Territory_Rep"
+     *             headerText="Territory Rep"/>
+     *         <mx:AdvancedDataGridColumn dataField="Actual"/>
+     *         <mx:AdvancedDataGridColumn dataField="Estimate"/>
+     *         <mx:AdvancedDataGridColumn dataField="Min Actual"/>
+     *         <mx:AdvancedDataGridColumn dataField="Max Actual"/>
+     *     </mx:columns>
+     *  </mx:AdvancedDataGrid>

+     *
+     *  @see mx.collections.SummaryRow
+     *  @see mx.collections.SummaryField
+     *
+     *  @langversion 3.0
+     *  @playerversion Flash 9
+     *  @playerversion AIR 1.1
+     *  @productversion Flex 3
+     */
+    public var summaries:Array;
+
+    //--------------------------------------------------------------------------
+    //
+    //  Overriden Methods
+    //
+    //--------------------------------------------------------------------------
+
+    /**
+     *  The source collection containing the flat data to be grouped.
+     *
+     *  If the source is not a collection, it will be auto-wrapped into a collection.
+     *
+     *
+     *  @langversion 3.0
+     *  @playerversion Flash 9
+     *  @playerversion AIR 1.1
+     *  @productversion Flex 3
+     */
+    override public function get source():Object
+    {
+        return _sourceCol;
+    }
+
+    override public function set source(value:Object):void
+    {
+        if (_sourceCol)
+            _sourceCol.removeEventListener(CollectionEvent.COLLECTION_CHANGE, collectionChangeHandler);
+
+        if (!value)
+        {
+            _sourceCol = null;
+            return;
+        }
+
+        _sourceCol = getCollection(value);
+
+        if(_sourceCol is ICollectionView)
+            _sourceCol.addEventListener(CollectionEvent.COLLECTION_CHANGE, collectionChangeHandler);
+    }
+
+    /**
+     * @private
+     */
+    override public function getChildren(node:Object):Object
+    {
+        var children:Object = super.getChildren(node);
+
+        // populate the parentMap
+        // parentMap will be populated only if the children is ICollectionView
+        var uid:String;
+        if (children != null)
+        {
+        	if (children is ICollectionView)
+            {
+	            var cursor:IViewCursor = ICollectionView(children).createCursor();
+	            while (!cursor.afterLast)
+	            {
+	                uid = UIDUtil.getUID(cursor.current);
+	                parentMap[uid] = node;
+	                cursor.moveNext();
+	            }
+            }
+            else
+            {
+            	//if the children is not ICollectionView then
+            	//it was not introduced by GC. (this happens in the case of XML.)
+            	return null;
+            }
+        }
+
+        return children;
+    }
+
+    /**
+     *  Return super.source, if the grouping property is set,
+     *  and an ICollectionView instance that refers to super.source if not.
+     *
+     *  @return The object to return.
+     *
+     *  @langversion 3.0
+     *  @playerversion Flash 9
+     *  @playerversion AIR 1.1
+     *  @productversion Flex 3
+     */
+    override public function getRoot():Object
+    {
+        return super.source;
+    }
+
+    //--------------------------------------------------------------------------
+    //
+    //  Methods
+    //
+    //--------------------------------------------------------------------------
+
+    /**
+     *  @inheritDoc
+     *
+     *  @langversion 3.0
+     *  @playerversion Flash 9
+     *  @playerversion AIR 1.1
+     *  @productversion Flex 3
+     */
+    public function refresh(async:Boolean = false):Boolean
+    {
+        this.async = async;
+        var resetEvent:CollectionEvent;
+
+        // return if no grouping or groupingFields are supplied
+        if (!grouping || grouping.fields.length < 1 )
+        {
+            super.source = source;
+            // dispatch collection change event of kind reset.
+            resetEvent =
+                    new CollectionEvent(CollectionEvent.COLLECTION_CHANGE);
+            resetEvent.kind = CollectionEventKind.RESET;
+            dispatchEvent(resetEvent);
+            return true;
+        }
+
+        super.source = newCollection;
+
+        // dispatch collection change event of kind reset.
+        resetEvent =
+                new CollectionEvent(CollectionEvent.COLLECTION_CHANGE);
+        resetEvent.kind = CollectionEventKind.RESET;
+        dispatchEvent(resetEvent);
+
+        // reset the parent map
+        parentMap = {};
+
+        // reset the object summary map
+        objectSummaryMap = new Dictionary(false);
+
+        // check if any summary is specified
+        summaryPresent = false;
+        var n:int = grouping.fields.length;
+        for (var i:int = 0; i < n; i++)
+        {
+            if (GroupingField(grouping.fields[i]).summaries)
+            {
+                summaryPresent = true;
+                break;
+            }
+        }
+
+        var grouped:Boolean;
+        if(source && grouping)
+        {
+            grouped = makeGroupedCollection();
+        }
+
+        return grouped;
+    }
+
+    /**
+     *  @inheritDoc
+     *
+     *  @langversion 3.0
+     *  @playerversion Flash 9
+     *  @playerversion AIR 1.1
+     *  @productversion Flex 3
+     */
+    public function cancelRefresh():void
+    {
+        if (timer)
+        {
+            timer.stop();
+            timer = null;
+            cleanUp();
+        }
+    }
+
+    /**
+     *  @private
+     *
+     *  check for the existing groups if they can accomodate the item
+     *  otherwise create new group and place the item.
+     */
+    private function addItem(node:Object, depth:int = 0):void
+    {
+        var coll:ICollectionView = super.source as ICollectionView;
+        var parent:Object = null;
+        var i:int = 0;
+        while (i < grouping.fields.length)
+        {
+            // check for the parent item
+            var obj:Object = checkForParentExistence(coll, node, i);
+            // if no parent, then use the previous parent
+            if (!obj)
+                break;
+            // change the parent to point to its parent and start looking for parent again
+            parent = obj;
+
+            if (parent)
+            {
+                coll = getChildren(parent) as ICollectionView;
+                i++;
+            }
+        }
+
+        // parent found
+        if (parent)
+        {
+            coll = getChildren(parent) as ICollectionView;
+
+            // create groups for the item as no existing group matched with the item
+            if (i <= grouping.fields.length-1)
+            {
+                // create groups and place item
+                createGroupsAndInsertItem(coll, node, i);
+                // update the summary for the parents
+                updateSummary(node);
+                return;
+            }
+            // if there already exist a group for the item and insert the item in that group
+            if (coll is IList)
+            {
+                // insert the item
+                IList(coll).addItem(node);
+                // update the parent map
+                updateParentMap(parent, node);
+                // update the summary for the parents
+                updateSummary(node);
+            }
+        }
+        else
+        {
+            // no groups for the item, create groups and add item to them
+            createGroupsAndInsertItem(super.source as ICollectionView, node);
+            // update the summary for the parents
+            updateSummary(node);
+        }
+
+    }
+
+    /**
+     *  @private
+     *
+     *  check for existence of the groups for an item in the collection
+     *  and return all the parent of that item.
+     */
+    private function checkForParentExistence(coll:ICollectionView, node:Object, depth:int):Object
+    {
+        var cursor:IViewCursor = coll.createCursor();
+
+        var label:String = getDataLabel(node, grouping.fields[depth]);
+
+        while (!cursor.afterLast)
+        {
+            var current:Object = cursor.current;
+            // check for matching fields
+            if (current.hasOwnProperty(grouping.label) &&
+                current[grouping.label] == label)
+            {
+                return current;
+            }
+            cursor.moveNext();
+        }
+
+        return null;
+    }
+
+    /**
+     *  @private
+     *
+     *  creating the group for the item in the collection
+     *  and placing it there.
+     */
+    private function createGroupsAndInsertItem(coll:ICollectionView, node:Object, depth:int = 0):void
+    {
+        var parent:Object;
+        var n:int = grouping.fields.length;
+        for (var i:int = depth; i < n ; i++)
+        {
+            // get the dataField and value
+            var dataField:String = grouping.fields[i].name;
+            var value:String = getDataLabel(node, grouping.fields[i]);
+
+            if (!value)
+                return;
+
+            // create a new group
+            var obj:Object;
+            if (grouping.fields[i].groupingObjectFunction != null)
+                obj = grouping.fields[i].groupingObjectFunction(value);
+            else if (grouping.groupingObjectFunction != null)
+                obj = grouping.groupingObjectFunction(value);
+            else
+                obj = {};
+
+            obj[childrenField] = new ArrayCollection();
+
+            obj[grouping.label] = value;
+
+            if (coll is IList)
+            {
+                IList(coll).addItem(obj);
+
+                // get the parent and update parent map
+                parent = parent != null ? parent : getParent(coll.createCursor().current);
+                updateParentMap(parent, obj);
+
+                coll = getChildren(obj) as ICollectionView;
+                parent = obj;
+                // if we reach the end of the fields, just insert the item in the collection
+                if (i == n - 1)
+                {
+                    IList(coll).addItem(node);
+                    // update the parent map
+                    updateParentMap(obj, node);
+                    break;
+                }
+            }
+        }
+    }
+
+    /**
+     * @private
+     *
+     * returns the collection view of the given object
+     */
+    private function getCollection(value:Object):ICollectionView
+    {
+        // handle strings and xml
+        if (typeof(value)=="string")
+            value = new XML(value);
+        else if (value is XMLNode)
+            value = new XML(XMLNode(value).toString());
+        else if (value is XMLList)
+            value = new XMLListCollection(value as XMLList);
+
+        if (value is XML)
+        {
+            var xl:XMLList = new XMLList();
+            xl += value;
+            return new XMLListCollection(xl);
+        }
+        //if already a collection dont make new one
+        else if (value is ICollectionView)
+        {
+            return ICollectionView(value);
+        }
+        else if (value is Array)
+        {
+            return new ArrayCollection(value as Array);
+        }
+        //all other types get wrapped in an ArrayCollection
+        else if (value is Object)
+        {
+            // convert to an array containing this one item
+            var tmp:Array = [];
+            tmp.push(value);
+            return new ArrayCollection(tmp);
+        }
+        else
+        {
+            return new ArrayCollection();
+        }
+    }
+
+    /**
+     *  @private
+     *  get the data label from user specified function.
+     *  otherwise get the label from the data.
+     */
+    private function getDataLabel(data:Object,field:GroupingField):String
+    {
+        if (field.groupingFunction != null)
+            return field.groupingFunction(data, field);
+
+        // should we create a defaultGroupLabelValue property
+        return data.hasOwnProperty(field.name) ? data[field.name] : "Not Available";
+    }
+
+    /**
+     *  Returns the parent of a node.
+     *  The parent of a top-level node is null.
+     *
+     *  @param node The Object that defines the node.
+     *
+     *  @return The parent node containing the node as child,
+     *  null for a top-level node,
+     *  and undefined if the parent cannot be determined.
+     *
+     *  @langversion 3.0
+     *  @playerversion Flash 9
+     *  @playerversion AIR 1.1
+     *  @productversion Flex 3
+     */
+    protected function getParent(node:Object):*
+    {
+        var uid:String = UIDUtil.getUID(node);
+        if (parentMap.hasOwnProperty(uid))
+            return parentMap[uid];
+
+        return undefined;
+    }
+
+    /**
+     *  @private
+     *
+     *  generate the root summaries.
+     *  different for flat data and grouped data.
+     *
+     */
+    private function generateRootSummaries(flatData:Boolean = false):void
+    {
+        var coll:ICollectionView = super.source as ICollectionView;
+
+        if (flatData)
+            coll = coll.createCursor().current as ICollectionView;
+
+        var summaryObj:Array = [];
+        // computing all the summaries
+        var n:int = summaries.length;
+        for (var i:int = 0; i < n; i++)
+        {
+            var summaryRow:SummaryRow = summaries[i];
+            if (coll.length > 0)
+            {
+                summaryObj[i] =
+                    summaryRow.summaryObjectFunction != null ? summaryRow.summaryObjectFunction() : new SummaryObject();
+
+                // for all summary fields
+                var m:int = summaryRow.fields.length;
+                for (var j:int = 0; j < m; j++)
+                {
+                    var summaryField:SummaryField = summaryRow.fields[j];
+                    var summary:Number = 0.0;
+                    var label:String = summaryField.label ? summaryField.label : summaryField.dataField;
+
+                    var cursor:IViewCursor = coll.createCursor();
+                    // if data is flat then go through each object and calculate summary.
+                    if (flatData)
+                    {
+                        while (!cursor.afterLast)
+                        {
+                            var current:Object = cursor.current;
+                            var temp:Number = current.hasOwnProperty(label) ? current[label] : 0.0;;
+
+                            if (summaryField.operation == "SUM" || summaryField.operation == "COUNT")
+                                summary += temp;
+                            else if (summaryField.operation == "MAX")
+                                summary = temp;
+                            else if (summaryField.operation == "MIN")
+                                summary = temp;
+
+                            cursor.moveNext();
+                        }
+                    }
+                    else
+                    {
+                        if (!optimizeSummaries)
+                        {
+                            var hd:HierarchicalData = new HierarchicalData(coll);
+                            hd.childrenField = this.childrenField;
+                            var hColl:ICollectionView = new HierarchicalCollectionView(hd, {});
+                            var hCursor:IViewCursor = new LeafNodeCursor(HierarchicalCollectionView(hColl), hColl, hd);
+
+                            if (summaryField.summaryFunction != null)
+                            {
+                                summary = summaryField.summaryFunction(
+                                    hCursor, summaryField.dataField, summaryField.operation);
+                            }
+                            else
+                            {
+                                summary = summaryUtil(
+                                    hCursor, summaryField.dataField, summaryField.operation);
+                            }
+                        }
+                        else
+                        {
+                            summary = getSummaryFromCursor(cursor, summaryField.dataField, summaryField.operation);
+                        }
+                    }
+
+                    summaryObj[i][label] = summary;
+                }
+
+                if (objectSummaryMap[coll] == undefined)
+                    objectSummaryMap[coll] = [];
+
+                objectSummaryMap[coll].push(summaryObj[i]);
+            }
+        }
+        insertRootSummary(summaryObj);
+    }
+
+    /**
+     *  @private
+     *
+     *  calculate the summaries for a given parent,
+     *  populate the objectSummaryMap and
+     *  insert the summary in the collection
+     *
+     */
+    private function getSummaries(parent:Object, depth:int):void
+    {
+        if (depth > grouping.fields.length - 1)
+            return;
+
+        var children:ICollectionView = this.getChildren(parent) as ArrayCollection;
+
+        if (!children || children.length == 0)
+            return;
+
+        var summaries:Array = grouping.fields[depth].summaries;
+        if (!summaries)
+            return;
+
+        var summaryObj:Array = [];
+        // computing all the summaries
+        var n:int = summaries.length;
+        for (var i:int = 0; i < n; i++)
+        {
+            var summaryRow:SummaryRow = summaries[i];
+            summaryObj[i] =
+                summaryRow.summaryObjectFunction != null ?
+                summaryRow.summaryObjectFunction() : new SummaryObject();
+
+            // for all summary fields
+            var m:int = summaryRow.fields.length;
+            for (var j:int = 0; j < m; j++)
+            {
+                var summaryField:SummaryField = summaryRow.fields[j];
+                var summary:Number = 0.0;
+                var label:String = summaryField.label ? summaryField.label : summaryField.dataField;
+
+                // calculate the summary at the last level
+                var calculateSummaries:Boolean = true;
+                if (optimizeSummaries)
+                {
+                    if (depth == grouping.fields.length - 1)
+                    {
+                        calculateSummaries = true;
+                    }
+                    // assume that summary is already present and fetch it from the map
+                    else
+                    {
+                        calculateSummaries = false;
+                        summary = getSummaryFromMap(parent, label, summaryField.operation);
+                    }
+                }
+                if (calculateSummaries)
+                {
+                    var hd:HierarchicalData = new HierarchicalData(children);
+                    hd.childrenField = this.childrenField;
+                    var hColl:ICollectionView = new HierarchicalCollectionView(hd, {});
+                    var hCursor:IViewCursor = new LeafNodeCursor(HierarchicalCollectionView(hColl), hColl, hd);
+
+                    if (summaryField.summaryFunction != null)
+                    {
+                        summary = summaryField.summaryFunction(
+                            hCursor, summaryField.dataField, summaryField.operation);
+                    }
+                    else
+                    {
+                        summary = summaryUtil(
+                            hCursor, summaryField.dataField, summaryField.operation);
+                    }
+                }
+
+                // populate the summary object
+                summaryObj[i][label] = summary;
+            }
+
+            // populate the object summary map
+            if (objectSummaryMap[parent] == undefined)
+                objectSummaryMap[parent] = [];
+
+            objectSummaryMap[parent].push(summaryObj[i]);
+        }
+        // insert the summary
+        insertSummary(parent, summaryObj, summaries);
+    }
+
+    /**
+     *  @private
+     *
+     *  computes the summary for the parent node.
+     *  will fetch the summaries from the object summary map
+     *
+     */
+    private function getSummaryFromMap(parent:Object, label:String, operation:String):Number
+    {
+        var cursor:IViewCursor = ArrayCollection(getChildren(parent)).createCursor();
+
+        return getSummaryFromCursor(cursor, label, operation);
+    }
+
+    /**
+     *  @private
+     *
+     *  calculates the summary by traversing over the iterator.
+     *
+     */
+    private function getSummaryFromCursor(cursor:IViewCursor, label:String, operation:String):Number
+    {
+        var result:Number = 0;
+        while (!cursor.afterLast)
+        {
+            var temp:Array = objectSummaryMap[cursor.current];
+            var n:int = temp.length;
+            for (var i:int = 0; i < n; i++)
+            {
+                if (temp[i] && temp[i].hasOwnProperty(label))
+                {
+                    if (operation == "SUM" || operation == "COUNT")
+                        result += temp[i][label];
+                    else if (operation == "MAX")
+                        result = result < temp[i][label] ? temp[i][label] : result;
+                    else if (operation == "MIN")
+                        result = result > temp[i][label] ? temp[i][label] : result;
+                }
+            }
+
+            cursor.moveNext();
+        }
+        return result;
+    }
+
+    /**
+     *  @private
+     *
+     *  initialize the variables
+     *
+     */
+    private function initialize():void
+    {
+        currentData = null;
+        currentGroups = [];
+
+        currentGroupLabels = [];
+        currentIndices = [] ;
+
+        childrenArray = null;
+    }
+
+    /**
+     *  @private
+     *
+     *  insert the root summaries
+     *
+     */
+    private function insertRootSummary(summaryObj:Array):void
+    {
+        var coll:ICollectionView = super.source as ICollectionView;
+
+        if (!grouping)
+            coll = coll.createCursor().current as ICollectionView;
+
+        if (!(coll is IList))
+            return;
+
+        var n:int = summaryObj.length;
+        for (var i:int = 0; i < n; i++)
+        {
+            var summaryRow:SummaryRow = summaries[i];
+
+            if (summaryRow.summaryPlacement.indexOf("first") != -1)
+            {
+                IList(coll).addItemAt(summaryObj[i], 0);
+            }
+
+            if (summaryRow.summaryPlacement.indexOf("last") != -1)
+            {
+                IList(coll).addItem(summaryObj[i]);
+            }
+        }
+    }
+
+    /**
+     *  @private
+     *
+     *  inserts the summaries in the children collection of the parent node
+     */
+    private function insertSummary(parent:Object, summaryObj:Array, summaries:Array):void
+    {
+    	var n:int = summaries.length;
+        for (var i:int = 0; i < n; i++)
+        {
+            var summaryRow:SummaryRow = summaries[i];
+            if (summaryRow.summaryPlacement.indexOf("group") != -1)
+            {
+                for (var p:String in summaryObj[i])
+                    parent[p] = summaryObj[i][p];
+            }
+
+            var children:IList;
+            if (summaryRow.summaryPlacement.indexOf("first") != -1)
+            {
+                children = (getChildren(parent) as ArrayCollection);
+                if (children)
+                    children.addItemAt(summaryObj[i], 0);
+            }
+
+            if (summaryRow.summaryPlacement.indexOf("last") != -1)
+            {
+                children = (getChildren(parent) as ArrayCollection);
+                if (children)
+                    children.addItem(summaryObj[i]);
+            }
+        }
+    }
+
+    /**
+     *  @private
+     */
+    private function makeGroupedCollection():Boolean
+    {
+        // save the sorting information of the source collection
+        // sort the source collection and create a grouped collection
+        // restore the sort of the original source collection
+
+        var fields:Array = [];
+        var n:int = grouping.fields.length;
+        for (var i:int = 0; i < n; i++)
+        {
+            var groupingField:GroupingField = grouping.fields[i];
+            var sortField:SortField = new SortField(groupingField.name,
+                        groupingField.caseInsensitive,
+                        groupingField.descending, groupingField.numeric);
+            sortField.compareFunction = groupingField.compareFunction;
+            fields.push(sortField);
+        }
+
+        oldSort = source.sort;
+        source.sort = new Sort();
+
+        // Set the compare function
+        if (grouping.compareFunction != null)
+            source.sort.compareFunction = grouping.compareFunction;
+
+        source.sort.fields = fields;
+
+        var refreshed:Boolean = source.refresh();
+        if (!refreshed)
+            return refreshed;
+
+        if (async)
+        {
+            timer = new Timer(1);
+            timer.addEventListener(TimerEvent.TIMER, timerHandler);
+            timer.start();
+        }
+        else
+        {
+            return buildGroups();
+        }
+
+        return true;
+    }
+
+    /**
+     *  @private
+     */
+    private function timerHandler(event:TimerEvent):void
+    {
+        if (buildGroups())
+        {
+            timer.stop();
+            timer = null;
+        }
+
+    }
+
+    /**
+     *  @private
+     *
+     *  Start building the groups
+     */
+    private function buildGroups():Boolean
+    {
+        if (!prepared)
+        {
+            var _openItems:Object = {};
+
+            // initialize the variables
+            initialize();
+
+            // remove the items from the source collection if there are any.
+            newCollection.removeAll();
+
+            if ((source as ICollectionView).length == 0)
+                return false;
+
+            var hierarchicalData:IHierarchicalData = new HierarchicalData(newCollection);
+            HierarchicalData(hierarchicalData).childrenField = childrenField;
+
+            hView = new HierarchicalCollectionView(
+                                        hierarchicalData, _openItems);
+            treeCursor = hView.createCursor();
+
+            flatView = source as ICollectionView;
+            flatCursor = flatView.createCursor();
+
+            gf = grouping.fields;
+            fieldCount = gf.length;
+
+            if (gf)
+            {
+                prepared = true;
+
+                if (async)
+                    return false;
+            }
+
+            if (async)
+                return true;
+        }
+
+        flatCursor.seek(currentPosition);
+
+        while(!flatCursor.afterLast && currentPosition != CursorBookmark.LAST)
+        {
+            currentData = flatCursor.current;
+
+            for (var i:int = 0; i < fieldCount ; ++i)
+            {
+                var groupingField:String = gf[i].name;
+
+                var label:String = getDataLabel(currentData, gf[i]);
+
+                if(label != currentGroupLabels[i])
+                {
+                    if (childrenArray && childrenArray.length)
+                    {
+                        ArrayCollection(currentGroups[fieldCount - 1][childrenField]).source = childrenArray;
+                        childrenArray = [];
+                    }
+
+                    currentGroupLabels.splice(i+1);
+                    currentGroups.splice(i+1);
+                    currentIndices.splice(i+1);
+
+                    currentGroupLabels[i] = label;
+
+                    // check for grouping Object Function
+                    if (gf[i].groupingObjectFunction != null)
+                        currentGroups[i] = gf[i].groupingObjectFunction(label);
+                    else if (grouping.groupingObjectFunction != null)
+                        currentGroups[i] = grouping.groupingObjectFunction(label);
+                    else
+                        currentGroups[i] = {};
+
+                    currentGroups[i][childrenField] = new ArrayCollection();
+
+                    currentGroups[i][grouping.label] = currentGroupLabels[i];
+
+                    itemIndex = currentIndices[i-1];
+                    // create the group
+                    IHierarchicalCollectionView(hView).addChild(currentGroups[i-1], currentGroups[i]);
+                    currentIndices[i-1] = ++itemIndex;
+                }
+
+                // insert the node as a child of the group
+                if ( i == fieldCount - 1)
+                {
+                    itemIndex = currentIndices[i];
+                    if (!childrenArray)
+                        childrenArray = [];
+                    childrenArray.push(currentData);
+                    currentIndices[i] = ++itemIndex;
+                }
+            }
+
+            try
+            {
+                flatCursor.moveNext();
+                currentPosition = flatCursor.bookmark;
+                // return in case of async refresh
+                if (async)
+                    return false;
+            }
+            catch (e:ItemPendingError)
+            {
+                cleanUp();
+                e.addResponder(new ItemResponder(
+                    function(data:Object, token:Object=null):void
+                    {
+                        makeGroupedCollection();
+                    },
+                    function(info:Object, token:Object=null):void
+                    {
+                        //no-op
+                    }));
+            }
+        }
+        if (currentPosition == CursorBookmark.LAST)
+        {
+            if (childrenArray && childrenArray.length)
+            {
+                ArrayCollection(currentGroups[fieldCount - 1][childrenField]).source = childrenArray;
+            }
+
+            if (summaryPresent)
+            	applyFunctionForParentNodes(super.source as ICollectionView, getSummaries);
+
+            if (source && summaries)
+            {
+                if (!super.source)
+                    super.source = new ArrayCollection([source]) as Object;
+
+                generateRootSummaries(grouping == null);
+            }
+
+            // dispatch collection change event of kind refresh.
+            var refreshEvent:CollectionEvent =
+                    new CollectionEvent(CollectionEvent.COLLECTION_CHANGE);
+            refreshEvent.kind = CollectionEventKind.REFRESH;
+            dispatchEvent(refreshEvent);
+
+            cleanUp();
+        }
+        return true;
+    }
+
+    /**
+     *  @private
+     *
+     *  Restores the original sort in the source collection
+     *  and clean up all the variables.
+     */
+    private function cleanUp():void
+    {
+        source.sort = oldSort;
+        source.refresh();
+
+        prepared = false;
+        currentPosition = CursorBookmark.FIRST;
+        oldSort = null;
+        flatCursor = null;
+        treeCursor = null;
+    }
+
+    /**
+     *  @private
+     *
+     *  It will call the function func on each node of the collection.
+     */
+    private function applyFunctionForParentNodes(coll:ICollectionView, func:Function, depth:int = 0):void
+    {
+        if (coll.length > 0)
+        {
+            var masterCursor:IViewCursor = coll.createCursor();
+
+            while(!masterCursor.afterLast)
+            {
+                var child:Object = getChildren(masterCursor.current);
+                if (child is ArrayCollection)
+                {
+                    var childCursor:IViewCursor = ArrayCollection(child).createCursor();
+
+                    while (!childCursor.afterLast)
+                    {
+                        var current:Object = childCursor.current;
+                        // recurse over each child
+                        if (this.hasChildren(current))
+                        {
+                            applyFunctionForParentNodes(child as ArrayCollection, func, depth + 1);
+                            break;
+                        }
+
+                        childCursor.moveNext();
+                    }
+                }
+
+                // calculate for the parent node
+                func(masterCursor.current, depth);
+                masterCursor.moveNext();
+            }
+        }
+    }
+
+    /**
+     *  @private
+     *
+     *  removes the root summaries and
+     *  generates them again.
+     *
+     */
+    private function regenerateRootSummaries():void
+    {
+        if(!summaries)
+            return;
+
+        var coll:ICollectionView = super.source as ICollectionView;
+        if (!grouping)
+            coll = coll.createCursor().current as ICollectionView;
+
+        var summaryObj:Array = objectSummaryMap[coll];
+
+        // for the first time there will be no summaries
+        // so, this check will fail and root summaries wont
+        // be removed and regenerated again.
+        // for all the other times, the root summaries will be
+        // regenerated.
+        if (!summaryObj || !(coll is IList))
+            return;
+
+        // delete all the root level summaries
+        var n:int = summaryObj.length;
+        for (var i:int = 0; i < n; i++)
+        {
+            var index:int = IList(coll).getItemIndex(summaryObj[i]);
+            if (index != -1)
+                IList(coll).removeItemAt(index);
+        }
+
+        delete objectSummaryMap[coll];
+
+        // generate the root level summaries
+        generateRootSummaries(grouping == null);
+    }
+
+    /**
+     *  @private
+     *
+     *  removes all the summaries from the collection
+     */
+    private function removeAllSummaries():void
+    {
+        // call generate summary with remove summary function as parameter
+        applyFunctionForParentNodes(super.source as ICollectionView, removeSummary);
+    }
+
+    /**
+     *  @private
+     *
+     *  remove the summaries for an item and its parents.
+     *  return the parents of the node going one level up each time.
+     *
+     */
+    private function removeItemAndSummaries(coll:ICollectionView, node:Object, removeItem:Boolean = false):Array
+    {
+        var parentNodes:Array = [];
+        var parent:Object = getParent(node);
+        while (parent != null)
+        {
+            var index:int;
+            var addParent:Boolean = true;
+            var children:ICollectionView = getChildren(parent) as ArrayCollection;
+            if (children)
+            {
+                if (children.contains(node))
+                {
+                    if (children is IList)
+                    {
+                        if (removeItem)
+                        {
+                            // remove the item from the group
+                            index = IList(children).getItemIndex(node);
+                            if (index != -1)
+                            {
+                                IList(children).removeItemAt(index);
+                                // delete item from parent map
+                                var uid:String = UIDUtil.getUID(node);
+                                if (parentMap[uid])
+                                    delete parentMap[uid];
+                            }
+                        }
+
+                        if (objectSummaryMap[parent])
+                        {
+                            var temp:Array = objectSummaryMap[parent];
+                            var n:int = temp.length;
+                            for (var i:int = 0; i < n; i++)
+                            {
+                                index = IList(children).getItemIndex(temp[i]);
+                                if (index != -1)
+                                {
+                                    // remove the summary information for the group
+                                    IList(children).removeItemAt(index);
+                                }
+                            }
+                            // delete summary from parent summary map
+                            delete objectSummaryMap[parent];
+                        }
+
+                        if (removeItem)
+                        {
+                            // remove the group if no children is present
+                            if (children.length == 0 && getParent(parent) != null)
+                            {
+                                addParent = false;
+                            }
+                            else
+                                removeItem = false;
+                        }
+                    }
+                }
+                if (addParent)
+                    parentNodes.push(parent);
+
+                node = parent;
+
+                parent  = getParent(parent);
+                if (!parent)
+                {
+                    // remove the parent node from the collection if its the only one remaining.
+                    // first check for the child collection length
+                    if (parentNodes.length == 1)
+                    {
+                        if ((getChildren(parentNodes[0]) as ICollectionView).length == 0 && coll is IList)
+                        {
+                            index = IList(coll).getItemIndex(node);
+                            if (index != -1)
+                            {
+                                IList(coll).removeItemAt(index);
+                                return null;
+                            }
+                        }
+                    }
+                    return parentNodes.reverse();
+                }
+            }
+        }
+        return null;
+    }
+
+    /**
+     *  @private
+     *
+     *  removes the summaries from the parent node and all its children.
+     *
+     */
+    private function removeSummary(parent:Object, depth:int):void
+    {
+        var children:ICollectionView = this.getChildren(parent) as ArrayCollection;
+
+        if (!children)
+            return;
+
+        // remove summaries from the parents of the current object
+        removeItemAndSummaries(super.source as ICollectionView, children.createCursor().current);
+    }
+
+    /**
+     *  @private
+     *
+     *  Default implementation for operations - "SUM", "MIN", "MAX", "COUNT"
+     */
+    private function summaryUtil(iterator:IViewCursor, dataField:String, operation:String):Number
+    {
+        if (!iterator)
+            return 0.0;
+
+        var result:Number = 0;
+        var temp:Number = 0;
+        var once:Boolean;
+
+        if (operation == "SUM" || operation == "COUNT" || operation == "AVG")
+        {
+            var count:int = 0;
+            while (!iterator.afterLast)
+            {
+                if (iterator.current.hasOwnProperty(dataField))
+                {
+                    count++;
+                    result += Number(iterator.current[dataField]);
+                }
+
+                iterator.moveNext();
+            }
+
+            if (operation == "SUM")
+                return result;
+
+            if (operation == "COUNT")
+                return count;
+
+            if (operation == "AVG")
+                return result / count;
+        }
+        else if (operation == "MIN")
+        {
+            while (!iterator.afterLast)
+            {
+                temp = iterator.current.hasOwnProperty(dataField) ? iterator.current[dataField] : 0.0;
+
+                if (!once)
+                {
+                    result = temp;
+                    once = true;
+                }
+
+                if (temp < result)
+                    result = temp;
+
+                iterator.moveNext();
+            }
+
+            return result;
+        }
+        else if (operation == "MAX")
+        {
+            while (!iterator.afterLast)
+            {
+                temp = iterator.current.hasOwnProperty(dataField) ? iterator.current[dataField] : 0.0;
+
+                if (!once)
+                {
+                    result = temp;
+                    once = true;
+                }
+
+                if (temp > result)
+                    result = temp;
+
+                iterator.moveNext();
+            }
+
+            return result;
+        }
+
+        return 0.0;
+    }
+
+    /**
+     *  @private
+     *
+     *  updates the parent map
+     */
+    private function updateParentMap(parent:Object, node:Object):void
+    {
+        var uid:String = UIDUtil.getUID(node);
+        parentMap[uid] = parent;
+    }
+
+    /**
+     *  @private
+     *
+     *  removes the summary information and regenrates it for a particular node
+     *  and its parents.
+     *  optionally removes the item from the group also.
+     */
+    private function updateSummary(node:Object, removeItem:Boolean = false):void
+    {
+        var coll:ICollectionView = super.source as ICollectionView;
+
+        var parentNodes:Array;
+        if (summaryPresent || removeItem)
+            parentNodes = removeItemAndSummaries(coll, node, removeItem);
+
+        if (summaryPresent && parentNodes)
+        {
+        	var n:int = parentNodes.length;
+            for (var i:int = n - 1; i >= 0; i--)
+            {
+                getSummaries(parentNodes[i], i);
+            }
+        }
+    }
+
+    //--------------------------------------------------------------------------
+    //
+    //  Event handlers
+    //
+    //--------------------------------------------------------------------------
+
+    /**
+     *  @private
+     *
+     *  collection change handler.
+     *
+     */
+    private function collectionChangeHandler(event:CollectionEvent):void
+    {
+        if (!grouping)
+            return;
+
+        var i:int = 0;
+        var j:int = 0;
+        var n:int = 0;
+        var m:int = 0;
+        var obj:Object;
+
+        if (event.kind == CollectionEventKind.UPDATE)
+        {
+        	n = event.items.length;
+            for (i = 0; i < n; i++)
+            {
+                var summaryCalculated:Boolean;
+                // take the source property to get the updated object
+                obj = event.items[i].source;
+
+                if (!obj)
+                    continue;
+
+                m = grouping.fields.length;
+                for (j = 0; j < m; j++)
+                {
+                    // check if the property corresponding to the group fields changed
+                    if (event.items[i].property == grouping.fields[j].name)
+                    {
+                        summaryCalculated = true;
+                        // update summaries - first remove the item from its group
+                        updateSummary(obj,true);
+                        // add the item to the group
+                        addItem(obj);
+                        break;
+                    }
+                }
+                // for other properties just update the summaries
+                if (!summaryCalculated)
+                    updateSummary(obj);
+            }
+        }
+
+        if (event.kind == CollectionEventKind.ADD)
+        {
+        	n = event.items.length;
+            for (i = 0; i < n; i++)
+            {
+                obj = event.items[i];
+                // add the item to the group
+                addItem(obj);
+            }
+        }
+
+        if (event.kind == CollectionEventKind.REMOVE)
+        {
+        	n = event.items.length;
+            for (i = 0; i < n; i++)
+            {
+                obj = event.items[i];
+                // update summaries - first remove the item from its group
+                updateSummary(obj,true);
+            }
+        }
+
+        if (event.kind == CollectionEventKind.REPLACE)
+        {
+        	n = event.items.length;
+            for (i = 0; i < n; i++)
+            {
+                var oldValue:Object = event.items[i].oldValue;
+                var newValue:Object = event.items[i].newValue;
+                // update summaries - first remove the item from its group
+                updateSummary(oldValue,true);
+                // add the item to the group
+                addItem(newValue);
+            }
+        }
+
+        // generate the root summaries
+        regenerateRootSummaries();
+    }
+}
+
+}


Transferred from the Adobe Open Source Subversion Repository

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

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

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

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

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


Transferred from the Adobe Open Source Subversion Repository

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

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

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

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

--- frameworks/projects/framework/src/mx/effects/effectClasses/BlurInstance.as
+++ frameworks/projects/framework/src/mx/effects/effectClasses/BlurInstance.as
@@ -1,3 +1,13 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  ADOBE SYSTEMS INCORPORATED
+//  Copyright 2005-2006 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.effects.effectClasses
 {