add getDuration() function to ChromelessPlayer

--- src/org/mangui/chromeless/ChromelessPlayer.as
+++ src/org/mangui/chromeless/ChromelessPlayer.as
@@ -29,6 +29,7 @@
         private var _videoHeight : Number = 0;
         /** current media position */
         private var _media_position : Number;
+        private var _duration : Number;

         /** Initialization. **/
         public function ChromelessPlayer() : void {
@@ -49,6 +50,7 @@
             ExternalInterface.addCallback("getLevel", _getLevel);
             ExternalInterface.addCallback("getLevels", _getLevels);
             ExternalInterface.addCallback("getMetrics", _getMetrics);
+            ExternalInterface.addCallback("getDuration", _getDuration);
             ExternalInterface.addCallback("getPosition", _getPosition);
             ExternalInterface.addCallback("getState", _getState);
             ExternalInterface.addCallback("getType", _getType);
@@ -111,6 +113,7 @@
         };

         private function _manifestHandler(event : HLSEvent) : void {
+            _duration = event.levels[0].duration;
             if (ExternalInterface.available) {
                 ExternalInterface.call("onManifest", event.levels[0].duration);
             }
@@ -175,6 +178,10 @@
             return _hls.metrics;
         };

+        private function _getDuration() : Number {
+          return _duration;
+        };
+
         private function _getPosition() : Number {
             return _hls.position;
         };
@@ -206,7 +213,7 @@
         private function _getstartFromLowestLevel() : Boolean {
             return _hls.startFromLowestLevel;
         };
-
+
         private function _getseekFromLowestLevel() : Boolean {
             return _hls.seekFromLowestLevel;
         };


Use new Maps factory.
Does anyone care about this crappy class?

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

--- src/as/com/threerings/flex/CursorManager.as
+++ src/as/com/threerings/flex/CursorManager.as
@@ -34,7 +34,8 @@
 import mx.styles.CSSStyleDeclaration;
 import mx.styles.StyleManager;

-import com.threerings.util.HashMap;
+import com.threerings.util.Map;
+import com.threerings.util.Maps;

 /**
  * A better CursorManager.
@@ -275,7 +276,7 @@
     }

     /** A mapping of all assigned cursor ids. */
-    private static const _cursors :HashMap = new HashMap();
+    private static const _cursors :Map = Maps.newMapOf(int);

     private static var _currentCursorId :int = 0; // SYSTEM_CURSOR


Transferred from the Adobe Open Source Subversion Repository

Revision: 19337
Author:   mhorn@adobe.com
Date:     2010-12-13T22:01:27.841985Z

Log Message:
-----------
ASDoc updates

Modified Paths:
--------------
<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/supportClasses/MobileSkin.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/SkinnableContainerSkin.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/ViewNavigatorApplicationSkin.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/mobiletheme/src/spark/skins/mobile/supportClasses/TextSkinBase.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/ListSkin.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/mobiletheme/src/spark/skins/mobile/TabbedViewNavigatorApplicationSkin.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/mobiletheme/src/spark/skins/mobile/HSliderDataTip.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/mobiletheme/src/spark/skins/mobile/TextAreaSkin.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/mobiletheme/src/spark/skins/mobile/HSliderTrackSkin.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/mobiletheme/src/spark/skins/mobile/supportClasses/ActionBarButtonSkinBase.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/mobiletheme/src/spark/skins/mobile/supportClasses/SelectableButtonSkinBase.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/mobiletheme/src/spark/skins/mobile/ViewNavigatorSkin.as</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/TabbedViewNavigatorSkin.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/mobiletheme/src/spark/skins/mobile/HSliderSkin.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/mobiletheme/src/spark/skins/mobile/HSliderThumbSkin.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/mobiletheme/src/spark/skins/mobile/RadioButtonSkin.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/mobiletheme/src/spark/skins/mobile/HScrollBarSkin.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/mobiletheme/src/spark/skins/mobile/HScrollBarThumbSkin.as</path>

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

--- frameworks/projects/mobiletheme/src/spark/skins/mobile/TextAreaSkin.as
+++ frameworks/projects/mobiletheme/src/spark/skins/mobile/TextAreaSkin.as
@@ -28,7 +28,7 @@
 use namespace mx_internal;

 /**
- *  Base mobile skin for spark.components.TextArea.
+ *  ActionScript-based skin for TextArea components in mobile applications.
  *
  * @see spark.components.TextArea
  *


fixed issue FB-22242

fixed issue FB-22242

git-svn-id: 9278a788294a4258aac04586390fc35fb4a5f335@10112 a9308255-753e-0410-a2e9-80b3fbc4fff6

--- FlexUnit4/src/org/flexunit/internals/runners/FlexUnit1ClassRunner.as
+++ FlexUnit4/src/org/flexunit/internals/runners/FlexUnit1ClassRunner.as
@@ -158,9 +158,13 @@

 				// FlexUnit 0.9 has a timer set up in TestSuiteTestListener executed
 				// 5ms after each test execution to clean up the static property listenerStack.
-				// We have to add this 5ms delay here as well otherwise the parentToken would be executed
+				// We have to add this 100ms delay here as well otherwise the parentToken would be executed
 				// before the TestSuiteTestListener timer and would mess things up.
-				var timer : Timer = new Timer ( 5, 1 );
+				// We are delaying 100ms and not less since this might be ~2 frames. Since this timer is
+				// created before than the timer in TestSuiteTestListener, due to Flash Player behaviour,
+				// if the timers are executed in the same frame and even thouh the time of the second one is
+				// smaller the first added timer will be executed first
+				var timer : Timer = new Timer ( 100, 1 );
 				timer.addEventListener( TimerEvent.TIMER,handleAllTestsComplete,false, 0, false );
 				timer.start();
 			}


Add limiter for fragment skipping. Maximum skip count defined in HLSSettings.maxSkippedFragments.

--- src/org/mangui/hls/loader/FragmentLoader.as
+++ src/org/mangui/hls/loader/FragmentLoader.as
@@ -6,21 +6,22 @@
     import flash.events.*;
     import flash.net.*;
     import flash.utils.ByteArray;
+    import flash.utils.Timer;
     import flash.utils.getTimer;
-    import flash.utils.Timer;
+
+    import org.mangui.hls.HLS;
+    import org.mangui.hls.HLSSettings;
     import org.mangui.hls.constant.HLSLoaderTypes;
     import org.mangui.hls.constant.HLSTypes;
     import org.mangui.hls.controller.AudioTrackController;
     import org.mangui.hls.controller.LevelController;
+    import org.mangui.hls.demux.DemuxHelper;
     import org.mangui.hls.demux.Demuxer;
-    import org.mangui.hls.demux.DemuxHelper;
     import org.mangui.hls.demux.ID3Tag;
     import org.mangui.hls.event.HLSError;
     import org.mangui.hls.event.HLSEvent;
     import org.mangui.hls.event.HLSLoadMetrics;
     import org.mangui.hls.flv.FLVTag;
-    import org.mangui.hls.HLS;
-    import org.mangui.hls.HLSSettings;
     import org.mangui.hls.model.AudioTrack;
     import org.mangui.hls.model.Fragment;
     import org.mangui.hls.model.FragmentData;
@@ -81,6 +82,7 @@
         private var _fragRetryCount : int;
         private var _fragLoadStatus : int;
         private var _fragSkipping : Boolean;
+        private var _fragSkipCount : int;
         /** reference to previous/current fragment */
         private var _fragPrevious : Fragment;
         private var _fragCurrent : Fragment;
@@ -334,6 +336,7 @@
             _fragmentFirstLoaded = false;
             _fragPrevious = null;
             _fragSkipping = false;
+            _fragSkipCount = 0;
             _levelNext = -1;
             _timer.start();
         }
@@ -348,6 +351,7 @@
             _loadingState = LOADING_IDLE;
             _fragmentFirstLoaded = true;
             _fragSkipping = false;
+            _fragSkipCount = 0;
             _levelNext = -1;
             _fragPrevious = lastFrag;
             _timer.start();
@@ -447,7 +451,7 @@
                 }
                 // switch back to IDLE state to request new fragment at lowest level
                 _loadingState = LOADING_IDLE;
-            } else if(HLSSettings.fragmentLoadSkipAfterMaxRetry == true) {
+            } else if(HLSSettings.fragmentLoadSkipAfterMaxRetry == true && _fragSkipCount < HLSSettings.maxSkippedFragments  || HLSSettings.maxSkippedFragments < 0) {
                 CONFIG::LOGGING {
                     Log.warn("error parsing fragment, skip it and load next one");
                 }
@@ -459,6 +463,10 @@
                 _fragRetryTimeout = 1000;
                 _fragPrevious = _fragCurrent;
                 _fragSkipping = true;
+                _fragSkipCount++;
+                CONFIG::LOGGING {
+                    Log.debug("fragments skipped / max: " + _fragSkipCount + "/" + HLSSettings.maxSkippedFragments );
+                }
                 // set fragment first loaded to be true to ensure that we can skip first fragment as well
                 _fragmentFirstLoaded = true;
                 _loadingState = LOADING_IDLE;
@@ -512,7 +520,7 @@
                     }
                     // switch back to IDLE state to request new fragment at lowest level
                     _loadingState = LOADING_IDLE;
-                } else if(HLSSettings.fragmentLoadSkipAfterMaxRetry == true) {
+                } else if(HLSSettings.fragmentLoadSkipAfterMaxRetry == true && _fragSkipCount < HLSSettings.maxSkippedFragments || HLSSettings.maxSkippedFragments < 0) {
                     /* check if loaded fragment is not the last one of a live playlist.
                         if it is the case, don't skip to next, as there is no next fragment :-)
                     */
@@ -527,7 +535,7 @@
                         _fragRetryTimeout = Math.min(HLSSettings.fragmentLoadMaxRetryTimeout, 2 * _fragRetryTimeout);
                     } else {
                         CONFIG::LOGGING {
-                            Log.warn("max fragment load retry reached, skip fragment and load next one");
+                            Log.warn("max fragment load retry reached, skip fragment and load next one.");
                         }
                         var tags : Vector.<FLVTag> = tags = new Vector.<FLVTag>();
                         tags.push(_fragCurrent.getSkippedTag());
@@ -537,6 +545,10 @@
                         _fragRetryTimeout = 1000;
                         _fragPrevious = _fragCurrent;
                         _fragSkipping = true;
+                        _fragSkipCount++;
+                        CONFIG::LOGGING {
+                            Log.debug("fragments skipped / max: " + _fragSkipCount + "/" + HLSSettings.maxSkippedFragments );
+                        }
                         // set fragment first loaded to be true to ensure that we can skip first fragment as well
                         _fragmentFirstLoaded = true;
                         _loadingState = LOADING_IDLE;
@@ -601,6 +613,7 @@
                 Log.debug("loading completed");
             }
             _fragSkipping = false;
