Transferred from the Adobe Open Source Subversion Repository

Revision: 11639
Author:   jszeto@adobe.com
Date:     2009-11-11T01:07:34.029444Z

Log Message:
-----------
ComboBox bug fix

SDK-24104 - ComboBox should scroll the matched item to the top of the list

Made an mx_internal version of LayoutBase.getScrollPositionDeltaToElementHelper that supports aligning the position to an edge. ComboBox and DropDownList scroll the highlighted item to the top except when using the navigation keys to navigate while the dropDown is open.

Removed a bunch of comments and trace statements from ComboBox.

QE notes: None
Doc notes: None
Bugs: SDK-24104
Reviewer: Evtim
Tests run: ComboBox, DropDownList
Is noteworthy for integration: No

Modified Paths:
--------------
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/spark/src/spark/components/ComboBox.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/spark/src/spark/layouts/supportClasses/LayoutBase.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/spark/src/spark/layouts/HorizontalLayout.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/spark/src/spark/layouts/VerticalLayout.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/spark/src/spark/components/DropDownListBase.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/spark/src/spark/layouts/TileLayout.as</path>

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

--- frameworks/projects/spark/src/spark/components/ComboBox.as
+++ frameworks/projects/spark/src/spark/components/ComboBox.as
@@ -35,34 +35,6 @@
 import spark.utils.LabelUtil;

 use namespace mx_internal;
-
-/*
-TODO (jszeto)
-
-X Implement labelToItemFunction
-X Implement committing input string to selectedItem
-X Keep track of selectedIndex state
-- Implement caret and selection states
-- Implement user interaction behaviors
-X Implement openOnInput
-X Implement TextInput proxy properties
-X Implement itemMatchingFunction property
-X Implement restrict
-X Implement maxChars
-
-X Add wireframe skins
-
-X Support padding styles in TextInput
-
-- Make setting custom selectedItem cancellable
-- Refactor DropDownList into DropDownList and DropDownListBase
-
-B-Feature
-- Add filtering support
-- Add allowCustomSelectedItem support
-- Prompt support
-
-*/

 /**
  *  Bottom inset, in pixels, for the text in the
@@ -116,7 +88,6 @@
  */
 [Style(name="paddingTop", type="Number", format="Length", inherit="no")]

