You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@royale.apache.org by yi...@apache.org on 2020/09/25 16:32:59 UTC

[royale-asjs] 02/11: Adding some mx stubs

This is an automated email from the ASF dual-hosted git repository.

yishayw pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/royale-asjs.git

commit 2e7283264d8e04c619410a06320b62e249112d49
Author: Yishay Weiss <yi...@yell.com>
AuthorDate: Fri Sep 25 07:40:48 2020 +0100

    Adding some mx stubs
---
 .../mx/collections/errors/ItemPendingError.as      | 133 ++++
 .../mx/controls/scrollClasses/ScrollThumb.as       | 230 +++++++
 .../MXRoyale/src/main/royale/mx/effects/IEffect.as | 692 +++++++++++++++++++++
 .../MXRoyale/src/main/royale/mx/events/RSLEvent.as | 363 +++++++++++
 .../mx/skins/halo/DataGridHeaderSeparator.as       | 116 ++++
 5 files changed, 1534 insertions(+)

diff --git a/frameworks/projects/MXRoyale/src/main/royale/mx/collections/errors/ItemPendingError.as b/frameworks/projects/MXRoyale/src/main/royale/mx/collections/errors/ItemPendingError.as
new file mode 100644
index 0000000..615bdb7
--- /dev/null
+++ b/frameworks/projects/MXRoyale/src/main/royale/mx/collections/errors/ItemPendingError.as
@@ -0,0 +1,133 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  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
+//
+//      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.
+//
+////////////////////////////////////////////////////////////////////////////////
+
+package mx.collections.errors
+{
+
+import mx.rpc.IResponder;
+
+/**
+ *  This error is thrown when retrieving an item from a collection view
+ *  requires an asynchronous call. This error occurs when the backing data 
+ *  is provided from a remote source and the data is not yet available locally.
+ * 
+ *  <p>If the receiver of this error needs notification when the requested item
+ *  becomes available (that is, when the asynchronous call completes), it must
+ *  use the <code>addResponder()</code> method and specify  
+ *  an object that  supports the <code>mx.rpc.IResponder</code>
+ *  interface to respond when the item is available.
+ *  The <code>mx.collections.ItemResponder</code> class implements the 
+ *  IResponder interface and supports a <code>data</code> property.</p>
+ *
+ *  @see mx.collections.ItemResponder
+ *  @see mx.rpc.IResponder
+ *  
+ *  @langversion 3.0
+ *  @playerversion Flash 9
+ *  @playerversion AIR 1.1
+ *  @productversion Flex 3
+ */
+public class ItemPendingError extends Error
+{
+    include "../../core/Version.as";
+
+	//--------------------------------------------------------------------------
+	//
+	//  Constructor
+	//
+	//--------------------------------------------------------------------------
+
+    /**
+	 *  Constructor.
+	 *
+	 *  <p>Called by the Flex Framework when a request is made 
+	 *  for an item that isn't local.</p>
+	 *
+	 *  @param message A message providing information about the error cause.
+     *  
+     *  @langversion 3.0
+     *  @playerversion Flash 9
+     *  @playerversion AIR 1.1
+     *  @productversion Flex 3
+     */
+    public function ItemPendingError(message:String)
+    {
+        super(message);
+    }
+
+	//--------------------------------------------------------------------------
+	//
+	//  Properties
+	//
+	//--------------------------------------------------------------------------
+
+	//----------------------------------
+	// responder
+	//----------------------------------
+
+    /**
+	 *  @private
+	 */
+	private var _responders:Array;
+
+    /**
+     *  An array of IResponder handlers that will be called when
+     *  the asynchronous request completes.
+	 *  
+	 *  @langversion 3.0
+	 *  @playerversion Flash 9
+	 *  @playerversion AIR 1.1
+	 *  @productversion Flex 3
+	 */
+	public function get responders():Array
+	{
+		return _responders;
+	}
+
+	//--------------------------------------------------------------------------
+	//
+	//  Methods
+	//
+	//--------------------------------------------------------------------------
+
+	/**
+	 *  <code>addResponder</code> adds a responder to an Array of responders. 
+     *  The object assigned to the responder parameter must implement the 
+     *  mx.rpc.IResponder interface.
+	 *
+	 *  @param responder A handler which will be called when the asynchronous request completes.
+	 * 
+	 *  @see	mx.rpc.IResponder
+	 *  @see	mx.collections.ItemResponder
+     *  
+     *  @langversion 3.0
+     *  @playerversion Flash 9
+     *  @playerversion AIR 1.1
+     *  @productversion Flex 3
+     */
+	public function addResponder(responder:IResponder):void
+	{
+		if (!_responders)
+			_responders = [];
+
+		_responders.push(responder);
+	}
+}
+
+}
diff --git a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/scrollClasses/ScrollThumb.as b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/scrollClasses/ScrollThumb.as
new file mode 100644
index 0000000..ea1e28b
--- /dev/null
+++ b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/scrollClasses/ScrollThumb.as
@@ -0,0 +1,230 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  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
+//
+//      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.
+//
+////////////////////////////////////////////////////////////////////////////////
+
+package mx.controls.scrollClasses
+{
+
+import flash.events.MouseEvent;
+import flash.geom.Point;
+import mx.controls.Button;
+import mx.core.mx_internal;
+import mx.events.ScrollEventDetail;
+import mx.managers.ISystemManager;
+
+use namespace mx_internal;
+
+/**
+ *  The ScrollThumb class defines the thumb of a ScrollBar control. 
+ *
+ *  @see mx.controls.scrollClasses.ScrollBar
+ *  @see mx.controls.HScrollBar
+ *  @see mx.controls.VScrollBar
+ *  
+ *  @langversion 3.0
+ *  @playerversion Flash 9
+ *  @playerversion AIR 1.1
+ *  @productversion Flex 3
+ */
+public class ScrollThumb extends Button
+{
+	include "../../core/Version.as";
+
+	//--------------------------------------------------------------------------
+	//
+	//  Constructor
+	//
+	//--------------------------------------------------------------------------
+
+	/**
+	 *  Constructor.
+	 *  
+	 *  @langversion 3.0
+	 *  @playerversion Flash 9
+	 *  @playerversion AIR 1.1
+	 *  @productversion Flex 3
+	 */
+	public function ScrollThumb()
+	{
+		super();
+				
+		explicitMinHeight = 10;
+
+		stickyHighlighting = true;
+	}
+	
+	//--------------------------------------------------------------------------
+	//
+	//  Variables
+	//
+	//--------------------------------------------------------------------------
+
+	/**
+	 *  @private
+	 */
+	private var ymin:Number;
+
+	/**
+	 *  @private
+	 */
+	private var ymax:Number;
+
+	/**
+	 *  @private
+	 */
+	private var datamin:Number;
+
+	/**
+	 *  @private
+	 */
+	private var datamax:Number;
+	
+	/**
+	 *  @private
+	 *  Last position of the thumb.
+	 */
+	private var lastY:Number;
+	
+	//--------------------------------------------------------------------------
+	//
+	//  Overridden methods: Button
+	//
+	//--------------------------------------------------------------------------
+
+	/**
+	 *  @private
+	 */
+	override mx_internal function buttonReleased():void
+	{
+		super.buttonReleased();
+
+		stopDragThumb();
+	}
+	
+	//--------------------------------------------------------------------------
+	//
+	//  Methods
+	//
+	//--------------------------------------------------------------------------
+
+	/**
+	 *  @private
+	 *  Set the range of motion for the thumb:
+	 *  how far it can move and what data values that covers.
+	 */
+	mx_internal function setRange(ymin:Number, ymax:Number,
+								  datamin:Number, datamax:Number):void
+	{
+		this.ymin = ymin;
+		this.ymax = ymax;
+		
+		this.datamin = datamin;
+		this.datamax = datamax;
+	}
+
+	/**
+	 *  @private
+	 *  Stop dragging the thumb around.
+	 */
+	private function stopDragThumb():void
+	{
+		var scrollBar:ScrollBar = ScrollBar(parent);
+		
+		scrollBar.isScrolling = false;
+		
+		scrollBar.dispatchScrollEvent(scrollBar.oldPosition, 
+                                      ScrollEventDetail.THUMB_POSITION);
+        
+		scrollBar.oldPosition = NaN;
+		
+		systemManager.getSandboxRoot().removeEventListener(
+			MouseEvent.MOUSE_MOVE, mouseMoveHandler, true);
+
+	}
+	
+	//--------------------------------------------------------------------------
+	//
+	//  Overridden event handlers: Button
+	//
+	//--------------------------------------------------------------------------
+
+	/**
+	 *  @private
+	 *  User pressed on the thumb, so start tracking in case they drag it.
+	 */
+ 	override protected function mouseDownHandler(event:MouseEvent):void
+	{
+		super.mouseDownHandler(event);
+
+		var scrollBar:ScrollBar = ScrollBar(parent);
+        scrollBar.oldPosition = scrollBar.scrollPosition;
+		
+		lastY = event.localY;
+		
+		systemManager.getSandboxRoot().addEventListener(
+			MouseEvent.MOUSE_MOVE, mouseMoveHandler, true);
+
+	}
+
+	//--------------------------------------------------------------------------
+	//
+	//  Event handlers
+	//
+	//--------------------------------------------------------------------------
+
+	/**
+	 *  @private
+	 *  Drag the thumb around and update the scroll bar accordingly.
+	 */
+	private function mouseMoveHandler(event:MouseEvent):void
+	{
+		if (ymin == ymax)
+			return;
+
+		var pt:Point = new Point(event.stageX, event.stageY);
+		pt = globalToLocal(pt);
+		
+		var scrollMove:Number = pt.y - lastY;
+		scrollMove += y;
+		
+		if (scrollMove < ymin)
+			scrollMove = ymin;
+		else if (scrollMove > ymax)
+			scrollMove = ymax;
+
+		var scrollBar:ScrollBar = ScrollBar(parent);
+		
+		scrollBar.isScrolling = true;
+		
+		$y = scrollMove;
+
+		// In an ideal world, this would probably dispatch an event,
+		// however this object is rather hardwired into a scroll bar
+		// so we'll just have it tell the scroll bar to change its position.
+        var oldPosition:Number = scrollBar.scrollPosition;
+		var pos:Number = Math.round(
+			(datamax - datamin) * (y - ymin) / (ymax - ymin)) + datamin;
+		scrollBar.scrollPosition = pos;
+		scrollBar.dispatchScrollEvent(oldPosition,
+									  ScrollEventDetail.THUMB_TRACK);
+		event.updateAfterEvent();									  
+	}
+
+}
+
+}
diff --git a/frameworks/projects/MXRoyale/src/main/royale/mx/effects/IEffect.as b/frameworks/projects/MXRoyale/src/main/royale/mx/effects/IEffect.as
new file mode 100644
index 0000000..0fd3bdf
--- /dev/null
+++ b/frameworks/projects/MXRoyale/src/main/royale/mx/effects/IEffect.as
@@ -0,0 +1,692 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  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
+//
+//      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.
+//
+////////////////////////////////////////////////////////////////////////////////
+
+package mx.effects
+{
+
+import flash.events.Event;
+import flash.events.IEventDispatcher;
+
+/**
+ *  The IEffect interface defines the base 
+ *  interface of all Flex effects.
+ *  The IEffectInstance interface defines the base interface for all effect
+ *  instance subclasses.
+ *
+ *  @see mx.effects.IEffectInstance
+ *  
+ *  @langversion 3.0
+ *  @playerversion Flash 9
+ *  @playerversion AIR 1.1
+ *  @productversion Flex 3
+ */
+public interface IEffect extends IAbstractEffect
+{
+    //--------------------------------------------------------------------------
+    //
+    //  Properties
+    //
+    //--------------------------------------------------------------------------
+    
+    //----------------------------------
+    //  className
+    //----------------------------------
+
+    /**
+     *  The name of the effect class, such as <code>"Fade"</code>.
+     *
+     *  <p>This is a short, or unqualified, class name
+     *  that does not include the package name.
+     *  If you need the qualified name, use the 
+     *  <code>getQualifiedClassName()</code> method
+     *  in the flash.utils package.</p>
+     *  
+     *  @langversion 3.0
+     *  @playerversion Flash 9
+     *  @playerversion AIR 1.1
+     *  @productversion Flex 3
+     */
+    function get className():String;
+
+    //----------------------------------
+    //  customFilter
+    //----------------------------------
+
+    /**
+     *  Specifies a custom filter object, of type EffectTargetFilter,
+     *  used by the effect to determine the targets
+     *  on which to play the effect. 
+     *  
+     *  <p>Target filtering is only performed if you call the
+     *  <code>captureStartValues()</code> method before playing the effect.
+     *  Flex automatically calls the <code>captureStartValues()</code> method
+     *  when the effect is part of a transition.</p>
+     *  
+     *  <p>Use the <code>filter</code> property for simple filtering.
+     *  If the <code>customFilter</code> property is non-null,
+     *  the <code>filter</code> property is ignored.</p>
+     *
+     *  @default null
+     *
+     *  @see mx.effects.EffectTargetFilter
+     *  
+     *  @langversion 3.0
+     *  @playerversion Flash 9
+     *  @playerversion AIR 1.1
+     *  @productversion Flex 3
+     */
+    function get customFilter():EffectTargetFilter;
+    
+    /**
+     *  @private
+     */
+    function set customFilter(value:EffectTargetFilter):void;
+
+    //----------------------------------
+    //  duration
+    //----------------------------------
+
+    /** 
+     *  Duration of the effect in milliseconds. 
+     *
+     *  <p>In a Parallel or Sequence effect, the <code>duration</code>
+     *  property sets the duration of each effect.
+     *  For example, if a Sequence effect has its <code>duration</code>
+     *  property set to 3000, each effect in the Sequence takes 3000 ms
+     *  to play.</p>
+     *
+     *  <p>For a repeated effect, the <code>duration</code> property
+     *  specifies  the duration of a single instance of the effect. 
+     *  Therefore, if an effect has a <code>duration</code> property
+     *  set to 2000, and a <code>repeatCount</code> property set to 3, 
+     *  the effect takes a total of 6000 ms (6 seconds) to play.</p>
+     *
+     *  @default 500
+     *  
+     *  @langversion 3.0
+     *  @playerversion Flash 9
+     *  @playerversion AIR 1.1
+     *  @productversion Flex 3
+     */
+    function get duration():Number;
+    
+    /**
+     *  @private
+     */
+    function set duration(value:Number):void;
+
+    //----------------------------------
+    //  effectTargetHost
+    //----------------------------------
+
+    /**
+     *  A property that lets you access the target list-based control
+     *  of a data effect. 
+     *  This property enables an instance of an effect class to communicate
+     *  with the list-based control on which the effect is playing. 
+     *  
+     *  @langversion 3.0
+     *  @playerversion Flash 9
+     *  @playerversion AIR 1.1
+     *  @productversion Flex 3
+     */
+    function get effectTargetHost():IEffectTargetHost;
+    
+    /**
+     *  @private
+     */
+    function set effectTargetHost(value:IEffectTargetHost):void;
+
+    //----------------------------------
+    //  filter
+    //----------------------------------
+
+    /**
+     *  Specifies an algorithm for filtering targets for an effect. 
+     *  A value of <code>null</code> specifies no filtering.
+     *  
+     *  <p>Target filtering is only performed if you call the
+     *  <code>captureStartValues()</code> method before playing the effect.
+     *  Flex automatically calls the <code>captureStartValues()</code> method
+     *  when the effect is part of a transition, or part of a data effect
+     *  for a list-based control.</p>
+     *  
+     *  <p>Use this property for simple filtering.
+     *  Use the <code>customFilter</code> property for more complex filtering. 
+     *  If the <code>customFilter</code> property has a non-null value, 
+     *  this property is ignored.</p> 
+     *
+     *  <p>You can use the following values for the <code>filter</code>
+     *  property:</p>
+     *
+     *  <ul>
+     *    <li>A value of <code>"add"</code> plays the effect on any targets 
+     *      that are added as a child to a container.</li>
+     *    <li>A value of <code>"addItem"</code> plays the effect
+     *      on the item renderer for any list items added to a List
+     *      or TileList control.</li>
+     *    <li>A value of <code>"hide"</code> plays the effect on any targets
+     *      whose visible property changed from <code>true</code> to
+     *      <code>false</code>.</li>
+     *    <li>A value of <code>"move"</code> plays the effect on any targets
+     *      that changed their <code>x</code> or <code>y</code>
+     *      properties.</li>
+     *    <li>A value of <code>"remove"</code> plays the effect on any targets
+     *      that are removed as a child of a container.</li>
+     *    <li>A value of <code>"removeItem"</code> plays the effect
+     *      on the item renderer for any list items removed from a List
+     *      or TileList control.</li>
+     *    <li>A value of <code>"replacedItem"</code> plays the effect
+     *      on the item renderer for any list items replaced in a List
+     *      or TileList control by a new item.</li>
+     *    <li>A value of <code>"replacementItem"</code> plays the effect
+     *      on the item renderer for any list items added to a List
+     *      or TileList control that replaces an existing item.</li>
+     *    <li>A value of <code>"resize"</code> plays the effect
+     *      on any targets that changed their <code>width</code>
+     *      or <code>height</code> properties.</li>
+     *    <li>A value of <code>"show"</code> plays the effect
+     *      on any targets whose visible property changed
+     *      from <code>false</code> to <code>true</code>.</li>
+     *    <li>A value of <code>""</code> specifies no filtering.</li>
+     *  </ul>
+     *
+     *  @default null
+     *  
+     *  @langversion 3.0
+     *  @playerversion Flash 9
+     *  @playerversion AIR 1.1
+     *  @productversion Flex 3
+     */
+    function get filter():String;
+    
+    /**
+     *  @private
+     */
+    function set filter(value:String):void;
+
+    //----------------------------------
+    //  hideFocusRing
+    //----------------------------------
+
+    /**
+     *  Determines whether the effect should hide the focus ring
+     *  when starting the effect.
+     *  The effect target is responsible for the hiding the focus ring. 
+     *  Subclasses of the UIComponent class hide the focus ring automatically. 
+     *  If the effect target is not a subclass of the UIComponent class,
+     *  add functionality to it to hide the focus ring.
+     *
+     *  <p>Set this property to <code>true</code>
+     *  to hide the focus ring during the effect.</p>
+     *  
+     *  <p>For subclasses of Effect, the default value is <code>false</code>. 
+     *  For subclasses of MaskEffect, the default value is <code>true</code>.
+     *  </p>
+     *  
+     *  @langversion 3.0
+     *  @playerversion Flash 9
+     *  @playerversion AIR 1.1
+     *  @productversion Flex 3
+     */
+    function get hideFocusRing():Boolean;
+    
+    /**
+     *  @private
+     */
+    function set hideFocusRing(value:Boolean):void;
+
+    //----------------------------------
+    //  isPlaying
+    //----------------------------------
+
+    /**
+     *  A read-only flag which is true if any instances of the effect
+     *  are currently playing, and false if none are.
+     *  
+     *  @langversion 3.0
+     *  @playerversion Flash 9
+     *  @playerversion AIR 1.1
+     *  @productversion Flex 3
+     */
+    function get isPlaying():Boolean;
+
+    //----------------------------------
+    //  perElementOffset
+    //----------------------------------
+
+    /**
+     *  Additional delay, in milliseconds, for effect targets
+     *  after the first target of the effect.
+     *  This value is added to the value
+     *  of the <code>startDelay</code> property.
+     *  
+     *  @langversion 3.0
+     *  @playerversion Flash 9
+     *  @playerversion AIR 1.1
+     *  @productversion Flex 3
+     */ 
+    function get perElementOffset():Number;
+    
+    /**
+     *  @private
+     */
+    function set perElementOffset(value:Number):void;
+
+    //----------------------------------
+    //  relevantProperties
+    //----------------------------------
+
+    /**
+     *  An Array of property names to use when performing filtering. 
+     *  This property is used internally and should not be set by 
+     *  effect users. 
+     *
+     *  <p>The default value is equal to the Array returned by 
+     *  the <code>getAffectedProperties()</code> method.</p>
+     *  
+     *  @langversion 3.0
+     *  @playerversion Flash 9
+     *  @playerversion AIR 1.1
+     *  @productversion Flex 3
+     */
+    function get relevantProperties():Array /* of String */;
+
+    /**
+     *  @private
+     */
+    function set relevantProperties(values:Array /* of String */):void;
+    
+    //----------------------------------
+    //  relevantStyles
+    //----------------------------------
+
+    /**
+     *  An Array of style names to use when performing filtering. 
+     *  This property is used internally and should not be set by 
+     *  effect users. 
+     *
+     *  <p>The default value is equal to the Array returned by 
+     *  the <code>getAffectedProperties()</code> method.</p>
+     *  
+     *  @langversion 3.0
+     *  @playerversion Flash 9
+     *  @playerversion AIR 1.1
+     *  @productversion Flex 3
+     */
+    function get relevantStyles():Array /* of String */;
+    
+    /**
+     *  @private
+     */
+    function set relevantStyles(values:Array /* of String */):void;
+    
+    
+    //----------------------------------
+    //  target
+    //----------------------------------
+
+    /** 
+     *  The object to which this effect is applied.
+     *  When an effect is triggered by an effect trigger, 
+     *  the <code>target</code> property is automatically set to be 
+     *  the object that triggers the effect.
+     *  
+     *  @langversion 3.0
+     *  @playerversion Flash 9
+     *  @playerversion AIR 1.1
+     *  @productversion Flex 3
+     */
+    function get target():Object;
+    
+    /**
+     *  @private
+     */
+    function set target(value:Object):void;
+
+    //----------------------------------
+    //  targets
+    //----------------------------------
+
+    /**
+     *  An Array of objects that are targets for the effect.
+     *  When the effect is playing, it performs the effect on each target
+     *  in parallel. 
+     *  Setting the <code>target</code> property replaces all objects
+     *  in this Array. 
+     *  When the <code>targets</code> property is set, the <code>target</code>
+     *  property returns the first item in this Array. 
+     *  
+     *  @langversion 3.0
+     *  @playerversion Flash 9
+     *  @playerversion AIR 1.1
+     *  @productversion Flex 3
+     */
+    function get targets():Array;
+    
+    /**
+     *  @private
+     */
+    function set targets(value:Array):void;
+
+    //----------------------------------
+    //  triggerEvent
+    //----------------------------------
+
+    /**
+     *  The Event object passed to this Effect 
+     *  by the EffectManager when an effect is triggered,
+     *  or <code>null</code> if the effect is not being
+     *  played by the EffectManager.
+     *  
+     *  @langversion 3.0
+     *  @playerversion Flash 9
+     *  @playerversion AIR 1.1
+     *  @productversion Flex 3
+     */
+    function get triggerEvent():Event;
+    
+    /**
+     *  @private
+     */
+    function set triggerEvent(value:Event):void;
+
+    //----------------------------------
+    //  playheadTime
+    //----------------------------------
+
+    /**
+     *  Current time position of the effect.
+     *  This property has a value between 0 and the total duration, 
+     *  which includes the Effect's <code>startDelay</code>, 
+     *  <code>repeatCount</code>, and <code>repeatDelay</code>.
+     *  
+     *  @langversion 3.0
+     *  @playerversion Flash 9
+     *  @playerversion AIR 1.1
+     *  @productversion Flex 3
+     */
+    function get playheadTime():Number;
+    
+    /**
+     * @private
+     */
+    function set playheadTime(value:Number):void;
+
+    //--------------------------------------------------------------------------
+    //
+    //  Methods
+    //
+    //--------------------------------------------------------------------------
+
+    /**
+     *  Returns an Array of Strings, where each String is the name
+     *  of a property changed by this effect.
+     *  For example, the Move effect returns an Array that contains
+     *  <code>"x"</code> and <code>"y"</code>.
+     *
+     *  <p>Every subclass of Effect must implement this method.
+     *  The EffectManager uses this method 
+     *  to ensure that no two effects are trying to animate
+     *  the same property of the same object at the same time.</p>
+     *
+     *  @return An Array of Strings specifying the names of the 
+     *  properties modified by this effect.
+     *  
+     *  @langversion 3.0
+     *  @playerversion Flash 9
+     *  @playerversion AIR 1.1
+     *  @productversion Flex 3
+     */
+    function getAffectedProperties():Array /* of String */;
+
+    /**
+     *  Takes an Array of target objects and invokes the 
+     *  <code>createInstance()</code> method on each target. 
+     *
+     *  @param targets Array of objects to animate with this effect.
+     *
+     *  @return Array of effect instance objects, one per target,
+     *  for the effect.
+     *  
+     *  @langversion 3.0
+     *  @playerversion Flash 9
+     *  @playerversion AIR 1.1
+     *  @productversion Flex 3
+     */
+    function createInstances(targets:Array = null):Array /* of EffectInstance */;
+
+    /**
+     *  Creates a single effect instance and initializes it.
+     *  Use this method instead of the <code>play()</code> method
+     *  to manipulate the effect instance properties
+     *  before the effect instance plays. 
+     *  
+     *  <p>The effect instance is created with the type 
+     *  specified in the <code>instanceClass</code> property.
+     *  It is then initialized using the <code>initInstance()</code> method. 
+     *  If the instance was created by the EffectManager 
+     *  (when the effect is triggered by an effect trigger), 
+     *  the effect is further initialized by a call to the 
+     *  <code>EffectInstance.initEffect()</code> method.</p>
+     * 
+     *  <p>Calling the <code>createInstance()</code> method 
+     *  does not play the effect.
+     *  Call the <code>startEffect()</code> method
+     *  on the returned effect instance. </p>
+     *
+     *  <p>This function is automatically called by the 
+     *  <code>Effect.play()</code> method. </p>
+     *
+     *  @param target Object to animate with this effect.
+     *
+     *  @return The effect instance object for the effect.
+     *  
+     *  @langversion 3.0
+     *  @playerversion Flash 9
+     *  @playerversion AIR 1.1
+     *  @productversion Flex 3
+     */
+    function createInstance(target:Object = null):IEffectInstance;
+
+    /**
+     *  Removes event listeners from an instance
+     *  and removes it from the list of instances.
+     *
+     *  @param instance The effect instance.
+     *  
+     *  @langversion 3.0
+     *  @playerversion Flash 9
+     *  @playerversion AIR 1.1
+     *  @productversion Flex 3
+     */
+    function deleteInstance(instance:IEffectInstance):void;
+
+    /**
+     *  Begins playing the effect.
+     *  You typically call the <code>end()</code> method 
+     *  before you call the <code>play()</code> method
+     *  to ensure that any previous instance of the effect
+     *  has ended before you start a new one.
+     *
+     *  <p>All subclasses must implement this method.</p>
+     *
+     *  @param targets Array of target objects on which to play this effect.
+     *  If this parameter is specified, then the effect's <code>targets</code>
+     *  property is not used.
+     *
+     *  @param playReversedFromEnd If <code>true</code>,
+     *  play the effect backwards.
+     *
+     *  @return Array of EffectInstance objects, one per target,
+     *  for the effect.
+     *  
+     *  @langversion 3.0
+     *  @playerversion Flash 9
+     *  @playerversion AIR 1.1
+     *  @productversion Flex 3
+     */ 
+    function play(targets:Array = null,
+                  playReversedFromEnd:Boolean = false):
+                  Array /* of EffectInstance */;
+
+    /**
+     *  Pauses the effect until you call the <code>resume()</code> method.
+     *  
+     *  @langversion 3.0
+     *  @playerversion Flash 9
+     *  @playerversion AIR 1.1
+     *  @productversion Flex 3
+     */
+    function pause():void;
+
+    /**
+     *  Stops the effect, leaving the effect targets in their current state.
+     *  Unlike a call to the <code>pause()</code> method, 
+     *  you cannot call the <code>resume()</code> method after calling 
+     *  the <code>stop()</code> method. 
+     *  However, you can call the <code>play()</code> method to restart the effect.
+     *
+     *  <p>The effect instance dispatches an <code>effectEnd</code> event
+     *  when you call this method as part of ending the effect.</p>
+     * 
+     *  <p>For mask effects, the mask is not removed automatically
+     *  when the effect is stopped.
+     *  Running further mask effects on the same target(s)
+     *  without first removing the mask can produce unexpected results.</p>
+     *  
+     *  @langversion 3.0
+     *  @playerversion Flash 9
+     *  @playerversion AIR 1.1
+     *  @productversion Flex 3
+     */
+    function stop():void;
+
+    /**
+     *  Resumes the effect after it has been paused 
+     *  by a call to the <code>pause()</code> method. 
+     *  
+     *  @langversion 3.0
+     *  @playerversion Flash 9
+     *  @playerversion AIR 1.1
+     *  @productversion Flex 3
+     */
+    function resume():void;
+
+    /**
+     *  Plays the effect in reverse, if the effect is currently playing,
+     *  starting from the current position of the effect.
+     *  
+     *  @langversion 3.0
+     *  @playerversion Flash 9
+     *  @playerversion AIR 1.1
+     *  @productversion Flex 3
+     */
+    function reverse():void;
+
+    /**
+     *  Interrupts an effect that is currently playing,
+     *  and jumps immediately to the end of the effect.
+     *  Calling this method invokes the <code>EffectInstance.end()</code>
+     *  method.
+     *
+     *  <p>The effect instance dispatches an <code>effectEnd</code> event
+     *  when you call this method as part of ending the effect.</p>
+     *
+     *  <p>If you pass an effect instance as an argument, 
+     *  just that instance is interrupted.
+     *  If no argument is passed in, all effect instances currently
+     *  spawned from the effect are interrupted.</p>
+     *
+     *  @param effectInstance EffectInstance to terminate.
+     *
+     *  @see mx.effects.EffectInstance#end()
+     *  
+     *  @langversion 3.0
+     *  @playerversion Flash 9
+     *  @playerversion AIR 1.1
+     *  @productversion Flex 3
+     */
+    function end(effectInstance:IEffectInstance = null):void;
+
+    /**
+     *  Captures the current values of the relevant properties
+     *  on the effect's targets. 
+     *  Flex automatically calls the <code>captureStartValues()</code>
+     *  method when the effect is part of a transition.
+     *  
+     *  <p>Use this function when you want the effect to figure out the start 
+     *  and end values of the effect.
+     *  The proper usage of this function is to use it
+     *  in the following steps:</p>
+     *  
+     *  <ol>
+     *    <li>Call the <code>captureStartValues()</code> method. 
+     *      The effect captures the starting effect values.</li>
+     *    <li>Make changes to your effect targets, such as
+     *      adding/removing children, altering properties,
+     *      changing location, or changing dimensions.</li>
+     *    <li>Call the <code>play()</code> method.  
+     *      The effect captures the end values.
+     *      This function populates the
+     *      <code>EffectInstance.propertyChanges</code> property
+     *      for each effect instance created by this effect. 
+     *      Effect developers can use the <code>propertyChanges</code> property 
+     *      to retrieve the start and end values for their effect.</li>
+     *  </ol>
+     *  
+     *  @langversion 3.0
+     *  @playerversion Flash 9
+     *  @playerversion AIR 1.1
+     *  @productversion Flex 3
+     */
+    function captureStartValues():void;
+    
+    /**
+     *  Captures the current values of the relevant properties
+     *  of an additional set of targets
+     * 
+     *  <p>Flex uses this function when a data change
+     *  effect is run.</p>
+     * 
+     *  @param targets Array of targets for which values are captured
+     *  
+     *  @langversion 3.0
+     *  @playerversion Flash 9
+     *  @playerversion AIR 1.1
+     *  @productversion Flex 3
+     */
+    function captureMoreStartValues(targets:Array):void;
+
+    /**
+     *  Captures the current values of the relevant properties
+     *  on the effect's targets and saves them as end values.
+     *  
+     *  <p>Flex automatically calls the <code>captureEndValues()</code> method
+     *  when the effect is part of a data change effect.</p>
+     *  
+     *  @langversion 3.0
+     *  @playerversion Flash 9
+     *  @playerversion AIR 1.1
+     *  @productversion Flex 3
+     */
+    function captureEndValues():void;
+}
+
+}
diff --git a/frameworks/projects/MXRoyale/src/main/royale/mx/events/RSLEvent.as b/frameworks/projects/MXRoyale/src/main/royale/mx/events/RSLEvent.as
new file mode 100644
index 0000000..c34c4c8
--- /dev/null
+++ b/frameworks/projects/MXRoyale/src/main/royale/mx/events/RSLEvent.as
@@ -0,0 +1,363 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  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
+//
+//      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.
+//
+////////////////////////////////////////////////////////////////////////////////
+
+package mx.events
+{
+
+import flash.display.LoaderInfo;
+import flash.events.Event;
+import flash.events.ProgressEvent;
+import flash.net.URLRequest;
+
+/**
+ *  The RSLEvent class represents an event object used by the 
+ *  DownloadProgressBar class when an RSL is being downloaded by the Preloader class. 
+ *
+ *  @see mx.preloaders.DownloadProgressBar
+ *  @see mx.preloaders.Preloader
+ *  
+ *  @langversion 3.0
+ *  @playerversion Flash 9
+ *  @playerversion AIR 1.1
+ *  @productversion Flex 3
+ */
+public class RSLEvent extends ProgressEvent
+{
+    include "../core/Version.as";
+
+	//--------------------------------------------------------------------------
+	//
+	//  Class constants
+	//
+	//--------------------------------------------------------------------------
+
+    /**
+     *  The <code>RSLEvent.RSL_ADD_PRELOADED</code> constant defines the value of the
+     *  <code>type</code> property of the event object for an 
+     *  <code>rslAddPreloaded</code> event. This event is dispatched from an 
+     *  IFlexModuleFactory after a child IFlexModuleFactory preloads an RSL
+     *  into its application domain. 
+     *
+     *  <p>The properties of the event object have the following values:</p>
+     *  <table class="innertable">
+     *     <tr><th>Property</th><th>Value</th></tr>
+     *     <tr><td><code>bubbles</code></td><td>false</td></tr>
+     *     <tr><td><code>cancelable</code></td><td>false</td></tr>
+     *     <tr><td><code>currentTarget</code></td><td>The Object that defines the
+     *       event listener that handles the event. For example, if you use
+     *       <code>myButton.addEventListener()</code> to register an event listener,
+     *       myButton is the value of the <code>currentTarget</code>. </td></tr>
+     *     <tr><td><code>loaderInfo</code></td><td>The LoaderInfo instance 
+     *     associated with this RSL.</td></tr>
+     *     <tr><td><code>target</code></td><td>The Object that dispatched the event;
+     *       it is not always the Object listening for the event.
+     *       Use the <code>currentTarget</code> property to always access the
+     *       Object listening for the event.</td></tr>
+     *  </table>
+     *
+     *  @eventType rslAddPreloaded
+     *  
+     *  @langversion 3.0
+     *  @playerversion Flash 10
+     *  @playerversion AIR 1.5
+     *  @productversion Flex 4.5
+     */
+    public static const RSL_ADD_PRELOADED:String = "rslAddPreloaded";
+    
+	/**
+	 *  Dispatched when the RSL has finished downloading. 	
+	 *  The <code>RSLEvent.RSL_COMPLETE</code> constant defines the value of the 
+	 *  <code>type</code> property of the event object for a <code>rslComplete</code> event.
+     *
+	 *  <p>The properties of the event object have the following values:</p>
+	 *  <table class="innertable">
+	 *     <tr><th>Property</th><th>Value</th></tr>
+     *     <tr><td><code>bubbles</code></td><td>false</td></tr>
+     *     <tr><td><code>bytesLoaded</code></td><td>The number of bytes loaded.</td></tr>
+     *     <tr><td><code>bytesTotal</code></td><td>The total number of bytes to load.</td></tr>
+     *     <tr><td><code>cancelable</code></td><td>false</td></tr>
+     *     <tr><td><code>currentTarget</code></td><td>The Object that defines the 
+     *       event listener that handles the event. For example, if you use 
+     *       <code>myButton.addEventListener()</code> to register an event listener, 
+     *       myButton is the value of the <code>currentTarget</code>. </td></tr>
+     *     <tr><td><code>errorText</code></td><td>Empty</td></tr>
+     *     <tr><td><code>isResourceModule</code></td><td>True if we loaded a resourceModule
+	 *        instead of an RSL</td></tr>
+     *     <tr><td><code>rslIndex</code></td><td>The index number of the RSL 
+     *       currently being downloaded. </td></tr>
+     *     <tr><td><code>rslTotal</code></td><td>The total number of RSLs 
+     *       being downloaded. </td></tr>
+     *     <tr><td><code>target</code></td><td>The Object that dispatched the event; 
+     *       it is not always the Object listening for the event. 
+     *       Use the <code>currentTarget</code> property to always access the 
+     *       Object listening for the event.</td></tr>
+     *     <tr><td><code>url</code></td><td>The URLRequest object that represents 
+     *       the location of the RSL being downloaded.</td></tr>
+	 *  </table>
+	 *
+     *  @eventType rslComplete
+	 *  
+	 *  @langversion 3.0
+	 *  @playerversion Flash 9
+	 *  @playerversion AIR 1.1
+	 *  @productversion Flex 3
+	 */
+	public static const RSL_COMPLETE:String = "rslComplete";
+	
+	/**
+	 *  Dispatched when there is an error downloading the RSL.
+	 *  The <code>RSLEvent.RSL_ERROR</code> constant defines the value of the 
+	 *  <code>type</code> property of the event object for a <code>rslError</code> event.
+     *
+	 *  <p>The properties of the event object have the following values:</p>
+	 *  <table class="innertable">
+	 *     <tr><th>Property</th><th>Value</th></tr>
+     *     <tr><td><code>bubbles</code></td><td>false</td></tr>
+     *     <tr><td><code>bytesLoaded</code></td><td>Empty</td></tr>
+     *     <tr><td><code>bytesTotal</code></td><td>Empty</td></tr>
+     *     <tr><td><code>cancelable</code></td><td>false</td></tr>
+     *     <tr><td><code>currentTarget</code></td><td>The Object that defines the 
+     *       event listener that handles the event. For example, if you use 
+     *       <code>myButton.addEventListener()</code> to register an event listener, 
+     *       myButton is the value of the <code>currentTarget</code>. </td></tr>
+     *     <tr><td><code>errorText</code></td>An error message.<td></td></tr>
+     *     <tr><td><code>isResourceModule</code></td><td>True if we loaded a resourceModule
+	 *        instead of an RSL</td></tr>
+     *     <tr><td><code>rslIndex</code></td><td>The index number of the RSL 
+     *       currently being downloaded. </td></tr>
+     *     <tr><td><code>rslTotal</code></td><td>The total number of RSLs 
+     *       being downloaded. </td></tr>
+     *     <tr><td><code>target</code></td><td>The Object that dispatched the event; 
+     *       it is not always the Object listening for the event. 
+     *       Use the <code>currentTarget</code> property to always access the 
+     *       Object listening for the event.</td></tr>
+     *     <tr><td><code>url</code></td><td>The URLRequest object that represents 
+     *       the location of the RSL being downloaded.</td></tr>
+	 *  </table>
+	 *
+     *  @eventType rslError
+	 *  
+	 *  @langversion 3.0
+	 *  @playerversion Flash 9
+	 *  @playerversion AIR 1.1
+	 *  @productversion Flex 3
+	 */
+	public static const RSL_ERROR:String = "rslError";
+
+	/**
+	 *  Dispatched when the RSL is downloading.
+	 *  The <code>RSLEvent.RSL_PROGRESS</code> constant defines the value of the 
+	 *  <code>type</code> property of the event object for a <code>rslProgress</code> event.
+     *
+	 *  <p>The properties of the event object have the following values:</p>
+	 *  <table class="innertable">
+	 *     <tr><th>Property</th><th>Value</th></tr>
+     *     <tr><td><code>bubbles</code></td><td>false</td></tr>
+     *     <tr><td><code>bytesLoaded</code></td><td>The number of bytes loaded.</td></tr>
+     *     <tr><td><code>bytesTotal</code></td><td>The total number of bytes to load.</td></tr>
+     *     <tr><td><code>cancelable</code></td><td>false</td></tr>
+     *     <tr><td><code>currentTarget</code></td><td>The Object that defines the 
+     *       event listener that handles the event. For example, if you use 
+     *       <code>myButton.addEventListener()</code> to register an event listener, 
+     *       myButton is the value of the <code>currentTarget</code>. </td></tr>
+     *     <tr><td><code>errorText</code></td>Empty<td></td></tr>
+     *     <tr><td><code>isResourceModule</code></td><td>True if we loaded a resourceModule
+	 *        instead of an RSL</td></tr>
+     *     <tr><td><code>rslIndex</code></td><td>The index number of the RSL 
+     *       currently being downloaded. </td></tr>
+     *     <tr><td><code>rslTotal</code></td><td>The total number of RSLs 
+     *       being downloaded. </td></tr>
+     *     <tr><td><code>target</code></td><td>The Object that dispatched the event; 
+     *       it is not always the Object listening for the event. 
+     *       Use the <code>currentTarget</code> property to always access the 
+     *       Object listening for the event.</td></tr>
+     *     <tr><td><code>url</code></td><td>The URLRequest object that represents 
+     *       the location of the RSL being downloaded.</td></tr>
+	 *  </table>
+	 *
+     *  @eventType rslProgress
+	 *  
+	 *  @langversion 3.0
+	 *  @playerversion Flash 9
+	 *  @playerversion AIR 1.1
+	 *  @productversion Flex 3
+	 */
+	public static const RSL_PROGRESS:String = "rslProgress"; 
+	
+	//--------------------------------------------------------------------------
+	//
+	//  Constructor
+	//
+	//--------------------------------------------------------------------------
+
+	/**
+	 *  Constructor.
+	 * 
+	 *  @param type The type of the event. Possible values are:
+	 *  <ul>
+	 *     <li>"rslProgress" (<code>RSLEvent.RSL_PROGRESS</code>);</li>
+	 *     <li>"rslComplete" (<code>RSLEvent.RSL_COMPLETE</code>);</li>
+	 *     <li>"rslError" (<code>RSLEvent.RSL_ERROR</code>);</li>
+	 *  </ul>
+	 *
+	 *  @param bubbles  Determines whether the Event object participates in the bubbling stage of the event flow.
+	 *
+	 *  @param cancelable Determines whether the Event object can be cancelled.
+	 *
+	 *  @param bytesLoaded The number of bytes loaded at the time the listener processes the event.
+	 *
+	 *  @param bytesTotal The total number of bytes that will ultimately be loaded if the loading process succeeds.
+	 *
+	 *  @param rslIndex The index number of the RSL relative to the total. This should be a value between 0 and <code>total - 1</code>.
+	 *
+	 *  @param rslTotal The total number of RSLs being loaded.
+	 *
+	 *  @param url The location of the RSL.
+	 *
+	 *  @param errorText The error message of the error when type is RSLEvent.RSL_ERROR.
+	 *
+	 *  @param isResourceModule True if the event occurred when loading a ResourceModule.
+	 *
+	 *  @tiptext Constructor for <code>RSLEvent</code> objects.
+	 *  
+	 *  @langversion 3.0
+	 *  @playerversion Flash 9
+	 *  @playerversion AIR 1.1
+	 *  @productversion Flex 3
+	 */	
+	public function RSLEvent(type:String,  bubbles:Boolean = false,
+							 cancelable:Boolean = false,
+							 bytesLoaded:int = -1, bytesTotal:int = -1,
+							 rslIndex:int = -1, rslTotal:int = -1,
+							 url:URLRequest = null, errorText:String = null,
+							 isResourceModule:Boolean = false,
+                             loaderInfo:LoaderInfo = null)
+	{
+		super(type, bubbles, cancelable, bytesLoaded, bytesTotal);
+		
+		this.rslIndex = rslIndex;
+		this.rslTotal = rslTotal;
+		this.url = url;
+		this.errorText = errorText;
+		this.isResourceModule = isResourceModule;
+        this.loaderInfo = loaderInfo;
+	}
+	
+	//--------------------------------------------------------------------------
+	//
+	//  Properties
+	//
+	//--------------------------------------------------------------------------
+
+	//----------------------------------
+	//  errorText
+	//----------------------------------
+
+	/**
+	 *  The error message if the type is RSL_ERROR; otherwise, it is null;
+	 *  
+	 *  @langversion 3.0
+	 *  @playerversion Flash 9
+	 *  @playerversion AIR 1.1
+	 *  @productversion Flex 3
+	 */
+	public var errorText:String;
+	
+    //----------------------------------
+	//  isResourceModule
+	//----------------------------------
+
+	/**
+	 *  True if the event is for loading a resourceModule instead of an RSL
+	 */
+	public var isResourceModule:Boolean;
+	
+    //----------------------------------
+    //  loaderInfo
+    //----------------------------------
+    
+    /**
+     *  The loaderInfo associated with this event. This is only set in the 
+     *  RSLEvent.RSL_COMPLETE event. Otherwise loaderInfo will be null.
+     */
+    public var loaderInfo:LoaderInfo;
+
+    //----------------------------------
+	//  rslIndex
+	//----------------------------------
+
+	/**
+	 *  The index number of the RSL currently being downloaded.
+	 *  This is a number between 0 and <code>rslTotal - 1</code>.
+	 *  
+	 *  @langversion 3.0
+	 *  @playerversion Flash 9
+	 *  @playerversion AIR 1.1
+	 *  @productversion Flex 3
+	 */
+	public var rslIndex:int;
+
+	//----------------------------------
+	//  rslTotal
+	//----------------------------------
+
+	/**
+	 *  The total number of RSLs being downloaded by the preloader
+	 *  
+	 *  @langversion 3.0
+	 *  @playerversion Flash 9
+	 *  @playerversion AIR 1.1
+	 *  @productversion Flex 3
+	 */
+	public var rslTotal:int;
+	
+	//----------------------------------
+	//  url
+	//----------------------------------
+
+	/**
+	 *  The URLRequest object that represents the location
+	 *  of the RSL being downloaded.
+	 *  
+	 *  @langversion 3.0
+	 *  @playerversion Flash 9
+	 *  @playerversion AIR 1.1
+	 *  @productversion Flex 3
+	 */
+	public var url:URLRequest;
+	
+	//--------------------------------------------------------------------------
+	//
+	//  Overridden properties: Event
+	//
+	//--------------------------------------------------------------------------
+
+	/**
+	 *  @private
+	 */
+	override public function clone():Event
+	{
+		return new RSLEvent(type, bubbles, cancelable,
+							bytesLoaded, bytesTotal, rslIndex,
+							rslTotal, url, errorText, isResourceModule,
+                            loaderInfo);
+	}
+}
+
+}
diff --git a/frameworks/projects/MXRoyale/src/main/royale/mx/skins/halo/DataGridHeaderSeparator.as b/frameworks/projects/MXRoyale/src/main/royale/mx/skins/halo/DataGridHeaderSeparator.as
new file mode 100644
index 0000000..0f3d621
--- /dev/null
+++ b/frameworks/projects/MXRoyale/src/main/royale/mx/skins/halo/DataGridHeaderSeparator.as
@@ -0,0 +1,116 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  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
+//
+//      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.
+//
+////////////////////////////////////////////////////////////////////////////////
+
+package mx.skins.halo
+{
+
+import flash.display.Graphics;
+import mx.skins.ProgrammaticSkin;
+
+/**
+ *  The skin for the separator between column headers in a DataGrid.
+ *  
+ *  @langversion 3.0
+ *  @playerversion Flash 9
+ *  @playerversion AIR 1.1
+ *  @productversion Flex 3
+ */
+public class DataGridHeaderSeparator extends ProgrammaticSkin
+{
+	include "../../core/Version.as";
+
+	//--------------------------------------------------------------------------
+	//
+	//  Constructor
+	//
+	//--------------------------------------------------------------------------
+
+	/**
+	 *  Constructor.
+	 *  
+	 *  @langversion 3.0
+	 *  @playerversion Flash 9
+	 *  @playerversion AIR 1.1
+	 *  @productversion Flex 3
+	 */
+	public function DataGridHeaderSeparator()
+	{
+		super();
+	}
+	
+	//--------------------------------------------------------------------------
+	//
+	//  Overridden properties
+	//
+	//--------------------------------------------------------------------------
+
+	//----------------------------------
+	//  measuredWidth
+	//----------------------------------
+	
+	/**
+	 *  @private
+	 */
+	override public function get measuredWidth():Number
+	{
+		return 2;
+	}
+	
+	//----------------------------------
+	//  measuredHeight
+	//----------------------------------
+
+	/**
+	 *  @private
+	 */
+	override public function get measuredHeight():Number
+	{
+		return 10;
+	}
+	
+	//--------------------------------------------------------------------------
+	//
+	//  Overridden methods
+	//
+	//--------------------------------------------------------------------------
+
+	/**
+	 *  @private
+	 */
+	override protected function updateDisplayList(w:Number, h:Number):void
+	{
+		super.updateDisplayList(w, h);
+		var g:Graphics = graphics;
+		
+		g.clear();
+		
+		// Highlight
+		g.lineStyle(1, 0xFFFFFF, 0.5);
+		g.moveTo(0, 0);
+		g.lineTo(0, h);
+		g.lineStyle(1, getStyle("borderColor")); 
+		g.moveTo(1, 0);
+		g.lineTo(1, h);
+	}
+
+}
+
+}
+
+