+            _fragSkipCount = 0;
             _metrics.loading_end_time = getTimer();
             _metrics.size = fragData.bytesLoaded;

@@ -978,7 +991,7 @@

             /* try to do progressive buffering here.
              * only do it in case :
-             * 		first fragment is already loaded
+             *      first fragment is already loaded
              *      or if first fragment is not loaded, we can do it if
              *          startLevel is already defined (startLevel is already set or
              *          startFromLevel/startFromBitrate not set to -1
@@ -1062,9 +1075,10 @@
                 _fragHandleParsingError("error parsing fragment, no tag found");
                 return;
             }
-            // parsing complete, reset retry counter
+            // parsing complete, reset retry and skip counters
             _fragRetryCount = 0;
             _fragRetryTimeout = 1000;
+            _fragSkipCount = 0;
             CONFIG::LOGGING {
                 if (fragData.audio_found) {
                     Log.debug("m/M audio PTS:" + fragData.pts_min_audio + "/" + fragData.pts_max_audio);


Transferred from the Adobe Open Source Subversion Repository

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

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

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

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

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

 package mx.controls.listClasses
 {


Added StandardLib.sortOn()

Added StandardLib.sortOn()

Change-Id: I58e4dea52e48eb5daec5cbca8229c076d575b70d

--- WeaveCore/src/weave/compiler/StandardLib.as
+++ WeaveCore/src/weave/compiler/StandardLib.as
@@ -576,6 +576,106 @@
 		public static function sort(array:*, compare:Function = null):void
 		{
 			AsyncSort.sortImmediately(array, compare);
+		}
+
+		/**
+		 * Sorts an Array (or Vector) of items in place using properties, lookup tables, or replacer functions.
+		 * @param array An Array (or Vector) to sort.
+		 * @param params One of several formats: A property name, lookup table, replacer function, or an Array of such parameters to sort on multiple values.
+		 * @param sortDirections Specifies sort direction(s) (1 or -1) corresponding to the params.
+		 * @param inPlace Set this to true to modify the original Array (or Vector) in place or false to return a new, sorted copy.
+		 * @param returnSortedIndexArray Set this to true to return a new Array of sorted indices.
+		 * @return Either the original Array (or Vector) or a new one.
+		 * @see Array#sortOn()
+		 */
+		public static function sortOn(array:*, params:*, sortDirections:* = undefined, inPlace:Boolean = true, returnSortedIndexArray:Boolean = false):*
+		{
+			if (array.length == 0)
+				return inPlace ? array : [];
+
+			var values:Array = new Array(array.length);
+			var param:*;
+			var sortDirection:int;
+			var i:int;
+			if (params is Array)
+			{
+				var fields:Array = new Array(params.length);
+				var fieldOptions:Array = new Array(params.length);
+				for (var p:int = 0; p < params.length; p++)
+				{
+					if (p == 0)
+					{
+						i = array.length;
+						while (i--)
+							values[i] = new Array(params.length);
+					}
+
+					param = params[p];
+					sortDirection = sortDirections && sortDirections[p] < 0 ? Array.DESCENDING : 0;
+
+					i = array.length;
+					if (param === array)
+						while (i--)
+							values[i][p] = array[i];
+					else if (param is Function)
+						while (i--)
+							values[i][p] = param(array[i]);
+					else if (typeof param === 'object')
+						while (i--)
+							values[i][p] = param[array[i]];
+					else
+						while (i--)
+							values[i][p] = array[i][param];
+
+					fields[p] = p;
+					fieldOptions[p] = Array.RETURNINDEXEDARRAY | guessSortMode(values[0][p]) | sortDirection;
+				}
+
+				values = values.sortOn(fields, fieldOptions);
+			}
+			else
+			{
+				param = params;
+				sortDirection = sortDirections < 0 ? Array.DESCENDING : 0;
+
+				i = array.length;
+				if (param is Function)
+					while (i--)
+						values[i] = param(array[i]);
+				else if (typeof param === 'object')
+					while (i--)
+						values[i] = param[array[i]];
+				else
+					while (i--)
+						values[i] = array[i][param];
+
+				values = values.sort(Array.RETURNINDEXEDARRAY | guessSortMode(values[0]) | sortDirection);
+			}
+
+			if (returnSortedIndexArray)
+				return values;
+
+			var array2:Array = new Array(array.length);
+			i = array.length;
+			while (i--)
+				array2[i] = array[values[i]];
+
+			if (!inPlace)
+				return array2;
+
+			i = array.length;
+			while (i--)
+				array[i] = array2[i];
+			return array;
+		}
+
+		/**
+		 * Guesses the appropriate Array.sort() mode based on a sample item from an Array.
+		 * @return Either Array.NUMERIC or 0.
+		 */
+		private static function guessSortMode(sampleItem:Object):int
+		{
+			return sampleItem is Number || sampleItem is Date ? Array.NUMERIC : 0;
 		}

 		/**


Factor out a parse_addr_spec function.

Factor out a parse_addr_spec function.

--- swfcat.as
+++ swfcat.as
@@ -23,11 +23,7 @@
         // Socket to client.
         private var s_c:Socket;

-        private var fac_address:String;
-        private var fac_port:int;
-
-        private var client_address:String;
-        private var client_port:int;
+        private var fac_addr:Object;

         private function puts(s:String):void
         {
@@ -52,7 +48,7 @@

         private function loaderinfo_complete(e:Event):void
         {
-            var fac_spec:String, parts:Array;
+            var fac_spec:String;

             puts("Parameters loaded.");
             fac_spec = this.loaderInfo.parameters["facilitator"];
@@ -61,13 +57,11 @@
                 return;
             }
             puts("Facilitator spec: \"" + fac_spec + "\"");
-            parts = fac_spec.split(":", 2);
-            if (parts.length != 2 || !parseInt(parts[1])) {
+            fac_addr = parse_addr_spec(fac_spec);
+            if (!fac_addr) {
                 puts("Error: Facilitator spec must be in the form \"host:port\".");
                 return;
             }
-            fac_address = parts[0];
-            fac_port = parseInt(parts[1]);

             go(TOR_ADDRESS, TOR_PORT);
         }
@@ -121,8 +115,8 @@
                     s_t.close();
             });

-            puts("Facilitator: connecting to " + fac_address + ":" + fac_port + ".");
-            s_f.connect(fac_address, fac_port);
+            puts("Facilitator: connecting to " + fac_addr.host + ":" + fac_addr.port + ".");
+            s_f.connect(fac_addr.host, fac_addr.port);
         }

         private function fac_connected(e:Event):void
@@ -130,26 +124,24 @@
             puts("Facilitator: connected.");

             s_f.addEventListener(ProgressEvent.SOCKET_DATA, function (e:ProgressEvent):void {
-                var client_spec:String = new String();
-                var parts:Array;
+                var client_spec:String;
+                var client_addr:Object;

                 client_spec = s_f.readMultiByte(e.bytesLoaded, "utf-8");
                 puts("Facilitator: got \"" + client_spec + "\"");

-                parts = client_spec.split(":", 2);
-                if (parts.length != 2 || !parseInt(parts[1])) {
-                    puts("Error: Facilitator spec must be in the form \"host:port\".");
+                client_addr = parse_addr_spec(client_spec);
+                if (!client_addr) {
+                    puts("Error: Client spec must be in the form \"host:port\".");
                     return;
                 }
-                if (parts[0] == "0.0.0.0" && parseInt(parts[1]) == 0) {
+                if (client_addr.host == "0.0.0.0" && client_addr.port == 0) {
                     puts("Error: Facilitator has no clients.");
                     return;
                 }
-                client_address = parts[0];
-                client_port = parseInt(parts[1]);

-                puts("Client: connecting to " + client_address + ":" + client_port + ".");
-                s_c.connect(client_address, client_port);
+                puts("Client: connecting to " + client_addr.host + ":" + client_addr.port + ".");
+                s_c.connect(client_addr.host, client_addr.port);

             });

@@ -173,5 +165,20 @@
                 s_t.writeBytes(bytes);
             });
         }
+
+        private static function parse_addr_spec(spec:String):Object
+        {
+            var parts:Array;
+            var addr:Object;
+
+            parts = spec.split(":", 2);
+            if (parts.length != 2 || !parseInt(parts[1]))
+                return null;
+            addr = {}
+            addr.host = parts[0];
+            addr.port = parseInt(parts[1]);
+
+            return addr;
+        }
     }
 }


Re-add a "s_c = new Socket()" that got lost somewhere along the line.

--- swfcat.as
+++ swfcat.as
@@ -129,6 +129,8 @@

         private function fac_connected(e:Event):void
         {
+            s_c = new Socket();
+
             puts("Facilitator: connected.");

             s_f.addEventListener(ProgressEvent.SOCKET_DATA, function (e:ProgressEvent):void {


add logs

add logs

--- src/org/mangui/osmf/plugins/HLSSeekTrait.as
+++ src/org/mangui/osmf/plugins/HLSSeekTrait.as
@@ -23,6 +23,7 @@
          */
         override protected function seekingChangeStart(newSeeking : Boolean, time : Number) : void {
             if (newSeeking) {
+                Log.info("HLSSeekTrait:seekingChangeStart(newSeeking/time):(" + newSeeking  + "/" + time + ")");
                 _hls.stream.seek(time);
             }
             super.seekingChangeStart(newSeeking, time);


Transferred from the Adobe Open Source Subversion Repository

Revision: 20389
Author:   cframpto@adobe.com
Date:     2011-02-18T21:41:41.538316Z

Log Message:
-----------
Prepare and link in the DataGrid examples written by Hans.

QE notes:
Doc notes:
Bugs:
Reviewer:
Tests run: compiled - need Stephen's asdoc build to verify examples
Is noteworthy for integration:

Modified Paths:
--------------
<path kind="file" action="A">/private/flex/sdk/branches/hero_private/frameworks/projects/spark/asdoc/en_US/spark/components/examples/DataGridSelectionExample.mxml</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/spark/src/spark/components/gridClasses/GridColumn.as</path>
<path kind="file" action="A">/private/flex/sdk/branches/hero_private/frameworks/projects/spark/asdoc/en_US/spark/components/examples/DataGridSimpleExample.mxml</path>
<path kind="dir" action="A">/private/flex/sdk/branches/hero_private/frameworks/projects/spark/asdoc/en_US/spark/components/gridClasses</path>
<path kind="file" action="A">/private/flex/sdk/branches/hero_private/frameworks/projects/spark/asdoc/en_US/spark/components/gridClasses/examples/GridItemRendererExample.mxml</path>
<path kind="file" action="A">/private/flex/sdk/branches/hero_private/frameworks/projects/spark/asdoc/en_US/spark/components/examples/DataGridRowHeightExample.mxml</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/spark/src/spark/components/DataGrid.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/spark/src/spark/skins/spark/DefaultGridItemRenderer.as</path>
<path kind="file" action="A">/private/flex/sdk/branches/hero_private/frameworks/projects/spark/asdoc/en_US/spark/components/gridClasses/examples/DefaultGridItemRendererExample.mxml</path>
<path kind="file" action="A">/private/flex/sdk/branches/hero_private/frameworks/projects/spark/asdoc/en_US/spark/components/examples/DataGridRollOverExample.mxml</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/spark/src/spark/skins/spark/UITextFieldGridItemRenderer.as</path>
<path kind="file" action="A">/private/flex/sdk/branches/hero_private/frameworks/projects/spark/asdoc/en_US/spark/components/gridClasses/examples/GridColumnExample.mxml</path>
<path kind="file" action="A">/private/flex/sdk/branches/hero_private/frameworks/projects/spark/asdoc/en_US/spark/components/gridClasses/examples/GridItemRendererCustomPrepareExample.mxml</path>
<path kind="dir" action="A">/private/flex/sdk/branches/hero_private/frameworks/projects/spark/asdoc/en_US/spark/components/gridClasses/examples</path>
<path kind="file" action="A">/private/flex/sdk/branches/hero_private/frameworks/projects/spark/asdoc/en_US/spark/components/gridClasses/examples/GridColumnVisibilityExample.mxml</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/spark/asdoc/en_US/spark/components/examples/DataGridExample.mxml</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/spark/src/spark/components/gridClasses/GridItemRenderer.as</path>
<path kind="file" action="A">/private/flex/sdk/branches/hero_private/frameworks/projects/spark/asdoc/en_US/spark/components/examples/DataGridInvalidateCellExample.mxml</path>
<path kind="file" action="A">/private/flex/sdk/branches/hero_private/frameworks/projects/spark/asdoc/en_US/spark/components/gridClasses/examples/GridItemRendererCustomBindingExample.mxml</path>
<path kind="file" action="A">/private/flex/sdk/branches/hero_private/frameworks/projects/spark/asdoc/en_US/spark/components/examples/DataGridTypicalItemExample.mxml</path>

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

--- frameworks/projects/spark/src/spark/components/gridClasses/GridColumn.as
+++ frameworks/projects/spark/src/spark/components/gridClasses/GridColumn.as
@@ -43,6 +43,9 @@
  *  @see spark.components.Grid
  *  @see spark.components.DataGrid
  *
+ *  @includeExample examples/GridColumnExample.mxml
+ *  @includeExample examples/GridColumnVisibilityExample.mxml
+ *
  *  @langversion 3.0
  *  @playerversion Flash 10
  *  @playerversion AIR 2.5


fix coercion exception

fix coercion exception

--- src/org/mangui/chromeless/ChromelessPlayer.as
+++ src/org/mangui/chromeless/ChromelessPlayer.as
@@ -431,7 +431,7 @@
                 _stageVideo.attachNetStream(_hls.stream);
             } else {
                 _video = new Video(stage.stageWidth, stage.stageHeight);
-                _video.addEventListener(StageVideoEvent.RENDER_STATE, _onStageVideoStateChange);
+                _video.addEventListener(VideoEvent.RENDER_STATE, _onVideoStateChange);
                 addChild(_video);
                 _video.smoothing = true;
                 _video.attachNetStream(_hls.stream);
@@ -447,6 +447,10 @@

         private function _onStageVideoStateChange(event : StageVideoEvent) : void {
+            Log.info("Video decoding:" + event.status);
+        }
+
+        private function _onVideoStateChange(event : VideoEvent) : void {
             Log.info("Video decoding:" + event.status);
         }


Transferred from the Adobe Open Source Subversion Repository

Revision: 19344
Author:   egeorgie@adobe.com
Date:     2010-12-14T00:38:13.222484Z

Log Message:
-----------
PARB changes for density scaling

- authorDensity -> applicationDPI, type changed to int
- DensityUtil not visible in the documentation anymore [ExcludeClass]
- DensityUtil. screenDPIToDeviceDensity() -> classifyDPI(), returns int now
- DensityUtil. getDensityScale() -> getDPIScale(), takes int now
- DeviceDensity enum -> DPIClassification enum
- ISystemManager.densityScale property has been removed.
- New property to Application -> runtimeDPI.

QE notes: can start writing automated tests now
Doc notes:
Bugs:
Reviewer: Alex, Glenn, Jason SJ,
Tests run: checkintest
Is noteworthy for integration: Yes

Modified Paths:
--------------
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/airframework/src/mx/managers/WindowedSystemManager.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/framework/src/mx/managers/SystemManager.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/mobiletheme/src/spark/skins/mobile/supportClasses/MobileSkin.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/framework/src/mx/utils/DensityUtil.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" copyfrom-path="/private/flex/sdk/branches/hero_private/frameworks/projects/framework/src/mx/core/DeviceDensity.as" copyfrom-rev="19256" action="A">/private/flex/sdk/branches/hero_private/frameworks/projects/framework/src/mx/core/DPIClassification.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/mobiletheme/src/spark/skins/mobile/NavigationAngledButtonSkin.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/VScrollBarSkin.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/framework/src/mx/managers/ISystemManager.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="D">/private/flex/sdk/branches/hero_private/frameworks/projects/framework/src/mx/core/DeviceDensity.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/HSliderDataTip.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/mobiletheme/src/spark/skins/mobile/TextAreaSkin.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/mobiletheme/src/spark/skins/mobile/HSliderTrackSkin.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/mobiletheme/src/spark/skins/mobile/supportClasses/ActionBarButtonSkinBase.as</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/HSliderThumbSkin.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/mobiletheme/src/spark/skins/mobile/RadioButtonSkin.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/mobiletheme/src/spark/skins/mobile/HScrollBarThumbSkin.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/mobiletheme/src/spark/skins/mobile/HScrollBarSkin.as</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/spark/src/spark/components/Application.as</path>

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

--- frameworks/projects/mobiletheme/src/spark/skins/mobile/RadioButtonSkin.as
+++ frameworks/projects/mobiletheme/src/spark/skins/mobile/RadioButtonSkin.as
@@ -15,7 +15,7 @@
 import flash.display.DisplayObject;
 import flash.display.Graphics;

-import mx.core.DeviceDensity;
+import mx.core.DPIClassification;

 import spark.skins.mobile.supportClasses.SelectableButtonSkinBase;
 import spark.skins.mobile160.assets.RadioButton_down;
@@ -77,9 +77,9 @@
         layoutPaddingTop = 0;
         layoutPaddingBottom = 0;

-        switch (authorDensity)
+        switch (applicationDPI)
         {
-            case DeviceDensity.PPI_320:
+            case DPIClassification.DPI_320:
             {
                 upIconClass = spark.skins.mobile320.assets.RadioButton_up;
                 upSelectedIconClass = spark.skins.mobile320.assets.RadioButton_up;
@@ -95,7 +95,7 @@

                 break;
             }
-            case DeviceDensity.PPI_240:
+            case DPIClassification.DPI_240:
             {
                 upIconClass = spark.skins.mobile240.assets.RadioButton_up;
                 upSelectedIconClass = spark.skins.mobile240.assets.RadioButton_up;


Transferred from the Adobe Open Source Subversion Repository

Revision: 7088
Author:   smgilson@adobe.com
Date:     2009-05-19T20:49:49.563900Z

Log Message:
-----------
ASDoc updates

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

Modified Paths:
--------------
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/spark/skins/default/ButtonBarSkin.mxml</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/flex4/src/spark/components/ButtonBarButton.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/spark/components/ButtonBar.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/flex4/src/spark/skins/default/ListSkin.mxml</path>

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

--- frameworks/projects/spark/src/spark/components/supportClasses/ListBase.as
+++ frameworks/projects/spark/src/spark/components/supportClasses/ListBase.as
@@ -34,14 +34,14 @@
  TODO (jszeto)
  - Add caretIndex public getter
  - Add setCaretIndex protected setter
- 	- Should set currentCaretIndex
- 	- Call itemInCaret
+    - Should set currentCaretIndex
+    - Call itemInCaret
 */

 /**
  *  Dispatched when the selection is going to change.
  *  Calling the preventDefault() method
- *  on the event will prevent the selection from changing.
+ *  on the event prevents the selection from changing.
  *
  *  @eventType mx.events.IndexChangedEvent.SELECTION_CHANGING
  *
@@ -78,7 +78,29 @@

 /**
  *  The ListBase class is the base class for all components that support
- *  selection.
+ *  selection.
+ *
+ *  @mxml
The <ListBase> tag inherits all of the tag
+ *  attributes of its superclass and adds the following tag attributes:

+ *
+ *

+ *  <ListBase
+ *
+ *    Properties
+ *    dataProvider="null"
+ *    labelField="null"
+ *    labelFunction="null"
+ *    requiresSelection="false"
+ *    selectedIndex="-1"
+ *    selectedItem="undefined"
+ *    useVirtualLayout="false"
+ *
+ *    Events
+ *    itemFocusChanged="No default"
+ *    selectionChanged="No default"
+ *    selectionChanging="No default"
+ *  />
+ *

  *
  *  @langversion 3.0
  *  @playerversion Flash 10
@@ -147,7 +169,7 @@
     private var dataProviderChanged:Boolean;

     /**
-     *  @inheritDoc
+     *  @private
      *
      *  @langversion 3.0
      *  @playerversion Flash 10
@@ -162,9 +184,9 @@
         dataProviderChanged = true;
         doingWholesaleChanges = true;

-		// ensure that our listener is added before the dataGroup which adds a listener during
-		// the base class setter if the dataGroup already exists.  If the dataGroup isn't
-		// created yet, then we still be first.
+        // ensure that our listener is added before the dataGroup which adds a listener during
+        // the base class setter if the dataGroup already exists.  If the dataGroup isn't
+        // created yet, then we still be first.
         if (value)
             value.addEventListener(CollectionEvent.COLLECTION_CHANGE, dataProvider_collectionChangeHandler);

@@ -181,6 +203,7 @@
     /**
      *  The name of the field in the data provider items to display
      *  as the label.
+     *  The labelFunction property overrides this property.
      *
      *  @default null
      *
@@ -215,6 +238,8 @@

     /**
      *  A user-supplied function to run on each item to determine its label.
+     *  The labelFunction property overrides
+     *  the labelField property.
      *
      *
You can supply a labelFunction that finds the
      *  appropriate fields and returns a displayable string. The
@@ -281,7 +306,7 @@
     /**
      *  The 0-based index of the selected item, or -1 if no item is selected.
      *  Setting the selectedIndex property deselects the currently selected
-     *  item and selects the item at the specified index.
+     *  item and selects the data item at the specified index.
      *
      *
The value is always between -1 and (dataProvider.length - 1).
      *  If items at a lower index than selectedIndex are
@@ -396,10 +421,9 @@
     private var requiresSelectionChanged:Boolean = false;

     /**
-     *  Specifies whether an item must always be selected in the dataProvider.
+     *  If true, a data item must always be selected in the control.
      *  If the value is true, the selectedIndex property
      *  is always set to a value between 0 and (dataProvider.length - 1),
-     *  or -1 if there are no items.
      *
      *  @default false
      *
@@ -485,10 +509,11 @@
     private var _useVirtualLayout:Boolean = false;

     /**
-     *  A convenience that delegates to layout.useVirtualLayout.
-     *  If this list's layout is subsequently replaced and the value of this
-     *  property is true, then then the new layout's useVirtualLayout property
-     *  will also be true.
+     *  Sets the value of the useVirtualLayout property
+     *  of the layout associated with this control.
+     *  If the layout is subsequently replaced and the value of this
+     *  property is true, then the new layout's
+     *  useVirtualLayout property is set to true.
      *
      *  @default false
      *
@@ -663,24 +688,24 @@

         if (labelFieldOrFunctionChanged)
         {
-        	//Cycle through all instantiated renderers
-        	if (dataGroup)
-        	{
-	        	for (var i:int = 0; i < dataGroup.numChildren; i++)
-	        	{
-        			//TODO: Ryan, figure out numChildren/numElement vs. getElement/getChild
-	        		//and which is more performant.
-	        		var renderer:IItemRenderer = dataGroup.getElementAt(i) as IItemRenderer;
-	        		//Push the correct text into the renderer by settings its labelText
-	        		//property
-	        		if (renderer)
-		        	{
-	        			renderer.labelText = itemToLabel(renderer.data);
-		        	}
-	        	}
-	        }
-
-			labelFieldOrFunctionChanged = false;
+            //Cycle through all instantiated renderers
+            if (dataGroup)
+            {
+                for (var i:int = 0; i < dataGroup.numChildren; i++)
+                {
+                    //TODO: Ryan, figure out numChildren/numElement vs. getElement/getChild
+                    //and which is more performant.
+                    var renderer:IItemRenderer = dataGroup.getElementAt(i) as IItemRenderer;
+                    //Push the correct text into the renderer by settings its labelText
+                    //property
+                    if (renderer)
+                    {
+                        renderer.labelText = itemToLabel(renderer.data);
+                    }
+                }
+            }
+
+            labelFieldOrFunctionChanged = false;
         }
     }

@@ -717,13 +742,13 @@

     /**
      *  Given a data item, return the correct text a renderer
-     *  should display while taking labelField and labelFunction
-     *  into account.
+     *  should display while taking the labelField
+     *  and labelFunction properties into account.
      *
      *  @param item A data item
      *
      *  @return String representing the text to display for the
-     *  passed in item's renderer.
+     *  data item in the  renderer.
      *
      *  @langversion 3.0
      *  @playerversion Flash 10
@@ -732,7 +757,7 @@
      */
     override public function itemToLabel(item:Object):String
     {
-    	return LabelUtil.itemToLabel(item, labelField, labelFunction);
+        return LabelUtil.itemToLabel(item, labelField, labelFunction);
     }

     /**
@@ -774,17 +799,18 @@
     }

     /**
-     *  Returns true if the item is selected by calling
+     *  Returns true if the item is selected by calling
      *  isItemIndexSelected().
      *
      *
If multiple instances of the item are in the list,
-     *  this will only check to see whether the item at
+     *  this method only checks to see whether the item at
      *  dataProvider.getItemIndex() (usually the first
      *  instance of that item) is selected.

      *
      *  @param item The item whose selection status is being checked
      *
-     *  @return true if the item is selected, false otherwise.
+     *  @return true if the item is selected,
+     *  and false otherwise.
      *
      *  @langversion 3.0
      *  @playerversion Flash 10
@@ -799,11 +825,12 @@
     }

     /**
-     *  Returns true if the item at the index is selected.
+     *  Returns true if the item at the index is selected.
      *
      *  @param index The index of the item whose selection status is being checked
      *
-     *  @return true if the item at that index is selected, false otherwise.
+     *  @return true if the item at that index is selected,
+     *  and false otherwise.
      *
      *  @langversion 3.0
      *  @playerversion Flash 10
@@ -976,6 +1003,7 @@
     //--------------------------------------------------------------------------

     /**
+     *  @private
      *  Called when contents within the dataProvider changes.
      *
      *  @param event The collection change event


no longer catching error if ExternalInterface call fails.

--- WeaveData/src/weave/services/ExternalDownloader.as
+++ WeaveData/src/weave/services/ExternalDownloader.as
@@ -52,17 +52,10 @@
 			if(_initialized)
 				return;

-			try
-			{
-				WeaveAPI.initializeJavaScript(JS_ExternalDownloader);
-				JavaScript.registerMethod("ExternalDownloader_callback", callback);
-
-				_initialized = true;
-			}
-			catch (e:Error)
-			{
-				reportError(e);
-			}
+			WeaveAPI.initializeJavaScript(JS_ExternalDownloader);
+			JavaScript.registerMethod("ExternalDownloader_callback", callback);
+
+			_initialized = true;
 		}

 		public static function download(urlRequest:URLRequest, dataFormat:String, token:AsyncToken):void


Transferred from the Adobe Open Source Subversion Repository

Revision: 12543
Author:   clucier@adobe.com
Date:     2009-12-04T18:58:42.757248Z

Log Message:
-----------
The AddItems override no longer gets tripped up by IDeferredContentOwner containers.

QE notes:  None
Doc notes: None
Bugs: SDK-23962
Reviewer: Alex, Glenn, Kevin
Tests run: Box, Panel, ViewStack, States
Is noteworthy for integration: No

Modified Paths:
--------------
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/states/AddItems.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/core/Container.as</path>

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

--- frameworks/projects/mx/src/mx/core/Container.as
+++ frameworks/projects/mx/src/mx/core/Container.as
@@ -4163,6 +4163,7 @@
         numChildrenCreated = numChildren - numChildrenBefore;

         processedDescriptors = true;
+        dispatchEvent(new FlexEvent(FlexEvent.CONTENT_CREATION_COMPLETE));
     }

     /**
@@ -4180,7 +4181,6 @@
     public function createDeferredContent():void
     {
         createComponentsFromDescriptors(true);
-        dispatchEvent(new FlexEvent(FlexEvent.CONTENT_CREATION_COMPLETE));
     }

    /**


Transferred from the Adobe Open Source Subversion Repository

Revision: 6185
Author:   rfrishbe@adobe.com
Date:     2009-04-21T20:32:10.009166Z

Log Message:
-----------
Now that Group returns a defensive copy of mxmlContent and copies on write, this was causing SkinnableContainer to leak memory where it would retain a copy of the mxmlContent, which miht be out of date.  Since _mxmlContent is just really a temporary array whenever a contentGroup and a placeHolderGroup aren't around, we can null it out after we are done with it.

QE Notes: We should add tests to make sure we aren't leaking anymore
Doc Notes: -
Bugs: SDK-20654
Reviewer: Hans
tests: checkintests, mustella SkinnableContainer, Panel

Modified Paths:
--------------
/flex/sdk/trunk/frameworks/projects/flex4/src/spark/components/SkinnableContainer.as

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

--- frameworks/projects/spark/src/spark/components/SkinnableContainer.as
+++ frameworks/projects/spark/src/spark/components/SkinnableContainer.as
@@ -262,7 +262,10 @@
                 _placeHolderGroup = new Group();

                 if (_mxmlContent)
+                {
                     _placeHolderGroup.mxmlContent = _mxmlContent;
+                    _mxmlContent = null;
+                }

                 _placeHolderGroup.addEventListener(
                     ElementExistenceEvent.ELEMENT_ADD, contentGroup_elementAddedHandler);
@@ -517,15 +520,12 @@
      */
     public function set mxmlContent(value:Array):void
     {
-        if (value == _mxmlContent)
-            return;
-
-        _mxmlContent = value;
-
         if (contentGroup)
             contentGroup.mxmlContent = value;
         else if (_placeHolderGroup)
             _placeHolderGroup.mxmlContent = value;
+        else
+            _mxmlContent = value;
     }

     //----------------------------------
@@ -824,6 +824,12 @@

                 contentGroup.mxmlContent = sourceContent ? sourceContent.slice() : null;

+                // TODO (rfrishbe): investigate why we need this, especially if these elements shouldn't
+                // be added to the place holder Group's display list
+
+                // TODO (rfrishbe): Also look at why we need a defensive copy for mxmlContent in Group,
+                // especially if we make it mx_internal.
+
                 // Temporary workaround because copying content from one Group to another throws RTE
                 for (var i:int = _placeHolderGroup.numElements; i > 0; i--)
                 {
@@ -834,6 +840,7 @@
             else if (_mxmlContent != null)
             {
                 contentGroup.mxmlContent = _mxmlContent;
+                _mxmlContent = null;
             }

             // copy proxied values from contentGroupProperties (if set) to contentGroup


added comments

added comments

--- WeaveUISpark/src/weave/utils/VisToolGroup.as
+++ WeaveUISpark/src/weave/utils/VisToolGroup.as
@@ -36,14 +36,20 @@
 	 */
 	public class VisToolGroup implements ILinkableObject
 	{
+		//TODO: create a corresponding Class that has, for each setting here, a corresponding LinkableHashMap containing possible choices
+
+
 		public const colorColumn:LinkableDynamicObject = registerLinkableChild(this, new LinkableDynamicObject(ColorColumn));
 		public const probeKeySet:LinkableDynamicObject = registerLinkableChild(this, new LinkableDynamicObject(IKeySet));
 		public const selectionKeySet:LinkableDynamicObject = registerLinkableChild(this, new LinkableDynamicObject(IKeySet));
 		public const subsetKeyFilter:LinkableDynamicObject = registerLinkableChild(this, new LinkableDynamicObject(IKeyFilter));

+		//TODO: object which specifies transformation from IQualifiedKey to color value... instead of nested color/bin/filter columns
+
 		public function getColorColumn():ColorColumn { return colorColumn.internalObject as ColorColumn; }
 		public function getColorBinColumn():BinnedColumn { return getColorColumn().getInternalColumn() as BinnedColumn; }
 		public function getColorDataColumn():FilteredColumn { return getColorBinColumn().getInternalColumn() as FilteredColumn; }
+
 		public function getProbe():IKeySet { return probeKeySet.internalObject as IKeySet; }
 		public function getSelection():IKeySet { return selectionKeySet.internalObject as IKeySet; }
 		public function getSubset():IKeyFilter { return subsetKeyFilter.internalObject as IKeyFilter; }


RectUtil.getNormalizedPoint

RectUtil.getNormalizedPoint

--- raw/src/org/yellcorp/lib/geom/RectUtil.as
+++ raw/src/org/yellcorp/lib/geom/RectUtil.as
@@ -255,6 +255,17 @@
         return out;
     }

+
+    public static function getNormalizedPoint(
+        rect:Object, xParam:Number, yParam:Number, out:Object = null):Object
+    {
+        if (!out) out = new Point();
+        out.x = rect.x + xParam * rect.width;
+        out.y = rect.y + yParam * rect.height;
+        return out;
+    }
+
+
     public static function scaleToArea(
         rect:Object, area:Number, out:Object = null):Object
     {


FillTangentsData initialize tangents at (0, 0, 0) before processing

--- src/aerys/minko/render/geometry/Geometry.as
+++ src/aerys/minko/render/geometry/Geometry.as
@@ -609,7 +609,15 @@
 			uvData = uvStream == xyzStream ? xyzData : uvStream.lock();
 			tangentsData = tangentsStream == xyzStream ? xyzData : tangentsStream.lock();

-			for (var i : uint = 0; i < numTriangles; ++i)
+			for (var i : uint = 0; i < numVertices; ++i)
+			{
+				ii 							= i * tangentsVertexSize + tangentsOffset;
+				tangentsData[ii] 			= 0;
+				tangentsData[uint(ii + 1)] 	= 0;
+				tangentsData[uint(ii + 2)] 	= 0;
+			}
+
+			for (i = 0; i < numTriangles; ++i)
 			{
 				var ii 		: uint		= i * 3;

@@ -1080,7 +1088,6 @@
 		public function castRay(ray : Ray, transform : Matrix4x4 = null) : int
 		{
 			var indexStreamDataSize : uint 	= indexStream._data.length;
-			//var vertexIterator 		: VertexIterator 	= new VertexIterator(getVertexStream(0), null, false);

 			var u 		: Number 	= 0;
 			var v 		: Number 	= 0;


Cleaner single label functions for AbstractAnimationController

--- src/aerys/minko/scene/controller/animation/AbstractAnimationController.as
+++ src/aerys/minko/scene/controller/animation/AbstractAnimationController.as
@@ -167,7 +167,7 @@
 			return this;
 		}

-		protected function updateNextLabel(currentTime : int = -1) : void
+		protected function updateNextLabelOld(currentTime : int = -1) : void
 		{
 			if (reverse)
 				return updateNextLabelReverse(currentTime);
@@ -208,6 +208,53 @@
 				updateNextLabel(loopBeginTime);
 			}
 			else if (min == loopEndTime && _looping)
+			{
+				for(i = 0; i < _labelTimes.length; ++i)
+				{
+					if (_labelTimes[i] == loopBeginTime && _nextLabelIds.indexOf(i) == -1)
+						_nextLabelIds.push(i);
+				}
+			}
+		}
+
+		protected function updateNextLabel(currentTime: int = -1) : void
+		{
+			_nextLabelIds = [];
+
+			if (!_labelTimes.length)
+				return;
+
+			if (currentTime == -1)
+				currentTime = _currentTime;
+
+			var comp : int = _reverse ? int.MIN_VALUE : int.MAX_VALUE;
+
+			for(var i : int = 0; i < _labelTimes.length; ++i)
+			{
+				var time : int = _labelTimes[i];
+
+				if (time < _loopBeginTime || time > _loopEndTime)
+					continue;
+
+				if ((_reverse && time <= currentTime) || (!_reverse && time >= currentTime))
+				{
+					if ((_reverse && time > comp) || (!_reverse && time < comp))
+					{
+						comp = time;
+						_nextLabelIds = [i];
+					}
+					else if (time == comp)
+					{
+						_nextLabelIds.push(i);
+					}
+				}
+			}
+
+			if (!_nextLabelIds.length)
+			{
+				updateNextLabel(loopBeginTime);
+			}
+			else if (comp == loopEndTime && _looping)
 			{
 				for(i = 0; i < _labelTimes.length; ++i)
 				{
@@ -409,44 +456,20 @@

 		protected function checkLabelHit(previousTime : int, newTime : int) : void
 		{
-			if (reverse)
-				return checkLabelHitReverse(previousTime, newTime);
 			if (!_isPlaying || !_nextLabelIds || !_nextLabelIds.length || !_labelHit.numCallbacks)
 				return;

 			var nextLabelTime	: Number	= _labelTimes[_nextLabelIds[0]];
 			var trigger			: Boolean	= false;

-			if (newTime < previousTime)
+			if (!_reverse && newTime < previousTime)
 			{
 				if (previousTime < nextLabelTime && nextLabelTime <= loopEndTime)
 					trigger = true;
 				else if (loopBeginTime <= nextLabelTime && nextLabelTime <= newTime)
 					trigger = true;
 			}
-			else
-			{
-				if ((previousTime < nextLabelTime && nextLabelTime <= newTime) || newTime == nextLabelTime)
-					trigger = true;
-			}
-			if (trigger)
-			{
-				for each(var i : int in _nextLabelIds)
-				triggerLabelHit(_labelNames[i], _labelTimes[i]);
-
-				updateNextLabel((newTime + 1) % loopEndTime);
-			}
-		}
-
-		protected function checkLabelHitReverse(previousTime : int, newTime : int) : void
-		{
-			if (!_isPlaying || !_nextLabelIds || !_nextLabelIds.length || !_labelHit.numCallbacks)
-				return;
-
-			var nextLabelTime	: Number	= _labelTimes[_nextLabelIds[0]];
-			var trigger			: Boolean	= false;
-
-			if (newTime > previousTime)
+			else if (_reverse && newTime > previousTime)
 			{
 				if (previousTime > nextLabelTime && nextLabelTime >= loopEndTime)
 					trigger = true;
@@ -455,7 +478,9 @@
 			}
 			else
 			{
-				if ((previousTime > nextLabelTime && nextLabelTime >= newTime) || newTime == nextLabelTime)
+				if (_reverse && ((previousTime > nextLabelTime && nextLabelTime >= newTime) || newTime == nextLabelTime))
+					trigger = true;
+				else if (!_reverse && ((previousTime < nextLabelTime && nextLabelTime <= newTime) || newTime == nextLabelTime))
 					trigger = true;
 			}
 			if (trigger)
@@ -463,7 +488,12 @@
 				for each(var i : int in _nextLabelIds)
 				triggerLabelHit(_labelNames[i], _labelTimes[i]);

-				updateNextLabel((newTime - 1) % _loopEndTime);
+				if (_reverse)
+					newTime--;
+				else
+					newTime++;
+
+				updateNextLabel(newTime % _loopEndTime);
 			}
 		}


Bug 513366 -  Certain test cases depend on exact method_id in the toString() text for Function objects (r+dschaffe)

--- test/acceptance/ecma3/String/e15_5_4_9_1_rt.as
+++ test/acceptance/ecma3/String/e15_5_4_9_1_rt.as
@@ -140,7 +140,7 @@
     array[item++] = new TestCase(   SECTION,
                                     "var obj = function() {}; obj.substring = String.prototype.substring; obj.toString = Object.prototype.toString; obj.substring(8)",
                                     true,
-                                    (obj = function() {}, obj.substring = String.prototype.substring, obj.toString = Object.prototype.toString, obj.substring(8))=="Function-2]" ||
+                                    (obj = function() {}, obj.substring = String.prototype.substring, obj.toString = Object.prototype.toString, obj.substring(8)).indexOf("Function-") == 0  ||
                                     (obj = function() {}, obj.substring = String.prototype.substring, obj.toString = Object.prototype.toString, obj.substring(8))=="null]"
                                      );
     // this is a number object


set test variable back to false

set test variable back to false

--- WeaveUI/src/weave/Weave.as
+++ WeaveUI/src/weave/Weave.as
@@ -83,7 +83,7 @@
 	 */
 	public class Weave
 	{
-		public static var ALLOW_PLUGINS:Boolean = true; // TEMPORARY
+		public static var ALLOW_PLUGINS:Boolean = false; // TEMPORARY

 		{ /** begin static code block **/


vast3 ad pods

vast3 ad pods

--- vendors/VASTNew/org/osmf/vast/parser/VAST2Parser.as
+++ vendors/VASTNew/org/osmf/vast/parser/VAST2Parser.as
@@ -61,7 +61,7 @@
 		private var _LinearAdsArray:Array;
 		private var _NonLinearAdsArray:Array;
 		private var _CompanionAdsArray:Array;
-		public var sequence:int;
+		private var _sequence:int;

 		public function VAST2Parser(trackingData:VAST2TrackingData = null) {
 			//UIFDebugMessage.getInstance()._debugMessage(3, "Init VAST2Parser", "Instream", "VAST2Parser (v1)");
@@ -82,6 +82,16 @@
 		}

+		public function get sequence():int
+		{
+			return _sequence;
+		}
+
+		public function set sequence(value:int):void
+		{
+			_sequence = value;
+		}
+
 		/**
 		 * performs a check to see if the xml passed to it is VAST
 		 *


Added multipart_params support to Flash runtime.

--- src/flash/plupload/src/com/plupload/File.as
+++ src/flash/plupload/src/com/plupload/File.as
@@ -96,7 +96,7 @@
 		 */
 		public function upload(url:String, settings:Object):void {
 			var file:File = this, width:int, height:int, quality:int, multipart:Boolean;
-			var chunk:int, chunks:int, chunkSize:int;
+			var chunk:int, chunks:int, chunkSize:int, postvars:Object;

 			// Setup internal vars
 			this._uploadUrl = url;
@@ -111,6 +111,7 @@

 			multipart = new Boolean(settings["quality"]);
 			chunkSize = settings["chunk_size"];
+			postvars = settings["multipart_params"];
 			chunk = 0;
 			chunks = Math.ceil(this._fileRef.size / chunkSize);

@@ -149,7 +150,7 @@
 						}

 						// Start uploading the scaled down image
-						uploadNextChunk(multipart, chunk, chunks, chunkSize);
+						uploadNextChunk(multipart, chunk, chunks, chunkSize, postvars);
 					});

 					loader.loadBytes(file._fileRef.data);
@@ -160,7 +161,7 @@
 						chunks = 4;
 					}

-					uploadNextChunk(multipart, chunk, chunks, chunkSize);
+					uploadNextChunk(multipart, chunk, chunks, chunkSize, postvars);
 				}
 			});

@@ -216,7 +217,7 @@
 		/**
 		 * Uploads the next chunk or terminates the upload loop if all chunks are done.
 		 */
-		private function uploadNextChunk(multipart:Boolean, chunk:int, chunks:int, chunk_size:int):void {
+		private function uploadNextChunk(multipart:Boolean, chunk:int, chunks:int, chunk_size:int, postvars:Object):void {
 			var req:URLRequest, fileData:ByteArray, chunkData:ByteArray;
 			var urlStream:URLStream, url:String, file:File = this;

@@ -262,7 +263,7 @@

 				// Upload next chunk
 				if (++chunk < chunks)
-					uploadNextChunk(multipart, chunk, chunks, chunk_size);
+					uploadNextChunk(multipart, chunk, chunks, chunk_size, postvars);
 				else {
 					// Fake UPLOAD_COMPLETE_DATA event
 					var uploadEvt:DataEvent = new DataEvent(
@@ -311,7 +312,16 @@

 				req.requestHeaders.push(new URLRequestHeader("Content-Type", 'multipart/form-data; boundary=' + boundary));

-				// Add header
+				// Append mutlipart parameters
+				for (var name:String in postvars) {
+					multipartBlob.writeUTFBytes(
+						dashdash + boundary + crlf +
+						'Content-Disposition: form-data; name="' + name + '"' + crlf + crlf +
+						postvars[name] + crlf
+					);
+				}
+
+				// Add file header
 				multipartBlob.writeUTFBytes(
 					dashdash + boundary + crlf +
 					'Content-Disposition: form-data; name="file"; filename="' + this._fileName + '"' + crlf +
@@ -321,7 +331,7 @@
 				// Add file data
 				multipartBlob.writeBytes(chunkData, 0, chunkData.length);

-				// Add footer
+				// Add file footer
 				multipartBlob.writeUTFBytes(crlf + dashdash + boundary + dashdash + crlf);
 				req.data = multipartBlob;
 			} else {


Transferred from the Adobe Open Source Subversion Repository

Revision: 3351
Author:   jimurphy@adobe.com
Date:     2008-09-25T15:17:51.460890Z

Log Message:
-----------
Merged 3.0.x revisions 3318,3320,3322,3324,3329,3336,3349 -> trunk
-includes AIK 20080923ap

Modified Paths:
--------------
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/validators/ZipCodeValidator.as</path>
<path kind="file" action="M">/flex/sdk/trunk/in/air/air_version.txt</path>
<path kind="dir" action="M">/flex/sdk/trunk</path>
<path kind="file" action="M">/flex/sdk/trunk/modules/asc/src/java/macromedia/abc/BytecodeBuffer.java</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/modules/IModuleInfo.as</path>
<path kind="file" action="M">/flex/sdk/trunk/in/air/win/AIR Integration Kit.zip</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/managers/ToolTipManagerImpl.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/modules/ModuleLoader.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/validators/ZipCodeValidatorDomainType.as</path>
<path kind="file" action="M">/flex/sdk/trunk/in/air/mac/AIR Integration Kit.tbz2</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/modules/ModuleManager.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/airframework/src/mx/managers/NativeDragManagerImpl.as</path>
<path kind="file" action="M">/flex/sdk/trunk/modules/compiler/src/java/flex2/tools/PostLink.java</path>

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

--- frameworks/projects/framework/src/mx/modules/ModuleManager.as
+++ frameworks/projects/framework/src/mx/modules/ModuleManager.as
@@ -12,6 +12,7 @@
 package mx.modules
 {

+import flash.utils.ByteArray;
 import mx.core.IFlexModuleFactory;

 /**
@@ -90,6 +91,7 @@
 import flash.system.LoaderContext;
 import flash.system.Security;
 import flash.system.SecurityDomain;
+import flash.utils.ByteArray;
 import flash.utils.Dictionary;
 import flash.utils.getDefinitionByName;
 import flash.utils.getQualifiedClassName;
@@ -249,6 +251,7 @@
      */
     private var numReferences:int = 0;

+
     //--------------------------------------------------------------------------
     //
     //  Properties
@@ -391,7 +394,8 @@
      *  @private
      */
     public function load(applicationDomain:ApplicationDomain = null,
-                         securityDomain:SecurityDomain = null):void
+                         securityDomain:SecurityDomain = null,
+                         bytes:ByteArray = null):void
     {
         if (_loaded)
             return;
@@ -400,6 +404,14 @@

         limbo = null;

+        // If bytes are supplied, then load the bytes instead of loading
+        // from the url.
+        if (bytes)
+        {
+            loadBytes(applicationDomain, bytes);
+            return;
+        }
+
         if (_url.indexOf("published://") == 0)
             return;

@@ -429,6 +441,36 @@
             SecurityErrorEvent.SECURITY_ERROR, errorHandler);

         loader.load(r, c);
+    }
+
+    /**
+     *  @private
+     */
+    private function loadBytes(applicationDomain:ApplicationDomain, bytes:ByteArray):void
+    {
+        var c:LoaderContext = new LoaderContext();
+        c.applicationDomain =
+            applicationDomain ?
+            applicationDomain :
+            new ApplicationDomain(ApplicationDomain.currentDomain);
+
+        // If the AIR flag is available then set it to true so we can
+        // load the module without a security error.
+        if ("allowLoadBytesCodeExecution" in c)
+            c["allowLoadBytesCodeExecution"] = true;
+
+        loader = new Loader();
+
+        loader.contentLoaderInfo.addEventListener(
+            Event.INIT, initHandler);
+        loader.contentLoaderInfo.addEventListener(
+            Event.COMPLETE, completeHandler);
+        loader.contentLoaderInfo.addEventListener(
+            IOErrorEvent.IO_ERROR, errorHandler);
+        loader.contentLoaderInfo.addEventListener(
+            SecurityErrorEvent.SECURITY_ERROR, errorHandler);
+
+        loader.loadBytes(bytes, c);
     }

     /**
@@ -968,7 +1010,8 @@
      *  @private
      */
     public function load(applicationDomain:ApplicationDomain = null,
-                         securityDomain:SecurityDomain = null):void
+                         securityDomain:SecurityDomain = null,
+                         bytes:ByteArray = null):void
     {
         info.resurrect();

@@ -1010,7 +1053,7 @@
         }
         else
         {
-            info.load(applicationDomain, securityDomain);
+            info.load(applicationDomain, securityDomain, bytes);
         }
     }


Transferred from the Adobe Open Source Subversion Repository

Revision: 4363
Author:   dloverin@adobe.com
Date:     2008-12-19T15:44:31.082489Z

Log Message:
-----------
Remove FxApplication properties: application, historyManagementEnabled, resetHistory.

QE Notes: None
Doc Notes: None
Bugs: SDK-16418
Reviewer: Alex
tests: checkintests, Application, controls, containers/Accordion, containers/ApplicationControlBar, containers/ControlBar

FxApplication.as
    Remove application, historyManagementEnabled, resetHistory properties.
UIComponentAccImpl.as
FlexPrintJob.as
BrowserManagerImpl.as
HistoryManagerImpl.as
IBrowserManager.as
    Recode references to historyManagementEnabled and resetHistory.
ControlBar.as
    Fix SDK-16418, ApplicationControlBar does not work in Gumbo in 2009 namespace

Modified Paths:
--------------
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/mx/components/FxApplication.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/managers/HistoryManagerImpl.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/managers/BrowserManagerImpl.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/accessibility/UIComponentAccImpl.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/printing/FlexPrintJob.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/managers/IBrowserManager.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/containers/ControlBar.as</path>

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

--- frameworks/projects/framework/src/mx/printing/FlexPrintJob.as
+++ frameworks/projects/framework/src/mx/printing/FlexPrintJob.as
@@ -19,7 +19,6 @@
 import flash.geom.Rectangle;
 import flash.printing.PrintJob;
 import flash.printing.PrintJobOptions;
-import mx.core.Application;
 import mx.core.IFlexDisplayObject;
 import mx.core.IUIComponent;
 import mx.core.UIComponent;
@@ -214,16 +213,19 @@

         var appExplicitWidth:Number;
         var appExplicitHeight:Number;
-
-        if (obj is Application)
+        var applicationClass:Class = Class(obj.systemManager.getDefinitionByName("mx.core::Application"));
+        var fxApplicationClass:Class = Class(obj.systemManager.getDefinitionByName("mx.components::FxApplication"));
+
+        if ((applicationClass && obj is applicationClass) ||
+            (fxApplicationClass && obj is fxApplicationClass))
         {
             // The following loop is required only for scenario where
             // application may have a few children with percent
             // width or height.
-            n = Application(obj).numChildren
+            n = obj["numElements"];
             for (i = 0; i < n; i++)
             {
-                child = IFlexDisplayObject(Application(obj).getChildAt(i));
+                child = IFlexDisplayObject(obj["getElementAt"](i));

                 if (child is UIComponent &&
                     (!isNaN(UIComponent(child).percentWidth) ||
@@ -331,7 +333,8 @@

         var arrPrintData:Array = prepareToPrintObject(obj);

-        if (obj is Application)
+        if ((applicationClass && obj is applicationClass) ||
+            (fxApplicationClass && obj is fxApplicationClass))
         {
             objWidth *= ratio;
             objHeight *= ratio;
@@ -391,7 +394,8 @@
         obj.scaleX /= ratio;
         obj.scaleY /= ratio;

-        if (obj is Application)
+        if ((applicationClass && obj is applicationClass) ||
+            (fxApplicationClass && obj is fxApplicationClass))
         {
             if (!isNaN(appExplicitWidth)) //&& !isNaN(appExplicitHeight))
             {
@@ -409,10 +413,10 @@
             // The following loop is required only for scenario
             // where application may have a few children
             // with percent width or height.
-            n = Application(obj).numChildren
+            n = obj["numElements"];
             for (i = 0; i < n; i++)
             {
-                child = IFlexDisplayObject(Application(obj).getChildAt(i));
+                child = IFlexDisplayObject(obj["getElementAt"](i));
                 if (child is UIComponent && childPercentSizes[child.name])
                 {
                     var childPercentSize:Object = childPercentSizes[child.name];


Transferred from the Adobe Open Source Subversion Repository

Revision: 17331
Author:   jasonsj@adobe.com
Date:     2010-08-16T17:37:24.374535Z

Log Message:
-----------
Added DiscouragedForProfile metadata for use with FB mobile projects.

QE notes: DiscouragedForProfile features should now be visible in FB
Doc notes: ASDoc content omitted for DiscouragedForProfile where the boilerplate comment is desired
Bugs:
Reviewer: gruehle
Tests run: checkintests
Is noteworthy for integration: Yes

Modified Paths:
--------------
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/spark/src/spark/components/NumericStepper.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/spark/src/spark/components/VSlider.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/spark/src/spark/components/ComboBox.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/spark/src/spark/components/TitleWindow.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/spark/src/spark/components/ToggleButton.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/spark/src/spark/components/Spinner.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/spark/src/spark/components/DataGrid.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/spark/src/spark/components/BorderContainer.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/spark/src/spark/components/FormHeading.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/spark/src/spark/components/VideoPlayer.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/spark/src/spark/components/RichEditableText.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/spark/src/spark/components/DropDownList.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/spark/src/spark/components/RichText.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/spark/src/spark/components/HSlider.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/spark/src/spark/components/TabBar.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/spark/src/spark/components/VideoDisplay.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/spark/src/spark/components/Panel.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/spark/src/spark/components/ButtonBar.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/spark/src/spark/components/Form.as</path>

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

--- frameworks/projects/spark/src/spark/components/VideoPlayer.as
+++ frameworks/projects/spark/src/spark/components/VideoPlayer.as
@@ -368,6 +368,14 @@
 [DefaultProperty("source")]

 [IconFile("VideoPlayer.png")]
+
+/**
+ * Because this component does not define a skin for the mobile theme, Adobe
+ * recommends that you not use it in a mobile application. Alternatively, you
+ * can define your own mobile skin for the component. For more information,
+ * see Spark Skinning.
+ */
+[DiscouragedForProfile("mobileDevice")]

 /**
  *  The VideoPlayer control is a skinnable video player that supports


Transferred from the Adobe Open Source Subversion Repository

Revision: 12540
Author:   smgilson@adobe.com
Date:     2009-12-04T18:35:53.988232Z

Log Message:
-----------
ASDoc localization updates

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

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

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

--- frameworks/projects/spark/src/spark/layouts/VerticalLayout.as
+++ frameworks/projects/spark/src/spark/layouts/VerticalLayout.as
@@ -98,6 +98,7 @@
  *    paddingLeft="0"
  *    paddingRight="0"
  *    paddingTop="0"
+ *    requestedMinRowCount="-1"
  *    requestedRowCount="-1"
  *    rowHeight="<i>calculated</i>"
  *    variableRowHeight="true"


Transferred from the Adobe Open Source Subversion Repository

Revision: 6817
Author:   clucier@adobe.com
Date:     2009-05-12T00:15:11.633559Z

Log Message:
-----------
Reverting a file I shouldn't have checked in.

Modified Paths:
--------------
/flex/sdk/trunk/frameworks/projects/flex4/src/spark/layouts/VerticalLayout.as

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

--- frameworks/projects/spark/src/spark/layouts/VerticalLayout.as
+++ frameworks/projects/spark/src/spark/layouts/VerticalLayout.as
@@ -902,10 +902,7 @@
         }

         if (useVirtualLayout)
-        {
             g.invalidateDisplayList();
-            g.validateNow();
-        }

         setIndexInView(i0, i1);
     }


Transferred from the Adobe Open Source Subversion Repository

Revision: 7775
Author:   gruehle@adobe.com
Date:     2009-06-12T00:51:45.956949Z

Log Message:
-----------
Add support for external images to BitmapImage.

* Load external JPG, PNG, and GIF images (SWF loading not supported)
* External images need to be on the same server as the application, or have an appropriate crossdomain.xml file on the server.
* When loading an external image, keep the current image displayed until the external image is loaded. This allows a local proxy image to be used while the external image is loading.
* Events for ioError and securityError. BitmapImage will not automatically show a broken image icon. If you want one, handle these events and set the source to a broken image.

Note: setting BitmapImage.source to the name of a class (type String) is no longer supported. You can still use a class reference (type Class).

Bugs: SDK-21757
QA Notes: Tests need to be added
Doc: Yes
Reviewer: Jason

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

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

--- frameworks/projects/spark/src/spark/primitives/BitmapImage.as
+++ frameworks/projects/spark/src/spark/primitives/BitmapImage.as
@@ -15,13 +15,46 @@
 import flash.display.BitmapData;
 import flash.display.DisplayObject;
 import flash.display.Graphics;
+import flash.display.Loader;
+import flash.display.LoaderInfo;
 import flash.display.Sprite;
+import flash.events.Event;
+import flash.events.IOErrorEvent;
+import flash.events.SecurityErrorEvent;
 import flash.geom.Matrix;
 import flash.geom.Point;
 import flash.geom.Rectangle;
+import flash.net.URLRequest;
+import flash.system.LoaderContext;
 import flash.utils.getDefinitionByName;

 import spark.primitives.supportClasses.GraphicElement;
+
+/**
+ *  Dispatched when an input/output error occurs.
+ *  @see flash.events.IOErrorEvent
+ *
+ *  @eventType flash.events.IOErrorEvent.IO_ERROR
+ *
+ *  @langversion 3.0
+ *  @playerversion Flash 10
+ *  @playerversion AIR 1.5
+ *  @productversion Flex 4
+ */
+[Event(name="ioError", type="flash.events.IOErrorEvent")]
+
+/**
+ *  Dispatched when a security error occurs.
+ *  @see flash.events.SecurityErrorEvent
+ *
+ *  @eventType flash.events.SecurityErrorEvent.SECURITY_ERROR
+ *
+ *  @langversion 3.0
+ *  @playerversion Flash 10
+ *  @playerversion AIR 1.5
+ *  @productversion Flex 4
+ */
+[Event(name="securityError", type="flash.events.SecurityErrorEvent")]

 /**
  *  A BitmapImage element defines a rectangular region in its parent element's
@@ -63,6 +96,8 @@
     //
     //--------------------------------------------------------------------------

+    private var _bitmapData:BitmapData;
+
     private var _scaleGridBottom:Number;
     private var _scaleGridLeft:Number;
     private var _scaleGridRight:Number;
@@ -251,8 +286,8 @@
      *
A class representing a subclass of DisplayObject. The BitmapFill instantiates
      *       the class and creates a bitmap rendering of it.

      *
An instance of a DisplayObject. The BitmapFill copies it into a Bitmap for filling.

-     *
The name of a subclass of DisplayObject. The BitmapFill loads the class, instantiates it,
-     *       and creates a bitmap rendering of it.

+     *
The name of an external image file. This file must have the extention
+     *   .jpg, .jpeg, .gif, or .png.

      *

      *
      *
If you use an image file for the source, it can be of type PNG, GIF, or JPG.

@@ -266,9 +301,8 @@
      *
The image location can be a URL or file reference. If it is a file reference, its location is relative to
      *  the location of the file that is being compiled.

      *
-     *
The BitmapImage class is designed to work with embedded images, not with images that are
-     *  loaded at run time. You can use the Image control to load the image at run time,
-     *  and then assign the Image control to the value of the BitmapImage's source property.

+     *
The BitmapImage class is designed to work with embedded images or images that are
+     *  loaded at run time

      *
      *  @see flash.display.Bitmap
      *  @see flash.display.BitmapData
@@ -307,8 +341,8 @@
             }
             else if (value is String)
             {
-                var tmpClass:Class = Class(getDefinitionByName(String(value)));
-                value = new tmpClass();
+                loadExternal(value as String);
+                _source = value;
             }

             if (value is BitmapData)
@@ -346,14 +380,9 @@
                 }
             }

-            _source = bitmapData;
-
-            // Flush the cached scale grid points
-            cachedSourceGrid = null;
-            cachedDestGrid = null;
-
-            invalidateSize();
-            invalidateDisplayList();
+            _source = value;
+
+            setBitmapData(bitmapData);
         }
     }

@@ -408,8 +437,8 @@
      */
     override protected function measure():void
     {
-        measuredWidth = source ? source.width : 0;
-        measuredHeight = source ? source.height : 0;
+        measuredWidth = _bitmapData ? _bitmapData.width : 0;
+        measuredHeight = _bitmapData ? _bitmapData.height : 0;
     }

     /**
@@ -423,7 +452,7 @@
     override protected function updateDisplayList(unscaledWidth:Number,
                                                   unscaledHeight:Number):void
     {
-        if (!source || !drawnDisplayObject || !(drawnDisplayObject is Sprite))
+        if (!_bitmapData || !drawnDisplayObject || !(drawnDisplayObject is Sprite))
             return;

         // The base GraphicElement class has cleared the graphics for us.
@@ -437,17 +466,17 @@
         switch(_resizeMode)
         {
             case _REPEAT_UINT:
-                if (source)
+                if (_bitmapData)
                 {
                     repeatBitmap = true;
                 }
             break;

             case _SCALE_UINT:
-                if (source)
+                if (_bitmapData)
                 {
-                    fillScaleX = unscaledWidth / source.width;
-                    fillScaleY = unscaledHeight / source.height;
+                    fillScaleX = unscaledWidth / _bitmapData.width;
+                    fillScaleY = unscaledHeight / _bitmapData.height;
                 }
             break;
         }
@@ -462,10 +491,10 @@
             matrix.identity();
             matrix.scale(fillScaleX, fillScaleY);
             matrix.translate(drawX, drawY);
-            g.beginBitmapFill(_source as BitmapData, matrix, repeatBitmap, smooth);
-        g.drawRect(drawX, drawY, unscaledWidth, unscaledHeight);
+            g.beginBitmapFill(_bitmapData, matrix, repeatBitmap, smooth);
+            g.drawRect(drawX, drawY, unscaledWidth, unscaledHeight);
             g.endFill();
-    }
+        }
         else
         {

@@ -477,13 +506,13 @@
                 // Generate the 16 points of the source (unscaled) grid
                 cachedSourceGrid = [];
                 cachedSourceGrid.push([new Point(0, 0), new Point(_scaleGridLeft, 0),
-                                new Point(_scaleGridRight, 0), new Point(_source.width, 0)]);
+                                new Point(_scaleGridRight, 0), new Point(_bitmapData.width, 0)]);
                 cachedSourceGrid.push([new Point(0, _scaleGridTop), new Point(_scaleGridLeft, _scaleGridTop),
-                                new Point(_scaleGridRight, _scaleGridTop), new Point(_source.width, _scaleGridTop)]);
+                                new Point(_scaleGridRight, _scaleGridTop), new Point(_bitmapData.width, _scaleGridTop)]);
                 cachedSourceGrid.push([new Point(0, _scaleGridBottom), new Point(_scaleGridLeft, _scaleGridBottom),
-                                new Point(_scaleGridRight, _scaleGridBottom), new Point(_source.width, _scaleGridBottom)]);
-                cachedSourceGrid.push([new Point(0, _source.height), new Point(_scaleGridLeft, _source.height),
-                                new Point(_scaleGridRight, _source.height), new Point(_source.width, _source.height)]);
+                                new Point(_scaleGridRight, _scaleGridBottom), new Point(_bitmapData.width, _scaleGridBottom)]);
+                cachedSourceGrid.push([new Point(0, _bitmapData.height), new Point(_scaleGridLeft, _bitmapData.height),
+                                new Point(_scaleGridRight, _bitmapData.height), new Point(_bitmapData.width, _bitmapData.height)]);
             }

             if (cachedDestGrid == null ||
@@ -491,8 +520,8 @@
                 previousUnscaledHeight != unscaledHeight)
             {
                 // Generate teh 16 points of the destination (scaled) grid
-                var destScaleGridBottom:Number = unscaledHeight - (_source.height - _scaleGridBottom);
-                var destScaleGridRight:Number = unscaledWidth - (_source.width - _scaleGridRight);
+                var destScaleGridBottom:Number = unscaledHeight - (_bitmapData.height - _scaleGridBottom);
+                var destScaleGridRight:Number = unscaledWidth - (_bitmapData.width - _scaleGridRight);
                 cachedDestGrid = [];
                 cachedDestGrid.push([new Point(0, 0), new Point(_scaleGridLeft, 0),
                                 new Point(destScaleGridRight, 0), new Point(unscaledWidth, 0)]);
@@ -529,7 +558,7 @@
                     matrix.translate(drawX, drawY);

                     // Draw the bitmap for the current section
-                    g.beginBitmapFill(_source as BitmapData, matrix);
+                    g.beginBitmapFill(_bitmapData, matrix);
                     g.drawRect(destSection.x + drawX, destSection.y + drawY, destSection.width, destSection.height);
                     g.endFill();
                  }
@@ -540,6 +569,123 @@
         previousUnscaledHeight = unscaledHeight;
     }

+
+    /**
+     *  @private
+     *  Utility function that sets the underlying bitmapData property.
+     */
+    private function setBitmapData(bitmapData:BitmapData):void
+    {
+        // Clear previous bitmapData
+        if (_bitmapData)
+        {
+            _bitmapData.dispose();
+            _bitmapData = null;
+        }
+
+        _bitmapData = bitmapData;
+
+        // Flush the cached scale grid points
+        cachedSourceGrid = null;
+        cachedDestGrid = null;
+
+        invalidateSize();
+        invalidateDisplayList();
+    }
+
+    /**
+     *  @private
+     */
+    private function validImageFile(url:String):Boolean
+    {
+        // We only accept .jpg, .jpeg, .gif, and .png files
+        // NOTE: This means queries that return images are not accepted: ie: myserver.com/fetch.php?image=12345
+        var exten:String = url.substr(Math.max(url.length - 5, 0), Math.min(url.length, 5)).toLowerCase();
+
+        if (exten.indexOf(".jpg") == -1 &&
+            exten.indexOf(".jpeg") == -1 &&
+            exten.indexOf(".gif") == -1 &&
+            exten.indexOf(".png") == -1)
+            return false;
+
+        return true;
+    }
+
+    /**
+     *  @private
+     */
+    private function loadExternal(url:String):void
+    {
+        if (!validImageFile(url))
+            return;
+
+        var loader:Loader = new Loader();
+        var loaderContext:LoaderContext = new LoaderContext();
+
+        loaderContext.checkPolicyFile = true;
+        loader.contentLoaderInfo.addEventListener(Event.COMPLETE, loader_completeHandler, false, 0, true);
+        loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, loader_ioErrorHandler, false, 0, true);
+        loader.contentLoaderInfo.addEventListener(SecurityErrorEvent.SECURITY_ERROR, loader_securityErrorHandler, false, 0, true);
+        try
+        {
+            loader.load(new URLRequest(url), loaderContext);
+        }
+        catch (error:SecurityError)
+        {
+            handleSecurityError(error);
+        }
+    }
+
+    /**
+     *  @private
+     */
+    private function loader_completeHandler(event:Event):void
+    {
+        var image:Bitmap = null;
+
+        try
+        {
+            image = Bitmap((event.target as LoaderInfo).content);
+            setBitmapData(image.bitmapData);
+        }
+        catch (error:SecurityError)
+        {
+            handleSecurityError(error);
+        }
+    }
+
+    /**
+     *  @private
+     */
+    private function loader_ioErrorHandler(error:IOErrorEvent):void
+    {
+        // clear any current image
+        setBitmapData(null);
+
+        // forward the error
+        dispatchEvent(error);
+    }
+
+    /**
+     *  @private
+     */
+    private function loader_securityErrorHandler(error:SecurityErrorEvent):void
+    {
+        // clear any current image
+        setBitmapData(null);
+
+        // forward the error
+        dispatchEvent(error);
+    }
+
+    /**
+     *  @private
+     */
+    private function handleSecurityError(error:SecurityError):void
+    {
+        setBitmapData(null);
+        dispatchEvent(new SecurityErrorEvent(SecurityErrorEvent.SECURITY_ERROR, false, false, error.message));
+    }
 }

 }


Transferred from the Adobe Open Source Subversion Repository

Revision: 19328
Author:   mhorn@adobe.com
Date:     2010-12-13T20:45:00.405533Z

Log Message:
-----------
ASDoc updates

Modified Paths:
--------------
<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/supportClasses/MobileSkin.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/NavigationAngledButtonSkin.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/supportClasses/TextSkinBase.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/TabbedViewNavigatorApplicationSkin.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/mobiletheme/src/spark/skins/mobile/HSliderDataTip.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/mobiletheme/src/spark/skins/mobile/TextAreaSkin.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/mobiletheme/src/spark/skins/mobile/HSliderTrackSkin.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/mobiletheme/src/spark/skins/mobile/supportClasses/ActionBarButtonSkinBase.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/mobiletheme/src/spark/skins/mobile/supportClasses/SelectableButtonSkinBase.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/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/TabbedViewNavigatorSkin.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/mobiletheme/src/spark/skins/mobile/HSliderSkin.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/mobiletheme/src/spark/skins/mobile/HSliderThumbSkin.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/mobiletheme/src/spark/skins/mobile/RadioButtonSkin.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/mobiletheme/src/spark/skins/mobile/HScrollBarSkin.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/NavigationButtonSkin.as</path>

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

--- frameworks/projects/mobiletheme/src/spark/skins/mobile/HSliderTrackSkin.as
+++ frameworks/projects/mobiletheme/src/spark/skins/mobile/HSliderTrackSkin.as
@@ -39,6 +39,7 @@
     //--------------------------------------------------------------------------

     /**
+     *  Constructor.
      *
      *  @langversion 3.0
      *  @playerversion Flash 10
@@ -46,27 +47,27 @@
      *  @productversion Flex 4.5
      *
      */
-	public function HSliderTrackSkin()
-	{
-		super();
+    public function HSliderTrackSkin()
+    {
+        super();

         useChromeColor = true;

         // set the right assets and dimensions to use based on the screen density
         switch (authorDensity)
         {
-			case DeviceDensity.PPI_320:
-			{
-				trackWidth = 320;
-				trackHeight = 18;
-
+            case DeviceDensity.PPI_320:
+            {
+                trackWidth = 320;
+                trackHeight = 18;
+
                 visibleTrackWidth = 280;
                 visibleTrackLeftOffset = 20;

-				trackClass = spark.skins.mobile320.assets.HSliderTrack;
-
-				break;
-			}
+                trackClass = spark.skins.mobile320.assets.HSliderTrack;
+
+                break;
+            }
             case DeviceDensity.PPI_240:
             {
                 trackWidth = 192;
@@ -93,8 +94,8 @@
                 break;
             }
         }
-	}
-
+    }
+
     //--------------------------------------------------------------------------
     //
     //  Properties
@@ -104,8 +105,8 @@
     /**
      * @copy spark.skins.spark.ApplicationSkin#hostComponent
      */
-	public var hostComponent:Button;
-
+    public var hostComponent:Button;
+
     //--------------------------------------------------------------------------
     //
     //  Variables
@@ -182,31 +183,31 @@
     /**
      *  @private
      */
-	override protected function createChildren():void
-	{
-		trackSkin = new trackClass();
-		addChild(trackSkin);
-	}
-
-    /**
-     *  @private
-     */
-	override protected function measure():void
-	{
-		measuredWidth = trackWidth;
-		measuredHeight = trackHeight;
-	}
-
-    /**
-     *  @private
-     */
-	override protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void
-	{
+    override protected function createChildren():void
+    {
+        trackSkin = new trackClass();
+        addChild(trackSkin);
+    }
+
+    /**
+     *  @private
+     */
+    override protected function measure():void
+    {
+        measuredWidth = trackWidth;
+        measuredHeight = trackHeight;
+    }
+
+    /**
+     *  @private
+     */
+    override protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void
+    {
         super.updateDisplayList(unscaledWidth, unscaledHeight);

-		setElementSize(trackSkin, unscaledWidth, unscaledHeight);
-		setElementPosition(trackSkin, 0, 0);
-	}
+        setElementSize(trackSkin, unscaledWidth, unscaledHeight);
+        setElementPosition(trackSkin, 0, 0);
+    }

     /**
      *  @private