-// TODO Fill out ASDoc
 /**
  *  The ComboBox control is a child class of the DropDownListBase control.
  *  Like the DropDownListBase control, when the user selects an item from
@@ -225,8 +196,6 @@
         super();

         addEventListener(KeyboardEvent.KEY_DOWN, capture_keyDownHandler, true);
-
-        // TODO (jszeto) Add a property to toggle this behavior
         allowCustomSelectedItem = true;
     }

@@ -455,9 +424,7 @@
     private function processInputField():void
     {
         var matchingItems:Vector.<int>;
-
-        //trace("CB.processInputField input string",textInput.text);
-
+
         if (!dataProvider || dataProvider.length <= 0)
             return;

@@ -471,13 +438,9 @@
             else
                 matchingItems = findMatchingItems(textInput.text);

-            /*trace("CB.processInputField matchingItems:");
-            for (var i:int = 0; i < matchingItems.length; i++)
-                trace("    ["+i+"]",matchingItems[i]);*/
-
             if (matchingItems.length > 0)
             {
-                super.changeHighlightedSelection(matchingItems[0]);
+                super.changeHighlightedSelection(matchingItems[0], true);

                 var typedLength:int = textInput.text.length;
                 var item:Object = dataProvider ? dataProvider.getItemAt(matchingItems[0]) : undefined;
@@ -486,9 +449,6 @@
                     // If we found a match, then replace the textInput text with the match and
                     // select the non-typed characters
                     var itemString:String = itemToLabel(item);
-                    /*trace("CB.applyIndexToTextInput typed",textInput.text,"match",itemString,
-                        "selectRange start",typedLength,"end",itemString.length);*/
-
                     textInput.selectAll();
                     textInput.insertText(itemString);
                     textInput.selectRange(typedLength, itemString.length);
@@ -558,9 +518,7 @@
         {
             selectedIndex = actualProposedSelectedIndex;
         }
-
-        //trace("CB.applySelection selectRange -1, -1");
-        // TODO (jszeto) Should we always be turning off selection?
+
         textInput.selectRange(-1, -1);

         userTypedIntoText = false;
@@ -623,7 +581,6 @@
         {
             if (selectedItem != null && selectedItem != undefined)
             {
-                //trace("CB.updateLabelDisplay [",LabelUtil.itemToLabel(selectedItem, labelField, labelFunction),"]");
                 textInput.text = LabelUtil.itemToLabel(selectedItem, labelField, labelFunction);
             }
         }
@@ -668,15 +625,14 @@
     /**
      *  @private
      */
-    override mx_internal function changeHighlightedSelection(newIndex:int):void
-    {
-        super.changeHighlightedSelection(newIndex);
+    override mx_internal function changeHighlightedSelection(newIndex:int, scrollToTop:Boolean = false):void
+    {
+        super.changeHighlightedSelection(newIndex, scrollToTop);

         var item:Object = dataProvider ? dataProvider.getItemAt(newIndex) : undefined;
         if (item)
         {
             var itemString:String = itemToLabel(item);
-            //trace("CB.changeHighlightedSelection item",itemString);
             textInput.selectAll();
             textInput.insertText(itemString);
             textInput.selectAll();
@@ -693,26 +649,18 @@
      *  @private
      */
     override protected function keyDownHandler(event:KeyboardEvent) : void
-    {
+    {
         if (!isTextInputInFocus)
-        {
-            //trace("ComboBox.keyDownHandler code",event.keyCode,"IGNORED");
             keyDownHandlerHelper(event);
-        }
-
-        // No op. ComboBox listens for keyboard events in the capture phase
     }

     /**
      *  @private
      */
     protected function capture_keyDownHandler(event:KeyboardEvent):void
-    {
+    {
         if (isTextInputInFocus)
-        {
-            //trace("ComboBox.capture_keyDownHandler code",event.keyCode);
             keyDownHandlerHelper(event);
-        }
     }

     /**
@@ -842,10 +790,6 @@
     {

         userTypedIntoText = true;
-
-        //var ito:InsertTextOperation = event.operation as InsertTextOperation;
-
-        //trace("CB.textInput_changeHandler flow operation",event.operation,"text", ito ? ito.text : '');

         var operation:FlowOperation = event.operation;

@@ -861,7 +805,6 @@
                 if (!isDropDownOpen)
                 {
                     // Open the dropDown if it isn't already open
-                    //trace("CB dropDown closed. processInputField delayed");
                     openDropDown();
                     addEventListener(DropDownEvent.OPEN, editingOpenHandler);
                     return;
@@ -877,12 +820,9 @@
      */
     private function editingOpenHandler(event:DropDownEvent):void
     {
-        //trace("CB calling delayed processInputField");
         removeEventListener(DropDownEvent.OPEN, editingOpenHandler);
         processInputField();
     }
-
-

 }
 }


Transferred from the Adobe Open Source Subversion Repository

Revision: 20158
Author:   jszeto@adobe.com
Date:     2011-02-05T00:01:08.906657Z

Log Message:
-----------
ComboBox Validator bug fix

http://bugs.adobe.com/jira/browse/SDK-27333 - Tabbing out of Spark ComboBox does not trigger validator

Dispatch VALUE_COMMIT on focus out, just like we do in TextInput and TextArea

QE notes: none
Doc notes: none
Bugs: SDK-27333
Reviewer: Kevin
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/ComboBox.as</path>

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

--- frameworks/projects/spark/src/spark/components/ComboBox.as
+++ frameworks/projects/spark/src/spark/components/ComboBox.as
@@ -26,9 +26,10 @@
 import flashx.textLayout.operations.FlowOperation;
 import flashx.textLayout.operations.InsertTextOperation;

+import mx.core.IIMESupport;
 import mx.core.mx_internal;
+import mx.events.FlexEvent;
 import mx.styles.StyleProxy;
-import mx.core.IIMESupport;

 import spark.components.supportClasses.DropDownListBase;
 import spark.components.supportClasses.ListBase;
@@ -957,6 +958,8 @@
                 applySelection();
         }

+        dispatchEvent(new FlexEvent(FlexEvent.VALUE_COMMIT));
+
         super.focusOutHandler(event);
     }


Transferred from the Adobe Open Source Subversion Repository

Revision: 3689
Author:   mhorn@adobe.com
Date:     2008-10-16T18:32:34.424944Z

Log Message:
-----------
asdoc updates

Modified Paths:
--------------
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/mx/styles/metadata/AdvancedCharacterFormatTextStyles.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/mx/styles/metadata/BasicContainerFormatTextStyles.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/mx/graphics/graphicsClasses/TextGraphicElement.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/mx/styles/metadata/BasicParagraphFormatTextStyles.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/mx/styles/metadata/AdvancedContainerFormatTextStyles.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/mx/styles/metadata/AdvancedParagraphFormatTextStyles.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/flex4/src/mx/styles/metadata/BasicCharacterFormatTextStyles.as</path>

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

--- frameworks/projects/spark/src/spark/components/RichText.as
+++ frameworks/projects/spark/src/spark/components/RichText.as
@@ -51,55 +51,71 @@
 [DefaultProperty("content")]

 /**
- *  Documentation is not currently avilable.
+ *  Defines text in FXG.
+ *
+ *
This class can display richly-formatted text, with multiple character and paragraph formats.
+ *  However, it is non-interactive: it doesn't support scrolling, selection, or editing.

+ *
+ *
A TextGraphic element defines a text box, specified in the parent Group element's coordinate space,
+ *  to contain the provided text. The text box is specified using the x/y and width/height attributes on the TextGraphic element.

+ *
+ *
Text is rendered as a graphic element similar to paths and shapes, but with a restricted subset of rendering options.
+ *  TextGraphic elements are always rendered using a solid fill color, modified by any opacity, blend mode, and color transformation
+ *  defined by parent elements, and clipped to any clipping content defined on its parent elements. TextGraphic content is only filled,
+ *  not stroked.

+ *
+ *
The TextGraphic element automatically clips the text rendering to the bounds of the text box.

+ *
+ *
If you do not specify the value of the width or height properties, or if the specified value
+ *  of these properties is 0, the width and height are calculated based on the text content.

  */
 public class TextGraphic extends TextGraphicElement
 {
-	include "../core/Version.as";
-
-	//--------------------------------------------------------------------------
-	//
-	//  Class variables
-	//
-	//--------------------------------------------------------------------------
-
-	/**
-	 *  @private
+    include "../core/Version.as";
+
+    //--------------------------------------------------------------------------
+    //
+    //  Class variables
+    //
+    //--------------------------------------------------------------------------
+
+    /**
+     *  @private
      *  Since this static var gets initialized by calling a method
      *  in another class, we initialize it in the constructor to avoid
      *  any class-initialization-order problems.
-	 */
+     */
     private static var textImporter:ITextImporter;

-	//--------------------------------------------------------------------------
-	//
-	//  Constructor
-	//
-	//--------------------------------------------------------------------------
-
-	/**
-	 *  Constructor.
-	 */
-	public function TextGraphic()
-	{
-		super();
+    //--------------------------------------------------------------------------
+    //
+    //  Constructor
+    //
+    //--------------------------------------------------------------------------
+
+    /**
+     *  Constructor.
+     */
+    public function TextGraphic()
+    {
+        super();

         if (!textImporter)
             textImporter = TextFilter.getImporter(TextFilter.TCAL_FORMAT);

-		_content = textFlow = createEmptyTextFlow();
-	}
-
-	//--------------------------------------------------------------------------
+        _content = textFlow = createEmptyTextFlow();
+    }
+
+    //--------------------------------------------------------------------------
     //
     //  Variables
     //
     //--------------------------------------------------------------------------
-
-	/**
-	 *  @private
-	 */
-	private var textFlow:TextFlow;
+
+    /**
+     *  @private
+     */
+    private var textFlow:TextFlow;

     /**
      *  @private
@@ -125,30 +141,30 @@
      */
     private var hostContainerFormat:ContainerFormat = new ContainerFormat();

-	/**
-	 *  @private
+    /**
+     *  @private
      *  This flag indicates whether hostCharacterFormat, hostParagraphFormat,
      *  and hostContainerFormat need to be recalculated from the CSS styles
      *  of the TextGraphic. It is set true by stylesInitialized() and also
      *  when styleChanged() is called with a null argument, indicating that
      *  multiple styles have changed.
-	 */
+     */
     private var hostFormatsInvalid:Boolean = false;

-	/**
-	 *  @private
-	 */
-	private var textFlowComposer:TextFlowComposer = new TextFlowComposer();
-
-	/**
-	 *  @private
-	 */
-	private var textChanged:Boolean = false;
-
-	/**
-	 *  @private
-	 */
-	private var contentChanged:Boolean = false;
+    /**
+     *  @private
+     */
+    private var textFlowComposer:TextFlowComposer = new TextFlowComposer();
+
+    /**
+     *  @private
+     */
+    private var textChanged:Boolean = false;
+
+    /**
+     *  @private
+     */
+    private var contentChanged:Boolean = false;

     /**
      *  @private
@@ -157,19 +173,19 @@
      */
     private var textInvalid:Boolean = false;

-	//--------------------------------------------------------------------------
-	//
-	//  Overridden properties
-	//
-	//--------------------------------------------------------------------------
-
-	//----------------------------------
-	//  text
-	//----------------------------------
-
-	/**
-	 *  @private
-	 */
+    //--------------------------------------------------------------------------
+    //
+    //  Overridden properties
+    //
+    //--------------------------------------------------------------------------
+
+    //----------------------------------
+    //  text
+    //----------------------------------
+
+    /**
+     *  @private
+     */
     override public function get text():String
     {
         // Extracting the plaintext from a TextFlow is somewhat expensive,
@@ -185,12 +201,12 @@
         return mx_internal::_text;
     }

-	/**
-	 *  @private
-	 */
+    /**
+     *  @private
+     */
     override public function set text(value:String):void
     {
-		// If 'text' is being set after 'content', ignore it
+        // If 'text' is being set after 'content', ignore it
         // because 'content' has precedence.
         if (contentChanged)
             return;
@@ -204,84 +220,114 @@
         super.text = value;
     }

-	//--------------------------------------------------------------------------
-	//
-	//  Properties
-	//
-	//--------------------------------------------------------------------------
-
-	//----------------------------------
-	//  content
-	//----------------------------------
-
-	/**
-	 *  Documentation is not currently available.
-	 */
-	protected var _content:Object;
-
-	/**
-	 *  Documentation is not currently available.
-	 */
-	public function get content():Object
-	{
-		return _content;
-	}
-
-	/**
-	 *  @private
-	 */
-	public function set content(value:Object):void
-	{
-		if (value != _content)
-		{
+    //--------------------------------------------------------------------------
+    //
+    //  Properties
+    //
+    //--------------------------------------------------------------------------
+
+    //----------------------------------
+    //  content
+    //----------------------------------
+
+    /**
+     *  @private
+     */
+    protected var _content:Object;
+
+    /**
+     *  The text contained in the TextGraphic element.
+     *
+     *
The contents of this property can be a sequence of characters, <p>, <br/> or <span> elements.
+     *  The <p> and <span> elements can be implied, depending on how you use the style properties.

+     *
+     *
If this property has text content and no explicit paragraph tag, a paragraph tag is automatically generated for the text.

+     *
+     *
The following table describes the tags that can be used in the content property:
+     *
+     *

+     *

+     *      <p>
+     *      Starts a new paragraph. A <p> can be a child of a TextGraphic. Children are character sequences,
+     *          <br/> elements, or <span> elements. Every <p> has at least one <span> that can be implied.
+     *          Character sequences that are direct children of <p> are in an implied <span>.
+     *

+     *

+     *      <span>
+     *      All character sequences are contained in one or more <span> elements.
+     *          Explicit <span> elements can be used for formatting runs of characters within a paragraph.
+     *          Every <span> element is a child of a <p> element. A <span> can contain character
+     *          sequences and/or <br/> elements. A <span> element can be empty. Unlike in XHTML, <span> elements
+     *          must not be nested. The reason for this is the increased cost in number of objects required to represent the text.
+     *

+     *

+     *      <br/>
+     *      Behaves as a Unicode line separator character. It does not end the paragraph, it merely forces a line break at the
+     *          position where it appears. Always a child of <span> elements, though the
+     *          <span> element can be implied. The <br/> element must have no children (it must be an empty tag).
+     *

+     *

+     */
+    public function get content():Object
+    {
+        return _content;
+    }
+
+    /**
+     *  @private
+     */
+    public function set content(value:Object):void
+    {
+        if (value != _content)
+        {
             // Setting 'content' temporarily causes 'text' to become null.
             // Later, after the 'content' has been committed into the TextFlow,
             // getting 'text' will extract the text from the TextFlow.
             mx_internal::_text = null;
             textChanged = false;

-			var oldValue:Object = _content;
-			_content = value;
-			dispatchPropertyChangeEvent("content", oldValue, value);
-
-			invalidateTextLines("content");
-			invalidateSize();
-			invalidateDisplayList();
-		}
-	}
-
-	//--------------------------------------------------------------------------
-	//
-	//  Overridden methods: GraphicElement
-	//
-	//--------------------------------------------------------------------------
-
-	/**
-	 *  @inheritDoc
-	 */
+            var oldValue:Object = _content;
+            _content = value;
+            dispatchPropertyChangeEvent("content", oldValue, value);
+
+            invalidateTextLines("content");
+            invalidateSize();
+            invalidateDisplayList();
+        }
+    }
+
+    //--------------------------------------------------------------------------
+    //
+    //  Overridden methods: GraphicElement
+    //
+    //--------------------------------------------------------------------------
+
+    /**
+     *  @inheritDoc
+     */
     override protected function measure():void
     {
-		compose(explicitWidth, explicitHeight);
-
-		var bounds:Rectangle = textFlowComposer.bounds;
-		measuredWidth = Math.ceil(bounds.width);
-		measuredHeight = Math.ceil(bounds.height);
-	}
-
-	/**
-	 *  @inheritDoc
-	 */
+        compose(explicitWidth, explicitHeight);
+
+        var bounds:Rectangle = textFlowComposer.bounds;
+        measuredWidth = Math.ceil(bounds.width);
+        measuredHeight = Math.ceil(bounds.height);
+    }
+
+    /**
+     *  @inheritDoc
+     */
     override protected function updateDisplayList(unscaledWidth:Number,
                                                   unscaledHeight:Number):void
-	{
-		super.updateDisplayList(unscaledWidth, unscaledHeight);
-
-		compose(unscaledWidth, unscaledHeight);
-	}
-
-	/**
-	 *  @inheritDoc
-	 */
+    {
+        super.updateDisplayList(unscaledWidth, unscaledHeight);
+
+        compose(unscaledWidth, unscaledHeight);
+    }
+
+    /**
+     *  @inheritDoc
+     */
     override public function stylesInitialized():void
     {
         super.stylesInitialized();
@@ -289,9 +335,9 @@
         hostFormatsInvalid = true;
     }

-	/**
-	 *  @inheritDoc
-	 */
+    /**
+     *  @inheritDoc
+     */
     override public function styleChanged(styleProp:String):void
     {
         super.styleChanged(styleProp);
@@ -309,45 +355,45 @@
             setHostFormat(styleProp);
     }

-	//--------------------------------------------------------------------------
-	//
-	//  Overridden methods: TextGraphicElement
-	//
-	//--------------------------------------------------------------------------
-
-	/**
-	 *  @private
-	 */
-	override protected function invalidateTextLines(cause:String):void
-	{
-		if (cause == "text")
-			textChanged = true;
-		else if (cause == "content")
-			contentChanged = true;
-	}
-
-	//--------------------------------------------------------------------------
-	//
-	//  Methods
-	//
-	//--------------------------------------------------------------------------
-
-	/**
-	 *  @private
-	 */
-	private function createEmptyTextFlow():TextFlow
-	{
-		var textFlow:TextFlow = new TextFlow();
-		var p:ParagraphElement = new ParagraphElement();
-		var span:SpanElement = new SpanElement();
-		textFlow.replaceChildren(0, 0, p);
-		p.replaceChildren(0, 0, span);
-		return textFlow;
-	}
-
-	/**
-	 *  @private
-	 */
+    //--------------------------------------------------------------------------
+    //
+    //  Overridden methods: TextGraphicElement
+    //
+    //--------------------------------------------------------------------------
+
+    /**
+     *  @private
+     */
+    override protected function invalidateTextLines(cause:String):void
+    {
+        if (cause == "text")
+            textChanged = true;
+        else if (cause == "content")
+            contentChanged = true;
+    }
+
+    //--------------------------------------------------------------------------
+    //
+    //  Methods
+    //
+    //--------------------------------------------------------------------------
+
+    /**
+     *  @private
+     */
+    private function createEmptyTextFlow():TextFlow
+    {
+        var textFlow:TextFlow = new TextFlow();
+        var p:ParagraphElement = new ParagraphElement();
+        var span:SpanElement = new SpanElement();
+        textFlow.replaceChildren(0, 0, p);
+        p.replaceChildren(0, 0, span);
+        return textFlow;
+    }
+
+    /**
+     *  @private
+     */
     private function setHostFormat(styleProp:String):void
     {
         var value:* = getStyle(styleProp);
@@ -366,26 +412,26 @@
             hostCharacterFormat[styleProp] = value;
     }

-	/**
-	 *  @private
-	 */
-	private function importMarkup(markup:String):TextFlow
-	{
-		markup = '<TextFlow xmlns="http://ns.adobe.com/tcal/2008">' +
+    /**
+     *  @private
+     */
+    private function importMarkup(markup:String):TextFlow
+    {
+        markup = '<TextFlow xmlns="http://ns.adobe.com/tcal/2008">' +
                  markup +
                  '</TextFlow>';
-
-		return textImporter.importToFlow(markup);
-	}
-
-	/**
-	 *  @private
+
+        return textImporter.importToFlow(markup);
+    }
+
+    /**
+     *  @private
      *  Keep this method in sync with the same method in TextView.
-	 */
-	private function createTextFlow():TextFlow
-	{
+     */
+    private function createTextFlow():TextFlow
+    {
         if (contentChanged)
-		{
+        {
             if (_content is TextFlow)
             {
                 textFlow = TextFlow(_content);
@@ -400,35 +446,35 @@
                 textFlow = new TextFlow();
                 textFlow.mxmlChildren = [ _content ];
             }
-			else if (_content is String)
-			{
-				textFlow = importMarkup(String(_content));
-			}
-			else if (_content == null)
-			{
-				textFlow = createEmptyTextFlow();
-			}
+            else if (_content is String)
+            {
+                textFlow = importMarkup(String(_content));
+            }
+            else if (_content == null)
+            {
+                textFlow = createEmptyTextFlow();
+            }
             else
             {
                 throw new Error("invalid content");
             }
             textInvalid = true;
-		}
-		else if (textChanged)
-		{
+        }
+        else if (textChanged)
+        {
             var t:String = mx_internal::_text;
             if (t != null && t != "")
-			{
-				textFlow = TextFilter.importToFlow(t, TextFilter.PLAIN_TEXT_FORMAT);
-			}
-			else
-			{
-				textFlow = createEmptyTextFlow();
-			}
+            {
+                textFlow = TextFilter.importToFlow(t, TextFilter.PLAIN_TEXT_FORMAT);
+            }
+            else
+            {
+                textFlow = createEmptyTextFlow();
+            }
         }

- 		contentChanged = false;
-		textChanged = false;
+        contentChanged = false;
+        textChanged = false;

         if (hostFormatsInvalid)
         {
@@ -443,32 +489,32 @@
         textFlow.hostParagraphFormat = hostParagraphFormat;
         textFlow.hostContainerFormat = hostContainerFormat;

-		return textFlow;
-	}
-
-	/**
-	 *  @private
-	 */
-	private function compose(width:Number = NaN,
-							 height:Number = NaN):void
-	{
-		textFlow = createTextFlow();
-		_content = textFlow;
-
-		textFlowComposer.removeTextLines(DisplayObjectContainer(displayObject));
-
-		var bounds:Rectangle = textFlowComposer.bounds;
-		bounds.x = 0;
-		bounds.y = 0;
-		bounds.width = width;
-		bounds.height = height;
-
-		textFlowComposer.composeTextFlow(textFlow);
-
-		textFlowComposer.addTextLines(DisplayObjectContainer(displayObject));
+        return textFlow;
+    }
+
+    /**
+     *  @private
+     */
+    private function compose(width:Number = NaN,
+                             height:Number = NaN):void
+    {
+        textFlow = createTextFlow();
+        _content = textFlow;
+
+        textFlowComposer.removeTextLines(DisplayObjectContainer(displayObject));
+
+        var bounds:Rectangle = textFlowComposer.bounds;
+        bounds.x = 0;
+        bounds.y = 0;
+        bounds.width = width;
+        bounds.height = height;
+
+        textFlowComposer.composeTextFlow(textFlow);
+
+        textFlowComposer.addTextLines(DisplayObjectContainer(displayObject));

         displayObject.scrollRect = textFlowComposer.isOverset ? bounds : null;
-	}
+    }
 }

 }


Transferred from the Adobe Open Source Subversion Repository

Revision: 10695
Author:   clucier@adobe.com
Date:     2009-09-29T20:42:19.188738Z

Log Message:
-----------
Per Ely, relaxing the type for the skin property on SkinnableComponent.

QE notes: None
Doc notes: None
Bugs: SDK-23046
Reviewer: Deepa
Tests run: Checkin
Is noteworthy for integration: No

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

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

--- frameworks/projects/spark/src/spark/components/Scroller.as
+++ frameworks/projects/spark/src/spark/components/Scroller.as
@@ -20,13 +20,14 @@
 import flash.text.TextField;
 import flash.ui.Keyboard;

+import spark.components.Group;
 import spark.components.supportClasses.ScrollerLayout;
 import spark.components.supportClasses.SkinnableComponent;
 import spark.core.IViewport;
+import spark.core.NavigationUnit;
 import mx.core.IVisualElement;
 import mx.core.IVisualElementContainer;
 import mx.core.ScrollPolicy;
-import spark.core.NavigationUnit;
 import mx.events.PropertyChangeEvent;
 import mx.managers.IFocusManagerComponent;
 import flash.display.InteractiveObject;
@@ -175,7 +176,8 @@
 /**
  *  The Scroller component displays a single scrollable component,
  *  called a viewport, and horizontal and vertical scroll bars.
- *  The viewport must implement the IViewport interface.
+ *  The viewport must implement the IViewport interface.  Its skin
+ *  must be a derivative of the Group class.
  *
  *  <p>The Spark Group, DataGroup, and RichEditableText components implement
  *  the IViewport interface and can be used as the children of the Scroller control,
@@ -478,7 +480,7 @@
         if (skin && viewport)
         {
             viewport.clipAndEnableScrolling = true;
-            skin.addElementAt(viewport, 0);
+            Group(skin).addElementAt(viewport, 0);
             viewport.addEventListener(PropertyChangeEvent.PROPERTY_CHANGE, viewport_propertyChangeHandler);
         }
         if (verticalScrollBar)
@@ -496,7 +498,7 @@
         if (skin && viewport)
         {
             viewport.clipAndEnableScrolling = false;
-            skin.removeElement(viewport);
+            Group(skin).removeElement(viewport);
             viewport.removeEventListener(PropertyChangeEvent.PROPERTY_CHANGE, viewport_propertyChangeHandler);
         }
     }
@@ -820,7 +822,7 @@
     override protected function attachSkin():void
     {
         super.attachSkin();
-        skin.layout = new ScrollerLayout();
+        Group(skin).layout = new ScrollerLayout();
         installViewport();
         skin.addEventListener(MouseEvent.MOUSE_WHEEL, skin_mouseWheelHandler);
     }
@@ -831,7 +833,7 @@
     override protected function detachSkin():void
     {
         uninstallViewport();
-        skin.layout = null;
+        Group(skin).layout = null;
         skin.removeEventListener(MouseEvent.MOUSE_WHEEL, skin_mouseWheelHandler);
         super.detachSkin();
     }


Transferred from the Adobe Open Source Subversion Repository

Revision: 6639
Author:   cframpto@adobe.com
Date:     2009-05-05T14:27:11.999664Z

Log Message:
-----------
In TextArea, when setting content, call the text superclass, and when setting text, call the content super class to avoid recursion.

Remove trace left in TextBase.

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

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

--- frameworks/projects/spark/src/spark/components/TextArea.as
+++ frameworks/projects/spark/src/spark/components/TextArea.as
@@ -120,8 +120,7 @@
         // Setting 'text' temporarily causes 'content' to become null.
         // Later, after the 'text' has been committed into the TextFlow,
         // getting 'content' will return the TextFlow.
-        content = null;
-
+        setContent(null);
         super.text = value;
     }

@@ -160,7 +159,7 @@
 		if (value == getContent())
 			return;

-        text = null;
+        super.text = null;
         setContent(value);

 		dispatchEvent(new Event("contentChanged"));


Transferred from the Adobe Open Source Subversion Repository

Revision: 17485
Author:   aharui@adobe.com
Date:     2010-08-26T04:05:56.622744Z

Log Message:
-----------
Add 'typicalText' measurement to TextInput, TextArea and RET. We will update NumericStepper later.

Also add 'textInput' event metadata.

QE notes: none
Doc notes: new typicalText property
Bugs: SDK-26180, SDK-25542
Reviewer: Gordon
Tests run: checkintests mustella/gumbo/RichEditableText, TextInput, TextArea
Is noteworthy for integration: yes

Modified Paths:
--------------
<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/TextInput.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/spark/src/spark/components/TextArea.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@1280908 13f79535-47bb-0310-9956-ffa450edef68

--- frameworks/projects/spark/src/spark/components/TextArea.as
+++ frameworks/projects/spark/src/spark/components/TextArea.as
@@ -185,6 +185,10 @@
  *
The widthInChars and heightInChars
  *  properties let you specify the width and height of the TextArea
  *  in a way that scales with the font size.
+ *  You can use the typicalText property as well.
+ *  Note that if you use typicalText, the
+ *  widthInChars and heightInLines
+ *  are ignored.
  *  You can also specify an explicit width or height in pixels,
  *  or use a percent width and height or constraints such as
  *  left and right
@@ -257,6 +261,7 @@
  *    Properties
  *    heightInLines="Calculated default"
  *    textFlow="TextFlow"
+ *    typicalText=null
  *    widthInChars="Calculated default"
  *
  *    Styles
@@ -522,6 +527,33 @@
         setTextFlow(value);
     }

+	//----------------------------------
+	//  typicalText
+	//----------------------------------
+
+	/**
+	 *  @default null
+	 *
+	 *  @see spark.components.RichEditableText#typicalText
+	 *
+	 *  @langversion 3.0
+	 *  @playerversion Flash 10.2
+	 *  @playerversion AIR 2.0
+	 *  @productversion Flex 4.5
+	 */
+	public function get typicalText():String
+	{
+		return getTypicalText();
+	}
+
+	/**
+	 *  @private
+	 */
+	public function set typicalText(value:String):void
+	{
+		setTypicalText(value);
+	}
+
     //----------------------------------
     //  widthInChars
     //----------------------------------


Transferred from the Adobe Open Source Subversion Repository

Revision: 3509
Author:   jimurphy@adobe.com
Date:     2008-10-07T18:19:17.646255Z

Log Message:
-----------
Rename of flex -> mx.

For compatibility reasons it was decided that the new functionality remain integrated with the old framework, although we will continue to build two separate SWCs, one with primarily existing framework classes, and one with new Flex 4 classes. This change removes duplicate names from the Flex 4 framework to avoid class name overlapping with the old framework code.  The naming overlap consists of two major areas:  New Components, and New Effects

Modified Paths:
--------------
386 paths were modified

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

--- frameworks/projects/spark/src/spark/layouts/BasicLayout.as
+++ frameworks/projects/spark/src/spark/layouts/BasicLayout.as
@@ -9,15 +9,15 @@
 //
 ////////////////////////////////////////////////////////////////////////////////

-package flex.layout
+package mx.layout
 {

 import flash.geom.Point;
 import flash.geom.Rectangle;

-import flex.core.GroupBase;
-import flex.intf.ILayoutItem;
-
+import mx.components.baseClasses.GroupBase;
+import mx.layout.ILayoutItem;
+import mx.layout.LayoutBase;

 /**
  *  Documentation is not currently available.


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

--- frameworks/projects/spark/src/spark/layouts/BasicLayout.as
+++ frameworks/projects/spark/src/spark/layouts/BasicLayout.as
@@ -9,15 +9,16 @@
 //
 ////////////////////////////////////////////////////////////////////////////////

-package mx.layout
+package spark.layout
 {

 import flash.geom.Point;
 import flash.geom.Rectangle;

-import mx.components.baseClasses.GroupBase;
+import spark.components.supportClasses.GroupBase;
 import mx.core.ILayoutElement;
-import mx.layout.LayoutBase;
+import spark.layout.supportClasses.LayoutBase;
+import spark.layout.supportClasses.LayoutElementHelper;

 /**
  *  Documentation is not currently available.


Let's remember our previous lessons and attempt to use the less-vulnerable version of getting the time.

git-svn-id: b675b909355d5cf946977f44a8ec5a6ceb3782e4@976 ed5b42cb-e716-0410-a449-f6a68f950b19

--- src/as/com/threerings/miso/client/Ticker.as
+++ src/as/com/threerings/miso/client/Ticker.as
@@ -17,8 +17,6 @@
 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA

 package com.threerings.miso.client {
-
-import flash.utils.getTimer;

 import flash.events.TimerEvent;
 import flash.utils.Timer;
@@ -31,6 +29,7 @@
     public function start () :void
     {
         _t.addEventListener(TimerEvent.TIMER, handleTimer);
+        _start = new Date().time;
         _t.start();
     }

@@ -43,7 +42,7 @@

     public function handleTimer (event :TimerEvent) :void
     {
-        tick(getTimer());
+        tick(int(new Date().time - _start));
     }

     protected function tick (tickStamp :int) :void
@@ -63,9 +62,13 @@
         _tickables.remove(tickable);
     }

+    /** Everyone who wants to hear about our ticks. */
     protected var _tickables :Array = [];

     /** A timer that will fire every "frame". */
     protected var _t :Timer = new Timer(1);
+
+    /** What time our ticker started running - tickStamps will be relative to this time. */
+    protected var _start :Number;
 }
 }


Line ending happy fun times

Line ending happy fun times

git-svn-id: b675b909355d5cf946977f44a8ec5a6ceb3782e4@935 ed5b42cb-e716-0410-a449-f6a68f950b19

--- src/as/com/threerings/flex/CursorManager.as
+++ src/as/com/threerings/flex/CursorManager.as
@@ -19,305 +19,305 @@
 // License along with this library; if not, write to the Free Software
 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA

-package com.threerings.flex {
-
-import flash.display.DisplayObject;
-import flash.display.InteractiveObject;
-import flash.display.Sprite;
-import flash.events.MouseEvent;
-import flash.text.TextField;
-import flash.text.TextFieldType;
-import flash.ui.Mouse;
-
-import mx.core.Application;
-import mx.managers.SystemManager;
-import mx.styles.CSSStyleDeclaration;
-import mx.styles.StyleManager;
-
-import com.threerings.util.Map;
-import com.threerings.util.Maps;
-
-/**
- * A better CursorManager.
- */
-public class CursorManager
-{
-    public static const SYSTEM_CURSOR :int = 0;
-
-    public static const BUSY_CURSOR :int = 1;
-
-    //--------------------------------------------------------------------------
-    //
-    //  Class methods
-    //
-    //--------------------------------------------------------------------------
-
-    /**
-     *  Makes the cursor visible.
-     *  Cursor visibility is not reference-counted.
-     *  A single call to the showCursor() method
-     *  always shows the cursor regardless of how many calls
-     *  to the hideCursor() method were made.
-     */
-    public static function showCursor () :void
-    {
-        if (_currentCursorId == SYSTEM_CURSOR) {
-            Mouse.show();
-        } else {
-            _cursorHolder.visible = true;
-        }
-    }
-
-    /**
-     *  Makes the cursor invisible.
-     *  Cursor visibility is not reference-counted.
-     *  A single call to the hideCursor() method
-     *  always hides the cursor regardless of how many calls
-     *  to the showCursor() method were made.
-     */
-    public static function hideCursor () :void
-    {
-        _cursorHolder.visible = false;
-        Mouse.hide();
-    }
-
-    public static function getCurrentCursorId () :int
-    {
-        return _currentCursorId;
-    }
-
-    /**
-     *  Creates a new cursor.
-     *
-     *  @param cursorClass Class of the cursor to display.
-     *
-     *  @param xOffset Number that specifies the x offset
-     *  of the cursor, in pixels, relative to the mouse pointer.
-     *  The default value is 0.
-     *
-     *  @param yOffset Number that specifies the y offset
-     *  of the cursor, in pixels, relative to the mouse pointer.
-     *  The default value is 0.
-     *
-     *  @return The ID of the cursor.
-     */
-    public static function addCursor (
-            cursorClass :Class, xOffset :int = 0, yOffset :int = 0) :int
-    {
-        var cursorId :int = _nextCursorId++;
-
-        var rec :CursorRecord = new CursorRecord(cursorClass);
-        rec.x = xOffset;
-        rec.y = yOffset;
-
-        _cursors.put(cursorId, rec);
-
-        return cursorId;
-    }
-
-    /**
-     * Set the current cursor.
-     */
-    public static function setCursor (id :int) :void
-    {
-        if (id == _currentCursorId) {
-            return;
-        }
-
-        if (!_initialized) {
-            // oh, let's set it up
-            _systemManager = Application.application.systemManager;
-
-            // set up the busy cursor
-            var cursorManagerStyleDeclaration :CSSStyleDeclaration =
-                StyleManager.getStyleDeclaration("CursorManager");
-            var busyCursorClass :Class =
-                cursorManagerStyleDeclaration.getStyle("busyCursor");
-            _busyCursor = new CursorRecord(busyCursorClass);
-
-            // The first time a cursor is requested of the CursorManager,
-            // create a Sprite to hold the cursor symbol
-            _cursorHolder = new Sprite();
-            _cursorHolder.mouseEnabled = false;
-            _systemManager.cursorChildren.addChild(_cursorHolder);
-
-            _initialized = true;
-        }
-
-        // figure out what the new cursor will be like
-        var rec :CursorRecord;
-        if (id == BUSY_CURSOR) {
-            rec = _busyCursor;
-
-        } else if (id != SYSTEM_CURSOR) {
-            rec = (_cursors.get(id) as CursorRecord);
-            if (rec == null) {
-                // a bogus id was specified
-                // TODO: throw an error?
-                return;
-            }
-        }
-
-        if (rec != null && (rec.cursor is Class)) {
-            // go ahead and instantiate the class
-            try {
-                var disp :DisplayObject = new (rec.cursor as Class);
-                rec.cursor = disp;
-                if (disp is InteractiveObject) {
-                    (disp as InteractiveObject).mouseEnabled = false;
-                }
-
-            } catch (err :Error) {
-                // this cursor is not usable, bail
-                return;
-            }
-        }
-
-        // always remove any custom cursors from the hierarchy
-        if (_cursorHolder.numChildren > 0) {
-            _cursorHolder.removeChildAt(0);
-        }
-
-        if (id != SYSTEM_CURSOR) {
-            Mouse.hide();
-            var currentCursor :DisplayObject = (rec.cursor as DisplayObject);
-            _cursorHolder.addChild(currentCursor);
-            _cursorHolder.x = _systemManager.mouseX + rec.x;
-            _cursorHolder.y = _systemManager.mouseY + rec.y;
-
-            _currentXOffset = rec.x;
-            _currentYOffset = rec.y;
-            _systemManager.stage.addEventListener(
-                MouseEvent.MOUSE_MOVE, mouseMoveHandler);
-
-
-        } else {
-            _currentXOffset = 0;
-            _currentYOffset = 0;
-            _systemManager.stage.removeEventListener(
-                MouseEvent.MOUSE_MOVE, mouseMoveHandler);
-
-            Mouse.show();
-        }
-
-        _currentCursorId = id;
-    }
-
-    /**
-     *  Removes a cursor from the cursor list.
-     *  If the cursor being removed is the currently displayed cursor,
-     *  the CursorManager displays the next cursor in the list, if one exists.
-     *  If the list becomes empty, the CursorManager displays
-     *  the default system cursor.
-     *
-     *  @param cursorID ID of cursor to remove.
-     */
-    public static function removeCursor (id :int) :void
-    {
-        var rec :CursorRecord = (_cursors.remove(id) as CursorRecord);
-
-        if (rec != null && id == _currentCursorId) {
-            setCursor(SYSTEM_CURSOR);
-        }
-    }
-
-    /**
-     *  Removes all of the cursors from the cursor list
-     *  and restores the system cursor.
-     */
-    public static function removeAllCursors () :void
-    {
-        _cursors.clear();
-
-        if (_currentCursorId != BUSY_CURSOR) {
-            setCursor(SYSTEM_CURSOR);
-        }
-    }
-
-    //--------------------------------------------------------------------------
-    //
-    //  Class event handlers
-    //
-    //--------------------------------------------------------------------------
-
-    /**
-     *  @private
-     */
-    private static function mouseMoveHandler (event :MouseEvent) :void
-    {
-        _cursorHolder.x = _systemManager.mouseX + _currentXOffset;
-        _cursorHolder.y = _systemManager.mouseY + _currentYOffset;
-
-        var target :Object = event.target;
-
-        // Do target test.
-        if (!_overTextField &&
-                target is TextField && target.type == TextFieldType.INPUT) {
-            _overTextField = true;
-            _showSystemCursor = true;
-
-        } else if (_overTextField &&
-                !(target is TextField && target.type == TextFieldType.INPUT)) {
-            _overTextField = false;
-            _showCustomCursor = true;
-        }
-
-        // Handle switching between system and custom cursor.
-        if (_showSystemCursor) {
-            _showSystemCursor = false;
-            _cursorHolder.visible = false;
-            Mouse.show();
-        }
-        if (_showCustomCursor) {
-            _showCustomCursor = false;
-            _cursorHolder.visible = true;
-            Mouse.hide();
-        }
-    }
-
-    /** A mapping of all assigned cursor ids. */
-    private static const _cursors :Map = Maps.newMapOf(int);
-
-    private static var _currentCursorId :int = 0; // SYSTEM_CURSOR
-
-    private static var _nextCursorId :int = 2; // skip BUSY
-
-    private static var _initialized :Boolean = false;
-
-    private static var _cursorHolder :Sprite;
-
-    private static var _currentXOffset :int = 0;
-    private static var _currentYOffset :int = 0;
-
-    /** A record for the busy cursor (where it can't be removed). */
-    private static var _busyCursor :CursorRecord;
-
-    private static var _overTextField :Boolean = false;
-
-    private static var _overLink :Boolean = false;
-
-    private static var _showSystemCursor :Boolean = false;
-
-    private static var _showCustomCursor :Boolean = false;
-
-    private static var _systemManager :SystemManager = null;
-}
-}
-
-
-/**
- */
-class CursorRecord extends Object
-{
-    public function CursorRecord (clazz :Class)
-    {
-        cursor = clazz;
-    }
-
-    /** The class, or instantiated cursor. */
-    public var cursor :Object
-
-    /** The x/y offset for the hotspot. */
-    public var x :Number;
-    public var y :Number;
-}
+package com.threerings.flex {
+
+import flash.display.DisplayObject;
+import flash.display.InteractiveObject;
+import flash.display.Sprite;
+import flash.events.MouseEvent;
+import flash.text.TextField;
+import flash.text.TextFieldType;
+import flash.ui.Mouse;
+
+import mx.core.Application;
+import mx.managers.SystemManager;
+import mx.styles.CSSStyleDeclaration;
+import mx.styles.StyleManager;
+
+import com.threerings.util.Map;
+import com.threerings.util.Maps;
+
+/**
+ * A better CursorManager.
+ */
+public class CursorManager
+{
+    public static const SYSTEM_CURSOR :int = 0;
+
+    public static const BUSY_CURSOR :int = 1;
+
+    //--------------------------------------------------------------------------
+    //
+    //  Class methods
+    //
+    //--------------------------------------------------------------------------
+
+    /**
+     *  Makes the cursor visible.
+     *  Cursor visibility is not reference-counted.
+     *  A single call to the showCursor() method
+     *  always shows the cursor regardless of how many calls
+     *  to the hideCursor() method were made.
+     */
+    public static function showCursor () :void
+    {
+        if (_currentCursorId == SYSTEM_CURSOR) {
+            Mouse.show();
+        } else {
+            _cursorHolder.visible = true;
+        }
+    }
+
+    /**
+     *  Makes the cursor invisible.
+     *  Cursor visibility is not reference-counted.
+     *  A single call to the hideCursor() method
+     *  always hides the cursor regardless of how many calls
+     *  to the showCursor() method were made.
+     */
+    public static function hideCursor () :void
+    {
+        _cursorHolder.visible = false;
+        Mouse.hide();
+    }
+
+    public static function getCurrentCursorId () :int
+    {
+        return _currentCursorId;
+    }
+
+    /**
+     *  Creates a new cursor.
+     *
+     *  @param cursorClass Class of the cursor to display.
+     *
+     *  @param xOffset Number that specifies the x offset
+     *  of the cursor, in pixels, relative to the mouse pointer.
+     *  The default value is 0.
+     *
+     *  @param yOffset Number that specifies the y offset
+     *  of the cursor, in pixels, relative to the mouse pointer.
+     *  The default value is 0.
+     *
+     *  @return The ID of the cursor.
+     */
+    public static function addCursor (
+            cursorClass :Class, xOffset :int = 0, yOffset :int = 0) :int
+    {
+        var cursorId :int = _nextCursorId++;
+
+        var rec :CursorRecord = new CursorRecord(cursorClass);
+        rec.x = xOffset;
+        rec.y = yOffset;
+
+        _cursors.put(cursorId, rec);
+
+        return cursorId;
+    }
+
+    /**
+     * Set the current cursor.
+     */
+    public static function setCursor (id :int) :void
+    {
+        if (id == _currentCursorId) {
+            return;
+        }
+
+        if (!_initialized) {
+            // oh, let's set it up
+            _systemManager = Application.application.systemManager;
+
+            // set up the busy cursor
+            var cursorManagerStyleDeclaration :CSSStyleDeclaration =
+                StyleManager.getStyleDeclaration("CursorManager");
+            var busyCursorClass :Class =
+                cursorManagerStyleDeclaration.getStyle("busyCursor");
+            _busyCursor = new CursorRecord(busyCursorClass);
+
+            // The first time a cursor is requested of the CursorManager,
+            // create a Sprite to hold the cursor symbol
+            _cursorHolder = new Sprite();
+            _cursorHolder.mouseEnabled = false;
+            _systemManager.cursorChildren.addChild(_cursorHolder);
+
+            _initialized = true;
+        }
+
+        // figure out what the new cursor will be like
+        var rec :CursorRecord;
+        if (id == BUSY_CURSOR) {
+            rec = _busyCursor;
+
+        } else if (id != SYSTEM_CURSOR) {
+            rec = (_cursors.get(id) as CursorRecord);
+            if (rec == null) {
+                // a bogus id was specified
+                // TODO: throw an error?
+                return;
+            }
+        }
+
+        if (rec != null && (rec.cursor is Class)) {
+            // go ahead and instantiate the class
+            try {
+                var disp :DisplayObject = new (rec.cursor as Class);
+                rec.cursor = disp;
+                if (disp is InteractiveObject) {
+                    (disp as InteractiveObject).mouseEnabled = false;
+                }
+
+            } catch (err :Error) {
+                // this cursor is not usable, bail
+                return;
+            }
+        }
+
+        // always remove any custom cursors from the hierarchy
+        if (_cursorHolder.numChildren > 0) {
+            _cursorHolder.removeChildAt(0);
+        }
+
+        if (id != SYSTEM_CURSOR) {
+            Mouse.hide();
+            var currentCursor :DisplayObject = (rec.cursor as DisplayObject);
+            _cursorHolder.addChild(currentCursor);
+            _cursorHolder.x = _systemManager.mouseX + rec.x;
+            _cursorHolder.y = _systemManager.mouseY + rec.y;
+
+            _currentXOffset = rec.x;
+            _currentYOffset = rec.y;
+            _systemManager.stage.addEventListener(
+                MouseEvent.MOUSE_MOVE, mouseMoveHandler);
+
+
+        } else {
+            _currentXOffset = 0;
+            _currentYOffset = 0;
+            _systemManager.stage.removeEventListener(
+                MouseEvent.MOUSE_MOVE, mouseMoveHandler);
+
+            Mouse.show();
+        }
+
+        _currentCursorId = id;
+    }
+
+    /**
+     *  Removes a cursor from the cursor list.
+     *  If the cursor being removed is the currently displayed cursor,
+     *  the CursorManager displays the next cursor in the list, if one exists.
+     *  If the list becomes empty, the CursorManager displays
+     *  the default system cursor.
+     *
+     *  @param cursorID ID of cursor to remove.
+     */
+    public static function removeCursor (id :int) :void
+    {
+        var rec :CursorRecord = (_cursors.remove(id) as CursorRecord);
+
+        if (rec != null && id == _currentCursorId) {
+            setCursor(SYSTEM_CURSOR);
+        }
+    }
+
+    /**
+     *  Removes all of the cursors from the cursor list
+     *  and restores the system cursor.
+     */
+    public static function removeAllCursors () :void
+    {
+        _cursors.clear();
+
+        if (_currentCursorId != BUSY_CURSOR) {
+            setCursor(SYSTEM_CURSOR);
+        }
+    }
+
+    //--------------------------------------------------------------------------
+    //
+    //  Class event handlers
+    //
+    //--------------------------------------------------------------------------
+
+    /**
+     *  @private
+     */
+    private static function mouseMoveHandler (event :MouseEvent) :void
+    {
+        _cursorHolder.x = _systemManager.mouseX + _currentXOffset;
+        _cursorHolder.y = _systemManager.mouseY + _currentYOffset;
+
+        var target :Object = event.target;
+
+        // Do target test.
+        if (!_overTextField &&
+                target is TextField && target.type == TextFieldType.INPUT) {
+            _overTextField = true;
+            _showSystemCursor = true;
+
+        } else if (_overTextField &&
+                !(target is TextField && target.type == TextFieldType.INPUT)) {
+            _overTextField = false;
+            _showCustomCursor = true;
+        }
+
+        // Handle switching between system and custom cursor.
+        if (_showSystemCursor) {
+            _showSystemCursor = false;
+            _cursorHolder.visible = false;
+            Mouse.show();
+        }
+        if (_showCustomCursor) {
+            _showCustomCursor = false;
+            _cursorHolder.visible = true;
+            Mouse.hide();
+        }
+    }
+
+    /** A mapping of all assigned cursor ids. */
+    private static const _cursors :Map = Maps.newMapOf(int);
+
+    private static var _currentCursorId :int = 0; // SYSTEM_CURSOR
+
+    private static var _nextCursorId :int = 2; // skip BUSY
+
+    private static var _initialized :Boolean = false;
+
+    private static var _cursorHolder :Sprite;
+
+    private static var _currentXOffset :int = 0;
+    private static var _currentYOffset :int = 0;
+
+    /** A record for the busy cursor (where it can't be removed). */
+    private static var _busyCursor :CursorRecord;
+
+    private static var _overTextField :Boolean = false;
+
+    private static var _overLink :Boolean = false;
+
+    private static var _showSystemCursor :Boolean = false;
+
+    private static var _showCustomCursor :Boolean = false;
+
+    private static var _systemManager :SystemManager = null;
+}
+}
+
+
+/**
+ */
+class CursorRecord extends Object
+{
+    public function CursorRecord (clazz :Class)
+    {
+        cursor = clazz;
+    }
+
+    /** The class, or instantiated cursor. */
+    public var cursor :Object
+
+    /** The x/y offset for the hotspot. */
+    public var x :Number;
+    public var y :Number;
+}


made it so if you draw a erase box from bottom to top it still works

git-svn-id: f772d44cbf86d9968f12179c1556189f5afcea6e@638 e0ac87d7-b42b-0410-9034-8248a05cb448

--- braineditor/Rect.as
+++ braineditor/Rect.as
@@ -5,8 +5,8 @@
    var mLowerRight:Point;
    //returns an array of shapes that is this shape intersected
    function Rect(upperLeft:Point,lowerRight:Point) {
-      mUpperLeft=upperLeft;
-      mLowerRight=lowerRight;
+      mUpperLeft=upperLeft.minimum(lowerRight);
+      mLowerRight=upperLeft.maximum(lowerRight);
    }
    function isValid() :Boolean{
       return mUpperLeft.x<mLowerRight.x&&mUpperLeft.y<mLowerRight.y;


fixed editor bug where game settings wouldn't save and close until the checkboxes page was visited

--- flexEditor/src/org/arisgames/editor/view/GameDetailsEditorView.as
+++ flexEditor/src/org/arisgames/editor/view/GameDetailsEditorView.as
@@ -431,16 +431,19 @@
 		GameModel.getInstance().game.inventoryCap = inventoryCap.value;
 		GameModel.getInstance().game.description = description.text;

-		GameModel.getInstance().game.noteShareToMap = noteShareToMapCb.selected;
-		GameModel.getInstance().game.noteShareToBook = noteShareToBookCb.selected;
-		GameModel.getInstance().game.playerCreateTags = playerCreateTagsCb.selected;
-		GameModel.getInstance().game.allowtrading = allowtradingCb.selected;
-		GameModel.getInstance().game.isLocational = isLocationalCb.selected;
-		GameModel.getInstance().game.readyForPublic = readyForPublicCb.selected;
-		GameModel.getInstance().game.playerCreateComments = playerCreateCommentsCb.selected;
-		GameModel.getInstance().game.playerLikesNotes = playerLikesNotesCb.selected;
-		GameModel.getInstance().game.showPlayerOnMap = showPlayerOnMapCb.selected;
-
+		if(noteShareToMapCb) //if the checkbox page has loaded
+		{
+			GameModel.getInstance().game.noteShareToMap = noteShareToMapCb.selected;
+			GameModel.getInstance().game.noteShareToBook = noteShareToBookCb.selected;
+			GameModel.getInstance().game.playerCreateTags = playerCreateTagsCb.selected;
+			GameModel.getInstance().game.allowtrading = allowtradingCb.selected;
+			GameModel.getInstance().game.isLocational = isLocationalCb.selected;
+			GameModel.getInstance().game.readyForPublic = readyForPublicCb.selected;
+			GameModel.getInstance().game.playerCreateComments = playerCreateCommentsCb.selected;
+			GameModel.getInstance().game.playerLikesNotes = playerLikesNotesCb.selected;
+			GameModel.getInstance().game.showPlayerOnMap = showPlayerOnMapCb.selected;
+		}
+
 		var introNode:Node = introNodeCbo.selectedItem as Node;
 		GameModel.getInstance().game.introNodeId = introNode.nodeId;
 		var selectedNode:Node = completeNodeCbo.selectedItem as Node;


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

--- frameworks/projects/charts/src/mx/styles/metadata/LeadingStyle.as
+++ frameworks/projects/charts/src/mx/styles/metadata/LeadingStyle.as
@@ -1,2 +1,23 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  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.
+//
+////////////////////////////////////////////////////////////////////////////////

+/**
+ *  Additional vertical space between lines of text.
+ *
+ *
The default value is 2.

+ *
The default value for the ComboBox control is 0.

+ *
+ *  @langversion 3.0
+ *  @playerversion Flash 9
+ *  @playerversion AIR 1.1
+ *  @productversion Flex 3
+ */
 [Style(name="leading", type="Number", format="Length", inherit="yes")]


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

--- frameworks/projects/charts/src/mx/styles/metadata/LeadingStyle.as
+++ frameworks/projects/charts/src/mx/styles/metadata/LeadingStyle.as
@@ -0,0 +1,23 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  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.
+//
+////////////////////////////////////////////////////////////////////////////////
+
+/**
+ *  Additional vertical space between lines of text.
+ *
+ *
The default value is 2.

+ *
The default value for the ComboBox control is 0.

+ *
+ *  @langversion 3.0
+ *  @playerversion Flash 9
+ *  @playerversion AIR 1.1
+ *  @productversion Flex 3
+ */
+[Style(name="leading", type="Number", format="Length", inherit="yes")]


Transferred from the Adobe Open Source Subversion Repository

Revision: 11504
Author:   hmuller@adobe.com
Date:     2009-11-06T16:44:48.732405Z

Log Message:
-----------
Revised the way failed items are handled in AsyncListView: failed items are now cached locally, just like pending items.

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

Modified Paths:
--------------
/flex/sdk/trunk/frameworks/projects/framework/src/mx/collections/AsyncListView.as

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

--- frameworks/projects/framework/src/mx/collections/AsyncListView.as
+++ frameworks/projects/framework/src/mx/collections/AsyncListView.as
@@ -18,6 +18,8 @@
 import mx.core.mx_internal;
 import mx.events.CollectionEvent;
 import mx.events.CollectionEventKind;
+import mx.events.PropertyChangeEvent;
+import mx.events.PropertyChangeEventKind;
 import mx.utils.OnDemandEventDispatcher;

 use namespace mx_internal;  // for mx_internal functions pendingItemSucceeded,Failed()
@@ -56,11 +58,11 @@
  *  like List and ComboBox, which don't provide intrinsic support for
  *  ItemPendingError handling.

  *
- *
AsyncListView does not support re-insertion of pending items.  Once a pending
- *  item is removed, its connection to a pending request for data is lost.  Using
- *  drag and drop to move a pending item in an ASyncListView, or sorting an ASyncListView
- *  that contains pending items, is not supported because these operations remove
- *  and then re-insert list items.

+ *
AsyncListView does not support re-insertion of pending or failed items.  Once
+ *  a failed or pending item is removed, its connection to a pending request for data
+ *  is lost.  Using drag and drop to move a pending item in an ASyncListView, or sorting
+ *  an ASyncListView that contains pending or failed items, is not supported because
+ *  these operations remove and then re-insert list items.

  *
  *  @langversion 3.0
  *  @playerversion Flash 9
@@ -150,12 +152,14 @@
                 responder.index = -1;
         }
         pendingResponders.length = 0;
-    }
-
-    /**
-     *  @private
-     *  Fixup the pendingResponders array after a change to the list.  Generally speaking,
-     *  if a list[index] item changes, the pending responder for that index is no longer needed.
+        failedItems.length = 0;
+    }
+
+    /**
+     *  @private
+     *  Fixup the pendingResponders and failedItems arrays after a change to the list.
+     *  Generally speaking, if a list[index] item changes, the pending responder for
+     *  that index is no longer needed.
      *
      *  All "collectionChange" events are redispatched to the AsyncListView listeners.
      */
@@ -222,17 +226,17 @@
      *  case a contiguous block of items (ce.items) beginning with index=ce.location
      *  has been changed.  If there are any pending requests for these indices, we
      *  assume they're no longer valid, i.e. we assume that getItemAt() should no longer
-     *  return the pending item.
-     *
-     *  Note that when a pending request succeeds, a REPLACE event is dispatched by
-     *  the underlying list.   When a pending request fails, we set the corresponding
-     *  list item, which also causes a REPLACE even to be dispatched.
+     *  return the pending item.  Likewise for failed items.
      */
     private function deletePendingResponders(ce:CollectionEvent):void
     {
         var index:int = ce.location;
         for each (var item:Object in ce.items)
-            deletePendingResponder(index++);
+        {
+            deletePendingResponder(index);
+            delete failedItems[index];
+            index += 1;
+        }
     }

     /**
@@ -248,7 +252,7 @@
         var toIndex:int = ce.location;
         for each (var item:Object in ce.items)
         {
-            const pendingResponder:ListItemResponder = pendingResponders[fromIndex];
+            var pendingResponder:ListItemResponder = pendingResponders[fromIndex];
             if (pendingResponder)
             {
                 delete pendingResponders[fromIndex];
@@ -256,6 +260,14 @@
                 deletePendingResponder(toIndex); // in case we're copying over a pending request
                 pendingResponders[toIndex] = pendingResponder;
             }
+
+            var failedItem:* = failedItems[fromIndex];
+            if (failedItem !== undefined)
+            {
+                delete failedItems[fromIndex];
+                failedItems[toIndex] = failedItem;
+            }
+
             fromIndex += 1;
             toIndex += 1;
         }
@@ -266,7 +278,8 @@
      *  Handler for a CollectionEventKind.ADD.  The event indicates
      *  that a block of ce.items.length items starting at ce.location was inserted,
      *  which implies that all of the pendingResponders whose index is greater than or
-     *  equal to ce.location, must be shifted right by ce.items.length.
+     *  equal to ce.location, must be shifted right by ce.items.length.  The failedItems
+     *  array is handled similarly.
      */
     private function shiftPendingRespondersRight(ce:CollectionEvent):void
     {
@@ -280,7 +293,17 @@
             if (responder.index >= startIndex)
                 responder.index += delta;
             pendingResponders[responder.index] = responder;
-        }
+        }
+
+        for (var index:int = failedItems.length - 1; index >= startIndex; index--)
+        {
+            var failedItem:* = failedItems[index];
+            if (failedItem !== undefined)
+            {
+                delete failedItems[index];
+                failedItems[index + delta] = failedItem;
+            }
+        }
     }

     /**
@@ -288,7 +311,8 @@
      *  Handler for a CollectionEventKind.REMOVE.  The event indicates
      *  that a block of ce.items.length items starting at ce.location was removed,
      *  which implies that all of the pendingResponders whose index is greater than or
-     *  equal to ce.location, must be shifted left by ce.items.length.
+     *  equal to ce.location, must be shifted left by ce.items.length.  The failedItems
+     *  array is handled similarly.
      */
     private function shiftPendingRespondersLeft(ce:CollectionEvent):void
     {
@@ -302,7 +326,18 @@
             if (responder.index >= startIndex)
                 responder.index -= delta;
             pendingResponders[responder.index] = responder;
-        }
+        }
+
+        const failedItemsLength:int = failedItems.length;
+        for (var index:int = startIndex; index < failedItemsLength; index++)
+        {
+            var failedItem:* = failedItems[index];
+            if (failedItem !== undefined)
+            {
+                delete failedItems[index];
+                failedItems[index - delta] = failedItem;
+            }
+        }
     }

     /**
@@ -440,6 +475,7 @@
     //--------------------------------------------------------------------------

     private const pendingResponders:Array = new Array();
+    private const failedItems:Array = new Array();

     /**
      *  @private
@@ -468,12 +504,38 @@
     {
         delete pendingResponders[index];

-        var item:Object = null;
-        if (createFailedItemFunction !== null)
-        {
-            item = createFailedItemFunction(index, info);
-            list.setItemAt(item, index);
-        }
+        if (createFailedItemFunction === null)
+            return;
+
+        const item:Object = createFailedItemFunction(index, info);
+        failedItems[index] = item;
+
+        // dispatch collection and property change events
+
+        const hasCollectionListener:Boolean = hasEventListener(CollectionEvent.COLLECTION_CHANGE);
+        const hasPropertyListener:Boolean = hasEventListener(PropertyChangeEvent.PROPERTY_CHANGE);
+        var pce:PropertyChangeEvent;
+
+        if (hasCollectionListener || hasPropertyListener)
+        {
+            pce = new PropertyChangeEvent(PropertyChangeEvent.PROPERTY_CHANGE);
+            pce.kind = PropertyChangeEventKind.UPDATE;
+            pce.oldValue = null;
+            pce.newValue = item;
+            pce.property = index;
+        }
+
+        if (hasCollectionListener)
+        {
+            var ce:CollectionEvent = new CollectionEvent(CollectionEvent.COLLECTION_CHANGE);
+            ce.kind = CollectionEventKind.REPLACE;
+            ce.location = index;
+            ce.items.push(pce);
+            dispatchEvent(ce);
+        }
+
+        if (hasPropertyListener)
+            dispatchEvent(pce);
     }

@@ -556,6 +618,10 @@
     {
         if (!list)
             return null;
+
+        const failedItem:* = failedItems[index];
+        if (failedItem !== undefined)
+            return failedItem;

         const pendingResponder:ListItemResponder = pendingResponders[index];
         if (pendingResponder)
@@ -588,6 +654,10 @@
      */
     public function getItemIndex(item:Object):int
     {
+        const failedItemIndex:int = failedItems.indexOf(item);
+        if (failedItemIndex != -1)
+            return failedItemIndex;
+
         for each (var responder:ListItemResponder in pendingResponders)
             if (responder && responder.item === item)
                 return responder.index;


Transferred from the Adobe Open Source Subversion Repository

Revision: 10828
Author:   jszeto@adobe.com
Date:     2009-10-02T17:41:48.523309Z

Log Message:
-----------
FXG stroke and fill translation fix

http://bugs.adobe.com/jira/browse/SDK-23257 - Gradient translation should occur from 0,0, not the upper left bounds

The current API only passes in the shape's bounds. I have added a new targetOrigin parameter to IFill.begin, IStroke.apply and IStroke.createGraphicsStroke of type Point. It is the origin (0,0) of the shape in the target graphic's coordinate space.

Changed the logic in the gradient stroke and fills. The x and y transform properties are now positioned relative to the origin instead of to the top left corner of the bounds. If no x and y are set, then the default behavior remains the same.

Removed the centering logic in LinearGradientStroke when scaleX was set.

This API change has been approved by PARB.

QE notes: Need to add tests that exercise this logic
Doc notes: Need to document additions to the API
Bugs: SDK-23257
Reviewer: Deepa
Tests run: spark/primitives, gumbo/components
Is noteworthy for integration: Yes, modifications to the API

Modified Paths:
--------------
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/spark/src/spark/primitives/supportClasses/FilledElement.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/graphics/IFill.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/graphics/IStroke.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/graphics/LinearGradientStroke.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/graphics/SolidColorStroke.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/spark/src/spark/primitives/Line.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/graphics/RadialGradientStroke.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/graphics/BitmapFill.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/graphics/GradientStroke.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/spark/src/spark/primitives/Path.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/graphics/LinearGradient.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/graphics/SolidColor.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/spark/src/spark/primitives/supportClasses/StrokedElement.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/graphics/RadialGradient.as</path>

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

--- frameworks/projects/framework/src/mx/graphics/SolidColorStroke.as
+++ frameworks/projects/framework/src/mx/graphics/SolidColorStroke.as
@@ -18,6 +18,7 @@
 import flash.display.GraphicsStroke;
 import flash.display.JointStyle;
 import flash.events.EventDispatcher;
+import flash.geom.Point;
 import flash.geom.Rectangle;

 import mx.events.PropertyChangeEvent;
@@ -469,16 +470,14 @@
 	//--------------------------------------------------------------------------

 	/**
-	 *  Applies the properties to the specified Graphics object.
-	 *
-	 *  @param g The Graphics object to which the SolidColorStroke's styles are applied.
-	 *
-	 *  @langversion 3.0
-	 *  @playerversion Flash 9
-	 *  @playerversion AIR 1.1
-	 *  @productversion Flex 3
-	 */
-	public function apply(graphics:Graphics, bounds:Rectangle = null):void
+	 *  @inheritDoc
+	 *
+	 *  @langversion 3.0
+	 *  @playerversion Flash 9
+	 *  @playerversion AIR 1.1
+	 *  @productversion Flex 3
+	 */
+	public function apply(graphics:Graphics, targetBounds:Rectangle, targetOrigin:Point):void
 	{
 		graphics.lineStyle(weight, color, alpha, pixelHinting,
 					scaleMode, caps, joints, miterLimit);
@@ -487,7 +486,7 @@
     /**
      *  @inheritDoc
      */
-	public function createGraphicsStroke(bounds:Rectangle):GraphicsStroke
+	public function createGraphicsStroke(targetBounds:Rectangle, targetOrigin:Point):GraphicsStroke
 	{
 	    // Construct a new GraphicsStroke object and set all of
         // its properties to match the SolidColorStroke's


Transferred from the Adobe Open Source Subversion Repository

Revision: 19117
Author:   cframpto@adobe.com
Date:     2010-12-07T21:39:57.453177Z

Log Message:
-----------
Add protected createGridSelection() methods to DataGrid and Grid so GridSelection can be subclassed.  Fix metadata on Grid column.  Fix metadata and doc for miterLimit minValue for Stroke classes.

QE notes:
Doc notes:
Bugs: SDK-28734, SDK-28655
Reviewer: Hans (DG), Darrell
Tests run: cyclone which took 2 1/2 hours!
Is noteworthy for integration:

Modified Paths:
--------------
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/spark/src/spark/components/Grid.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/framework/src/mx/graphics/SolidColorStroke.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/framework/src/mx/graphics/GradientStroke.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/framework/src/mx/graphics/Stroke.as</path>

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

--- frameworks/projects/framework/src/mx/graphics/SolidColorStroke.as
+++ frameworks/projects/framework/src/mx/graphics/SolidColorStroke.as
@@ -119,7 +119,7 @@
 	 *  The default value is JointStyle.ROUND.
 	 *
 	 *  @param miterLimit Indicates the limit at which a miter is cut off.
-	 *  Valid values range from 0 to 255.
+	 *  Valid values range from 1 to 255.
 	 *  The default value is 3.
 	 *
 	 *  @langversion 3.0
@@ -305,11 +305,11 @@
 	private var _miterLimit:Number = 3;

 	[Bindable("propertyChange")]
-	[Inspectable(category="General", minValue="0.0", maxValue="255.0")]
+	[Inspectable(category="General", minValue="1.0", maxValue="255.0")]

 	/**
 	 *  Indicates the limit at which a miter is cut off.
-	 *  Valid values range from 0 to 255.
+	 *  Valid values range from 1 to 255.
 	 *
 	 *  @default 3
 	 *


Transferred from the Adobe Open Source Subversion Repository

Revision: 10461
Author:   gruehle@adobe.com
Date:     2009-09-21T16:55:01.374911Z

Log Message:
-----------
Temporarily revert 10435. It broke too many mustella bitmap comparisons.

Checkintests pass.

Modified Paths:
--------------
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/skins/halo/ApplicationBackground.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/spark/src/spark/components/SkinnableContainer.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/spark/src/spark/skins/spark/SkinnableContainerSkin.mxml</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/sparkskins/src/mx/skins/spark/BorderSkin.mxml</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/defaults.css</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/spark/src/spark/components/Border.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/spark/src/spark/components/Panel.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/styles/metadata/BorderStyles.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/spark/src/spark/skins/spark/SkinnableDataContainerSkin.mxml</path>

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

--- frameworks/projects/mx/src/mx/skins/halo/ApplicationBackground.as
+++ frameworks/projects/mx/src/mx/skins/halo/ApplicationBackground.as
@@ -105,8 +105,18 @@

 			fillColors = [];

-            fillColors[0] = ColorUtil.adjustBrightness(bgColor, 15);
-            fillColors[1] = ColorUtil.adjustBrightness(bgColor, -25);
+            // Starting in Flex 4, the background color is a solid instead of
+            // a gradient.
+            if (FlexVersion.compatibilityVersion >= FlexVersion.VERSION_4_0)
+            {
+                fillColors[0] = bgColor;
+                fillColors[1] = bgColor;
+            }
+            else
+            {
+                fillColors[0] = ColorUtil.adjustBrightness(bgColor, 15);
+                fillColors[1] = ColorUtil.adjustBrightness(bgColor, -25);
+            }
 		}

 		if (!fillAlphas)


remove useless position < 0 test in Group.removeChildAt() since the specified position is uint

--- src/aerys/minko/scene/node/Group.as
+++ src/aerys/minko/scene/node/Group.as
@@ -263,7 +263,7 @@

 		public function removeChildAt(position : uint) : Group
 		{
-			if (position >= _numChildren || position < 0)
+			if (position >= _numChildren)
 				throw new Error('The scene node is not a child of the caller.');

 			(_children[position] as ISceneNode).parent = null;


fix typo in error message

fix typo in error message

--- src/aerys/minko/scene/node/Group.as
+++ src/aerys/minko/scene/node/Group.as
@@ -238,7 +238,7 @@
 		public function addChildAt(node : ISceneNode, position : uint) : Group
 		{
 			if (!node)
-				throw new Error('Parameter \'scene\' must not be null.');
+				throw new Error('Parameter \'node\' must not be null.');

 			node.parent = this;


fix creation progress

fix creation progress

--- src/ageofai/home/model/HomeModel.as
+++ src/ageofai/home/model/HomeModel.as
@@ -9,6 +9,7 @@
     import ageofai.home.event.HomeEvent;
     import ageofai.home.vo.HomeVO;
     import ageofai.villager.vo.VillagerVO;
+    import flash.utils.Dictionary;

     import caurina.transitions.Tweener;

@@ -22,6 +23,8 @@
         private var _homes:Vector.<HomeVO>;
         private var _homeAI:HomeAI;

+        private var _progressDic:Dictionary = new Dictionary(true);
+
         public function HomeModel()
         {
             this._homeAI = new HomeAI();
@@ -49,14 +52,8 @@
                         var home:HomeVO = this._homes[ i ];

                         var creationTimer:Timer = new Timer( CHome.VILLAGER_CREATION_TIME / CHome.VILLAGER_CREATION_TIMELY, CHome.VILLAGER_CREATION_TIMELY );
-                        creationTimer.addEventListener( TimerEvent.TIMER, function ():void
-                        {
-                            var homeEvent:HomeEvent = new HomeEvent( HomeEvent.VILLAGER_CREATION_IN_PROGRESS );
-                            homeEvent.progressPercentage = creationTimer.currentCount * CHome.VILLAGER_CREATION_TIMELY;
-                            homeEvent.homeVO = home;
-
-                            dispatch( homeEvent );
-                        } );
+                        creationTimer.addEventListener( TimerEvent.TIMER, creationTimerHandler );
+                        _progressDic[creationTimer] = home;

                         Tweener.addTween( this, {
                             time: 2,
@@ -70,6 +67,16 @@
             }
         }

+        private function creationTimerHandler(e:TimerEvent):void
+        {
+            var home:HomeVO = _progressDic[e.currentTarget];
+            var homeEvent:HomeEvent = new HomeEvent( HomeEvent.VILLAGER_CREATION_IN_PROGRESS );
+            homeEvent.progressPercentage = e.currentTarget.currentCount * CHome.VILLAGER_CREATION_TIMELY;
+            homeEvent.homeVO = home;
+
+            dispatch( homeEvent );
+        }
+
         private function creationTimerCompleteHandler( homeVO:HomeVO ):void
         {
             homeVO.villagerIsCreating = false;


Changed ready function to global (on window).

--- cpp/apps/bitmunk/flash/SocketPool.as
+++ cpp/apps/bitmunk/flash/SocketPool.as
@@ -20,7 +20,7 @@
    {
       import flash.events.Event;
       import flash.events.EventDispatcher;
-	  import flash.errors.IOError;
+	   import flash.errors.IOError;
       import flash.events.IOErrorEvent;
       import flash.events.ProgressEvent;
       import flash.events.SecurityErrorEvent;
@@ -93,7 +93,7 @@
                ExternalInterface.addCallback("inflate", inflate);

                // socket pool is now ready
-               ExternalInterface.call("sp.ready");
+               ExternalInterface.call("window.krypto.socketPool.ready");
             }
             catch(e:Error)
             {


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

--- frameworks/projects/advancedgrids/src/mx/olap/IOLAPSchema.as
+++ frameworks/projects/advancedgrids/src/mx/olap/IOLAPSchema.as
@@ -0,0 +1,86 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  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.olap
+{
+
+import mx.collections.IList;
+
+/**
+ *  The IOLAPSchema interface represents the OLAP schema.
+ *
+ *  @see mx.olap.OLAPSchema
+ *
+ *  @langversion 3.0
+ *  @playerversion Flash 9
+ *  @playerversion AIR 1.1
+ *  @productversion Flex 3
+ */
+public interface IOLAPSchema
+{
+	//--------------------------------------------------------------------------
+	//
+	//  Properties
+	//
+	//--------------------------------------------------------------------------
+
+	//----------------------------------
+	//  cubes
+	//----------------------------------
+
+	/**
+     *  All the cubes known by this schema, as a list of IOLAPCube instances.
+     *
+     *  The returned list might represent remote data and therefore can throw
+     *  an ItemPendingError.
+     *
+     *  @langversion 3.0
+     *  @playerversion Flash 9
+     *  @playerversion AIR 1.1
+     *  @productversion Flex 3
+     */
+    function get cubes():IList;// (of IOLAPCube)
+
+    //--------------------------------------------------------------------------
+	//
+	//  Methods
+	//
+	//--------------------------------------------------------------------------
+
+     /**
+     *  Creates an OLAP cube from the schema.
+     *
+     *  @param name The name of the cube.
+     *
+     *  @return The IOLAPCube instance.
+     *
+     *  @langversion 3.0
+     *  @playerversion Flash 9
+     *  @playerversion AIR 1.1
+     *  @productversion Flex 3
+     */
+    function createCube(name:String):IOLAPCube;
+
+     /**
+     *  Returns a cube specified by name.
+     *
+     *  @param name The name of the cube.
+     *
+     *  @return The IOLAPCube instance, or null if one is not found.
+     *
+     *  @langversion 3.0
+     *  @playerversion Flash 9
+     *  @playerversion AIR 1.1
+     *  @productversion Flex 3
+     */
+    function getCube(name:String):IOLAPCube;
+}
+}


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

--- frameworks/projects/mx/src/mx/styles/metadata/AlignStyles.as
+++ frameworks/projects/mx/src/mx/styles/metadata/AlignStyles.as
@@ -1,11 +1,19 @@
 ////////////////////////////////////////////////////////////////////////////////
 //
-//  ADOBE SYSTEMS INCORPORATED
-//  Copyright 2005-2006 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.
 //
 ////////////////////////////////////////////////////////////////////////////////


hopefully added port to absolutized path

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

--- src/reprise/css/CSSParsingHelper.as
+++ src/reprise/css/CSSParsingHelper.as
@@ -134,6 +134,7 @@
 			}

 			var host : String = sourceURL.host() || '';
+			if (sourceURL.port()) host += ':' + sourceURL.port();
 			return (sourceURL.scheme() || '') + host + absolutePath;
 		}


