Transferred from the Adobe Open Source Subversion Repository

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

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

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

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

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

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

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

--- frameworks/projects/automation/src/mx/automation/delegates/controls/ButtonBarAutomationImpl.as
+++ frameworks/projects/automation/src/mx/automation/delegates/controls/ButtonBarAutomationImpl.as
@@ -0,0 +1,130 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  ADOBE SYSTEMS INCORPORATED
+//  Copyright 2009 Adobe Systems Incorporated
+//  All Rights Reserved.
+//
+//  NOTICE: Adobe permits you to use, modify, and distribute this file
+//  in accordance with the terms of the license agreement accompanying it.
+//
+////////////////////////////////////////////////////////////////////////////////
+
+package mx.automation.delegates.controls
+{
+	import flash.display.DisplayObject;
+	import flash.events.Event;
+	import flash.events.KeyboardEvent;
+	import flash.events.MouseEvent;
+	import flash.ui.Keyboard;
+	import mx.automation.Automation;
+	import mx.controls.ButtonBar;
+	import mx.core.mx_internal;
+	import mx.core.EventPriority;
+
+	use namespace mx_internal;
+
+	[Mixin]
+	/**
+	 *
+	 *  Defines methods and properties required to perform instrumentation for the
+	 *  ButtonBar control.
+	 *
+	 *  @see mx.controls.ButtonBar
+	 *
+	 *
+	 *  @langversion 3.0
+	 *  @playerversion Flash 9
+	 *  @playerversion AIR 1.1
+	 *  @productversion Flex 3
+	 */
+	public class ButtonBarAutomationImpl extends NavBarAutomationImpl
+	{
+		include "../../../core/Version.as";
+
+		//--------------------------------------------------------------------------
+		//
+		//  Class methods
+		//
+		//--------------------------------------------------------------------------
+
+		/**
+		 *  Registers the delegate class for a component class with automation manager.
+		 *
+		 *  @param root The SystemManger of the application.
+		 *
+		 *  @langversion 3.0
+		 *  @playerversion Flash 9
+		 *  @playerversion AIR 1.1
+		 *  @productversion Flex 3
+		 */
+		public static function init(root:DisplayObject):void
+		{
+			Automation.registerDelegateClass(ButtonBar, ButtonBarAutomationImpl);
+		}
+
+		/**
+		 *  Constructor.
+		 * @param obj ButtonBar object to be automated.
+		 *
+		 *  @langversion 3.0
+		 *  @playerversion Flash 9
+		 *  @playerversion AIR 1.1
+		 *  @productversion Flex 3
+		 */
+		public function ButtonBarAutomationImpl(obj:ButtonBar)
+		{
+			super(obj);
+		}
+
+		/**
+		 *  @private
+		 *  storage for the owner component
+		 */
+		protected function get buttonBar():ButtonBar
+		{
+			return uiComponent as ButtonBar;
+		}
+
+		//--------------------------------------------------------------------------
+		//
+		//  Overridden methods
+		//
+		//--------------------------------------------------------------------------
+
+		/**
+		 *  @private
+		 */
+		override public function recordAutomatableEvent(
+			event:Event, cacheable:Boolean = false):void
+		{
+			if (buttonBar.simulatedClickTriggerEvent == null ||
+				buttonBar.simulatedClickTriggerEvent is MouseEvent)
+			{
+				super.recordAutomatableEvent(event, cacheable);
+			}
+		}
+
+		//--------------------------------------------------------------------------
+		//
+		//  Event handlers
+		//
+		//--------------------------------------------------------------------------
+
+		/**
+		 *  @private
+		 */
+		override protected function keyDownHandler(event:KeyboardEvent):void
+		{
+			switch (event.keyCode)
+			{
+				case Keyboard.DOWN:
+				case Keyboard.RIGHT:
+				case Keyboard.UP:
+				case Keyboard.LEFT:
+					recordAutomatableEvent(event);
+					break;
+			}
+		}
+
+	}
+}


Transferred from the Adobe Open Source Subversion Repository

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

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

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

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

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

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

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

--- frameworks/projects/automation/src/mx/automation/events/AutomationDragEventWithPositionInfo.as
+++ frameworks/projects/automation/src/mx/automation/events/AutomationDragEventWithPositionInfo.as
@@ -0,0 +1,282 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  ADOBE SYSTEMS INCORPORATED
+//  Copyright 2009 Adobe Systems Incorporated
+//  All Rights Reserved.
+//
+//  NOTICE: Adobe permits you to use, modify, and distribute this file
+//  in accordance with the terms of the license agreement accompanying it.
+//
+////////////////////////////////////////////////////////////////////////////////
+
+package mx.automation.events
+{
+
+	import flash.events.Event;
+	import flash.events.MouseEvent;
+	import mx.automation.IAutomationObject;
+	import mx.core.IUIComponent;
+
+	/**
+	 *  The AutomationDragEventWithPositionInfo class represents event objects that are
+	 *  dispatched as part of a drag-and-drop operation. But this will be dispatched  from
+	 *  the components which are interested in the position info of the drop
+	 *
+	 *  @see mx.managers.DragManager
+	 *  @see mx.core.UIComponent
+	 *
+	 *  @langversion 3.0
+	 *  @playerversion Flash 9
+	 *  @playerversion AIR 1.1
+	 *  @productversion Flex 3
+	 */
+	public class AutomationDragEventWithPositionInfo extends AutomationDragEvent
+	{
+		include "../../core/Version.as";
+
+		//--------------------------------------------------------------------------
+		//
+		//  Class constants
+		//
+		//--------------------------------------------------------------------------
+
+		/**
+		 *  Defines the value of the
+		 *  type property of the event object for a dragComplete event.
+		 *
+		 *
The properties of the event object have the following values:

+		 *

+		 *
Property	Value

+		 *
altKey
+		 *         Indicates whether the Alt key is down
+		 *            (true) or not (false).

+		 *
action	The action that caused the event:
+		 *       DragManager.COPY, DragManager.LINK,
+		 *       DragManager.MOVE, or DragManager.NONE.

+		 *
bubbles	false

+		 *
cancelable	true

+		 *
ctrlKey
+		 *         Indicates whether the Control key is down
+		 *            (true) or not (false).

+		 *
currentTarget	The object that defines the
+		 *       event listener that handles the event. For example, if you use
+		 *       myButton.addEventListener() to register an event listener,
+		 *       myButton is the value of currentTarget.

+		 *
draggedItem	The item being dragged.

+		 *
dropParent	The object that
+		 *       parents the item that was dropped.

+		 *
shiftKey
+		 *         Indicates whether the Shift key is down
+		 *            (true) or not (false).

+		 *
target	The object that dispatched the event;
+		 *       it is not always the object that listens for the event.
+		 *       Use the currentTarget property to always access the
+		 *       object that is listening for the event.

+		 *

+		 *
+		 *  @eventType dragComplete
+		 *
+		 *  @langversion 3.0
+		 *  @playerversion Flash 9
+		 *  @playerversion AIR 1.1
+		 *  @productversion Flex 3
+		 */
+		public static const DRAG_COMPLETE:String = "dragComplete";
+
+		/**
+		 *  Defines the value of the
+		 *  type property of the event object for a dragDrop event.
+		 *
+		 *
The properties of the event object have the following values:

+		 *

+		 *
Property	Value

+		 *
altKey
+		 *         Indicates whether the Alt key is down
+		 *            (true) or not (false).

+		 *
action	The action that caused the event:
+		 *       DragManager.COPY, DragManager.LINK,
+		 *       DragManager.MOVE, or DragManager.NONE.

+		 *
bubbles	false

+		 *
cancelable	true

+		 *
ctrlKey
+		 *         Indicates whether the Control key is down
+		 *            (true) or not (false).

+		 *
currentTarget	The object that defines the
+		 *       event listener that handles the event. For example, if you use
+		 *       myButton.addEventListener() to register an event listener,
+		 *       myButton is the value of currentTarget.

+		 *
draggedItem	The item being dragged.

+		 *
dropParent	The object that
+		 *       parents the item that was dropped.

+		 *
shiftKey
+		 *         Indicates whether the Shift key is down
+		 *            (true) or not (false).

+		 *
target	The object that dispatched the event;
+		 *       it is not always the object that listens for the event.
+		 *       Use the currentTarget property to always access the
+		 *       object that is listening for the event.

+		 *

+		 *
+		 *  @eventType dragDrop
+		 *
+		 *  @langversion 3.0
+		 *  @playerversion Flash 9
+		 *  @playerversion AIR 1.1
+		 *  @productversion Flex 3
+		 */
+		public static const DRAG_DROP:String = "dragDrop";
+
+		/**
+		 *  Defines the value of the
+		 *  type property of the event object for a dragStart event.
+		 *
+		 *
The properties of the event object have the following values:

+		 *

+		 *
Property	Value

+		 *
altKey
+		 *         Indicates whether the Alt key is down
+		 *            (true) or not (false).

+		 *
action	The action that caused the event:
+		 *       DragManager.COPY, DragManager.LINK,
+		 *       DragManager.MOVE, or DragManager.NONE.

+		 *
bubbles	false

+		 *
cancelable	true

+		 *
ctrlKey
+		 *         Indicates whether the Control key is down
+		 *            (true) or not (false).

+		 *
currentTarget	The object that defines the
+		 *       event listener that handles the event. For example, if you use
+		 *       myButton.addEventListener() to register an event listener,
+		 *       myButton is the value of currentTarget.

+		 *
draggedItem	The item being dragged.

+		 *
dropParent	The object that
+		 *       parents the item that was dropped.

+		 *
shiftKey
+		 *         Indicates whether the Shift key is down
+		 *            (true) or not (false).

+		 *
target	The object that dispatched the event;
+		 *       it is not always the object that listens for the event.
+		 *       Use the currentTarget property to always access the
+		 *       object that is listening for the event.

+		 *

+		 *
+		 *  @eventType dragStart
+		 *
+		 *  @langversion 3.0
+		 *  @playerversion Flash 9
+		 *  @playerversion AIR 1.1
+		 *  @productversion Flex 3
+		 */
+		public static const DRAG_START:String = "dragStart";
+
+		//--------------------------------------------------------------------------
+		//
+		//  Constructor
+		//
+		//--------------------------------------------------------------------------
+
+		/**
+		 *  Constructor.
+		 *  Normally called by the Flex control and not used in application code.
+		 *
+		 *  @param type The event type; indicates the action that caused the event.
+		 *
+		 *  @param bubbles Specifies whether the event can bubble up the display list hierarchy.
+		 *
+		 *  @param cancelable Specifies whether the behavior associated with the event can be prevented.
+		 *
+		 *  @param action The specified drop action, such as DragManager.MOVE.
+		 *
+		 *  @param ctrlKey Indicates whether the Control key was pressed.
+		 *
+		 *  @param altKey Indicates whether the Alt key was pressed.
+		 *
+		 *  @param shiftKey Indicates whether the Shift key was pressed.
+		 *
+		 *  @param localx The horizontal coordinate at which the event occurred relative to the containing sprite.
+		 *
+		 *  @param localy The vertical coordinate at which the event occurred relative to the containing sprite.
+		 *
+		 *  @langversion 3.0
+		 *  @playerversion Flash 9
+		 *  @playerversion AIR 1.1
+		 *  @productversion Flex 3
+		 */
+		public function AutomationDragEventWithPositionInfo (type:String, bubbles:Boolean = false,
+															 cancelable:Boolean = true,
+															 action:String = null,
+															 ctrlKey:Boolean = false,
+															 altKey:Boolean = false,
+															 shiftKey:Boolean = false,
+															 localx:int = -1,
+															 localy:int = -1 )
+		{
+			super(type, bubbles, cancelable);
+
+			this.action = action;
+			this.ctrlKey = ctrlKey;
+			this.altKey = altKey;
+			this.shiftKey = shiftKey;
+			this.localX = localx;
+			this.localY = localy;
+		}
+
+		//--------------------------------------------------------------------------
+		//
+		//  Properties
+		//
+		//--------------------------------------------------------------------------
+
+		//----------------------------------
+		//  action
+		//----------------------------------
+
+		//
+		//  The requested action.
+		//  One of DragManager.COPY, DragManager.LINK,
+		//  DragManager.MOVE, or DragManager.NONE.
+		//
+		//  @see mx.managers.DragManager
+		//
+		//  public var action:String;
+
+		//----------------------------------
+		//  draggedItem
+		//----------------------------------
+
+		//
+		//   Contains the child IAutomationObject object being dragged.
+		//
+		//  public var draggedItem:IAutomationObject;
+
+
+		//
+		// The IAutomationObject object which will be parenting the dropped item.
+		//
+		//public var dropParent:IAutomationObject;
+
+		//--------------------------------------------------------------------------
+		//
+		//  Overridden methods: Event
+		//
+		//--------------------------------------------------------------------------
+
+		/**
+		 *  @private
+		 */
+		override public function clone():Event
+		{
+			var cloneEvent:AutomationDragEventWithPositionInfo = new AutomationDragEventWithPositionInfo(type, bubbles, cancelable,
+				action, ctrlKey,
+				altKey, shiftKey);
+
+			// Set relevant MouseEvent properties.
+			cloneEvent.relatedObject = this.relatedObject;
+			cloneEvent.localX = this.localX;
+			cloneEvent.localY = this.localY;
+
+			return cloneEvent;
+		}
+	}
+
+}


