Transferred from the Adobe Open Source Subversion Repository

Revision: 11085
Author:   cframpto@adobe.com
Date:     2009-10-22T18:10:59.733258Z

Log Message:
-----------
Implement indent, blockIndent, leftMargin and rightMargin and the interactions between them for FTETextField

QE notes: if rightMargin < 0 text isn't always being clipped correctly (will need to go back and fix this later)
Doc notes:
Bugs: SDK-22761, SDK-22832, SDK-23372, SDK-23440, SDK-23567, SDK-23604, SDK-23608, SDK-23609, SDK-23610
Reviewer: Gordon
Tests run: checkintests
Is noteworthy for integration: no

Modified Paths:
--------------
/flex/sdk/trunk/frameworks/projects/spark/src/mx/core/FTETextField.as

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

--- frameworks/projects/spark/src/mx/core/FTETextField.as
+++ frameworks/projects/spark/src/mx/core/FTETextField.as
@@ -19,6 +19,7 @@
 import flash.events.Event;
 import flash.events.MouseEvent;
 import flash.events.TextEvent;
+import flash.geom.Point;
 import flash.geom.Rectangle;
 import flash.text.StyleSheet;
 import flash.text.TextField;
@@ -118,7 +119,7 @@
 		config.textFlowInitialFormat = format;
 		preservingHTMLImporter =
 			TextConverter.getImporter(TextConverter.TEXT_FIELD_HTML_FORMAT, config);
-		preservingHTMLImporter.throwOnError = true;
+		preservingHTMLImporter.throwOnError = false;

 		// Create an exporter for TEXT_FIELD_HTML_FORMAT.
 		htmlExporter =
@@ -169,8 +170,8 @@
 	 *  Masks for bits inside the 'flags' var
 	 *  which control what work validateNow() needs to do.
 	 */
-	private static const FLAG_TEXT_CHANGED:uint = 1 << 6;
-	private static const FLAG_HTML_TEXT_CHANGED:uint = 1 << 7;
+	private static const FLAG_TEXT_SET:uint = 1 << 6;
+	private static const FLAG_HTML_TEXT_SET:uint = 1 << 7;
 	private static const FLAG_TEXT_LINES_INVALID:uint = 1 << 8;
 	private static const FLAG_GRAPHICS_INVALID:uint = 1 << 9;

@@ -190,8 +191,6 @@
 	 *  @private
 	 */
 	private static const ALL_INVALIDATION_FLAGS:uint =
-		FLAG_TEXT_CHANGED |
-		FLAG_HTML_TEXT_CHANGED |
 		FLAG_TEXT_LINES_INVALID |
 		FLAG_GRAPHICS_INVALID;

@@ -1120,9 +1119,9 @@
 		// _text is now invalid and will get regenerated on demand.
 		_text = null;

-		clearFlag(FLAG_TEXT_CHANGED);
-
-		setFlag(FLAG_HTML_TEXT_CHANGED |
+		clearFlag(FLAG_TEXT_SET);
+
+		setFlag(FLAG_HTML_TEXT_SET |
 				FLAG_TEXT_LINES_INVALID |
 				FLAG_GRAPHICS_INVALID);

@@ -1586,9 +1585,9 @@
 		// _htmlText is now invalid and will get regenerated on demand
 		_htmlText = null;

-		clearFlag(FLAG_HTML_TEXT_CHANGED);
-
-		setFlag(FLAG_TEXT_CHANGED |
+		clearFlag(FLAG_HTML_TEXT_SET);
+
+		setFlag(FLAG_TEXT_SET |
 				FLAG_TEXT_LINES_INVALID |
 				FLAG_GRAPHICS_INVALID);

@@ -1625,7 +1624,12 @@
 			return;

 		_defaultTextFormat.color = value;
-
+
+        // These FTE and TLF formatting objects are now invalid
+        // and must be recreated when needed.
+        elementFormat = null;
+        hostFormat = null;
+
 		setFlag(FLAG_TEXT_LINES_INVALID);

 		invalidate();
@@ -2138,8 +2142,10 @@
 		// The nth line is the nth child.
 		var textLine:TextLine = TextLine(getChildAt(lineIndex));

-		var x:Number = textLine.x; // indent, blockIndent, leftMargin
-		var width:Number = textLine.textWidth;
+        // Convert textLine.x to the global coordinate space.  The new point
+        // x is relative to textLine.x.
+        var x:Number = Math.round(textLine.localToGlobal(new Point(0, 0)).x);
+        var width:Number = Math.round(textLine.textWidth);
 		var ascent:Number = Math.round(textLine.ascent + textLine.descent)
 		var descent:Number = Math.round(textLine.descent);
 		var leading:Number = Number(_defaultTextFormat.leading);
@@ -2284,6 +2290,11 @@
         if (beginIndex == -1 && endIndex == -1)
         {
             defaultTextFormat = format;
+
+            // The format changed.  Some of the attributes such as indent
+            // and blockIndent require the text to be regenerated.
+            setFlag(FLAG_TEXT_LINES_INVALID | FLAG_GRAPHICS_INVALID);
+
             validateNow();
         }
 	}
@@ -2395,7 +2406,7 @@
 				compositionWidth = _width;
 			}