Added a toString method which allows you to see what values were set for a Padding.

Signed-off-by: Don-Duong Quach <810608f14f8c036b578d4e5c6fb9aa2c363c1b16@yahoo.com>

--- src/org/openPyro/core/Padding.as
+++ src/org/openPyro/core/Padding.as
@@ -40,6 +40,11 @@
 		{
 			return _bottom;
 		}
+
+		public function toString():String
+		{
+			return '[org.openPyro.core.Padding - ' + _top + ' ' + _right + ' ' + _bottom + ' ' + _left + ']';
+		}

 	}
 }


remove unused import

remove unused import

--- src/org/mangui/osmf/plugins/HLSDynamicPlugin.as
+++ src/org/mangui/osmf/plugins/HLSDynamicPlugin.as
@@ -2,8 +2,6 @@
 {
 	import flash.display.Sprite;
 	import flash.system.Security;
-
-	import org.mangui.osmf.plugins.HLSPlugin;
 	import org.osmf.media.PluginInfo;

 	public class HLSDynamicPlugin extends Sprite


Implemented Feature #933 ArcBallCamera with customizable speed/acceleration/inertia (at least inertia)

--- src/aerys/minko/scene/controller/camera/ArcBallController.as
+++ src/aerys/minko/scene/controller/camera/ArcBallController.as
@@ -5,6 +5,7 @@
 	import aerys.minko.scene.node.ISceneNode;
 	import aerys.minko.scene.node.Scene;
 	import aerys.minko.type.math.Matrix4x4;
+	import aerys.minko.type.math.Quaternion;
 	import aerys.minko.type.math.Vector4;

 	import flash.display.BitmapData;
@@ -23,9 +24,14 @@

 		private var _enabled			: Boolean	= true;

+		private var _previousTime		: uint		= 0;
+
 		private var _distance			: Number	= 1.;
 		private var _yaw				: Number	= 0;
 		private var _pitch				: Number	= 0;
+		private var _newDistance		: Number	= 1.;
+		private var _newYaw				: Number	= 0;
+		private var _newPitch			: Number	= 0;
 		private var _update				: Boolean	= true;

 		private var _position			: Vector4	= new Vector4(0, 0, 0, 1);
@@ -39,6 +45,29 @@
 		private var _yawStep			: Number	= 0.01;
 		private var _pitchStep			: Number	= 0.01;

+		private var _inertia			: Number	= 1.0;
+		private var _interpolationSpeed	: Number	= 1;
+
+		public function get inertia() : Number
+		{
+			return _inertia;
+		}
+
+		public function set inertia(value : Number):void
+		{
+			_inertia = value;
+		}
+
+		public function get interpolationSpeed() : Number
+		{
+			return _interpolationSpeed;
+		}
+
+		public function set interpolationSpeed(value : Number):void
+		{
+			_interpolationSpeed = value;
+		}
+
 		public function get enabled() : Boolean
 		{
 			return _enabled;
@@ -58,11 +87,11 @@
 		 */
 		public function get distance() : Number
 		{
-			return _distance;
+			return _newDistance;
 		}
 		public function set distance(value : Number) : void
 		{
-			_distance = value;
+			_newDistance = value;
 			_update = true;
 		}

@@ -71,11 +100,11 @@
 		 */
 		public function get yaw() : Number
 		{
-			return _yaw;
+			return _newYaw;
 		}
 		public function set yaw(value : Number) : void
 		{
-			_yaw = value;
+			_newYaw = value;
 			_update = true;
 		}

@@ -84,11 +113,11 @@
 		 */
 		public function get pitch() : Number
 		{
-			return _pitch;
+			return _newPitch;
 		}
 		public function set pitch(value : Number)	: void
 		{
-			_pitch = value;
+			_newPitch = value;
 			_update = true;
 		}

@@ -175,7 +204,7 @@
 		{
 			super();

-			_pitch = Math.PI * .5;
+			_newPitch = Math.PI * .5;
 			_lookAt.changed.add(updateNextFrameHandler);
 			_up.changed.add(updateNextFrameHandler);
 		}
@@ -210,28 +239,50 @@
 														   destination	: BitmapData,
 														   time			: Number) : void
 		{
-			updateTargets();
-		}
-
-		private function updateTargets() : void
-		{
-			if (_update && _enabled)
+			updateTargets((time - _previousTime) * .001);
+			_previousTime = time;
+		}
+
+		private function clampValues() : void
+		{
+			if (_newDistance < _minDistance)
+				_newDistance = _minDistance;
+			if (_newDistance > _maxDistance)
+				_newDistance = _maxDistance;
+			if (_newPitch <= EPSILON)
+				_newPitch = EPSILON;
+			if (_newPitch > Math.PI - EPSILON)
+				_newPitch = Math.PI - EPSILON;
+		}
+
+		private function dampValues(time : Number, dampingFactor : Number) : void
+		{
+			_distance	= interpolate(_distance,	_newDistance,	time,	dampingFactor);
+			_pitch		= interpolate(_pitch,		_newPitch,		time,	dampingFactor);
+			_yaw		= interpolate(_yaw,			_newYaw, 		time,	dampingFactor);
+		}
+
+		private function updateTargets(time : Number = 1) : void
+		{
+			var enableInertia	: Boolean	= (_inertia != 1. && _interpolationSpeed != 1.);
+			if (enableInertia || (_update && _enabled))
 			{
-				if (_distance < _minDistance)
-					_distance = _minDistance;
-				if (_distance > _maxDistance)
-					_distance = _maxDistance;
-				if (_pitch <= EPSILON)
-					_pitch = EPSILON;
-				if (_pitch > Math.PI - EPSILON)
-					_pitch = Math.PI - EPSILON;
+				clampValues();
+
+				if (enableInertia)
+					dampValues(time * _interpolationSpeed, _inertia);
+				else
+				{
+					_yaw = _newYaw;
+					_pitch = _newPitch;
+					_distance = _newDistance;
+				}

 				_position.set(
 					_lookAt.x + _distance * Math.cos(_yaw) * Math.sin(_pitch),
 					_lookAt.y + _distance * Math.cos(_pitch),
 					_lookAt.z + _distance * Math.sin(_yaw) * Math.sin(_pitch)
 				);
-
 				TMP_MATRIX.lookAt(_lookAt, _position, _up);

 				var numTargets : uint = this.numTargets;
@@ -244,8 +295,8 @@

 		protected function mouseWheelHandler(e : MouseEvent) : void
 		{
-			_distance	-=	e.delta * _distanceStep;
-			_update		=	true;
+			_newDistance	-=	e.delta * _distanceStep;
+			_update			=	true;
 		}

 		protected function mouseMoveHandler(e : MouseEvent) : void
@@ -253,8 +304,8 @@
 			// compute position
 			if (e.buttonDown && _enabled)
 			{
-				_yaw	+= (_mousePosition.x - e.stageX) * _yawStep;
-				_pitch	+= (_mousePosition.y - e.stageY) * _pitchStep;
+				_newYaw		+= (_mousePosition.x - e.stageX) * _yawStep;
+				_newPitch		+= (_mousePosition.y - e.stageY) * _pitchStep;

 				_update = true;
 			}
@@ -266,5 +317,10 @@
 		{
 			_update = true;
 		}
+
+		private function interpolate(src : Number, dst : Number, dt : Number, factor : Number) : Number
+		{
+			return (((src * factor) + (dst * dt)) / (factor + dt));
+		}
 	}
 }


comment

comment

git-svn-id: 8a2ccb88241e16c78017770bc38d91d6d5396a5a@60880 6b8eccd3-e8c5-4e7d-8186-e12b5326b719

--- generator/sources/as3/commands/MultiRequest.as
+++ generator/sources/as3/commands/MultiRequest.as
@@ -73,11 +73,13 @@
 						}
 					}

+					// add parameters which are not in the map but are in the request
 					if (!inMap && argsArr[k]) //if not in the multi request map
 					{
 						keyArray.push((j + 1) + ":" + key);
 						valueArr.push(decodeURIComponent(argsArr[k].split('=')[1]));
 					}
+					//TODO add params which ARE in the map and are NOT in the request (some params are removed if they have default values)
 				}
 			}