Transferred from the Adobe Open Source Subversion Repository

Revision: 20157
Author:   jszeto@adobe.com
Date:     2011-02-05T00:00:00.317113Z

Log Message:
-----------
ViewMenu and SoftKeyboard interaction bug fixes

http://bugs.adobe.com/jira/browse/SDK-29144 - Incorrect ViewMenu and Softkeyboard interraction

FocusManager listens for the VIEW_HIDE event and will clear focus if the lastFocus is contained in the View about to be hidden.

Small updates to Application to make sure the isSoftKeyboardActive flag is set in all use cases.

http://bugs.adobe.com/jira/browse/SDK-29384 - SoftKeybord does not appear onTextArea tap in some test cases

In mouseDown handler, if we are already in focus, then make sure the soft keyboard appears on mouseUp

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

Modified Paths:
--------------
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/mobilecomponents/src/spark/components/TabbedViewNavigator.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/mobilecomponents/src/spark/components/supportClasses/StyleableTextField.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/framework/src/mx/events/FlexEvent.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/spark/src/spark/components/supportClasses/SkinnableTextBase.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/mobilecomponents/src/spark/components/ViewNavigator.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/framework/src/mx/managers/FocusManager.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@1264507 13f79535-47bb-0310-9956-ffa450edef68

--- frameworks/projects/mobilecomponents/src/spark/components/supportClasses/StyleableTextField.as
+++ frameworks/projects/mobilecomponents/src/spark/components/supportClasses/StyleableTextField.as
@@ -36,6 +36,7 @@

 import mx.core.DesignLayer;
 import mx.core.FlexGlobals;
+import mx.core.FlexTextField;
 import mx.core.IInvalidating;
 import mx.core.IVisualElement;
 import mx.core.UIComponent;
@@ -109,7 +110,7 @@
  *  @playerversion AIR 2.0
  *  @productversion Flex 4.5
  */
-public class StyleableTextField extends TextField
+public class StyleableTextField extends FlexTextField
     implements IEditableText, ISimpleStyleClient, IVisualElement
 {


Bugfix.

Bugfix.

git-svn-id: a1a4b28b82a3276cc491891159dd9963a0a72fae@4536 542714f4-19e9-0310-aa3c-eee0fc999fb1

--- src/as/com/threerings/util/ArrayIterator.as
+++ src/as/com/threerings/util/ArrayIterator.as
@@ -40,6 +40,7 @@
         } else {
             _arr.splice(_lastIndex, 1);
             _lastIndex = -1;
+            _index--; // since _lastIndex is always before _index
         }
     }


Change 20081026-bargull-vZs by bargull@dell--p4--2-53 on 2008-10-26 13:41:05
    in /home/Admin/src/svn/openlaszlo/trunk
    for http://svn.openlaszlo.org/openlaszlo/trunk

Summary: clean up for LzSprite

New Features:

Bugs Fixed: LPP-7241

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

Documentation:

Release Notes:

Details:
- remove "dynamic" modifier from LzSprite
  - add missing method "setClickRegion"
  - remove reference to __LZhaser (used in the swf8 implementation)
  - add "lastreswidth" and "lastresheight"
- implement frame & totalframes as setters/getters to reduce code duplication
  - remove "updateTotalframes" and inline the function-body
- remove unused "__preloadFrames" method (was a copy from the dhtml implementation)
- call "unload" in "destroy"
- clear "resourceContainer" in "unload"
- remove stale code in "stretchResource" ('xory'-param is one of: "height", "width", "both")
- remove check "if (this.resource == null || imgLoader)" in "stop", this condition is no longer possible because of "__isinternalresource"-flag
- update cast in "loaderEventHandler" (was invalid for SecurityErrorEvent)

Tests:

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

--- WEB-INF/lps/lfc/kernel/swf9/LzSprite.as
+++ WEB-INF/lps/lfc/kernel/swf9/LzSprite.as
@@ -9,7 +9,7 @@
   * @author Henry Minsky <hminsky@laszlosystems.com>
   */

-dynamic public class LzSprite extends Sprite {
+public class LzSprite extends Sprite {

 #passthrough (toplevel:true) {
   import flash.display.*;
@@ -48,8 +48,6 @@
       public var clickbutton:SimpleButton = null;
       public var clickregion:Shape = null;
       public var masksprite:Sprite = null;
-      public var frame:int = 1;
-      public var totalframes:int = 1;
       public var frames:int = 1;
       public var resource:String = null;
       public var source:String = null;
@@ -57,6 +55,10 @@
       public var resourcewidth:Number = 0;
       public var resourceheight:Number = 0;
       public var isroot:Boolean = false;
+      var lastreswidth:Number = 0;
+      var lastresheight:Number = 0;
+      var skiponload = false;
+      var baseurl;

       // If null, the handcursor visibility is set to the value of LzMouseKernel.showhandcursor
       // whenevent a mouseover event happens.
@@ -70,8 +72,8 @@
       // Cache for instantiated assets in a multiframe resource set
       var resourceCache:Array = null;

+      /* private */ static const loaderContext:LoaderContext = new LoaderContext(true);
       /* private */ static const soundLoaderContext:SoundLoaderContext = new SoundLoaderContext(1000, true);
-      /* private */ static const loaderContext:LoaderContext = new LoaderContext(true);

       /* private */ static const MP3_FPS:Number = 30;
       /* private */ var sound:Sound = null;
@@ -169,10 +171,31 @@
           }
       }

-
-      var skiponload = false;
-      var baseurl;
-      function  __preloadFrames () { }
+      private var _frame:int = 1;
+
+      public function set frame (fr:int) :void {
+          this._frame = fr;
+          if (this.owner) {
+              this.owner.resourceevent('frame', fr);
+          }
+      }
+
+      public function get frame () :int {
+          return this._frame;
+      }
+
+      private var _totalframes:int = 1;
+
+      public function set totalframes (tfr:int) :void {
+          this._totalframes = tfr;
+          if (this.owner) {
+              this.owner.resourceevent('totalframes', tfr);
+          }
+      }
+
+      public function get totalframes () :int {
+          return this._totalframes;
+      }

       /** setResource( String:resource )
           o Displays a compiled-in resource (by name)
@@ -196,9 +219,6 @@
           //  assetclass: __embed_lzasset_lzfocusbracket_bottomright_shdw,
           // frames: ["lps/components/lz/resources/focus/focus_bot_rt_shdw.png"], width: 9, height: 9};

-
-          //Debug.write('setting resource', r);
-
           var res:Object = LzResourceLibrary[r];
           if (! res) {
               if ($debug) {
@@ -212,11 +232,10 @@
                 || LzAsset.isMovieClipLoaderAsset(r)) {
               this.resourcewidth = res.width;
               this.resourceheight = res.height;
-              if (this.owner != null) {
-                  this.totalframes = res.frames.length;
-                  this.owner.resourceevent('totalframes', this.totalframes);
-              }
+              this.totalframes = res.frames.length;
+
               if (imgLoader) {
+                  // unload previous http image-resource
                   this.unload();
               } else if (this.isaudio) {
                   // unload previous sound-resource
@@ -236,8 +255,8 @@
               this.resource = r;

               this.sound = new res['assetclass']() as Sound;
-              this.updateTotalframes();
-
+              this.totalframes = Math.floor(this.getTotalTime() * MP3_FPS);
+
               // TODO: add condition on this
               this.startPlay()

@@ -261,9 +280,6 @@
           if (url == null || url == 'null') {
               return;
           }
-
-          this.__isinternalresource = false;
-
           var loadurl = url;
           var proxied = this.owner.__LZcheckProxyPolicy( url );
           var proxyurl = this.owner.getProxyURL(url);
@@ -309,9 +325,9 @@

               if (! imgLoader) {
                   if (this.resourceContainer) {
+                      // unload previous internal image-resource
                       this.unload();
                   }
-                  this.__isinternalresource = false;
                   imgLoader = new Loader();
                   imgLoader.mouseEnabled = false;// @devnote: see LPP-7022
                   imgLoader.mouseChildren = false;
@@ -324,7 +340,7 @@
                   //TODO [20080911 anba] cancel current load?
                   // imgLoader.close();
               }
-
+              this.__isinternalresource = false;
               this.resource = url;
               var res = this.imgLoader;
               if (res) {
@@ -341,7 +357,7 @@
           if (filetype != null) {
               return filetype.toLowerCase();
           } else {
-              var si = url.lastIndexOf(".");
+              var si:int = url.lastIndexOf(".");
               return si != -1 ? url.substring(si + 1).toLowerCase() : null;
           }
       }
@@ -387,12 +403,10 @@
                               Debug.warn("Playback control will not work for the resource.  Please update or recompile the resource for Flash 9.", this.resource);
                           }
                       } else if (info.content is MovieClip) {
-                          Debug.write("loaderEventHandler info.content is MovieClip");
                           // store a reference for playback control
                           this.loaderMC = MovieClip(info.content);

                           this.totalframes = this.loaderMC.totalFrames;
-                          this.owner.resourceevent('totalframes', this.totalframes);
                           this.loaderMC.addEventListener(Event.ENTER_FRAME, updateFrames);
                           this.owner.resourceevent('play', null, true);
                           this.playing = this.owner.playing = true;
@@ -414,7 +428,8 @@
                          event.type == SecurityErrorEvent.SECURITY_ERROR) {
                   //TODO [20080911 anba] how can "owner" become null here?
                   if (this.owner != null) {
-                      this.owner.resourceloaderror( (event as IOErrorEvent).text );
+                      // IOErrorEvent/SecurityErrorEvent -> ErrorEvent -> TextEvent
+                      this.owner.resourceloaderror( (event as TextEvent).text );
                   }
               } else if (event.type == ProgressEvent.PROGRESS) {
                   var ev:ProgressEvent = event as ProgressEvent;
@@ -430,26 +445,25 @@
               if ($debug) Debug.warn(event.type + " " + error);
           }
       }
-
-      /**
+
+      /**
+        * Handle frame updates for loaded movieclips
+        */
+      private function updateFrames (event:Event) :void {
+          this.frame = this.loaderMC.currentFrame;
+          if (this.frame == this.totalframes) {
+              this.owner.resourceevent('lastframe', null, true);
+          }
+      }
+
+      /**
         * true if a sound is attached to this sprite.
         */
       public function get isaudio () :Boolean {
           return this.sound != null;
       }
