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);
+ }
+
+}
+
+}
+
+