-			if (testFlag(FLAG_HTML_TEXT_CHANGED))
+			if (testFlag(FLAG_HTML_TEXT_SET))
 			{
 				if (!hostFormat)
 					createHostFormat();
@@ -2434,7 +2445,7 @@
 			if (_textWidth > origWidth || _textHeight > origHeight)
 			{
 				// need to clip
-				//trace("clip");
+                //trace("clip", "_textWidth", _textWidth, "origWidth", origWidth);
 				var r:Rectangle = scrollRect;
 				if (!r)
 					r = new Rectangle();
@@ -2447,7 +2458,7 @@
 			else
 			{
 				// don't need to clip
-				//trace("don't clip");
+				//trace("don't clip", "_textWidth", _textWidth, "origWidth", origWidth);
 				scrollRect = null;
 			}
 		}
@@ -2601,7 +2612,8 @@
 		// and have the correct spacing, but are all left-aligned
 		// starting at (0, 0).
 		// This method will adjust their x and y so that they
-		// are correctly aligned and inset by the left and top padding.
+		// are correctly aligned and inset by the left and top padding and
+        // indent and margins.
 		alignTextLines(innerWidth);

 		_textWidth = Math.round(_textWidth);
@@ -2679,9 +2691,15 @@
 		if (innerWidth < 0 || innerHeight < 0)
 			return paragraphY;

-		var maxLineWidth:Number =
+        var blockIndent:Number = Number(_defaultTextFormat.blockIndent);
+        var indent:Number = Number(_defaultTextFormat.indent);
+        var leftMargin:Number = Number(_defaultTextFormat.leftMargin);
+        var rightMargin:Number = Number(_defaultTextFormat.rightMargin);
+
+		var maxLineWidthBeforeIndent:Number =
 			wordWrap ? innerWidth : TextLine.MAX_LINE_WIDTH;
-
+        var maxLineWidth:Number = maxLineWidthBeforeIndent;
+
 		var n:int = 0;
 		var nextTextLine:TextLine;
 		var nextY:int = paragraphY;
@@ -2693,7 +2711,35 @@
 		// (0, 0, innerWidth, innerHeight), with left alignment.
 		while (true)
 		{
-			var recycleLine:TextLine = TextLineRecycler.getLineForReuse();
+            // Adjust the compose width for indents and margins.
+            if (n <= 1)
+            {
+                var totalIndent:Number = blockIndent + leftMargin;
+                if (n == 0)
+                    totalIndent += indent;
+
+                if (totalIndent < 0)
+                    totalIndent = 0;
+
+                if (!wordWrap)
+                    rightMargin = 0;
+
+                maxLineWidth =
+                    maxLineWidthBeforeIndent - totalIndent - rightMargin;
+
+                // If right margin larger than width, make 1
+                // character wide to match TextField behavior.  This isn't
+                // an exact match since sometimes 2 characters can fit within
+                // the width.
+                if (rightMargin && maxLineWidth < elementFormat.fontSize)
+                    maxLineWidth = elementFormat.fontSize;
+                else if (maxLineWidth < 0)
+                    maxLineWidth = 0;
+                else if (maxLineWidth > TextLine.MAX_LINE_WIDTH)
+                    maxLineWidth = TextLine.MAX_LINE_WIDTH;
+            }
+
+            var recycleLine:TextLine = TextLineRecycler.getLineForReuse();
 			if (recycleLine)
 			{
 				if (fontContext)
@@ -2742,6 +2788,11 @@
 			// Its x position is 0 by default.
 			textLine.y = nextY;

+            // Adjust for positive indent/left margin.  Do it here rather
+            // than at the end when alignment is done so the first
+            // line of each paragraph is indented properly.
+            textLine.x += totalIndent;
+
 			if (_defaultTextFormat.underline)
 			{
 				// FTE doesn't render underlines,
@@ -2762,18 +2813,21 @@
 			}

 			addChild(textLine);
+		}
+
+		return nextY + descent;
+	}
+
+	/**
+	 *  @private
+     *  Returns with _textWidth set.
+	 */
+	private function alignTextLines(innerWidth:Number):void
+	{
+        var alignWidth:Number = isNaN(innerWidth) ? _textWidth : innerWidth;
+
+        var rightMargin:Number = Number(_defaultTextFormat.rightMargin);

-			_textWidth = Math.max(_textWidth, textLine.textWidth);
-		}
-
-		return nextY + descent;
-	}
-
-	/**
-	 *  @private
-	 */
-	private function alignTextLines(innerWidth:Number):void
-	{
 		var align:String = _defaultTextFormat.align;
 		var leftAligned:Boolean =
 			align == "left" && direction == "ltr" ||
@@ -2788,24 +2842,35 @@
 		var leftOffset:Number = PADDING_LEFT;
 		var centerOffset:Number = leftOffset + innerWidth / 2;
 		var rightOffset:Number = leftOffset + innerWidth;
-
-		// Reposition each line if necessary.
-		// based on the horizontal alignment,
-		// and adjusting for the padding.
-		var n:int = numChildren;
-		for (var i:int = 0; i < n; i++)
-		{
-			var textLine:TextLine = TextLine(getChildAt(i));
-
-			if (leftAligned)
-				textLine.x = leftOffset;
-			else if (centerAligned)
-				textLine.x = centerOffset - textLine.textWidth / 2;
-			else if (rightAligned)
-				textLine.x = rightOffset - textLine.textWidth;
-
-			textLine.y += PADDING_TOP;
-		}
+
+        _textWidth = 0;
+
+        // Reposition each line if necessary.
+        // based on the horizontal alignment,
+        // and adjusting for the padding.
+        var n:int = numChildren;
+        for (var i:int = 0; i < n; i++)
+        {
+            var textLine:TextLine = TextLine(getChildAt(i));
+
+            // Adjust text width to include indents and margins so that
+            // autoSize will be correct.
+            var width:Number = textLine.x + textLine.textWidth;
+            if (autoSize == TextFieldAutoSize.NONE || !wordWrap)
+                 width += rightMargin;
+
+            // Only align if there is width to do so.
+            if (leftAligned || width > alignWidth)
+                textLine.x += leftOffset;
+            else if (centerAligned)
+                textLine.x += centerOffset - width / 2;
+            else if (rightAligned)
+                textLine.x += rightOffset - width;
+
+            _textWidth = Math.max(_textWidth, width);
+
+            textLine.y += PADDING_TOP;
+        }
 	}

 	/**
@@ -2815,7 +2880,10 @@
 									 compositionHeight:Number):void
 	{
 		textFlow = htmlImporter.importToFlow(_htmlText);
-
+
+		if (!textFlow)
+            return;
+
 		textFlow.addEventListener(MouseEvent.CLICK, linkClickHandler);

 		textFlow.addEventListener(


Transferred from the Adobe Open Source Subversion Repository

Revision: 19424
Author:   mhorn@adobe.com
Date:     2010-12-16T15:50:47.517780Z

Log Message:
-----------
Update product version @tags

Modified Paths:
--------------
/private/flex/sdk/branches/hero_private/frameworks/projects/spark/src/mx/core/FTETextField.as

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

--- frameworks/projects/spark/src/mx/core/FTETextField.as
+++ frameworks/projects/spark/src/mx/core/FTETextField.as
@@ -64,6 +64,7 @@
      *  @playerversion Flash 10
      *  @playerversion AIR 1.5
      *  @langversion 3.0
+     *  @productversion Flex 4
      */
     public class FTETextField extends Sprite implements IFontContextComponent
     {
@@ -345,6 +346,7 @@
          *  @playerversion Flash 10
          *  @playerversion AIR 1.5
          *  @langversion 3.0
+         *  @productversion Flex 4
          */
         public function FTETextField()
         {
@@ -543,6 +545,7 @@
          *  @playerversion Flash 10
          *  @playerversion AIR 1.5
          *  @langversion 3.0
+         *  @productversion Flex 4
          */
         public function get alwaysShowSelection():Boolean
         {
@@ -572,6 +575,7 @@
          *  @playerversion Flash 10
          *  @playerversion AIR 1.5
          *  @langversion 3.0
+         *  @productversion Flex 4
          */
         public function get antiAliasType():String
         {
@@ -600,6 +604,7 @@
          *  @playerversion Flash 10
          *  @playerversion AIR 1.5
          *  @langversion 3.0
+         *  @productversion Flex 4
          */
         public function get autoSize():String
         {
@@ -644,6 +649,7 @@
          *  @playerversion Flash 10
          *  @playerversion AIR 1.5
          *  @langversion 3.0
+         *  @productversion Flex 4
          */
         public function get background():Boolean
         {
@@ -681,6 +687,7 @@
          *  @playerversion Flash 10
          *  @playerversion AIR 1.5
          *  @langversion 3.0
+         *  @productversion Flex 4
          */
         public function get backgroundColor():uint
         {
@@ -713,6 +720,7 @@
          *  @playerversion Flash 10
          *  @playerversion AIR 1.5
          *  @langversion 3.0
+         *  @productversion Flex 4
          */
         public function get border():Boolean
         {
@@ -755,6 +763,7 @@
          *  @playerversion Flash 10
          *  @playerversion AIR 1.5
          *  @langversion 3.0
+         *  @productversion Flex 4
          */
         public function get borderColor():uint
         {
@@ -791,6 +800,7 @@
          *  @playerversion Flash 10
          *  @playerversion AIR 1.5
          *  @langversion 3.0
+         *  @productversion Flex 4
          */
         public function get bottomScrollV():int
         {
@@ -811,6 +821,7 @@
          *  @playerversion Flash 10
          *  @playerversion AIR 1.5
          *  @langversion 3.0
+         *  @productversion Flex 4
          */
         public function get caretIndex():int
         {
@@ -827,6 +838,7 @@
          *  @playerversion Flash 10
          *  @playerversion AIR 1.5
          *  @langversion 3.0
+         *  @productversion Flex 4
          */
         public function get condenseWhite():Boolean
         {
@@ -867,6 +879,7 @@
          *  @playerversion Flash 10
          *  @playerversion AIR 1.5
          *  @langversion 3.0
+         *  @productversion Flex 4
          */
         public function get defaultTextFormat():TextFormat
         {
@@ -919,6 +932,7 @@
          *  @playerversion Flash 10
          *  @playerversion AIR 1.5
          *  @langversion 3.0
+         *  @productversion Flex 4
          */
         public function get displayAsPassword():Boolean
         {
@@ -943,6 +957,7 @@
          *  @playerversion Flash 10
          *  @playerversion AIR 1.5
          *  @langversion 3.0
+         *  @productversion Flex 4
          */
         public function get embedFonts():Boolean
         {
@@ -988,6 +1003,7 @@
          *  @playerversion Flash 10
          *  @playerversion AIR 1.5
          *  @langversion 3.0
+         *  @productversion Flex 4
          */
         public function get gridFitType():String
         {
@@ -1013,6 +1029,7 @@
          *  @playerversion Flash 10
          *  @playerversion AIR 1.5
          *  @langversion 3.0
+         *  @productversion Flex 4
          */
         public function get htmlText():String
         {
@@ -1090,6 +1107,7 @@
          *  @playerversion Flash 10
          *  @playerversion AIR 1.5
          *  @langversion 3.0
+         *  @productversion Flex 4
          */
         public function get length():int
         {
@@ -1110,6 +1128,7 @@
          *  @playerversion Flash 10
          *  @playerversion AIR 1.5
          *  @langversion 3.0
+         *  @productversion Flex 4
          */
         public function get maxChars():int
         {
@@ -1138,6 +1157,7 @@
          *  @playerversion Flash 10
          *  @playerversion AIR 1.5
          *  @langversion 3.0
+         *  @productversion Flex 4
          */
         public function get maxScrollH():int
         {
@@ -1158,6 +1178,7 @@
          *  @playerversion Flash 10
          *  @playerversion AIR 1.5
          *  @langversion 3.0
+         *  @productversion Flex 4
          */
         public function get maxScrollV():int
         {
@@ -1179,6 +1200,7 @@
          *  @playerversion Flash 10
          *  @playerversion AIR 1.5
          *  @langversion 3.0
+         *  @productversion Flex 4
          */
         public function get mouseWheelEnabled():Boolean
         {
@@ -1206,6 +1228,7 @@
          *  @playerversion Flash 10
          *  @playerversion AIR 1.5
          *  @langversion 3.0
+         *  @productversion Flex 4
          */
         public function get multiline():Boolean
         {
@@ -1230,6 +1253,7 @@
          *  @playerversion Flash 10
          *  @playerversion AIR 1.5
          *  @langversion 3.0
+         *  @productversion Flex 4
          */
         public function get numLines():int
         {
@@ -1257,6 +1281,7 @@
          *  @playerversion Flash 10
          *  @playerversion AIR 1.5
          *  @langversion 3.0
+         *  @productversion Flex 4
          */
         public function get restrict():String
         {
@@ -1285,6 +1310,7 @@
          *  @playerversion Flash 10
          *  @playerversion AIR 1.5
          *  @langversion 3.0
+         *  @productversion Flex 4
          */
         public function get scrollH():int
         {
@@ -1313,6 +1339,7 @@
          *  @playerversion Flash 10
          *  @playerversion AIR 1.5
          *  @langversion 3.0
+         *  @productversion Flex 4
          */
         public function get scrollV():int
         {
@@ -1341,6 +1368,7 @@
          *  @playerversion Flash 10
          *  @playerversion AIR 1.5
          *  @langversion 3.0
+         *  @productversion Flex 4
          */
         public function get selectable():Boolean
         {
@@ -1368,6 +1396,7 @@
          *  @playerversion Flash 10
          *  @playerversion AIR 1.5
          *  @langversion 3.0
+         *  @productversion Flex 4
          */
         public function get selectionBeginIndex():int
         {
@@ -1388,6 +1417,7 @@
          *  @playerversion Flash 10
          *  @playerversion AIR 1.5
          *  @langversion 3.0
+         *  @productversion Flex 4
          */
         public function get selectionEndIndex():int
         {
@@ -1409,6 +1439,7 @@
          *  @playerversion Flash 10
          *  @playerversion AIR 1.5
          *  @langversion 3.0
+         *  @productversion Flex 4
          */
         public function get sharpness():Number
         {
@@ -1435,6 +1466,7 @@
          *  @playerversion Flash 10
          *  @playerversion AIR 1.5
          *  @langversion 3.0
+         *  @productversion Flex 4
          */
         public function get styleSheet():StyleSheet
         {
@@ -1481,6 +1513,7 @@
          *  @playerversion Flash 10
          *  @playerversion AIR 1.5
          *  @langversion 3.0
+         *  @productversion Flex 4
          */
         public function get text():String
         {
@@ -1540,6 +1573,7 @@
          *  @playerversion Flash 10
          *  @playerversion AIR 1.5
          *  @langversion 3.0
+         *  @productversion Flex 4
          */
         public function get textColor():uint
         {
@@ -1587,6 +1621,7 @@
          *  @playerversion Flash 10
          *  @playerversion AIR 1.5
          *  @langversion 3.0
+         *  @productversion Flex 4
          */
         public function get textHeight():Number
         {
@@ -1610,6 +1645,7 @@
          *  @playerversion Flash 10
          *  @playerversion AIR 1.5
          *  @langversion 3.0
+         *  @productversion Flex 4
          */
         public function get textWidth():Number
         {
@@ -1633,6 +1669,7 @@
          *  @playerversion Flash 10
          *  @playerversion AIR 1.5
          *  @langversion 3.0
+         *  @productversion Flex 4
          */
         public function get thickness():Number
         {
@@ -1656,6 +1693,7 @@
          *  @playerversion Flash 10
          *  @playerversion AIR 1.5
          *  @langversion 3.0
+         *  @productversion Flex 4
          */
         public function get type():String
         {
@@ -1699,6 +1737,7 @@
          *  @playerversion Flash 10
          *  @playerversion AIR 1.5
          *  @langversion 3.0
+         *  @productversion Flex 4
          */
         public function get useRichTextClipboard():Boolean
         {
@@ -1723,6 +1762,7 @@
          *  @playerversion Flash 10
          *  @playerversion AIR 1.5
          *  @langversion 3.0
+         *  @productversion Flex 4
          */
         public function get wordWrap():Boolean
         {
@@ -1785,6 +1825,7 @@
          *  @playerversion Flash 10
          *  @playerversion AIR 1.5
          *  @langversion 3.0
+         *  @productversion Flex 4
          */
         public function get direction():String
         {
@@ -1847,6 +1888,7 @@
          *  @playerversion Flash 10
          *  @playerversion AIR 1.5
          *  @langversion 3.0
+         *  @productversion Flex 4
          */
         public function get fontContext():IFlexModuleFactory
         {
@@ -1968,6 +2010,7 @@
          *  @playerversion Flash 10
          *  @playerversion AIR 1.5
          *  @langversion 3.0
+         *  @productversion Flex 4
          */
         public function appendText(newText:String):void
         {
@@ -1988,6 +2031,7 @@
          *  @playerversion Flash 10
          *  @playerversion AIR 1.5
          *  @langversion 3.0
+         *  @productversion Flex 4
          */
         public function getCharBoundaries(charIndex:int):Rectangle
         {
@@ -2009,6 +2053,7 @@
          *  @playerversion Flash 10
          *  @playerversion AIR 1.5
          *  @langversion 3.0
+         *  @productversion Flex 4
          */
         public function getCharIndexAtPoint(x:Number, y:Number):int
         {
@@ -2029,6 +2074,7 @@
          *  @playerversion Flash 10
          *  @playerversion AIR 1.5
          *  @langversion 3.0
+         *  @productversion Flex 4
          */
         public function getFirstCharInParagraph(charIndex:int):int
         {
@@ -2051,6 +2097,7 @@
          *  @playerversion Flash 10
          *  @playerversion AIR 1.5
          *  @langversion 3.0
+         *  @productversion Flex 4
          */
         public function getLineIndexAtPoint(x:Number, y:Number):int
         {
@@ -2071,6 +2118,7 @@
          *  @playerversion Flash 10
          *  @playerversion AIR 1.5
          *  @langversion 3.0
+         *  @productversion Flex 4
          */
         public function getLineIndexOfChar(charIndex:int):int
         {
@@ -2091,6 +2139,7 @@
          *  @playerversion Flash 10
          *  @playerversion AIR 1.5
          *  @langversion 3.0
+         *  @productversion Flex 4
          */
         public function getLineLength(lineIndex:int):int
         {
@@ -2103,6 +2152,7 @@
          *  @playerversion Flash 10
          *  @playerversion AIR 1.5
          *  @langversion 3.0
+         *  @productversion Flex 4
          */
         public function getLineMetrics(lineIndex:int):TextLineMetrics
         {
@@ -2154,6 +2204,7 @@
          *  @playerversion Flash 10
          *  @playerversion AIR 1.5
          *  @langversion 3.0
+         *  @productversion Flex 4
          */
         public function getLineOffset(lineIndex:int):int
         {
@@ -2174,6 +2225,7 @@
          *  @playerversion Flash 10
          *  @playerversion AIR 1.5
          *  @langversion 3.0
+         *  @productversion Flex 4
          */
         public function getLineText(lineIndex:int):String
         {
@@ -2194,6 +2246,7 @@
          *  @playerversion Flash 10
          *  @playerversion AIR 1.5
          *  @langversion 3.0
+         *  @productversion Flex 4
          */
         public function getParagraphLength(charIndex:int):int
         {
@@ -2216,6 +2269,7 @@
          *  @playerversion Flash 10
          *  @playerversion AIR 1.5
          *  @langversion 3.0
+         *  @productversion Flex 4
          */
         public function getTextFormat(beginIndex:int = -1,
                                       endIndex:int = -1):TextFormat
@@ -2239,6 +2293,7 @@
          *  @playerversion Flash 10
          *  @playerversion AIR 1.5
          *  @langversion 3.0
+         *  @productversion Flex 4
          */
         public function replaceSelectedText(value:String):void
         {
@@ -2261,6 +2316,7 @@
          *  @playerversion Flash 10
          *  @playerversion AIR 1.5
          *  @langversion 3.0
+         *  @productversion Flex 4
          */
         public function replaceText(beginIndex:int, endIndex:int,
                                     newText:String):void
@@ -2282,6 +2338,7 @@
          *  @playerversion Flash 10
          *  @playerversion AIR 1.5
          *  @langversion 3.0
+         *  @productversion Flex 4
          */
         public function setSelection(beginIndex:int, endIndex:int):void
         {
@@ -2304,6 +2361,7 @@
          *  @playerversion Flash 10
          *  @playerversion AIR 1.5
          *  @langversion 3.0
+         *  @productversion Flex 4
          */
         public function setTextFormat(format:TextFormat,
                                       beginIndex:int = -1,
@@ -2335,6 +2393,7 @@
          *  @playerversion Flash 10
          *  @playerversion AIR 1.5
          *  @langversion 3.0
+         *  @productversion Flex 4
          */
         public function getImageReference(id:String):DisplayObject
         {


Transferred from the Adobe Open Source Subversion Repository

Revision: 7390
Author:   rfrishbe@adobe.com
Date:     2009-05-28T21:48:59.963797Z

Log Message:
-----------
Adding wireframe skins for VideoPlayer.

Also fixing up some other VideoPlayer bugs around fullscreen (going into normal mode wouldn't stop the timer to hide the controls correctly).  Fixed the pause() and stop() methods so that when we're not connected to a source to do nothing instead of RTEing.

Also updated the underlyign FLVPlayback control to the newest version.

Fixed some ASDoc issues in various files.

QE Notes: -
Doc Notes: -
Bugs: SDK-21435
Reviewer: Glenn
tests: checkintests

Modified Paths:
--------------
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/spark/skins/default/VideoPlayerVolumeBarSkin.mxml</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/spark/components/DataGroup.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/spark/primitives/VideoElement.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/spark/skins/default/VideoPlayerFullScreenButtonSkin.mxml</path>
<path kind="file" action="A">/flex/sdk/trunk/frameworks/projects/wireframe/src/spark/skins/wireframe/VideoPlayerScrubBarThumbSkin.mxml</path>
<path kind="file" action="A">/flex/sdk/trunk/frameworks/projects/wireframe/src/spark/skins/wireframe/VideoPlayerScrubBarSkin.mxml</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/wireframe/src/WireframeClasses.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/spark/components/Group.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/wireframe/defaults.css</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/fl/video/DynamicStream.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/spark/components/SkinnableDataContainer.as</path>
<path kind="file" action="A">/flex/sdk/trunk/frameworks/projects/wireframe/src/spark/skins/wireframe/VideoPlayerSkin.mxml</path>
<path kind="file" action="A">/flex/sdk/trunk/frameworks/projects/wireframe/src/spark/skins/wireframe/VideoPlayerVolumeBarTrackSkin.mxml</path>
<path kind="file" action="A">/flex/sdk/trunk/frameworks/projects/wireframe/src/spark/skins/wireframe/VideoPlayerFullScreenFullScreenButtonSkin.mxml</path>
<path kind="file" action="A">/flex/sdk/trunk/frameworks/projects/wireframe/src/spark/skins/wireframe/VideoPlayerVolumeBarMuteButtonSkin.mxml</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/spark/skins/default/VideoPlayerSkin.mxml</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/spark/skins/default/VideoPlayerFullScreenFullScreenButtonSkin.mxml</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/fl/video/ComponentVersion.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/core/IVisualElementContainer.as</path>
<path kind="file" action="A">/flex/sdk/trunk/frameworks/projects/wireframe/src/spark/skins/wireframe/VideoPlayerScrubBarTrackSkin.mxml</path>
<path kind="file" action="A">/flex/sdk/trunk/frameworks/projects/wireframe/src/spark/skins/wireframe/VideoPlayerVolumeBarSkin.mxml</path>
<path kind="file" action="A">/flex/sdk/trunk/frameworks/projects/wireframe/src/spark/skins/wireframe/VideoPlayerVolumeBarThumbSkin.mxml</path>
<path kind="file" action="A">/flex/sdk/trunk/frameworks/projects/wireframe/src/spark/skins/wireframe/VideoPlayerFullScreenButtonSkin.mxml</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/spark/components/VideoPlayer.as</path>
<path kind="file" action="A">/flex/sdk/trunk/frameworks/projects/wireframe/src/spark/skins/wireframe/VideoPlayerPlayPauseButtonSkin.mxml</path>

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

--- frameworks/projects/wireframe/src/WireframeClasses.as
+++ frameworks/projects/wireframe/src/WireframeClasses.as
@@ -53,6 +53,7 @@
 	import spark.skins.wireframe.TextAreaSkin; TextAreaSkin;
 	import spark.skins.wireframe.TextInputSkin; TextInputSkin;
 	import spark.skins.wireframe.ToggleButtonSkin; ToggleButtonSkin;
+	import spark.skins.wireframe.VideoPlayerSkin; VideoPlayerSkin;
 	import spark.skins.wireframe.VScrollBarSkin; VScrollBarSkin;
 	import spark.skins.wireframe.VScrollBarThumbSkin; VScrollBarThumbSkin;
 	import spark.skins.wireframe.VScrollBarTrackSkin; VScrollBarTrackSkin;


Fixed CSS reloading

Fixed CSS reloading

--- src/reprise/debug/DebugInterface.as
+++ src/reprise/debug/DebugInterface.as
@@ -11,6 +11,7 @@
 	import flash.utils.Dictionary;

 	import reprise.core.reprise;
+	import reprise.css.CSS;
 	import reprise.css.ComputedStyles;
 	import reprise.events.DebugEvent;
 	import reprise.ui.DocumentView;
@@ -301,12 +302,19 @@

 		protected function reloadStyles() : void
 		{
+			var treatedStylesheets : Dictionary = new Dictionary();
 			//TODO: make sure that CSS variables are treated correctly when reloading
 			for each (var document : DocumentView in _documentsByReference)
 			{
-				document.styleSheet.addEventListener(Event.COMPLETE, styleSheet_complete);
-				document.styleSheet.reset();
-				document.styleSheet.execute();
+				var stylesheet : CSS = document.styleSheet;
+				if (treatedStylesheets[stylesheet])
+				{
+					continue;
+				}
+				stylesheet.addEventListener(Event.COMPLETE, styleSheet_complete);
+				stylesheet.reset();
+				stylesheet.execute();
+				treatedStylesheets[stylesheet] = true;
 			}
 		}

@@ -357,11 +365,18 @@

 		protected function styleSheet_complete(event : Event) : void
 		{
-			var document : DocumentView = DocumentView(event.target);
-			document.styleSheet.removeEventListener(Event.COMPLETE, styleSheet_complete);
-			document.dispatchEvent(new DebugEvent(DebugEvent.WILL_RESET_STYLES));
-			document.resetStyles();
-			document.dispatchEvent(new DebugEvent(DebugEvent.DID_RESET_STYLES));
+			var stylesheet : CSS = CSS(event.target);
+			stylesheet.removeEventListener(Event.COMPLETE, styleSheet_complete);
+			for each (var document : DocumentView in _documentsByReference)
+			{
+				if (document.styleSheet != stylesheet)
+				{
+					continue;
+				}
+				document.dispatchEvent(new DebugEvent(DebugEvent.WILL_RESET_STYLES));
+				document.resetStyles();
+				document.dispatchEvent(new DebugEvent(DebugEvent.DID_RESET_STYLES));
+			}
 		}

 		protected function debugging_mouseOver(event : MouseEvent) : void


added failing test for grandchild injection with getInstance

--- test/org/swiftsuspenders/InjectorTests.as
+++ test/org/swiftsuspenders/InjectorTests.as
@@ -548,5 +548,23 @@
 			Assert.assertFalse('injectee1.property is not the same instance as injectee2.property',
 				injectee1.property == injectee2.property);
 		}
+
+        [Test]
+        public function childInjectorSuppliesResultAfterGetInstanceHasBeenUsed():void
+        {
+            var child:Injector;
+            var grandChild:Injector;
+            var childClazzInstance:Clazz;
+            var injectee:ClassInjectee = new ClassInjectee();
+            injector.mapSingleton(Clazz);
+            child = injector.createChildInjector();
+            grandChild = child.createChildInjector();
+            childClazzInstance = child.getInstance(Clazz);
+
+            grandChild.injectInto(injectee);
+
+            Assert.assertTrue("injectee has been injected with Clazz instance from grandChild injector",
+                injectee.property == childClazzInstance);
+        }
 	}
 }


Issue #73: Ensure HTTPS on ArcGIS Online portals.

--- src/com/esri/builder/model/PortalModel.as
+++ src/com/esri/builder/model/PortalModel.as
@@ -63,10 +63,16 @@
         var cleanURL:String = url;
         cleanURL = StringUtil.trim(cleanURL);
         cleanURL = replacePreviousDefaultPortalURL(cleanURL);
+        cleanURL = ensureHTTPSOnArcGISDomains(cleanURL);
         cleanURL = cleanURL.replace(/\/sharing\/content\/items\/?$/i, '');
         cleanURL = URLUtil.ensureTrailingForwardSlash(cleanURL);
         cleanURL = URLUtil.encode(cleanURL);
         return cleanURL;
+    }
+
+    private function ensureHTTPSOnArcGISDomains(url:String):String
+    {
+        return isAGO(url) ? mx.utils.URLUtil.replaceProtocol(url, "https") : url;
     }

     private function replacePreviousDefaultPortalURL(url:String):String


Transferred from the Adobe Open Source Subversion Repository

Revision: 2462
Author:   jimurphy@adobe.com
Date:     2008-07-14T19:13:06.620116Z

Log Message:
-----------
gumbo push to trunk

Modified Paths:
--------------
214 paths were modified

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

--- frameworks/projects/framework/src/mx/states/SetEventHandler.as
+++ frameworks/projects/framework/src/mx/states/SetEventHandler.as
@@ -16,6 +16,7 @@
 import flash.utils.Dictionary;
 import mx.core.ComponentDescriptor;
 import mx.core.UIComponent;
+import mx.states.OverrideBase;

 /**
  *  The event handler function to execute in response to the event that is
@@ -61,9 +62,9 @@
  *  @see mx.states.SetProperty
  *  @see mx.states.SetStyle
  */
-public class SetEventHandler extends EventDispatcher implements IOverride
+public class SetEventHandler extends OverrideBase implements IOverride
 {
-	include "../core/Version.as";
+    include "../core/Version.as";

     //--------------------------------------------------------------------------
     //
@@ -73,40 +74,40 @@

     /**
      *  Constructor.
-	 *
-	 *  @param target The object that dispatches the event to be handled.
-	 *  By default, Flex uses the immediate parent of the State object.
-	 *
-	 *  @param event The event type for which to set the handler.
-     */
-	public function SetEventHandler(
-			target:EventDispatcher = null,
-			name:String = null)
-	{
-		super();
-
-		this.target = target;
-		this.name = name;
-	}
-
-	//--------------------------------------------------------------------------
-	//
-	//  Variables
-	//
-	//--------------------------------------------------------------------------
-
-	/**
-	 *  @private
-	 *  Storage for the old event handler value.
-	 */
-	private var oldHandlerFunction:Function;
-
-	/**
-	 *  @private
-	 *	Dictionary of installed event handlers.
-	 */
-	private static var installedHandlers:Dictionary;
-
+     *
+     *  @param target The object that dispatches the event to be handled.
+     *  By default, Flex uses the immediate parent of the State object.
+     *
+     *  @param event The event type for which to set the handler.
+     */
+    public function SetEventHandler(
+            target:EventDispatcher = null,
+            name:String = null)
+    {
+        super();
+
+        this.target = target;
+        this.name = name;
+    }
+
+    //--------------------------------------------------------------------------
+    //
+    //  Variables
+    //
+    //--------------------------------------------------------------------------
+
+    /**
+     *  @private
+     *  Storage for the old event handler value.
+     */
+    private var oldHandlerFunction:Function;
+
+    /**
+     *  @private
+     *  Dictionary of installed event handlers.
+     */
+    private static var installedHandlers:Dictionary;
+
     //--------------------------------------------------------------------------
     //
     //  Properties
@@ -114,44 +115,44 @@
     //--------------------------------------------------------------------------

     //----------------------------------
-	//  name
-    //----------------------------------
-
-	[Inspectable(category="General")]
-
-	/**
+    //  name
+    //----------------------------------
+
+    [Inspectable(category="General")]
+
+    /**
      *  The name of the event whose handler is being set.
-	 *  You must set this property, either in
-	 *  the SetEventHandler constructor or by setting
-	 *  the property value directly.
-	 */
-	public var name:String;
-
-	/**
-	 *  The handler function for the event.
-	 *  This property is intended for developers who use ActionScript to
-	 *  create and access view states.
-	 *  In MXML, you can use the equivalent handler
-	 *  event attribute; do not use both in a single MXML tag.
-	 *
-	 *  @default null
-	 */
-	public var handlerFunction:Function;
-
-    //----------------------------------
-	//  target
-    //----------------------------------
-
-	[Inspectable(category="General")]
+     *  You must set this property, either in
+     *  the SetEventHandler constructor or by setting
+     *  the property value directly.
+     */
+    public var name:String;
+
+    /**
+     *  The handler function for the event.
+     *  This property is intended for developers who use ActionScript to
+     *  create and access view states.
+     *  In MXML, you can use the equivalent handler
+     *  event attribute; do not use both in a single MXML tag.
+     *
+     *  @default null
+     */
+    public var handlerFunction:Function;
+
+    //----------------------------------
+    //  target
+    //----------------------------------
+
+    [Inspectable(category="General")]

     /**
      *  The component that dispatches the event.
-	 *  If the property value is null, Flex uses the
+     *  If the property value is null, Flex uses the
      *  immediate parent of the <mx:states> tag.
      *
-	 *  @default null
-     */
-	public var target:EventDispatcher;
+     *  @default null
+     */
+    public var target:Object;

     //--------------------------------------------------------------------------
     //
@@ -159,21 +160,21 @@
     //
     //--------------------------------------------------------------------------

-	/**
-	 *  @private
-	 */
-	override public function addEventListener(
-									type:String, listener:Function,
-									useCapture:Boolean = false,
-									priority:int = 0,
-									useWeakReference:Boolean = false):void
-	{
-		if (type == "handler")
-			handlerFunction = listener;
-
-		super.addEventListener(type, listener, useCapture,
-							   priority, useWeakReference);
-	}
+    /**
+     *  @private
+     */
+    override public function addEventListener(
+                                    type:String, listener:Function,
+                                    useCapture:Boolean = false,
+                                    priority:int = 0,
+                                    useWeakReference:Boolean = false):void
+    {
+        if (type == "handler")
+            handlerFunction = listener;
+
+        super.addEventListener(type, listener, useCapture,
+                               priority, useWeakReference);
+    }

     //--------------------------------------------------------------------------
     //
@@ -183,8 +184,8 @@

     /**
      *  IOverride interface method; this class implements it as an empty method.
-	 *
-	 *  @copy IOverride#initialize()
+     *
+     *  @copy IOverride#initialize()
      */
     public function initialize():void
     {
@@ -193,79 +194,85 @@
     /**
      *  @inheritDoc
      */
-	public function apply(parent:UIComponent):void
-	{
-		var obj:EventDispatcher = target ? target : parent;
-		var uiObj:UIComponent = obj as UIComponent;
-
-		if (!installedHandlers)
-			installedHandlers = new Dictionary(true);
-
-		// Remember the current handler so it can be restored
-		if (installedHandlers[obj] && installedHandlers[obj][name])
-		{
-			oldHandlerFunction = installedHandlers[obj][name];
-			obj.removeEventListener(name, oldHandlerFunction);
-		}
-		else if (uiObj && uiObj.descriptor)
-		{
-			var descriptor:ComponentDescriptor = uiObj.descriptor;
-
-			if (descriptor.events && descriptor.events[name])
-			{
-				oldHandlerFunction = uiObj.document[descriptor.events[name]];
-				obj.removeEventListener(name, oldHandlerFunction);
-			}
-		}
-
-		// Set new handler as weak reference
-		if (handlerFunction != null)
-		{
-			obj.addEventListener(name, handlerFunction, false, 0, true);
-
-			// Add this handler to our installedHandlers list so it can
-			// be removed if needed by a state based on this state.
-			if (installedHandlers[obj] == undefined)
-				installedHandlers[obj] = {};
-
-			installedHandlers[obj][name] = handlerFunction;
-		}
-	}
-
-	/**
+    public function apply(parent:UIComponent):void
+    {
+        var obj:* = getOverrideContext(target, parent);
+        if (obj != null)
+        {
+        	target = obj;
+	        var uiObj:UIComponent = obj as UIComponent;
+
+	        if (!installedHandlers)
+	            installedHandlers = new Dictionary(true);
+
+	        // Remember the current handler so it can be restored
+	        if (installedHandlers[obj] && installedHandlers[obj][name])
+	        {
+	            oldHandlerFunction = installedHandlers[obj][name];
+	            obj.removeEventListener(name, oldHandlerFunction);
+	        }
+	        else if (uiObj && uiObj.descriptor)
+	        {
+	            var descriptor:ComponentDescriptor = uiObj.descriptor;
+
+	            if (descriptor.events && descriptor.events[name])
+	            {
+	                oldHandlerFunction = uiObj.document[descriptor.events[name]];
+	                obj.removeEventListener(name, oldHandlerFunction);
+	            }
+	        }
+
+	        // Set new handler as weak reference
+	        if (handlerFunction != null)
+	        {
+	            obj.addEventListener(name, handlerFunction, false, 0, true);
+
+	            // Add this handler to our installedHandlers list so it can
+	            // be removed if needed by a state based on this state.
+	            if (installedHandlers[obj] == undefined)
+	                installedHandlers[obj] = {};
+
+	            installedHandlers[obj][name] = handlerFunction;
+	        }
+        }
+    }
+
+    /**
      *  @inheritDoc
-	 */
-	public function remove(parent:UIComponent):void
-	{
-		var obj:EventDispatcher = target ? target : parent;
-
-		if (handlerFunction != null)
-			obj.removeEventListener(name, handlerFunction);
-
-		// Restore the old value
-		if (oldHandlerFunction != null)
-			obj.addEventListener(name, oldHandlerFunction, false, 0, true);
-
-		if (installedHandlers[obj])
-		{
-			var deleteObj:Boolean = true;
-
-			// Remove this handler
-			delete installedHandlers[obj][name];
-
-			// If no other handlers are installed for this object, delete
-			// this object from the installedHandlers dictionary
-			for (var i:String in installedHandlers[obj])
-			{
-				// Found one - don't delete this object
-				deleteObj = false;
-				break;
-			}
-
-			if (deleteObj)
-				delete installedHandlers[obj];
-		}
-	}
+     */
+    public function remove(parent:UIComponent):void
+    {
+        var obj:* = getOverrideContext(target, parent);
+        if (obj != null)
+        {
+	        if (handlerFunction != null)
+	            obj.removeEventListener(name, handlerFunction);
+
+	        // Restore the old value
+	        if (oldHandlerFunction != null)
+	            obj.addEventListener(name, oldHandlerFunction, false, 0, true);
+
+	        if (installedHandlers[obj])
+	        {
+	            var deleteObj:Boolean = true;
+
+	            // Remove this handler
+	            delete installedHandlers[obj][name];
+
+	            // If no other handlers are installed for this object, delete
+	            // this object from the installedHandlers dictionary
+	            for (var i:String in installedHandlers[obj])
+	            {
+	                // Found one - don't delete this object
+	                deleteObj = false;
+	                break;
+	            }
+
+	            if (deleteObj)
+	                delete installedHandlers[obj];
+	        }
+        }
+    }
 }

 }


Transferred from the Adobe Open Source Subversion Repository

Revision: 8031
Author:   egeorgie@adobe.com
Date:     2009-06-20T01:10:03.288554Z

Log Message:
-----------
Scrub the TODOs in the framework, convert to FIXMEs in the new convention and assigning an owner.

Doc Notes: N/A
Bugs: N/A
Reviewer: Deepa
tests: build, checkintests

Modified Paths:
--------------
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/spark/primitives/supportClasses/StrokedElement.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/controls/ProgressBar.as</path>
<path kind="file" action="M">/flex/sdk/trunk/development/eclipse/flex/flex4test/src/layouts/WheelLayout.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/spark/components/Group.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/controls/DateChooser.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/core/Container.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/spark/effects/supportClasses/FadeInstance.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/spark/components/supportClasses/Slider.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/spark/components/supportClasses/ScrollBar.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/spark/components/Spinner.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/spark/effects/animation/Timeline.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/spark/effects/AddAction.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/spark/effects/Scale.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/spark/effects/supportClasses/AnimateInstance.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/spark/effects/Rotate.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/spark/components/mediaClasses/VolumeBar.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/spark/components/supportClasses/DropDownController.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/spark/components/HSlider.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/controls/listClasses/ListBase.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/collections/ModifiedCollectionView.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/spark/skins/spark/ErrorSkin.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/spark/effects/Move.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/spark/layouts/HorizontalLayout.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/spark/components/SkinnableDataContainer.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/spark/effects/AnimateTransform.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/managers/SystemManager.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/styles/StyleManager.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/spark/components/List.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/controls/DataGrid.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/spark/effects/supportClasses/MoveInstance.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/effects/effectClasses/SequenceInstance.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/effects/EffectTargetFilter.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/spark/components/supportClasses/SkinnableComponent.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/spark/effects/supportClasses/AnimateTransformInstance.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/spark/effects/RemoveAction.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/spark/utils/BitmapUtil.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/spark/components/DataGroup.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/spark/skins/spark/FocusSkin.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/spark/primitives/supportClasses/GraphicElement.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/spark/components/DropDownList.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/effects/CompositeEffect.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/spark/effects/animation/MotionPath.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/utils/MatrixUtil.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/spark/layouts/supportClasses/LayoutElementHelper.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/spark/primitives/supportClasses/TextGraphicElement.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flash-integration/src/mx/flash/UIMovieClip.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/spark/components/PopUpAnchor.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/spark/components/mediaClasses/StreamingVideoSource.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/effects/effectClasses/PropertyChanges.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/spark/components/supportClasses/ToggleButtonBase.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/spark/effects/supportClasses/RemoveActionInstance.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/effects/Effect.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/spark/layouts/VerticalLayout.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/spark/primitives/pathSegments/LineSegment.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/core/UIComponent.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/spark/components/VideoPlayer.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/spark/effects/animation/Animation.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/spark/effects/supportClasses/AnimateTransitionShaderInstance.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/spark/primitives/RichEditableText.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/geom/Transform.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/utils/ObjectUtil.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/spark/effects/supportClasses/AddActionInstance.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/spark/components/supportClasses/ListBase.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/managers/FocusManager.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/spark/primitives/Path.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/spark/primitives/Rect.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/spark/primitives/SimpleText.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/styles/StyleProtoChain.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/controls/List.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/spark/components/VSlider.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/spark/components/SkinnableContainer.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/spark/components/supportClasses/GroupBase.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/managers/CursorManagerImpl.as</path>

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

--- frameworks/projects/framework/src/mx/styles/StyleProtoChain.as
+++ frameworks/projects/framework/src/mx/styles/StyleProtoChain.as
@@ -699,7 +699,7 @@
     {
         // If font changed, then invalidateProperties so
         // we can re-create the text field in commitProperties
-        // TODO: Should hasFontContextChanged() be added to IFontContextComponent?
+        // FIXME (gosmith): Should hasFontContextChanged() be added to IFontContextComponent?
         if (object is IFontContextComponent &&
             "hasFontContextChanged" in object &&
             object["hasFontContextChanged"]())
@@ -718,7 +718,7 @@
             object.invalidateSize();
         }

-        // TODO: Should initThemeColor() be in some interface?
+        // FIXME (gosmith): Should initThemeColor() be in some interface?
         if (!styleProp ||
             styleProp == "styleName" ||
             styleProp == "themeColor")
@@ -729,7 +729,7 @@

         object.invalidateDisplayList();

-        // TODO: Unify concept of parent for UIComponents and GraphicElements
+        // FIXME (gosmith): Unify concept of parent for UIComponents and GraphicElements
         var parent:IInvalidating;
         if (object is UIComponent)
             parent = UIComponent(object).parent as IInvalidating;
@@ -897,7 +897,7 @@
      */
     private static function sortOnSpecificity(decls:Array):Array // of CSSStyleDeclaration
     {
-        // TODO: Copied algorithm from Group.sortOnLayer as a temporary measure.
+        // FIXME (pfarland): Copied algorithm from Group.sortOnLayer as a temporary measure.
         // We may consider replacing this insertion sort with an efficient but
         // stable merge sort or the like if many style declarations need to
         // sorted.


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

--- frameworks/projects/spark/src/spark/layouts/HorizontalAlign.as
+++ frameworks/projects/spark/src/spark/layouts/HorizontalAlign.as
@@ -9,7 +9,7 @@
 //
 ////////////////////////////////////////////////////////////////////////////////

-package mx.layout
+package spark.layout
 {

 /**


HLSNetStream: report minBufferLength and bufferLength when resuming playback in debug log

--- src/org/mangui/hls/stream/HLSNetStream.as
+++ src/org/mangui/hls/stream/HLSNetStream.as
@@ -176,7 +176,7 @@
                 if (buffer >= _bufferThresholdController.minBufferLength || _streamBuffer.reachedEnd || _streamBuffer.liveLoadingStalled) {
                     if (_playbackState == HLSPlayStates.PLAYING_BUFFERING) {
                         CONFIG::LOGGING {
-                            Log.debug("resume playback");
+                            Log.debug("resume playback, minBufferLength/bufferLength:"+_bufferThresholdController.minBufferLength.toFixed(2) + "/" + buffer.toFixed(2));
                         }
                         // resume playback in case it was paused, this can happen if buffer was in really low condition (less than 0.1s)
                         super.resume();


Transferred from the Adobe Open Source Subversion Repository

Revision: 18871
Author:   smgilson@adobe.com
Date:     2010-11-30T20:10:44.561987Z

Log Message:
-----------
Fix ASDoc version tags

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

Modified Paths:
--------------
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/automation_spark/src/spark/automation/tabularData/SparkDataGridTabularData.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/automation_spark/src/spark/automation/delegates/skins/spark/SparkDefaultComplexItemRendererAutomationImpl.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/automation_spark/src/spark/automation/delegates/components/supportClasses/SparkScrollBarBaseAutomationImpl.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/automation_spark/src/spark/automation/delegates/components/SparkComboBoxAutomationImpl.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/automation_spark/src/spark/automation/delegates/skins/spark/SparkDefaultItemRendererAutomationImpl.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/automation_spark/src/spark/automation/delegates/skins/spark/SparkDefaultGridHeaderRendererAutomationImpl.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/automation_spark/src/spark/automation/delegates/components/SprakTextAreaAutomationImpl.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/spark/src/spark/components/gridClasses/GridItemEditor.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/automation_spark/src/spark/automation/delegates/components/supportClasses/SparkItemRendererAutomationImpl.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/automation_spark/src/spark/automation/delegates/components/SparkDataGridAutomationImpl.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/mobilecomponents/src/spark/components/MobileIconItemRenderer.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/automation_spark/src/spark/automation/delegates/skins/spark/SparkDefaultGridItemRendererAutomationImpl.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/mobilecomponents/src/spark/components/supportClasses/StyleableTextField.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/mobilecomponents/src/spark/components/TabbedViewNavigator.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/mobilecomponents/src/spark/styles/metadata/GapStyles.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/automation_spark/src/spark/automation/delegates/components/supportClasses/SparkButtonBarBaseAutomationImpl.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/automation_spark/src/spark/automation/delegates/components/mediaClasses/SparkVolumeBarAutomationImpl.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/automation_spark/src/spark/automation/delegates/components/SparkButtonBarAutomationImpl.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/automation_spark/src/spark/automation/delegates/components/supportClasses/SprakSkinnableTextBaseAutomationImpl.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/mobilecomponents/src/spark/preloaders/SplashScreen.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/mobilecomponents/src/spark/events/ViewNavigatorEvent.as</path>

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

--- frameworks/projects/mobilecomponents/src/spark/components/IconItemRenderer.as
+++ frameworks/projects/mobilecomponents/src/spark/components/IconItemRenderer.as
@@ -57,9 +57,9 @@
  *  @default 500
  *
  *  @langversion 3.0
- *  @playerversion Flash 9
- *  @playerversion AIR 1.1
- *  @productversion Flex 3
+ *  @playerversion Flash 10
+ *  @playerversion AIR 2.5
+ *  @productversion Flex 4.5
  */
 [Style(name="iconDelay", type="Number", format="Time", inherit="no")]

@@ -70,9 +70,9 @@
  *  @default mobileIconItemRendererMessageStyle
  *
  *  @langversion 3.0
- *  @playerversion Flash 9
- *  @playerversion AIR 1.1
- *  @productversion Flex 3
+ *  @playerversion Flash 10
+ *  @playerversion AIR 2.5
+ *  @productversion Flex 4.5
  */
 [Style(name="messageStyleName", type="String", inherit="no")]

@@ -240,7 +240,7 @@
      *  The source to set iconDisplay to, after waiting an appropriate delay period
      */
     private var loadingIconSource:Object;
-
+
     //--------------------------------------------------------------------------
     //
     //  Public Properties: Overridden
@@ -252,11 +252,11 @@
      */
     override public function set data(value:Object):void
     {
-		// FIXME (rfrishbe): early return if the data object has not changed.
-		// This should be removed when SDK-28656 is fixed.
-		if (data == value)
-			return;
-
+        // FIXME (rfrishbe): early return if the data object has not changed.
+        // This should be removed when SDK-28656 is fixed.
+        if (data == value)
+            return;
+
         super.data = value;

         iconChanged = true;
@@ -1430,7 +1430,7 @@
             // stop any asynch operation:
             if (iconSetterDelayTimer)
             {
-				loadingIconSource = null
+                loadingIconSource = null
                 iconSetterDelayTimer.stop();
                 iconSetterDelayTimer.reset();
             }
@@ -1449,7 +1449,7 @@
         // since we're not going to use it anymore
         if (iconSetterDelayTimer)
         {
-			loadingIconSource = null
+            loadingIconSource = null
             iconSetterDelayTimer.stop();
             iconSetterDelayTimer.reset();
         }
@@ -1514,36 +1514,36 @@

         super.validateSize(recursive);
     }
-
-	/**
-	 *  @private
-	 *
-	 *  @langversion 3.0
-	 *  @playerversion Flash 10.2
-	 *  @playerversion AIR 2.0
-	 *  @productversion Flex 4.5
-	 */
-	override public function setEstimatedSize(estimatedWidth:Number = NaN,
-											  estimatedHeight:Number = NaN,
-											  invalidateSizeAllowed:Boolean = true):void
-	{
-		var oldcw:Number = this.estimatedWidth;
-		var oldch:Number = this.estimatedHeight;
-
-		super.setEstimatedSize(estimatedWidth, estimatedHeight, invalidateSizeAllowed);
-
-		var sameWidth:Boolean = isNaN(estimatedWidth) && isNaN(oldcw) || estimatedWidth == oldcw;
-		var sameHeight:Boolean = isNaN(estimatedHeight) && isNaN(oldch) || estimatedHeight == oldch;
-		if (!(sameHeight && sameWidth))
-		{
-			if (!isNaN(explicitWidth) &&
-				!isNaN(explicitHeight))
-				return;
-
-			if (invalidateSizeAllowed)
-				invalidateSize();
-		}
-	}
+
+    /**
+     *  @private
+     *
+     *  @langversion 3.0
+     *  @playerversion Flash 10.2
+     *  @playerversion AIR 2.0
+     *  @productversion Flex 4.5
+     */
+    override public function setEstimatedSize(estimatedWidth:Number = NaN,
+                                              estimatedHeight:Number = NaN,
+                                              invalidateSizeAllowed:Boolean = true):void
+    {
+        var oldcw:Number = this.estimatedWidth;
+        var oldch:Number = this.estimatedHeight;
+
+        super.setEstimatedSize(estimatedWidth, estimatedHeight, invalidateSizeAllowed);
+
+        var sameWidth:Boolean = isNaN(estimatedWidth) && isNaN(oldcw) || estimatedWidth == oldcw;
+        var sameHeight:Boolean = isNaN(estimatedHeight) && isNaN(oldch) || estimatedHeight == oldch;
+        if (!(sameHeight && sameWidth))
+        {
+            if (!isNaN(explicitWidth) &&
+                !isNaN(explicitHeight))
+                return;
+
+            if (invalidateSizeAllowed)
+                invalidateSize();
+        }
+    }

     /**
      *  @private
@@ -1560,58 +1560,58 @@
         var myMeasuredHeight:Number = 0;
         var myMeasuredMinWidth:Number = 0;
         var myMeasuredMinHeight:Number = 0;
-
-		// calculate padding and horizontal gap
-		// verticalGap is already handled above when there's a label
-		// and a message since that's the only place verticalGap matters.
-		// if we handled verticalGap here, it might add it to the icon if
-		// the icon was the tallest item.
-		var numHorizontalSections:int = 0;
-		if (iconDisplay)
-			numHorizontalSections++;
-
-		if (decoratorDisplay)
-			numHorizontalSections++;
-
-		if (labelDisplay || messageDisplay)
-			numHorizontalSections++;
-
-		var paddingAndGapWidth:Number = getStyle("paddingLeft") + getStyle("paddingRight");
-		if (numHorizontalSections > 0)
-			paddingAndGapWidth += (getStyle("horizontalGap") * (numHorizontalSections - 1));
-
-		var verticalGap:Number = (labelDisplay && messageDisplay) ? getStyle("verticalGap") : 0;
-		var paddingHeight:Number = getStyle("paddingTop") + getStyle("paddingBottom");
+
+        // calculate padding and horizontal gap
+        // verticalGap is already handled above when there's a label
+        // and a message since that's the only place verticalGap matters.
+        // if we handled verticalGap here, it might add it to the icon if
+        // the icon was the tallest item.
+        var numHorizontalSections:int = 0;
+        if (iconDisplay)
+            numHorizontalSections++;
+
+        if (decoratorDisplay)
+            numHorizontalSections++;
+
+        if (labelDisplay || messageDisplay)
+            numHorizontalSections++;
+
+        var paddingAndGapWidth:Number = getStyle("paddingLeft") + getStyle("paddingRight");
+        if (numHorizontalSections > 0)
+            paddingAndGapWidth += (getStyle("horizontalGap") * (numHorizontalSections - 1));
+
+        var verticalGap:Number = (labelDisplay && messageDisplay) ? getStyle("verticalGap") : 0;
+        var paddingHeight:Number = getStyle("paddingTop") + getStyle("paddingBottom");

         // Icon is on left
-		var myIconWidth:Number = 0;
-		var myIconHeight:Number = 0;
+        var myIconWidth:Number = 0;
+        var myIconHeight:Number = 0;
         if (iconDisplay)
         {
-			myIconWidth = (isNaN(iconWidth) ? getElementPreferredWidth(iconDisplay) : iconWidth);
-			myIconHeight = (isNaN(iconHeight) ? getElementPreferredHeight(iconDisplay) : iconHeight);
+            myIconWidth = (isNaN(iconWidth) ? getElementPreferredWidth(iconDisplay) : iconWidth);
+            myIconHeight = (isNaN(iconHeight) ? getElementPreferredHeight(iconDisplay) : iconHeight);

             myMeasuredWidth += myIconWidth;
             myMeasuredMinWidth += myIconWidth;
-			myMeasuredHeight = Math.max(myMeasuredHeight, myIconHeight);
+            myMeasuredHeight = Math.max(myMeasuredHeight, myIconHeight);
             myMeasuredMinHeight = Math.max(myMeasuredMinHeight, myIconHeight);
         }
-
-		// Decorator is up next
-		var decoratorWidth:Number = 0;
-		var decoratorHeight:Number = 0;
-
-		if (decoratorDisplay)
-		{
-			decoratorWidth = getElementPreferredWidth(decoratorDisplay);
-			decoratorHeight = getElementPreferredHeight(decoratorDisplay);
-
-			myMeasuredWidth += decoratorWidth;
-			myMeasuredMinWidth += decoratorWidth;
-			myMeasuredHeight = Math.max(myMeasuredHeight, decoratorHeight);
-			myMeasuredMinHeight = Math.max(myMeasuredHeight, decoratorHeight);
-		}
-
+
+        // Decorator is up next
+        var decoratorWidth:Number = 0;
+        var decoratorHeight:Number = 0;
+
+        if (decoratorDisplay)
+        {
+            decoratorWidth = getElementPreferredWidth(decoratorDisplay);
+            decoratorHeight = getElementPreferredHeight(decoratorDisplay);
+
+            myMeasuredWidth += decoratorWidth;
+            myMeasuredMinWidth += decoratorWidth;
+            myMeasuredHeight = Math.max(myMeasuredHeight, decoratorHeight);
+            myMeasuredMinHeight = Math.max(myMeasuredHeight, decoratorHeight);
+        }
+
         // Text is aligned next to icon
         var labelWidth:Number = 0;
         var labelHeight:Number = 0;
@@ -1627,29 +1627,29 @@
             labelWidth = getElementPreferredWidth(labelDisplay);
             labelHeight = getElementPreferredHeight(labelDisplay);
         }
-
+
         if (messageDisplay)
         {
-			// now we need to measure messageDisplay's height.  Unfortunately, this is tricky and
-			// is dependent on messageDisplay's width
-			// if we have an estimated width, use it to calculate messageDisplay's width.
-			// Otherwise, we'll keep it the same width as it was before
-			if (!isNaN(estimatedWidth))
-				messageDisplay.width = estimatedWidth - paddingAndGapWidth - decoratorWidth - myIconWidth;
-
+            // now we need to measure messageDisplay's height.  Unfortunately, this is tricky and
+            // is dependent on messageDisplay's width
+            // if we have an estimated width, use it to calculate messageDisplay's width.
+            // Otherwise, we'll keep it the same width as it was before
+            if (!isNaN(estimatedWidth))
+                messageDisplay.width = estimatedWidth - paddingAndGapWidth - decoratorWidth - myIconWidth;
+
             messageWidth = getElementPreferredWidth(messageDisplay);
             messageHeight = getElementPreferredHeight(messageDisplay);
         }
-
+
         myMeasuredWidth += Math.max(labelWidth, messageWidth);
         myMeasuredHeight = Math.max(myMeasuredHeight, labelHeight + messageHeight + verticalGap);
-
-		myMeasuredWidth += paddingAndGapWidth;
-		myMeasuredMinWidth += paddingAndGapWidth;
-
-		// verticalGap handled in label and message
-		myMeasuredHeight += paddingHeight;
-		myMeasuredMinHeight += paddingHeight;
+
+        myMeasuredWidth += paddingAndGapWidth;
+        myMeasuredMinWidth += paddingAndGapWidth;
+
+        // verticalGap handled in label and message
+        myMeasuredHeight += paddingHeight;
+        myMeasuredMinHeight += paddingHeight;

         // now set the local variables to the member variables.  Make sure it means our
         // minimum height of 80
@@ -1659,55 +1659,55 @@
         measuredMinWidth = myMeasuredMinWidth;
         measuredMinHeight = Math.max(80, myMeasuredMinHeight);
     }
-
-	/**
-	 *  @private
-	 *  We override the setLayoutBoundsSize to determine whether to perform
-	 *  text reflow. This is a convenient place, as the layout passes NaN
-	 *  for a dimension not constrained to the parent.
-	 */
-	override public function setLayoutBoundsSize(width:Number,
-												 height:Number,
-												 postLayoutTransform:Boolean = true):void
-	{
-		var newEstimates:Boolean = false;
-		var cw:Number = estimatedWidth;
-		var ch:Number = estimatedHeight;
-		var oldcw:Number = cw;
-		var oldch:Number = ch;
-		// we got lied to, probably the constraints weren't accurate or
-		// couldn't be computed
-		if (!isNaN(width))
-		{
-			if (isNaN(estimatedWidth) || width != estimatedWidth)
-			{
-				cw = width;
-				newEstimates = true;
-			}
-		}
-		// we got lied to, probably the constraints weren't accurate or
-		// couldn't be computed
-		if (!isNaN(height))
-		{
-			if (isNaN(estimatedHeight) || height != estimatedHeight)
-			{
-				ch = height;
-				newEstimates = true;
-			}
-		}
-		if (newEstimates)
-		{
-			setEstimatedSize(cw, ch);
-
-			// re-measure with the new estimated size
-			UIComponentGlobals.layoutManager.validateClient(this, true);
-
-			// set estimated size back to what it was
-			setEstimatedSize(oldcw, oldch, false);
-		}
-
-		super.setLayoutBoundsSize(width, height, postLayoutTransform);
-	}
+
+    /**
+     *  @private
+     *  We override the setLayoutBoundsSize to determine whether to perform
+     *  text reflow. This is a convenient place, as the layout passes NaN
+     *  for a dimension not constrained to the parent.
+     */
+    override public function setLayoutBoundsSize(width:Number,
+                                                 height:Number,
+                                                 postLayoutTransform:Boolean = true):void
+    {
+        var newEstimates:Boolean = false;
+        var cw:Number = estimatedWidth;
+        var ch:Number = estimatedHeight;
+        var oldcw:Number = cw;
+        var oldch:Number = ch;
+        // we got lied to, probably the constraints weren't accurate or
+        // couldn't be computed
+        if (!isNaN(width))
+        {
+            if (isNaN(estimatedWidth) || width != estimatedWidth)
+            {
+                cw = width;
+                newEstimates = true;
+            }
+        }
+        // we got lied to, probably the constraints weren't accurate or
+        // couldn't be computed
+        if (!isNaN(height))
+        {
+            if (isNaN(estimatedHeight) || height != estimatedHeight)
+            {
+                ch = height;
+                newEstimates = true;
+            }
+        }
+        if (newEstimates)
+        {
+            setEstimatedSize(cw, ch);
+
+            // re-measure with the new estimated size
+            UIComponentGlobals.layoutManager.validateClient(this, true);
+
+            // set estimated size back to what it was
+            setEstimatedSize(oldcw, oldch, false);
+        }
+
+        super.setLayoutBoundsSize(width, height, postLayoutTransform);
+    }

     /**
      *  @private


Transferred from the Adobe Open Source Subversion Repository

Revision: 17970
Author:   egeorgie@adobe.com
Date:     2010-09-30T21:32:24.300370Z

Log Message:
-----------
Fix SDK-27642 Unnecessary Measure for Mobile Programmatic Skins

In this change:
- introduce new protected APIs in MobileSkin, MobileItemRenderer for resizing and positioning elements.
- update Mobile skin code to use new APIs instead of setting explicitly x, y, width, height
- update FXG assetes to make elements pixel aligned
- update Mobile skin code to assume FXG assest are always pixel aligned

QE notes: Verify skins look as expected; mobile item renderers layout as expected
Doc notes: None.
Bugs: SDK-27642
Reviewer: Glenn, Jason S, Jason SJ, Ryan
Tests run: full mobile mustella
Is noteworthy for integration: No

Modified Paths:
--------------
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/mobiletheme/src/spark/skins/mobile/VScrollBarTrackSkin.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/mobiletheme/src/spark/skins/mobile/supportClasses/ButtonSkinBase.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/mobiletheme/src/spark/skins/mobile/assets/Button_down.fxg</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/mobiletheme/src/spark/skins/mobile/supportClasses/MobileSkin.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/mobiletheme/src/spark/skins/mobile/assets/CheckBox_upSelected.fxg</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/mobilecomponents/src/spark/components/MobileItemRenderer.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/mobiletheme/src/spark/skins/mobile/ActionBarSkin.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/mobiletheme/src/spark/skins/mobile/TextInputSkin.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/mobiletheme/src/spark/skins/mobile/ActionButtonSkin.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/mobiletheme/src/spark/skins/mobile/VScrollBarSkin.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/mobiletheme/src/spark/skins/mobile/VScrollBarThumbSkin.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/mobiletheme/src/spark/skins/mobile/assets/CheckBox_down.fxg</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/mobilecomponents/src/spark/components/MobileIconItemRenderer.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/mobiletheme/src/spark/skins/mobile/ButtonSkin.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/mobiletheme/src/spark/skins/mobile/assets/Button_up.fxg</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/mobiletheme/src/spark/skins/mobile/TextAreaSkin.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/mobiletheme/src/spark/skins/mobile/HScrollBarTrackSkin.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/mobiletheme/src/spark/skins/mobile/assets/CheckBox_downSelected.fxg</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/mobiletheme/src/spark/skins/mobile/CheckBoxSkin.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/mobiletheme/src/spark/skins/mobile/assets/CheckBox_up.fxg</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/mobiletheme/src/spark/skins/mobile/NavigationButtonSkin.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/mobiletheme/src/spark/skins/mobile/HScrollBarThumbSkin.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/mobiletheme/src/spark/skins/mobile/HScrollBarSkin.as</path>

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

--- frameworks/projects/mobiletheme/src/spark/skins/mobile/VScrollBarThumbSkin.as
+++ frameworks/projects/mobiletheme/src/spark/skins/mobile/VScrollBarThumbSkin.as
@@ -39,8 +39,8 @@

     override protected function measure():void
     {
-        hostComponent.measuredWidth = 8;
-        hostComponent.measuredHeight = 8;
+        measuredWidth = 8;
+        measuredHeight = 8;
     }

     override protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void


Transferred from the Adobe Open Source Subversion Repository

Revision: 10242
Author:   chaase@adobe.com
Date:     2009-09-14T21:06:01.494781Z

Log Message:
-----------
Fix/workaround for use of suspendBackgroundProcessing on Flex 4 effects. The new effects depend on layout validation running to update the properties of the target objects, but this flag specifically suppresses layout validation. The 'fix' is to disable setting this flag for the new effects. A longer-term fix is in the works, but in the meantime, it will at least be possible for the new effects to work if this flag has been set.

QE notes: None
Doc notes: None
Bugs: sdk-22974
Reviewer: Corey
Tests run: checkintests, Mustella spark effects
Is noteworthy for integration: No

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

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

--- frameworks/projects/spark/src/spark/effects/supportClasses/AnimateInstance.as
+++ frameworks/projects/spark/src/spark/effects/supportClasses/AnimateInstance.as
@@ -132,6 +132,15 @@
     // Properties
     //
     //--------------------------------------------------------------------------
+
+    /**
+     *  @private
+     */
+    override public function set suspendBackgroundProcessing(value:Boolean):void
+    {
+        // Noop: this flag causes Flex 4 effects to break because they
+        // depend on the layout validation process that the flag suppresses
+    }

     private var _motionPaths:Vector.<MotionPath>;
     /**


Adds a blender-style bit mask selector in the editor for 'Mask' attributes.

--- Bin/Data/Scripts/Editor/AttributeEditor.as
+++ Bin/Data/Scripts/Editor/AttributeEditor.as
@@ -15,6 +15,7 @@

 bool inLoadAttributeEditor = false;
 bool inEditAttribute = false;
+bool inUpdateBitSelection = false;
 bool showNonEditableAttribute = false;

 Color normalTextColor(1.0f, 1.0f, 1.0f);
@@ -130,6 +131,96 @@
     SetAttributeEditorID(attrEdit, serializables);

     return attrEdit;
+}
+
+UIElement@ CreateAttributeBitSelector(UIElement@ parent, Array<Serializable@>@ serializables, uint index, uint subIndex)
+{
+    UIElement@ container = UIElement();
+    parent.AddChild(container);
+    parent.SetFixedHeight(38);
+    container.SetFixedWidth(16 * 4 + 4);
+
+    for (int i = 0; i < 2; i++)
+    {
+        for (int j = 0; j < 4; j++)
+        {
+            CheckBox@ bitBox = CheckBox();
+            bitBox.name = "BitSelect_" + String(i * 4 + j);
+            container.AddChild(bitBox);
+            bitBox.position = IntVector2(16 * j, 16 * i);
+            bitBox.style = "CheckBox";
+            bitBox.SetFixedHeight(16);
+
+            SubscribeToEvent(bitBox,"Toggled", "HandleBitSelectionToggled");
+        }
+    }
+
+    LineEdit@ attrEdit = CreateAttributeLineEdit(parent, serializables, index, subIndex);
+    attrEdit.name = "LineEdit";
+    SubscribeToEvent(attrEdit, "TextChanged", "HandleBitSelectionEdit");
+    SubscribeToEvent(attrEdit, "TextFinished", "HandleBitSelectionEdit");
+    return attrEdit;
+}
+
+void UpdateBitSelection(UIElement@ parent)
+{
+    int mask = 0;
+    const int MAX_MASK_BITS = 8;
+    for (int i = 0; i < MAX_MASK_BITS; i++)
+    {
+        CheckBox@ bitBox = parent.GetChild("BitSelect_" + String(i), true);
+        mask = mask | (bitBox.checked ? 1 << i : 0);
+    }
+
+    if (mask == (1 << MAX_MASK_BITS) - 1 )
+        mask = -1;
+
+    inUpdateBitSelection = true;
+    LineEdit@ attrEdit = parent.parent.GetChild("LineEdit", true);
+    attrEdit.text = String(mask);
+    inUpdateBitSelection = false;
+}
+
+void SetBitSelection(UIElement@ parent, int value)
+{
+    int mask = value;
+    const int MAX_MASK_BITS = 8;
+    if (mask ==  -1)
+        mask = (1 << MAX_MASK_BITS) - 1;
+
+    for (int i = 0; i < MAX_MASK_BITS; i++)
+    {
+        CheckBox@ bitBox = parent.GetChild("BitSelect_" + String(i), true);
+
+        if ((1 << i) & mask != 0)
+            bitBox.checked = true;
+        else
+            bitBox.checked = false;
+    }
+}
+
+void HandleBitSelectionToggled(StringHash eventType, VariantMap& eventData)
+{
+    if (inUpdateBitSelection)
+        return;
+
+    CheckBox@ bitBox = eventData["Element"].GetPtr();
+
+    UpdateBitSelection(bitBox.parent);
+}
+
+void HandleBitSelectionEdit(StringHash eventType, VariantMap& eventData)
+{
+    if (!inUpdateBitSelection)
+    {
+        LineEdit@ attrEdit = eventData["Element"].GetPtr();
+
+        inUpdateBitSelection = true;
+        SetBitSelection(attrEdit.parent, attrEdit.text.ToInt());
+        inUpdateBitSelection = false;
+    }
+
+    EditAttribute(eventType, eventData);
 }

 UIElement@ CreateStringAttributeEditor(ListView@ list, Array<Serializable@>@ serializables, const AttributeInfo&in info, uint index, uint subIndex)
@@ -194,8 +285,14 @@
 UIElement@ CreateIntAttributeEditor(ListView@ list, Array<Serializable@>@ serializables, const AttributeInfo&in info, uint index, uint subIndex)
 {
     UIElement@ parent = CreateAttributeEditorParent(list, info.name, index, subIndex);
+
+    // Check for masks
+    if (info.name.Contains("Mask", false))
+    {
+        UIElement@ attrEdit = CreateAttributeBitSelector(parent, serializables, index, subIndex);
+    }
     // Check for enums
-    if (info.enumNames is null || info.enumNames.empty)
+    else if (info.enumNames is null || info.enumNames.empty)
     {
         // No enums, create a numeric editor
         LineEdit@ attrEdit = CreateAttributeLineEdit(parent, serializables, index, subIndex);
@@ -487,7 +584,9 @@
         SetEditable(SetValue(parent.children[1], value.GetBool(), sameValue), editable && sameValue);
     else if (type == VAR_INT)
     {
-        if (info.enumNames is null || info.enumNames.empty)
+        if (info.name.Contains("Mask", false))
+            SetEditable(SetValue(parent.GetChild("LineEdit", true), value.ToString(), sameValue), editable && sameValue);
+        else if (info.enumNames is null || info.enumNames.empty)
             SetEditable(SetValue(parent.children[1], value.ToString(), sameValue), editable && sameValue);
         else
             SetEditable(SetValue(parent.children[1], value.GetInt(), sameValue), editable && sameValue);
@@ -706,6 +805,10 @@
 void GetEditorValue(UIElement@ parent, VariantType type, Array<String>@ enumNames, uint coordinate, Array<Variant>& values)
 {
     LineEdit@ attrEdit = parent.children[coordinate + 1];
+
+    if (attrEdit is null)
+        attrEdit = parent.GetChild("LineEdit", true);
+
     if (type == VAR_STRING)
         FillValue(values, Variant(attrEdit.text.Trimmed()));
     else if (type == VAR_BOOL)


Transferred from the Adobe Open Source Subversion Repository

Revision: 19876
Author:   aharui@adobe.com
Date:     2011-01-21T22:26:17.861225Z

Log Message:
-----------
Sync up ViewStacks and ButtonBars when lots of views are added at the same time.

QE notes: none
Doc notes: none
Bugs: SDK-27755
Reviewer: Corey
Tests run: checkintests mustella cyclone
Is noteworthy for integration: no

Modified Paths:
--------------
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/spark/src/spark/components/supportClasses/ButtonBarBase.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/mx/src/mx/containers/ViewStack.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/mx/src/mx/controls/NavBar.as</path>

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

--- frameworks/projects/spark/src/spark/components/supportClasses/ButtonBarBase.as
+++ frameworks/projects/spark/src/spark/components/supportClasses/ButtonBarBase.as
@@ -571,7 +571,13 @@
      */
     private function dataProvider_changeHandler(event:Event):void
     {
-        selectedIndex = ISelectableList(dataProvider).selectedIndex;
+        var newSelectedIndex:int = ISelectableList(dataProvider).selectedIndex;
+        if (selectedIndex != newSelectedIndex)
+        {
+            selectedIndex = newSelectedIndex;
+            commitSelection(false);
+            dispatchEvent(new FlexEvent(FlexEvent.VALUE_COMMIT));
+        }
     }

     /**


Now that we're accepting more than just Rectangle objects, we can't assume that they have left/top/right/bottom properties, so expressing them in terms of x+width and y+height

--- raw/src/org/yellcorp/lib/geom/RectUtil.as
+++ raw/src/org/yellcorp/lib/geom/RectUtil.as
@@ -244,7 +244,8 @@
     {
         if (!out) out = new Rectangle();

-        var r:Number = rect.right, b:Number = rect.bottom;
+        var r:Number = rect.x + rect.width;
+        var b:Number = rect.y + rect.height;

         out.x = Math.floor(rect.x);
         out.y = Math.floor(rect.y);
@@ -270,7 +271,8 @@
     {
         if (!out) out = new Rectangle();

-        var r:Number = rect.right, b:Number = rect.bottom;
+        var r:Number = rect.x + rect.width;
+        var b:Number = rect.y + rect.height;

         out.x = Math.ceil(rect.x);
         out.y = Math.ceil(rect.y);
@@ -318,8 +320,8 @@
         if (!out) out = new Rectangle();
         out.x = target.x + target.width * (rect.x - source.x) / source.width;
         out.y = target.y + target.height * (rect.y - source.y) / source.height;
-        out.width = target.width * (rect.right - source.x) / source.width;
-        out.height = target.height * (rect.bottom - source.y) / source.height;
+        out.width = target.width * (rect.x + rect.width - source.x) / source.width;
+        out.height = target.height * (rect.y + rect.height - source.y) / source.height;
         return out;
     }

@@ -340,12 +342,12 @@
     {
         if (!out) out = new Point();

-        if (point.x < rect.left)  {  out.x = rect.left;  }
-        else if (point.x > rect.right)  {  out.x = rect.right;  }
+        if (point.x < rect.x)  {  out.x = rect.x;  }
+        else if (point.x > rect.x + rect.width)  {  out.x = rect.x + rect.width;  }
         else  {  out.x = point.x;  }

         if (point.y < rect.top)  {  out.y = rect.top;  }
-        else if (point.y > rect.bottom)  {  out.y = rect.bottom;  }
+        else if (point.y > rect.y + rect.height)  {  out.y = rect.y + rect.height;  }
         else  {  out.y = point.y;  }

         return out;


add toString () for breakpoints

add toString () for breakpoints

--- vivified/core/vivi_initialize.as
+++ vivified/core/vivi_initialize.as
@@ -37,6 +37,9 @@
 };
 Breakpoint.list = new Array ();
 Breakpoint.prototype.addProperty ("active", Native.breakpoint_active_get, Native.breakpoint_active_set);
+Breakpoint.prototype.toString = function () {
+  return "user-defined breakpoint";
+};

 /*** information about the player ***/


only allow mp3 files to be opened

only allow mp3 files to be opened

--- src/com/ryanberdeen/echonest/api/v3/track/utils/TrackLoader.as
+++ src/com/ryanberdeen/echonest/api/v3/track/utils/TrackLoader.as
@@ -11,6 +11,7 @@
   import flash.events.IOErrorEvent;
   import flash.events.SecurityErrorEvent;
   import flash.media.Sound;
+  import flash.net.FileFilter;
   import flash.net.FileReference;

   import org.audiofx.mp3.MP3FileReferenceLoader;
@@ -62,7 +63,7 @@
     public function load(...properties):void {
       _analysisLoader.properties = properties;
       _fileReference.addEventListener(Event.SELECT, fileReferenceSelectHandler);
-      _fileReference.browse();
+      _fileReference.browse([new FileFilter("MP3 Files", "*.mp3")]);
     }

     private function fileReferenceSelectHandler(e:Event):void {


Change 20090325-bargull-Rvf by bargull@dell--p4--2-53 on 2009-03-25 22:20:41
    in /home/Admin/src/svn/openlaszlo/trunk
    for http://svn.openlaszlo.org/openlaszlo/trunk

Summary: getTextHeight() scrolls to top

New Features:

Bugs Fixed: LPP-7977 (getTextHeight() method problem)

Technical Reviewer: ptw
QA Reviewer: (pending)
Doc Reviewer: (pending)

Documentation:

Release Notes:

Details:
Also restore "TextField#scroll" in LzTextSprite.prototype.getTextfieldHeight() to avoid scrolling problems after measuring text.

Tests:
see bugreport

git-svn-id: d62bde4b5aa582fdf07c8d403e53e0399a7ed285@13487 fa20e4f9-1d0a-0410-b5f3-dc9c16b8b17c

--- WEB-INF/lps/lfc/kernel/swf/LzTextSprite.as
+++ WEB-INF/lps/lfc/kernel/swf/LzTextSprite.as
@@ -300,6 +300,7 @@
     var tca = textclip.autoSize;
     var tcw = textclip._width;
     var tch = textclip._height;
+    var tcs = textclip.scroll;

     // turn on autoSize temporarily
     textclip.autoSize = true;
@@ -321,6 +322,7 @@
     textclip.autoSize = tca;
     textclip._height = tch;
     textclip._width = tcw;
+    textclip.scroll = tcs;

     return h;
 }


improved error message

improved error message

--- WeaveCore/src/weave/core/SessionManager.as
+++ WeaveCore/src/weave/core/SessionManager.as
@@ -70,7 +70,12 @@

 			var childQName:String = getQualifiedClassName(linkableChildType);
 			if (!ClassUtils.classImplements(childQName, ILinkableObjectQualifiedClassName))
-				throw new Error("newLinkableChild(): Child class does not implement ILinkableObject.");
+			{
+				if (ClassUtils.hasClassDefinition(childQName))
+					throw new Error("newLinkableChild(): Child class does not implement ILinkableObject.");
+				else
+					throw new Error("newLinkableChild(): Child class inaccessible via qualified class name: " + childQName);
+			}

 			var linkableChild:ILinkableObject = new linkableChildType() as ILinkableObject;
 			return registerLinkableChild(linkableParent, linkableChild, callback, useGroupedCallback);


improved async stack debugging code

improved async stack debugging code

--- WeaveJS/src/weavejs/core/SessionManager.as
+++ WeaveJS/src/weavejs/core/SessionManager.as
@@ -39,8 +39,6 @@
 	 */
 	public class SessionManager implements ISessionManager
 	{
-		public var debugBusyTasks:Boolean = false;
-
 		public function newLinkableChild(linkableParent:Object, linkableChildType:Class, callback:Function = null, useGroupedCallback:Boolean = false):*
 		{
 			if (!Weave.isLinkable(linkableParent))
@@ -634,7 +632,7 @@

 		public function assignBusyTask(taskToken:Object, busyObject:ILinkableObject):void
 		{
-			if (debugBusyTasks)
+			if (WeaveAPI.debugAsyncStack)
 				map_task_stackTrace.set(taskToken, new Error("Stack trace when task was last assigned"));

 			// stop if already assigned
@@ -675,7 +673,7 @@
 				// immediate priority because we want to trigger as soon as possible
 				WeaveAPI.Scheduler.startTask(null, unbusyTrigger, WeaveAPI.TASK_PRIORITY_IMMEDIATE);

-				if (debugBusyTasks)
+				if (WeaveAPI.debugAsyncStack)
 				{
 					var stackTrace:Error = new Error("Stack trace when last task was unassigned");
 					map_unbusyStackTraces.set(owner, {
@@ -716,7 +714,7 @@
 					if (linkableObjectIsBusy(owner))
 						continue; // busy again

-					if (debugBusyTasks)
+					if (WeaveAPI.debugAsyncStack)
 					{
 						var stackTraces:Object = map_unbusyStackTraces.get(owner);
 						JS.log('Triggering callbacks because they have not triggered since owner has becoming unbusy:', owner);
@@ -765,7 +763,7 @@
 				var tasks:Array = d2d_owner_task.secondaryKeys(linkableObject);
 				for each (var task:Object in tasks)
 				{
-					if (debugBusyTasks)
+					if (WeaveAPI.debugAsyncStack)
 					{
 						var stackTrace:String = map_task_stackTrace.get(task);
 						//JS.log(stackTrace);