-
-      /**
-        * Handle frame updates for loaded movieclips
-        */
-      private function updateFrames (event:Event) :void {
-          this.frame = this.loaderMC.currentFrame;
-          this.owner.resourceevent('frame', this.frame);
-          if (this.frame == this.totalframes) {
-              this.owner.resourceevent('lastframe', null, true);
-          }
-      }
-
-      /**
+
+      /**
         * Load/Stream a sound from an URL.
         */
       private function loadSound (url:String) :void {
@@ -537,7 +551,6 @@
               this.startPlay(framenumber);
           } else {
               this.frame = framenumber;
-              this.owner.resourceevent('frame', framenumber);
           }
       }

@@ -552,8 +565,8 @@
               } else if (event.type == Event.COMPLETE) {
                   this.soundLoading = false;
                   this.owner.resourceevent('loadratio', 1);
-                  this.updateTotalframes();
-
+                  this.totalframes = Math.floor(this.getTotalTime() * MP3_FPS);
+
                   // send events, including onload
                   this.sendResourceLoad();
               } else if (event.type == ProgressEvent.PROGRESS) {
@@ -577,30 +590,17 @@
         */
       private function soundFrameHandler (event:Event) :void {
           // Event.ENTER_FRAME
-          var fr:Number = Math.floor(this.soundChannel.position * 0.001 * MP3_FPS);
-          this.frame = fr;
-          this.owner.resourceevent('frame', fr);
-
-          this.updateTotalframes();
-      }
-
-      /**
-        * update totalframes for audio
-        */
-      private function updateTotalframes () :void {
-          var tfr:Number = Math.floor(this.getTotalTime() * MP3_FPS);
-          this.totalframes = tfr;
-          this.owner.resourceevent('totalframes', tfr);
-      }
-
-      /**
+          this.frame = Math.floor(this.soundChannel.position * 0.001 * MP3_FPS);
+          this.totalframes = Math.floor(this.getTotalTime() * MP3_FPS);
+      }
+
+      /**
         * Sound complete
         */
       private function soundCompleteHandler (event:Event) :void {
           // Event.SOUND_COMPLETE
           if (this.playing) {
               this.frame = this.totalframes;
-              this.owner.resourceevent('frame', this.frame);

               // SoundChannel.position does not stop exactly at Sound.length,
               // there are a few ms difference between both values.
@@ -955,24 +955,19 @@

               if (p) this.owner.resourceevent('stop', null, true);
           } else if (this.__isinternalresource) {
-              if (this.resource == null || imgLoader) {
-                  return;
-              }
-
-              var resinfo = LzResourceLibrary[this.resource];
-
+              var resinfo:Object = LzResourceLibrary[this.resource];
+
               // Frames are one based not zero based
-              var frames = resinfo.frames;
-              if (fn == null) {
+              var frames:Array = resinfo.frames;
+              if (fn == null || fn < 1) {
                   fn = 1;
-              }
-              if (fn > frames.length) {
+              } else if (fn > frames.length) {
                   fn = frames.length;
               }
               this.frame = fn;
-              var framenumber = fn - 1;
-
-              var assetclass;
+              var framenumber:int = fn - 1;
+
+              var assetclass:Class;
               // single frame resources get an entry in LzResourceLibrary which has
               // 'assetclass' pointing to the resource Class object.
               if (resinfo.assetclass is Class) {
@@ -981,36 +976,37 @@
                   // Multiframe resources have an array of Class objects in frames[]
                   assetclass = frames[framenumber];
               }
-
-              if (! assetclass) return;
-              if (this.resourceCache == null) {
-                  this.resourceCache = [];
-              }
-              var asset:DisplayObject = this.resourceCache[framenumber];
-              if (asset == null) {
-                  //Debug.write('CACHE MISS, new ',assetclass);
-                  asset = new assetclass();
-                  asset.scaleX = 1.0
-                  asset.scaleY = 1.0;
-                  this.resourceCache[framenumber] = asset;
-              }
-
-              var oRect:Rectangle = asset.getBounds( asset );
-              if (oRect.width == 0 || oRect.height == 0) {
-                // it can take a while for new resources to show up.  Call back until we have a valid size.
-                setTimeout(this.__resetframe, 50);
-                return;
-              }
-
-              if (this.resourceContainer != null) {
-                  this.removeChild(this.resourceContainer);
-              }
-              this.resourceContainer = asset;
-              this.addChildAt(asset,IMGDEPTH);
-
-              //Debug.write('set resource to', asset, oRect);
-
-              this.applyStretchResource();
+
+              if (assetclass) {
+                  if (this.resourceCache == null) {
+                      this.resourceCache = [];
+                  }
+                  var asset:DisplayObject = this.resourceCache[framenumber];
+                  if (asset == null) {
+                      //Debug.write('CACHE MISS, new ',assetclass);
+                      asset = new assetclass();
+                      asset.scaleX = 1.0
+                      asset.scaleY = 1.0;
+                      this.resourceCache[framenumber] = asset;
+                  }
+
+                  var oRect:Rectangle = asset.getBounds( asset );
+                  if (oRect.width == 0 || oRect.height == 0) {
+                      // it can take a while for new resources to show up.  Call back until we have a valid size.
+                      setTimeout(this.__resetframe, 50);
+                      return;
+                  }
+
+                  if (this.resourceContainer != null) {
+                      this.removeChild(this.resourceContainer);
+                  }
+                  this.resourceContainer = asset;
+                  this.addChildAt(asset,IMGDEPTH);
+
+                  this.applyStretchResource();
+              } else {
+                  // bad resource?
+              }
           } else if (this.loaderMC) {
               if ( this.playing ) this.owner.resourceevent('stop', null, true);
               this.playing = this.owner.playing = false;
@@ -1090,13 +1086,13 @@
           sprite's size
       */
       public function stretchResource( xory:String ):void {
-          if ( xory == null || xory == "x" || xory=="width" || xory=="both" ){
+          if (xory == "width" || xory == "both") {
               this._setrescwidth = true;
           }

-          if ( xory == null || xory == "y"|| xory=="height" || xory=="both" ){
+          if (xory == "height" || xory == "both") {
               this._setrescheight = true;
-          }
+          }
           this.applyStretchResource();
       }

@@ -1110,15 +1106,15 @@
           // Don't try to do anything while an image is loading
           if (res == null) return;

-          var scaleX = 1.0;
+          var scaleX:Number = 1.0;
           if (this.lzwidth && this._setrescwidth && this.resourcewidth) {
-              var scaleX =  this.lzwidth / this.resourcewidth;
-          }
-
-          var scaleY = 1.0;
+              scaleX = this.lzwidth / this.resourcewidth;
+          }
+
+          var scaleY:Number = 1.0;
           if (this.lzheight && this._setrescheight && this.resourceheight) {
-              var scaleY =  this.lzheight / this.resourceheight;
-          }
+              scaleY = this.lzheight / this.resourceheight;
+          }

           res.scaleX = scaleX;
           res.scaleY = scaleY;
@@ -1126,12 +1122,12 @@
       }

-      /** destroy( Boolean:recursive )
+      /** destroy()
           o Causes the sprite to destroy itself
-          o if recursive is true, the sprite destroys all its children as well
       */
       public function destroy( ):void {
           //PBR
+          this.unload();
           if (parent) {
               parent.removeChild(this);
           }
@@ -1210,19 +1206,19 @@
           trace('LzSprite.setStyleObject not yet implemented');
       }

+      /** getStyleObject()
+          o Gets the style object of the sprite
+      */
+      public function getStyleObject():Object {
+          trace('LzSprite.getStyleObject not yet implemented');
+          return null;
+      }
+
       /** removes all children from a container */
       public function removeChildren(container:DisplayObjectContainer):void {
           while (container.numChildren > 0) {
               container.removeChildAt(0);
           }
-      }
-
-      /** getStyleObject()
-          o Gets the style object of the sprite
-      */
-      public function getStyleObject():Object {
-          trace('LzSprite.getStyleObject not yet implemented');
-          return null;
       }

       public function unload() {
@@ -1239,6 +1235,7 @@
         }
         if (this.resourceContainer != null) {
             this.removeChild(this.resourceContainer);
+            this.resourceContainer = null;
         }
         if (this.isaudio) this.unloadSound();
         // clear out cached values
@@ -1249,7 +1246,6 @@
             this.loaderMC.removeEventListener(Event.ENTER_FRAME, updateFrames);
             this.loaderMC = null;
         }
-        this.loaderMC = null;
         this.imgLoader = null;
       }

@@ -1384,9 +1380,11 @@
         */
       function seek (secs:Number, doplay:Boolean) :void {
           if (this.isaudio) {
-              var pos:Number = Math.max(this.getCurrentTime() + secs, 0);
+              var pos:Number = this.getCurrentTime() + secs;
+              if (pos < 0) pos = 0;
               // don't seek too far
-              if (pos > this.getTotalTime()) pos = this.getTotalTime();
+              var total:Number = this.getTotalTime();
+              if (pos > total) pos = total;

               if (this.playing) {
                   this.stopPlay();
@@ -1394,9 +1392,7 @@
               if (doplay) {
                   this.startPlay(pos, false);
               } else {
-                  var fr:Number = Math.floor(pos * MP3_FPS);
-                  this.frame = fr;
-                  this.owner.resourceevent('frame', fr);
+                  this.frame = Math.floor(pos * MP3_FPS);
               }
           }
       }
@@ -1462,7 +1458,11 @@
         this.setWidth(this._setrescwidth?this.width:this.resourcewidth);
         this.setHeight(this._setrescheight?this.height:this.resourceheight);

-        if (! skipsend && ! this.__LZhaser) this.owner.resourceload({width: this.resourcewidth, height: this.resourceheight, resource: this.resource, skiponload: true});
+        if (! skipsend) this.owner.resourceload({width: this.resourcewidth, height: this.resourceheight, resource: this.resource, skiponload: true});
+      }
+
+      function setClickRegion (cr:*) :void {
+          trace('LzSprite.setClickRegion not yet implemented');
       }

   }#


Added new features to test suite

Added new features to test suite

git-svn-id: 02605e11d3a461bc7e12f3f3880edf4b0c8dcfd0@4487 3e7533ad-8678-4d30-8e38-00a379d3f0d0

--- test/AllTests.as
+++ test/AllTests.as
@@ -7,13 +7,15 @@
 	 */

 	import asunit.framework.TestSuite;
-
 	import laml.collections.SelectableListTest;
 	import laml.display.ButtonTest;
+	import laml.display.CarouselTest;
 	import laml.display.ComponentTest;
 	import laml.display.IconButtonTest;
 	import laml.display.ImageTest;
 	import laml.display.LabelTest;
+	import laml.display.RowTest;
+	import laml.display.SelectableButtonTest;
 	import laml.layout.FlowLayoutTest;
 	import laml.layout.StackLayoutTest;
 	import laml.xml.LAMLParserTest;
@@ -23,10 +25,13 @@
 		public function AllTests() {
 			addTest(new laml.collections.SelectableListTest());
 			addTest(new laml.display.ButtonTest());
+			addTest(new laml.display.CarouselTest());
 			addTest(new laml.display.ComponentTest());
 			addTest(new laml.display.IconButtonTest());
 			addTest(new laml.display.ImageTest());
 			addTest(new laml.display.LabelTest());
+			addTest(new laml.display.RowTest());
+			addTest(new laml.display.SelectableButtonTest());
 			addTest(new laml.layout.FlowLayoutTest());
 			addTest(new laml.layout.StackLayoutTest());
 			addTest(new laml.xml.LAMLParserTest());


Fixed links not appearing on placement

Fixed links not appearing on placement

--- src/Components/Link.as
+++ src/Components/Link.as
@@ -22,8 +22,10 @@
 		}

 		public function get exists():Boolean {
-			return !deleted && (hovering || (source.physParent.exists && destination.physParent.exists &&
-											 destination.source == source));
+			if (hovering)
+				return !deleted;
+			return (source.physParent.exists && destination.physParent.exists &&
+					destination.source == source);
 		}

 		public function get deployed():Boolean {


Bug 706799: refactor all constant pool accesses into helpers (r=fklockii).

--- utils/abcdump.as
+++ utils/abcdump.as
@@ -418,21 +418,21 @@
                     {
                         case OP_debugfile:
                         case OP_pushstring:
-                            s += '"' + abc.strings[readU32()].replace(/\n/g,"\\n").replace(/\t/g,"\\t") + '"'
+                            s += '"' + abc.stringFromU32().replace(/\n/g,"\\n").replace(/\t/g,"\\t") + '"'
                             break
                         case OP_pushnamespace:
-                            s += abc.namespaces[readU32()]
+                            s += abc.namespaceFromU32()
                             break
                         case OP_pushint:
-                            var i:int = abc.ints[readU32()]
+                            var i:int = abc.intFromU32()
                             s += i + "\t// 0x" + i.toString(16)
                             break
                         case OP_pushuint:
-                            var u:uint = abc.uints[readU32()]
+                            var u:uint = abc.uintFromU32()
                             s += u + "\t// 0x" + u.toString(16)
                             break;
                         case OP_pushdouble:
-                            s += abc.doubles[readU32()]
+                            s += abc.doubleFromU32()
                             break;
                         case OP_getsuper:
                         case OP_setsuper:
@@ -448,7 +448,7 @@
                         case OP_coerce:
                         case OP_astype:
                         case OP_getdescendants:
-                            s += abc.names[readU32()]
+                            s += abc.nameFromU32()
                             break;
                         case OP_constructprop:
                         case OP_callproperty:
@@ -456,7 +456,7 @@
                         case OP_callsuper:
                         case OP_callsupervoid:
                         case OP_callpropvoid:
-                            s += abc.names[readU32()]
+                            s += abc.nameFromU32()
                             s += " (" + readU32() + ")"
                             break;
                         case OP_newfunction: {
@@ -465,11 +465,11 @@
                             break;
                         }
                         case OP_callstatic:
-                            s += abc.methods[readU32()]
+                            s += abc.methodFromU32()
                             s += " (" + readU32() + ")"
                             break;
                         case OP_newclass:
-                            s += abc.instances[readU32()]
+                            s += abc.instanceFromU32()
                             break;
                         case OP_lookupswitch:
                             var pos = code.position-1;
@@ -801,6 +801,61 @@
             return   result & 0x0fffffff | data.readUnsignedByte()<<28;
         }

+        function classFromU32()
+        {
+            return classes[readU32()]
+        }
+
+        function doubleFromU32()
+        {
+            return doubles[readU32()]
+        }
+
+        function intFromU32()
+        {
+            return ints[readU32()]
+        }
+
+        function uintFromU32()
+        {
+            return uints[readU32()]
+        }
+
+        function instanceFromU32()
+        {
+            return instances[readU32()]
+        }
+
+        function metadataFromU32()
+        {
+            return metadata[readU32()]
+        }
+
+        function methodFromU32()
+        {
+            return methods[readU32()]
+        }
+
+        function nameFromU32()
+        {
+            return names[readU32()]
+        }
+
+        function namespaceFromU32()
+        {
+            return namespaces[readU32()]
+        }
+
+        function nssetFromU32()
+        {
+            return nssets[readU32()]
+        }
+
+        function stringFromU32()
+        {
+            return strings[readU32()]
+        }
+
         function dumpPool(name:String, pool:Array)
         {
             if(!doDumpPools)
@@ -873,7 +928,7 @@
                 case CONSTANT_StaticProtectedNs:
                 case CONSTANT_StaticProtectedNs2:
                 {
-                    namespaces[i] = new ABCNamespace(strings[readU32()], nskind)
+                    namespaces[i] = new ABCNamespace(stringFromU32(), nskind)
                     break;
                 }
                 case CONSTANT_PrivateNs:
@@ -919,12 +974,12 @@
                 {
                 case CONSTANT_Qname:
                 case CONSTANT_QnameA:
-                    names[i] = new QualifiedName(namespaces[readU32()], strings[readU32()])
+                    names[i] = new QualifiedName(namespaceFromU32(), stringFromU32())
                     break;

                 case CONSTANT_RTQname:
                 case CONSTANT_RTQnameA:
-                    names[i] = new QualifiedName(null, strings[readU32()])
+                    names[i] = new QualifiedName(null, stringFromU32())
                     break;

                 case CONSTANT_RTQnameL:
@@ -939,21 +994,21 @@

                 case CONSTANT_Multiname:
                 case CONSTANT_MultinameA:
-                    var name = strings[readU32()]
-                    names[i] = Multiname.createMultiname(nssets[readU32()], name, doDumpAPI)
+                    var name = stringFromU32()
+                    names[i] = Multiname.createMultiname(nssetFromU32(), name, doDumpAPI)
                     break;

                 case CONSTANT_MultinameL:
                 case CONSTANT_MultinameLA:
-                    names[i] = Multiname.createMultiname(nssets[readU32()], null, doDumpAPI)
+                    names[i] = Multiname.createMultiname(nssetFromU32(), null, doDumpAPI)
                     break;

                 case CONSTANT_TypeName:
-                    var name = names[readU32()];
+                    var name = nameFromU32();
                     var count = readU32();
                     var types = [];
                     for( var t=0; t < count; ++t )
-                        types.push(names[readU32()]);
+                        types.push(nameFromU32());
                     names[i] = new TypeName(name, types);
                     break;

@@ -982,11 +1037,11 @@
                 var m = methods[i] = new MethodInfo()
                 m.method_id = i
                 var param_count:int = readU32()
-                m.returnType = names[readU32()]
+                m.returnType = nameFromU32()
                 m.paramTypes = []
                 for (var j:int=0; j < param_count; j++)
-                    m.paramTypes[j] = names[readU32()]
-                m.debugName = strings[readU32()]
+                    m.paramTypes[j] = nameFromU32()
+                m.debugName = stringFromU32()
                 m.flags = data.readByte()
                 if (m.flags & HAS_OPTIONAL)
                 {
@@ -1032,16 +1087,16 @@
             {
                 // MetadataInfo
                 var m = metadata[i] = new MetaData()
-                m.name = strings[readU32()];
+                m.name = stringFromU32();
                 var values_count:int = readU32();
                 var names:Array = []
                 var keys:Array = []
                 var values:Array = []

                 for(var q:int = 0; q < values_count; ++q)
-                    keys[q] = strings[readU32()]
+                    keys[q] = stringFromU32()
                 for(var q:int = 0; q < values_count; ++q)
-                    values[q] = strings[readU32()]
+                    values[q] = stringFromU32()

                 for(var q:int = 0; q < values_count; ++q)
                     m.addPair(keys[q], values[q])
@@ -1060,15 +1115,15 @@
             for (var i:int=0; i < count; i++)
             {
                 var t = instances[i] = new Traits()
-                t.name = names[readU32()]
-                t.base = names[readU32()]
+                t.name = nameFromU32()
+                t.base = nameFromU32()
                 t.flags = data.readByte()
                 if (t.flags & 8)
-                    t.protectedNs = namespaces[readU32()]
+                    t.protectedNs = namespaceFromU32()
                 var interface_count = readU32()
                 for (var j:int=0; j < interface_count; j++)
-                    t.interfaces[j] = names[readU32()]
-                var m = t.init = methods[readU32()]
+                    t.interfaces[j] = nameFromU32()
+                var m = t.init = methodFromU32()
                 m.name = t.name
                 m.kind = TRAIT_Method
                 m.id = -1
@@ -1082,7 +1137,7 @@
             var namecount = readU32()
             for (var i:int=0; i < namecount; i++)
             {
-                var name = names[readU32()]
+                var name = nameFromU32()
                 var tag = data.readByte()
                 var kind = tag & 0xf
                 var member
@@ -1095,21 +1150,21 @@
                     t.slots[slot.id] = slot
                     if (kind==TRAIT_Slot || kind==TRAIT_Const)
                     {
-                        slot.type = names[readU32()]
+                        slot.type = nameFromU32()
                         var index=readU32()
                         if (index)
                             slot.value = defaults[data.readByte()][index]
                     }
                     else // (kind == TRAIT_Class)
                     {
-                        slot.value = classes[readU32()]
+                        slot.value = classFromU32()
                     }
                     break;
                 case TRAIT_Method:
                 case TRAIT_Getter:
                 case TRAIT_Setter:
                     var disp_id = readU32()
-                    var method = member = methods[readU32()]
+                    var method = member = methodFromU32()
                     t.methods[disp_id] = method
                     method.id = disp_id
                     //print("\t",traitKinds[kind],name,disp_id,method,"// disp_id", disp_id)
@@ -1137,7 +1192,7 @@
             for (var i:int=0; i < count; i++)
             {
                 var t:Traits = classes[i] = new Traits()
-                t.init = methods[readU32()]
+                t.init = methodFromU32()
                 t.base = "Class"
                 t.itraits = instances[i]
                 t.name = t.itraits.name + "$"
@@ -1159,7 +1214,7 @@
                 scripts[i] = t
                 t.name = "script" + i
                 t.base = names[0] // Object
-                t.init = methods[readU32()]
+                t.init = methodFromU32()
                 t.init.name = t.name + "$init"
                 t.init.kind = TRAIT_Method
                 parseTraits(t)
@@ -1173,7 +1228,7 @@
             var count:int = readU32()
             for (var i:int=0; i < count; i++)
             {
-                var m = methods[readU32()]
+                var m = methodFromU32()
                 m.max_stack = readU32()
                 m.local_count = readU32()
                 var initScopeDepth = readU32()
@@ -1197,10 +1252,10 @@
                         ex.from = readU32()
                         ex.to = readU32()
                         ex.target = readU32()
-                        ex.type = names[readU32()]
+                        ex.type = nameFromU32()
                         //print("magic " + magic.toString(16))
                         //if (magic >= (46<<16|16))
-                            ex.name = names[readU32()];
+                            ex.name = nameFromU32();
                         //infoPrint("exception method_id=" + i + " [" + ex.from + ", " + ex.to + "] " + ex.type + " -> " + ex.target)
                     }
                 }


Transferred from the Adobe Open Source Subversion Repository

Revision: 12863
Author:   sbreinbe@adobe.com
Date:     2009-12-11T21:18:02.442564Z

Log Message:
-----------
Fix class referenced in Alternative metadata.
Alternative metadata for Box, HBox, VBox, Canvas, and Tile still used the obsolete Border classname rather than BorderContainer.

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

Modified Paths:
--------------
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/containers/Box.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/containers/Canvas.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/containers/Tile.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/containers/VBox.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/containers/HBox.as</path>

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

--- frameworks/projects/mx/src/mx/containers/VBox.as
+++ frameworks/projects/mx/src/mx/containers/VBox.as
@@ -37,7 +37,7 @@
 [IconFile("VBox.png")]

 [Alternative(replacement="spark.components.VGroup", since="4.0")]
-[Alternative(replacement="spark.components.Border", since="4.0")]
+[Alternative(replacement="spark.components.BorderContainer", since="4.0")]

 /**
  *  The Halo VBox container lays out its children in a single vertical column.


Clean 'template.as' demo

Clean 'template.as' demo

--- www/demos/template.as
+++ www/demos/template.as
@@ -7,43 +7,43 @@
 ;
 ;       Description
 ;
-;============== Constants ======================================================
+;===============================================================================

-; Interrupt table (fe00h - feffh)
-; Ends at feffh, but there are no devices connected to interrupts above fe0fh.
+; Interrupt Vector Table addresses (fe00h to feffh)
 INT0_BTN        EQU     fe00h
 INT1_BTN        EQU     fe01h
 INT2_BTN        EQU     fe02h
 ; ...
-INT14_BTN       EQU     fe02h
+INT14_BTN       EQU     fe0eh
 INT15_TIMER     EQU     fe0fh

-; I/O addresses (ff00h - ffffh)
-; Starts at ff00h, but there are no devices connected below fff0h.
-DISP7SEG_0      EQU     fff0h   ; write
-DISP7SEG_1      EQU     fff1h   ; write
-DISP7SEG_2      EQU     fff2h   ; write
-DISP7SEG_3      EQU     fff3h   ; write
-LCD_CONTROL     EQU     fff4h   ; write
-LCD_WRITE       EQU     fff5h   ; write
-TIMER_VALUE     EQU     fff6h   ; read/write
-TIMER_CONTROL   EQU     fff7h   ; read/write
-LEDS            EQU     fff8h   ; write
-SWITCHES        EQU     fff9h   ; read
-INT_MASK        EQU     fffah   ; read/write
-TERM_CURSOR     EQU     fffch   ; write
-TERM_STATE      EQU     fffdh   ; read
-TERM_WRITE      EQU     fffeh   ; write
-TERM_READ       EQU     ffffh   ; read
+; I/O addresses (ff00h to ffffh)
+DISP7SEG_0      EQU     fff0h
+DISP7SEG_1      EQU     fff1h
+DISP7SEG_2      EQU     fff2h
+DISP7SEG_3      EQU     fff3h
+LCD_CONTROL     EQU     fff4h
+LCD_WRITE       EQU     fff5h
+TIMER_VALUE     EQU     fff6h
+TIMER_CONTROL   EQU     fff7h
+LEDS            EQU     fff8h
+SWITCHES        EQU     fff9h
+INT_MASK        EQU     fffah
+TERM_CURSOR     EQU     fffch
+TERM_STATE      EQU     fffdh
+TERM_WRITE      EQU     fffeh
+TERM_READ       EQU     ffffh

-; Default values
-STR_END         EQU     0000h   ; string terminator
-SP_ADDRESS      EQU     fdffh   ; starts at the last available address (fdffh)
-INT_MASK_VALUE  EQU     ffffh   ; ffffh = enable all
+; Other constants
+STR_END         EQU     0000h
+SP_ADDRESS      EQU     fdffh
+INT_MASK_VALUE  EQU     ffffh

-;============== Data Region (starting at address 8000h) =======================
+;============== Data Region (starting at address 8000h) ========================

                 ORIG    8000h
+
+                ; allocate variables and data here (WORD, STR and TAB)

 A_VARIABLE      WORD    1010011010b
 A_STRING        STR     'A String', ' more words', '!', STR_END
@@ -56,29 +56,14 @@

 ;-------------- Routines -------------------------------------------------------

-                ; a routine routine for INT0_BTN
+                ; put routines here

-Int0Routine:    NOP
+Int0Routine:    NOP     ; a routine routine for INT0
+                INC     M[A_VARIABLE]
                 RTI

-                ; a routine routine for INT1_BTN
-
-Int1Routine:    NOP
-                RTI
-
-                ; a routine routine for INT2_BTN
-
-Int2Routine:    NOP
-                RTI
-
-                ; a routine that does nothing
-
-ARoutine:       NOP
-                RET
-
-                ; another routine that does nothing
-
-AnotherRoutine: NOP
+ARoutine:       NOP     ; a routine that does nothing
+                MOV     R2, M[A_VARIABLE]
                 RET

 ;-------------- Main Program ---------------------------------------------------
@@ -86,22 +71,16 @@
 Main:           MOV     R1, SP_ADDRESS
                 MOV     SP, R1                  ; set stack pointer

-                MOV     R1, Int0Routine         ; set routine for INT0
-                MOV     M[INT0_BTN], R1
-                MOV     R1, Int1Routine         ; set routine for INT1
-                MOV     M[INT1_BTN], R1
-                MOV     R1, Int2Routine         ; set routine for INT2
-                MOV     M[INT2_BTN], R1
+                MOV     R1, Int0Routine
+                MOV     M[INT0_BTN], R1         ; set routine for INT0

-                MOV     R1, ffffh
+                MOV     R1, INT_MASK_VALUE
                 MOV     M[INT_MASK], R1         ; set interrupt mask
                 ENI                             ; enable interrupts

+                ; start code here
+
                 CALL    ARoutine
-                CALL    AnotherRoutine
-                NOP
-                NOP
-                NOP

 TheEnd:         BR      TheEnd


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

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

 package mx.automation.delegates.containers
 {


refactor

refactor

--- com/segonquart/Configuration.as
+++ com/segonquart/Configuration.as
@@ -1,12 +1,12 @@
-class com.segonquart.Configuration extends MovieClip
+import mx.events.EventDispatcher;
+import mx.utils.Delegate;
+class com.segonquart.Configuration extends MovieClip
 {
 	public var addListener:Function;
 	public var addEventListener:Function;
 	public var removeEventListener:Function;
 	static var URLAPP:String = "http://www.talking-wear.com";
 	static var POLICY:String = "http://segonquart.net/crossdomain.xml";
-
-
 	public function Configuration ()
 	{
 		Stage.addListener (this);


removing unnecessary libraries

removing unnecessary libraries

--- WeaveData/src/weave/data/AttributeColumns/EquationColumn.as
+++ WeaveData/src/weave/data/AttributeColumns/EquationColumn.as
@@ -55,12 +55,9 @@

 		public static const compiler:Compiler = new Compiler();
 		compiler.includeLibraries(
-			WeaveAPI.CSVParser,
 			WeaveAPI.StatisticsCache,
-			WeaveAPI.AttributeColumnCache,
 			WeaveAPI.QKeyManager,
-			EquationColumnLib,
-			IQualifiedKey
+			EquationColumnLib
 		);

 		public function EquationColumn()


Transferred from the Adobe Open Source Subversion Repository

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

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

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

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

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

 package mx.automation.delegates.controls
 {


Allow customizing the text color, persist to preferences.

git-svn-id: 41360ad359616a519dfba9f2f48af1afe653c9f7@10 be230a1c-449f-4488-b524-6273046f66f0

--- src/as/client/ClientApp.as
+++ src/as/client/ClientApp.as
@@ -5,6 +5,7 @@

 import flash.display.Sprite;

+import flash.events.ContextMenuEvent;
 import flash.events.Event;
 import flash.events.IOErrorEvent;
 import flash.events.KeyboardEvent;
@@ -13,14 +14,20 @@

 import flash.geom.Rectangle;

+import flash.net.SharedObject;
 import flash.net.Socket;

 import flash.text.TextField;
 import flash.text.TextFieldAutoSize;
 import flash.text.TextFormat;

+import flash.ui.ContextMenu;
+import flash.ui.ContextMenuItem;
 import flash.ui.Keyboard;

+/**
+ * The Witgap client application.
+ */
 [SWF(frameRate="60", width=800, height=600, backgroundColor="#000000")]
 public class ClientApp extends Sprite {

@@ -66,6 +73,36 @@
         _field.setTextFormat(format);
         _field.x = (loaderInfo.width - _field.width) / 2;
         _field.y = (loaderInfo.height - _field.height) / 2;
+
+        // get the preferences
+        _prefs = SharedObject.getLocal("prefs");
+
+        // add the context menu to change colors
+        contextMenu = new ContextMenu();
+        contextMenu.hideBuiltInItems();
+        contextMenu.customItems = [ ];
+        var captions :Array = [ "White", "Green", "Amber" ];
+        var colors :Array = [ 0xFFFFFF, 0x00FF00, 0xFFFF00 ];
+        var setColor :Function = function (caption :String) :void {
+            _prefs.setProperty("color", caption);
+            for (var kk :int = 0; kk < captions.length; kk++) {
+                if (captions[kk] == caption) {
+                    _field.textColor = colors[kk];
+                    contextMenu.customItems[kk].enabled = false;
+                } else {
+                    contextMenu.customItems[kk].enabled = true;
+                }
+            }
+        };
+        var updateColor :Function = function (event :ContextMenuEvent) :void {
+            setColor(ContextMenuItem(event.target).caption);
+        };
+        for (var kk :int = 0; kk < captions.length; kk++) {
+            var item :ContextMenuItem = new ContextMenuItem(captions[kk]);
+            contextMenu.customItems.push(item);
+            item.addEventListener(ContextMenuEvent.MENU_ITEM_SELECT, updateColor);
+        }
+        setColor(_prefs.data["color"] == undefined ? "Green" : _prefs.data["color"]);

         // listen for key events
         addEventListener(KeyboardEvent.KEY_DOWN, sendKeyMessage);
@@ -242,6 +279,9 @@
         }
     }

+    /** Persistent preferences. */
+    protected var _prefs :SharedObject;
+
     /** Our gigantic text field. */
     protected var _field :TextField;


removing debug code

removing debug code

Change-Id: I79496c3a1b47c9b3386a75af2e6682376d94d466

--- WeaveData/src/weave/services/LocalAsyncService.as
+++ WeaveData/src/weave/services/LocalAsyncService.as
@@ -287,13 +287,7 @@
 		 */
 		public function receiveChunkedData(commandID:String, chunkID:uint, chunkData:ByteArray, moreChunksFollow:Boolean):void
 		{
-			trace('receiveChunkedData', chunkID, chunkData.length, moreChunksFollow);
-			chunkData.position = 0;
-//			// convert String to ByteArray
-//			var bytes:ByteArray = new ByteArray();
-//			for (var i:int = 0; i < chunkData.length; i++)
-//				bytes.writeByte(chunkData.charCodeAt(i));
-//			bytes.position = 0;
+			//trace('receiveChunkedData', commandID, chunkID, chunkData.length, moreChunksFollow);
 			_receiveChunkedData.apply(null, [commandID, chunkID, chunkData, moreChunksFollow]);
 		}
 		private function _receiveChunkedData(commandID:String, chunkID:uint, chunkData:ByteArray, moreChunksFollow:Boolean):void


Added many debugging events to JplayerMp4.as.

--- actionscript/happyworm/jPlayer/JplayerMp4.as
+++ actionscript/happyworm/jPlayer/JplayerMp4.as
@@ -55,17 +55,18 @@
 			myStatus.volume = volume;

             this.dispatchEvent(new JplayerEvent(JplayerEvent.DEBUG_MSG, myStatus, "JplayerMp4 initialized: volume = " + volume));
-
 		}
 		private function progressUpdates(active:Boolean):void {
+            this.dispatchEvent(new JplayerEvent(JplayerEvent.DEBUG_MSG, myStatus, "progressUpdates: Start - active = " + active));
 			if(active) {
 				progressTimer.start();
 			} else {
 				progressTimer.stop();
 			}
+            this.dispatchEvent(new JplayerEvent(JplayerEvent.DEBUG_MSG, myStatus, "progressUpdates: End"));
 		}
 		private function progressHandler(e:TimerEvent):void {
-            this.dispatchEvent(new JplayerEvent(JplayerEvent.DEBUG_MSG, myStatus, "progressHandler: " + e.type));
+            this.dispatchEvent(new JplayerEvent(JplayerEvent.DEBUG_MSG, myStatus, "progressHandler: Start - type = " + e.type));
 			if(myStatus.isLoading) {
 				if(getLoadRatio() == 1) { // Close as can get to a loadComplete event since client.onPlayStatus only works with FMS
 					myStatus.loaded();
@@ -76,28 +77,35 @@
             this.dispatchEvent(new JplayerEvent(JplayerEvent.DEBUG_MSG, myStatus, "progressHandler: End"));
 		}
 		private function progressEvent():void {
-			this.dispatchEvent(new JplayerEvent(JplayerEvent.DEBUG_MSG, myStatus, "progressEvent: before update"));
+			this.dispatchEvent(new JplayerEvent(JplayerEvent.DEBUG_MSG, myStatus, "progressEvent: Start"));
 			updateStatusValues();
-            this.dispatchEvent(new JplayerEvent(JplayerEvent.DEBUG_MSG, myStatus, "progressEvent: after update"));
 			this.dispatchEvent(new JplayerEvent(JplayerEvent.JPLAYER_PROGRESS, myStatus));
+            this.dispatchEvent(new JplayerEvent(JplayerEvent.DEBUG_MSG, myStatus, "progressEvent: End"));
 		}
 		private function timeUpdates(active:Boolean):void {
+            this.dispatchEvent(new JplayerEvent(JplayerEvent.DEBUG_MSG, myStatus, "timeUpdates: Start - active = " + active));
 			if(active) {
 				timeUpdateTimer.start();
 			} else {
 				timeUpdateTimer.stop();
 			}
+            this.dispatchEvent(new JplayerEvent(JplayerEvent.DEBUG_MSG, myStatus, "timeUpdates: End"));
 		}
 		private function timeUpdateHandler(e:TimerEvent):void {
+            //this.dispatchEvent(new JplayerEvent(JplayerEvent.DEBUG_MSG, myStatus, "timeUpdateHandler: Start - type = " + e.type));
 			if(!myStatus.flashIsSeeking){
 				setTimeout(timeUpdateEvent, 100);
 			}
+            //this.dispatchEvent(new JplayerEvent(JplayerEvent.DEBUG_MSG, myStatus, "timeUpdateHandler: End"));
 		}
 		private function timeUpdateEvent():void {
+            //this.dispatchEvent(new JplayerEvent(JplayerEvent.DEBUG_MSG, myStatus, "timeUpdateEvent: Start"));
 			updateStatusValues();
 			this.dispatchEvent(new JplayerEvent(JplayerEvent.JPLAYER_TIMEUPDATE, myStatus));
+            //this.dispatchEvent(new JplayerEvent(JplayerEvent.DEBUG_MSG, myStatus, "timeUpdateEvent: End"));
 		}
 		private function seeking(active:Boolean):void {
+            this.dispatchEvent(new JplayerEvent(JplayerEvent.DEBUG_MSG, myStatus, "seeking: Start - active = " + active));
 			if(active) {
 				if(!myStatus.isSeeking) {
 					seekingEvent();
@@ -109,8 +117,10 @@
 				}
 				seekingTimer.stop();
 			}
+            this.dispatchEvent(new JplayerEvent(JplayerEvent.DEBUG_MSG, myStatus, "seeking: End"));
 		}
 		private function seekingHandler(e:TimerEvent):void {
+            this.dispatchEvent(new JplayerEvent(JplayerEvent.DEBUG_MSG, myStatus, "seekingHandler: Start - type = " + e.type));
 			if(getSeekTimeRatio() <= getLoadRatio()) {
 				seeking(false);
 				if(myStatus.playOnSeek) {
@@ -124,26 +134,34 @@
 				seeking(false);
 				pause(0);
 			}
+            this.dispatchEvent(new JplayerEvent(JplayerEvent.DEBUG_MSG, myStatus, "seekingHandler: End"));
 		}
 		private function seekingEvent():void {
+            this.dispatchEvent(new JplayerEvent(JplayerEvent.DEBUG_MSG, myStatus, "seekingEvent: Start"));
 			myStatus.isSeeking = true;
 			updateStatusValues();
 			this.dispatchEvent(new JplayerEvent(JplayerEvent.JPLAYER_SEEKING, myStatus));
+            this.dispatchEvent(new JplayerEvent(JplayerEvent.DEBUG_MSG, myStatus, "seekingEvent: End"));
 		}
 		private function seekedEvent():void {
+            this.dispatchEvent(new JplayerEvent(JplayerEvent.DEBUG_MSG, myStatus, "seekedEvent: Start"));
 			myStatus.isSeeking = false;
 			updateStatusValues();
 			this.dispatchEvent(new JplayerEvent(JplayerEvent.JPLAYER_SEEKED, myStatus));
+            this.dispatchEvent(new JplayerEvent(JplayerEvent.DEBUG_MSG, myStatus, "seekedEvent: End"));
 		}
 		private function netStatusHandler(e:NetStatusEvent):void {
-			this.dispatchEvent(new JplayerEvent(JplayerEvent.DEBUG_MSG, myStatus, "netStatusHandler: '" + e.info.code + "'"));
-			switch(e.info.code) {
+            var code:String = e.info.code;
+			this.dispatchEvent(new JplayerEvent(JplayerEvent.DEBUG_MSG, myStatus, "netStatusHandler: Start - code = " + code + " - level = " + e.info.level));
+			switch(code) {
 				case "NetConnection.Connect.Success":
+                    this.dispatchEvent(new JplayerEvent(JplayerEvent.DEBUG_MSG, myStatus, "netStatusHandler: " + code + " begin"));
 					connectStream();
+                    this.dispatchEvent(new JplayerEvent(JplayerEvent.DEBUG_MSG, myStatus, "netStatusHandler: " + code + " end"));
 					break;
 				case "NetStream.Play.Start":
 					// This event code occurs once, when the media is opened. Equiv to loadOpen() in mp3 player.
-                    this.dispatchEvent(new JplayerEvent(JplayerEvent.DEBUG_MSG, myStatus, "netStatusHandler: NetStream.Play.Start begin"));
+                    this.dispatchEvent(new JplayerEvent(JplayerEvent.DEBUG_MSG, myStatus, "netStatusHandler: " + code + " begin"));

 					//If we're not playing from the start, temporarily mute the stream; otherwise, while we seek to the starting position, the audio will come through.
 					if(myStatus.pausePosition > 0){
@@ -155,32 +173,39 @@
 					progressUpdates(true);
 					// See onMetaDataHandler() for other condition, since duration is vital.

-                    this.dispatchEvent(new JplayerEvent(JplayerEvent.DEBUG_MSG, myStatus, "netStatusHandler: NetStream.Play.Start end"));
-
+                    this.dispatchEvent(new JplayerEvent(JplayerEvent.DEBUG_MSG, myStatus, "netStatusHandler: " + code + " end"));
 					break;
 				case "NetStream.Play.Stop":
-					this.dispatchEvent(new JplayerEvent(JplayerEvent.DEBUG_MSG, myStatus, "NetStream.Play.Stop: getDuration() - getCurrentTime() = " + (getDuration() - getCurrentTime())));
+					this.dispatchEvent(new JplayerEvent(JplayerEvent.DEBUG_MSG, myStatus, "netStatusHandler: " + code + " begin: getDuration() - getCurrentTime() = " + (getDuration() - getCurrentTime())));

 					// Check if media is at the end (or close) otherwise this was due to download bandwidth stopping playback. ie., Download is not fast enough.
 					if(Math.abs(getDuration() - getCurrentTime()) < 1000) { // Using 1000ms to be extra safe, testing found that for M4A files, playHead(99.9) caused a stuck state due to firing with up to 186ms left to play.
 						endedEvent();
 					}
+                    this.dispatchEvent(new JplayerEvent(JplayerEvent.DEBUG_MSG, myStatus, "netStatusHandler: " + code + " end"));
 					break;
 				case "NetStream.Seek.InvalidTime":
+                    this.dispatchEvent(new JplayerEvent(JplayerEvent.DEBUG_MSG, myStatus, "netStatusHandler: " + code + " begin"));
 					// Used for capturing invalid set times and clicks on the end of the progress bar.
 					endedEvent();
+                    this.dispatchEvent(new JplayerEvent(JplayerEvent.DEBUG_MSG, myStatus, "netStatusHandler: " + code + " end"));
 					break;
 				case "NetStream.Play.StreamNotFound":
+                    this.dispatchEvent(new JplayerEvent(JplayerEvent.DEBUG_MSG, myStatus, "netStatusHandler: " + code + " begin"));
 					myStatus.error(); // Resets status except the src, and it sets srcError property.
 					this.dispatchEvent(new JplayerEvent(JplayerEvent.JPLAYER_ERROR, myStatus));
+                    this.dispatchEvent(new JplayerEvent(JplayerEvent.DEBUG_MSG, myStatus, "netStatusHandler: " + code + " end"));
 					break;
 				case "NetStream.SeekStart.Notify":
+                    this.dispatchEvent(new JplayerEvent(JplayerEvent.DEBUG_MSG, myStatus, "netStatusHandler: " + code + " begin"));
 					myStatus.flashIsSeeking = true;
+                    this.dispatchEvent(new JplayerEvent(JplayerEvent.DEBUG_MSG, myStatus, "netStatusHandler: " + code + " end"));
 					break;
 				case "NetStream.Seek.Notify":
 					// A typical seek call involves 1) pausing the stream, 2) seeking, then 3) waiting for Flash to finish seeking. We're at step 3 now.
 					// However, step 3 can be triggered when someone hits pause then seeks around. So, we need to keep track of that case.
 					// myStatus.playAfterFlashIsSeeking is the flag that distinguishes this use case.
+                    this.dispatchEvent(new JplayerEvent(JplayerEvent.DEBUG_MSG, myStatus, "netStatusHandler: " + code + " begin"));
 					if(myStatus.playAfterFlashIsSeeking){
 						myStatus.playAfterFlashIsSeeking = false; // Unset the flag.
 						myStatus.isPlaying = true; // Set immediately before playing. Could affects events.
@@ -190,12 +215,14 @@
 						this.dispatchEvent(new JplayerEvent(JplayerEvent.JPLAYER_PLAY, myStatus)); // Note that we're playing the stream again.
 					}
 					myStatus.flashIsSeeking = false; // Note that Flash is no longer seeking.
+                    this.dispatchEvent(new JplayerEvent(JplayerEvent.DEBUG_MSG, myStatus, "netStatusHandler: " + code + " end"));
 					break;
 			}
 			// "NetStream.Seek.Notify" event code is not very useful. It occurs after every seek(t) command issued and does not appear to wait for the media to be ready.
             this.dispatchEvent(new JplayerEvent(JplayerEvent.DEBUG_MSG, myStatus, "netStatusHandler: End"));
 		}
 		private function endedEvent():void {
+            this.dispatchEvent(new JplayerEvent(JplayerEvent.DEBUG_MSG, myStatus, "endedEvent: Start"));
 			var wasPlaying:Boolean = myStatus.isPlaying;
 			myStatus.flashIsSeeking = false;
 			// This is (theoretically) causing the double-play and LifeHacker bug.
@@ -207,6 +234,7 @@
 			if(wasPlaying) {
 				this.dispatchEvent(new JplayerEvent(JplayerEvent.JPLAYER_ENDED, myStatus));
 			}
+            this.dispatchEvent(new JplayerEvent(JplayerEvent.DEBUG_MSG, myStatus, "endedEvent: End"));
 		}
 		private function securityErrorHandler(event:SecurityErrorEvent):void {
 			this.dispatchEvent(new JplayerEvent(JplayerEvent.DEBUG_MSG, myStatus, "securityErrorHandler."));
@@ -228,6 +256,7 @@
             this.dispatchEvent(new JplayerEvent(JplayerEvent.DEBUG_MSG, myStatus, "connectStream: End"));
 		}
 		public function setFile(src:String):void {
+            this.dispatchEvent(new JplayerEvent(JplayerEvent.DEBUG_MSG, myStatus, "setFile: Start - src = " + src));
 			if(myStream != null) {
 				myStream.close();
 			}
@@ -239,21 +268,28 @@
 			myStatus.src = src;
 			myStatus.srcSet = true;
 			timeUpdateEvent();
+            this.dispatchEvent(new JplayerEvent(JplayerEvent.DEBUG_MSG, myStatus, "setFile: End"));
 		}
 		public function clearFile():void {
+            this.dispatchEvent(new JplayerEvent(JplayerEvent.DEBUG_MSG, myStatus, "clearFile: Start"));
 			setFile("");
 			myStatus.srcSet = false;
+            this.dispatchEvent(new JplayerEvent(JplayerEvent.DEBUG_MSG, myStatus, "clearFile: End"));
 		}
 		public function load():Boolean {
+            this.dispatchEvent(new JplayerEvent(JplayerEvent.DEBUG_MSG, myStatus, "load: Start"));
 			if(myStatus.loadRequired()) {
 				myStatus.startingDownload();
 				myConnection.connect(null);
+                this.dispatchEvent(new JplayerEvent(JplayerEvent.DEBUG_MSG, myStatus, "load: End"));
 				return true;
 			} else {
+                this.dispatchEvent(new JplayerEvent(JplayerEvent.DEBUG_MSG, myStatus, "load: End"));
 				return false;
 			}
 		}
 		public function play(time:Number = NaN):Boolean {
+            this.dispatchEvent(new JplayerEvent(JplayerEvent.DEBUG_MSG, myStatus, "play: Start - time = " + time));
 			var wasPlaying:Boolean = myStatus.isPlaying;

 			if(!isNaN(time) && myStatus.srcSet) {
@@ -266,9 +302,11 @@

 			if(myStatus.isStartingDownload) {
 				myStatus.playOnLoad = true; // Raise flag, captured in onMetaDataHandler()
+                this.dispatchEvent(new JplayerEvent(JplayerEvent.DEBUG_MSG, myStatus, "play: End"));
 				return true;
 			} else if(myStatus.loadRequired()) {
 				myStatus.playOnLoad = true; // Raise flag, captured in onMetaDataHandler()
+                this.dispatchEvent(new JplayerEvent(JplayerEvent.DEBUG_MSG, myStatus, "play: End"));
 				return load();
 			} else if((myStatus.isLoading || myStatus.isLoaded) && !myStatus.isPlaying) {
 				if(myStatus.metaDataReady && myStatus.pausePosition > myStatus.duration) { // The time is invalid, ie., past the end.
@@ -306,19 +344,24 @@
 						}
 					}
 				}
+                this.dispatchEvent(new JplayerEvent(JplayerEvent.DEBUG_MSG, myStatus, "play: End"));
 				return true;
 			} else {
+                this.dispatchEvent(new JplayerEvent(JplayerEvent.DEBUG_MSG, myStatus, "play: End"));
 				return false;
 			}
 		}

 		public function seekToPausePositionAndPlay():void {
+            this.dispatchEvent(new JplayerEvent(JplayerEvent.DEBUG_MSG, myStatus, "seekToPausePositionAndPlay: Start"));
 			setTemporaryVolume(0);
 			myStatus.playAfterFlashIsSeeking = true; // Note that once flash is done seeking, we should resume/play the stream.
 			myStream.seek(myStatus.pausePosition/1000); // Seek to the pause position.
+            this.dispatchEvent(new JplayerEvent(JplayerEvent.DEBUG_MSG, myStatus, "seekToPausePositionAndPlay: End"));
 		}

 		public function pause(time:Number = NaN):Boolean {
+            this.dispatchEvent(new JplayerEvent(JplayerEvent.DEBUG_MSG, myStatus, "pause: Start - time = " + time));
 			myStatus.playOnLoad = false; // Reset flag in case load/play issued immediately before this command, ie., before onMetadata() event.
 			myStatus.playOnSeek = false; // Reset flag in case play(time) issued before the command and is still seeking to time set.

@@ -353,11 +396,14 @@
 			}

 			if(myStatus.isStartingDownload) {
+                this.dispatchEvent(new JplayerEvent(JplayerEvent.DEBUG_MSG, myStatus, "pause: End"));
 				return true;
 			} else if(myStatus.loadRequired()) {
 				if(time > 0) { // We do not want the stop() command, which does pause(0), causing a load operation.
+                    this.dispatchEvent(new JplayerEvent(JplayerEvent.DEBUG_MSG, myStatus, "pause: End"));
 					return load();
 				} else {
+                    this.dispatchEvent(new JplayerEvent(JplayerEvent.DEBUG_MSG, myStatus, "pause: End"));
 					return true; // Technically the pause(0) succeeded. ie., It did nothing, since nothing was required.
 				}
 			} else if(myStatus.isLoading || myStatus.isLoaded) {
@@ -380,16 +426,21 @@
 				if(wasPlaying || !isNaN(time) && !alreadyPausedAtTime) {
 					timeUpdateEvent();
 				}
+                this.dispatchEvent(new JplayerEvent(JplayerEvent.DEBUG_MSG, myStatus, "pause: End"));
 				return true;
 			} else {
+                this.dispatchEvent(new JplayerEvent(JplayerEvent.DEBUG_MSG, myStatus, "pause: End"));
 				return false;
 			}
 		}
 		public function playHead(percent:Number):Boolean {
+            this.dispatchEvent(new JplayerEvent(JplayerEvent.DEBUG_MSG, myStatus, "playHead: Start - percent = " + percent));
 			var time:Number = percent * getDuration() * getLoadRatio() / 100;
 			if(myStatus.isPlaying || myStatus.playOnLoad || myStatus.playOnSeek) {
+                this.dispatchEvent(new JplayerEvent(JplayerEvent.DEBUG_MSG, myStatus, "playHead: End"));
 				return play(time);
 			} else {
+                this.dispatchEvent(new JplayerEvent(JplayerEvent.DEBUG_MSG, myStatus, "playHead: End"));
 				return pause(time);
 			}
 		}
@@ -456,10 +507,9 @@
 			}
 		}
 		public function onMetaDataHandler(info:Object):void { // Used in connectStream() in myStream.client object.
+            this.dispatchEvent(new JplayerEvent(JplayerEvent.DEBUG_MSG, myStatus, "onMetaDataHandler: Start - " + info.duration + " | " + info.width + "x" + info.height));
 			// This event occurs when jumping to the start of static files! ie., seek(0) will cause this event to occur.
 			if(!myStatus.metaDataReady) {
-				this.dispatchEvent(new JplayerEvent(JplayerEvent.DEBUG_MSG, myStatus, "onMetaDataHandler: " + info.duration + " | " + info.width + "x" + info.height));
-
 				myStatus.metaDataReady = true; // Set flag so that this event only effects jPlayer the 1st time.
 				myStatus.metaData = info;
 				myStatus.duration = info.duration * 1000; // Only available via Meta Data.
@@ -488,6 +538,7 @@
 			} else {
 				this.dispatchEvent(new JplayerEvent(JplayerEvent.DEBUG_MSG, myStatus, "onMetaDataHandler: Already read (NO EFFECT)"));
 			}
+            this.dispatchEvent(new JplayerEvent(JplayerEvent.DEBUG_MSG, myStatus, "onMetaDataHandler: End"));
 		}
 	}
 }


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

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

 package mx.skins.halo
 {


Transferred from the Adobe Open Source Subversion Repository

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

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

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

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

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


Transferred from the Adobe Open Source Subversion Repository

Revision: 17514
Author:   cframpto@adobe.com
Date:     2010-08-30T18:37:11.204380Z

Log Message:
-----------
Should have gone with 17513.

Moved the typicalText getter and setter from TextInput/TextArea to SkinnableTextBase.  The reason widthInChars is in both classes is so the asdoc could be different – TextInput has widthInChars set to 10 in the skin which is not the default.  Fixed a comment, alphabetized the new TYPICAL_TEXT_PROPERTY_FLAG and remove an unused property.

QE notes:
Doc notes:
Bugs: tweak SDK-26180
Reviewer: Alex
Tests run: cyclone - checkin, mustella
Is noteworthy for integration:

Modified Paths:
--------------
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/spark/src/spark/components/TextInput.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/spark/src/spark/components/TextArea.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/spark/src/spark/components/supportClasses/SkinnableTextBase.as</path>

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

--- frameworks/projects/spark/src/spark/components/TextInput.as
+++ frameworks/projects/spark/src/spark/components/TextInput.as
@@ -277,33 +277,6 @@
     //
     //--------------------------------------------------------------------------

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


Transferred from the Adobe Open Source Subversion Repository

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

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

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

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

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

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

--- frameworks/projects/spark/src/spark/components/TextInput.as
+++ frameworks/projects/spark/src/spark/components/TextInput.as
@@ -9,16 +9,16 @@
 //
 ////////////////////////////////////////////////////////////////////////////////

-package mx.components
+package spark.components
 {

 import flash.events.Event;
 import flash.events.FocusEvent;

-import mx.components.TextView;
-import mx.components.baseClasses.FxTextBase;
-import mx.components.baseClasses.FxComponent;
-import mx.events.TextOperationEvent;
+import spark.components.RichEditableText;
+import spark.components.supportClasses.TextBase;
+import spark.components.supportClasses.SkinnableComponent;
+import spark.events.TextOperationEvent;

 import flashx.textLayout.formats.LineBreak;

@@ -44,7 +44,7 @@

 [DefaultProperty("text")]

-[IconFile("FxTextInput.png")]
+[IconFile("TextInput.png")]

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

@@ -94,7 +94,7 @@
      *  @playerversion AIR 1.5
      *  @productversion Flex 4
      */
-    public function FxTextInput()
+    public function TextInput()
     {
         super();
     }
@@ -120,7 +120,7 @@
     private var widthInCharsChanged:Boolean = false;

     /**
-     *  The default width for the FxTextInput, measured in characters.
+     *  The default width for the TextInput, measured in characters.
      *  The width of the "0" character is used for the calculation,
      *  since in most fonts the digits all have the same width.
      *  So if you set this property to 5, it will be wide enough
@@ -160,7 +160,7 @@

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

         if (instance == textView)
         {
-            // Set the TextView to allow only one line of input.
-            // In default.css, the FxTextInput selector has a declaration
+            // Set the RichEditableText to allow only one line of input.
+            // In default.css, the TextInput selector has a declaration
             // for lineBreak which sets it to "explicit".  It needs to be on
-            // FxTextInput rather than TextView so that if changed later it
+            // TextInput rather than RichEditableText so that if changed later it
             // will be inherited.  It needs to be set with the default
-            // before the possibility that it is changed when FxTextInput is
+            // before the possibility that it is changed when TextInput is
             // created.  In this case, setting it here, would overwrite
             // that change.
             textView.heightInLines = 1;


Transferred from the Adobe Open Source Subversion Repository

Revision: 6599
Author:   gosmith@adobe.com
Date:     2009-05-04T20:27:40.909741Z

Log Message:
-----------
RichEditableText and RichEditableText2 are now in the spark.primitives package rather than in spark.components, and RichEditableTextContainerManager is now in spark.primitives.supportClasses rather than in spark.components.supportClasses. This change means that SimpleText, RichText, and RichEditableText are now all together in spark.primitives. They are "primitives" because they aren't skinnable components, even though some extend GraphicElement and some extend UIComponent.

QE Notes: None
Doc Notes: None
Bugs: None
Reviewer: Carol

Modified Paths:
--------------
<path kind="file" action="D">/flex/sdk/trunk/frameworks/projects/flex4/src/spark/components/RichEditableText.png</path>
<path kind="file" action="D">/flex/sdk/trunk/frameworks/projects/flex4/src/spark/components/RichEditableText2.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/spark/components/supportClasses/TextBase.as</path>
<path kind="file" copyfrom-path="/flex/sdk/trunk/frameworks/projects/flex4/src/spark/components/RichEditableText.as" copyfrom-rev="6590" action="A">/flex/sdk/trunk/frameworks/projects/flex4/src/spark/primitives/RichEditableText.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/spark-manifest.xml</path>
<path kind="file" copyfrom-path="/flex/sdk/trunk/frameworks/projects/flex4/src/spark/components/RichEditableText.png" copyfrom-rev="6589" action="A">/flex/sdk/trunk/frameworks/projects/flex4/src/spark/primitives/RichEditableText.png</path>
<path kind="file" action="D">/flex/sdk/trunk/frameworks/projects/flex4/src/spark/components/supportClasses/RichEditableTextContainerManager.as</path>
<path kind="file" copyfrom-path="/flex/sdk/trunk/frameworks/projects/flex4/src/spark/components/RichEditableText2.as" copyfrom-rev="6589" action="A">/flex/sdk/trunk/frameworks/projects/flex4/src/spark/primitives/RichEditableText2.as</path>
<path kind="file" copyfrom-path="/flex/sdk/trunk/frameworks/projects/flex4/src/spark/components/supportClasses/RichEditableTextContainerManager.as" copyfrom-rev="6589" action="A">/flex/sdk/trunk/frameworks/projects/flex4/src/spark/primitives/supportClasses/RichEditableTextContainerManager.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/spark/components/TextInput.as</path>
<path kind="file" action="D">/flex/sdk/trunk/frameworks/projects/flex4/src/spark/components/RichEditableText.as</path>

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

--- frameworks/projects/spark/src/spark/components/TextInput.as
+++ frameworks/projects/spark/src/spark/components/TextInput.as
@@ -15,7 +15,6 @@
 import flash.events.Event;
 import flash.events.FocusEvent;

-import spark.components.RichEditableText;
 import spark.components.supportClasses.TextBase;
 import spark.components.supportClasses.SkinnableComponent;
 import spark.events.TextOperationEvent;


minor typing improvement

minor typing improvement

--- WeaveASJS/src/Weave.as
+++ WeaveASJS/src/Weave.as
@@ -81,7 +81,7 @@
 		 * @return A WeavePath object.
 		 * @see WeavePath
 		 */
-		public function path(...basePath/*/(string|number|(string|number)[])[]/*/):WeavePath
+		public function path(...basePath/*/[(string|number)[]]|(string|number)[]/*/):WeavePath
 		{
 			if (basePath.length == 1 && basePath[0] is Array)
 				basePath = basePath[0];
@@ -96,7 +96,7 @@
 		 * @param path An Array (or multiple parameters) specifying the path to an object in the session state.
 		 *             A child index number may be used in place of a name in the path when its parent object is a LinkableHashMap.
 		 */
-		public function getObject(...path/*/(string|number|(string|number)[])[]/*/):ILinkableObject
+		public function getObject(...path/*/[(string|number)[]]|(string|number)[]/*/):ILinkableObject
 		{
 			if (path.length == 1)
 			{


adding check to make sure view contains a buttonView child

git-svn-id: 02605e11d3a461bc7e12f3f3880edf4b0c8dcfd0@3965 3e7533ad-8678-4d30-8e38-00a379d3f0d0

--- src/laml/display/Button.as
+++ src/laml/display/Button.as
@@ -158,7 +158,9 @@
 		public function set buttonView(simpleButton:SimpleButton):void {
 			if(_buttonView) {
 				removeButtonViewEventListeners(_buttonView);
-				view.removeChild(_buttonView);
+				if(view.contains(_buttonView)) {
+					view.removeChild(_buttonView);
+				}
 			}
 			_buttonView = view.addChild(simpleButton) as SimpleButton;
 			_buttonView.useHandCursor = true;
@@ -193,6 +195,7 @@
 		}

 		protected function mouseEventHandler(mouseEvent:MouseEvent):void {
+			trace(">> mouseEventHandler :: " + mouseEvent.type);
 			dispatchEvent(mouseEvent);
 		}
 	}


Fixed the Parser so that it no longer explodes on null / non-string attribute values

git-svn-id: 02605e11d3a461bc7e12f3f3880edf4b0c8dcfd0@4517 3e7533ad-8678-4d30-8e38-00a379d3f0d0

--- src/laml/xml/LAMLParser.as
+++ src/laml/xml/LAMLParser.as
@@ -170,13 +170,13 @@
 			else if(value == "false") {
 				return false;
 			}
-			else if(value.indexOf('#') == 0) {
+			else if(value && value.indexOf('#') == 0) {
 				return parseHexString(value);
 			}
 			else if(!isNaN(value)) {
 				return Number(value);
 			}
-			else if(value.indexOf("{") == 0) {
+			else if(value && value.indexOf("{") == 0) {
 				//instance.pendingAttributes[name] = value;
 			}
 			else {


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

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

 package spark.skins.mobile.supportClasses
 {


Added a moveXBy method to Effects as well as added some padding to the mask used for effects

--- src/org/openPyro/effects/Effect.as
+++ src/org/openPyro/effects/Effect.as
@@ -117,6 +117,12 @@

 		public function moveY(value:Number, duration:Number=1):Effect{
 			_effectQueue.push(new EffectDescriptor(this._target, duration, {y:value}));
+			invalidateEffectQueue();
+			return this;
+		}
+
+		public function moveXBy(value:Number, duration:Number=1):Effect{
+			_effectQueue.push(new EffectDescriptor(this._target, duration, {x:_target.x+value}));
 			invalidateEffectQueue();
 			return this;
 		}
@@ -221,7 +227,7 @@
 		private function createEffectMask():Shape{
 			var mask:Shape = new Shape();
 			mask.graphics.beginFill(0xff0000);
-			mask.graphics.drawRect(0,0,_target.width, _target.height);
+			mask.graphics.drawRect(-5,-5,_target.width+10, _target.height+10);
 			mask.graphics.endFill();

 			if(_target.parent is MeasurableControl){