You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@flex.apache.org by ah...@apache.org on 2016/06/16 23:00:01 UTC

[44/50] [abbrv] git commit: [flex-asjs] [refs/heads/spark] - Merge branch 'develop' into spark

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/77148f4a/frameworks/projects/MX/src/main/flex/mx/core/Container.as
----------------------------------------------------------------------
diff --cc frameworks/projects/MX/src/main/flex/mx/core/Container.as
index 248e6ba,0000000..1216189
mode 100644,000000..100644
--- a/frameworks/projects/MX/src/main/flex/mx/core/Container.as
+++ b/frameworks/projects/MX/src/main/flex/mx/core/Container.as
@@@ -1,6131 -1,0 +1,6131 @@@
 +////////////////////////////////////////////////////////////////////////////////
 +//
 +//  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.core
 +{
 +
- COMPILE::AS3
++COMPILE::SWF
 +{
 +    import flash.display.DisplayObject;
 +    import flash.display.DisplayObjectContainer;
 +    import flash.display.Graphics;
 +    import flash.display.InteractiveObject;
 +    import flash.display.Loader;
 +    import flash.display.Shape;
 +    import flash.events.Event;
 +    import flash.events.MouseEvent;
 +    import flash.text.TextField;
 +    import flash.text.TextLineMetrics;
 +    import flash.ui.Keyboard;        
 +}
 +COMPILE::JS
 +{
 +    import flex.display.DisplayObject;
 +    import flex.display.DisplayObjectContainer;
 +    import flex.display.Graphics;
 +    import flex.display.InteractiveObject;
 +    import flex.display.Loader;
 +    import flex.display.Shape;
 +    import flex.events.Event;
 +    import org.apache.flex.events.MouseEvent;
 +    import flex.text.TextField;
 +    import flex.text.TextLineMetrics;
 +    import flex.ui.Keyboard;            
 +}
 +import flex.display.Sprite;
 +import org.apache.flex.geom.Point;
 +import org.apache.flex.geom.Rectangle;
 +import org.apache.flex.utils.PointUtils;
 +import mx.events.KeyboardEvent;
 +
 +import flex.system.DefinitionManager;
 +import org.apache.flex.reflection.getDefinitionByName;
 +import org.apache.flex.core.IVisualElement;
 +
 +import mx.binding.BindingManager;
 +COMPILE::LATER
 +{
 +import mx.containers.utilityClasses.PostScaleAdapter;
 +import mx.controls.HScrollBar;
 +import mx.controls.VScrollBar;
 +import mx.controls.scrollClasses.ScrollBar;
 +import mx.events.ScrollEvent;
 +import mx.events.ScrollEventDetail;
 +import mx.events.ScrollEventDirection;
 +}
 +import mx.controls.listClasses.IListItemRenderer;
 +import mx.core.IUITextField;
 +import mx.events.ChildExistenceChangedEvent;
 +import mx.events.FlexEvent;
 +import mx.events.IndexChangedEvent;
 +import mx.geom.RoundedRectangle;
 +import mx.managers.IFocusManager;
 +import mx.managers.IFocusManagerContainer;
 +import mx.managers.ILayoutManagerClient;
 +import mx.managers.ISystemManager;
 +import mx.styles.CSSStyleDeclaration;
 +import mx.styles.ISimpleStyleClient;
 +import mx.styles.IStyleClient;
 +import mx.styles.StyleProtoChain;
 +
 +use namespace mx_internal;
 +
 +//--------------------------------------
 +//  Events
 +//--------------------------------------
 +
 +/**
 + *  Dispatched after a child has been added to a container.
 + *
 + *  <p>The childAdd event is dispatched when the <code>addChild()</code>
 + *  or <code>addChildAt()</code> method is called.
 + *  When a container is first created, the <code>addChild()</code>
 + *  method is automatically called for each child component declared
 + *  in the MXML file.
 + *  The <code>addChildAt()</code> method is automatically called
 + *  whenever a Repeater object adds or removes child objects.
 + *  The application developer may also manually call these
 + *  methods to add new children.</p>
 + *
 + *  <p>At the time when this event is sent, the child object has been
 + *  initialized, but its width and height have not yet been calculated,
 + *  and the child has not been drawn on the screen.
 + *  If you want to be notified when the child has been fully initialized
 + *  and rendered, then register as a listener for the child's
 + *  <code>creationComplete</code> event.</p>
 + *
 + *  @eventType mx.events.ChildExistenceChangedEvent.CHILD_ADD
 + *  
 + *  @langversion 3.0
 + *  @playerversion Flash 9
 + *  @playerversion AIR 1.1
 + *  @productversion Flex 3
 + */
 +[Event(name="childAdd", type="mx.events.ChildExistenceChangedEvent")]
 +
 +/**
 + *  Dispatched after the index (among the container children) 
 + *  of a container child changes.
 + *  This event is only dispatched for the child specified as the argument to 
 + *  the <code>setChildIndex()</code> method; it is not dispatched 
 + *  for any other child whose index changes as a side effect of the call 
 + *  to the <code>setChildIndex()</code> method.
 + *
 + *  <p>The child's index is changed when the
 + *  <code>setChildIndex()</code> method is called.</p>
 + *
 + *  @eventType mx.events.IndexChangedEvent.CHILD_INDEX_CHANGE
 + *  
 + *  @langversion 3.0
 + *  @playerversion Flash 9
 + *  @playerversion AIR 1.1
 + *  @productversion Flex 3
 + */
 +[Event(name="childIndexChange", type="mx.events.IndexChangedEvent")]
 +
 +/**
 + *  Dispatched before a child of a container is removed.
 + *
 + *  <p>This event is delivered when any of the following methods is called:
 + *  <code>removeChild()</code>, <code>removeChildAt()</code>,
 + *  or <code>removeAllChildren()</code>.</p>
 + *
 + *  @eventType mx.events.ChildExistenceChangedEvent.CHILD_REMOVE
 + *  
 + *  @langversion 3.0
 + *  @playerversion Flash 9
 + *  @playerversion AIR 1.1
 + *  @productversion Flex 3
 + */
 +[Event(name="childRemove", type="mx.events.ChildExistenceChangedEvent")]
 +
 +/**
 + *  Dispatched when the <code>data</code> property changes.
 + *
 + *  <p>When a container is used as a renderer in a List or other components,
 + *  the <code>data</code> property is used pass to the container 
 + *  the data to display.</p>
 + *
 + *  @eventType mx.events.FlexEvent.DATA_CHANGE
 + *  
 + *  @langversion 3.0
 + *  @playerversion Flash 9
 + *  @playerversion AIR 1.1
 + *  @productversion Flex 3
 + */
 +[Event(name="dataChange", type="mx.events.FlexEvent")]
 +
 +/**
 + *  Dispatched when the user manually scrolls the container.
 + *
 + *  <p>The event is dispatched when the scroll position is changed using
 + *  either the mouse (e.g. clicking on the scrollbar's "down" button)
 + *  or the keyboard (e.g., clicking on the down-arrow key).
 + *  However, this event is not dispatched if the scroll position
 + *  is changed programatically (e.g., setting the value of the
 + *  <code>horizontalScrollPosition</code> property).
 + *  The <code>viewChanged</code> event is delivered whenever the
 + *  scroll position is changed, either manually or programatically.</p>
 + *
 + *  <p>At the time when this event is dispatched, the scrollbar has
 + *  been updated to the new position, but the container's child objects
 + *  have not been shifted to reflect the new scroll position.</p>
 + *
 + *  @eventType mx.events.ScrollEvent.SCROLL
 + *  
 + *  @langversion 3.0
 + *  @playerversion Flash 9
 + *  @playerversion AIR 1.1
 + *  @productversion Flex 3
 + */
 +[Event(name="scroll", type="mx.events.ScrollEvent")]
 +
 +//--------------------------------------
 +//  Styles
 +//--------------------------------------
 +
 +include "../styles/metadata/BarColorStyle.as"
 +include "../styles/metadata/BorderStyles.as"
 +include "../styles/metadata/ContainerBackgroundStyles.as"
 +include "../styles/metadata/PaddingStyles.as"
 +include "../styles/metadata/TextStyles.as"
 +
 +/**
 + *  Accent color used by component skins. The default button skin uses this color
 + *  to tint the background. Slider track highlighting uses this color. 
 + * 
 + *  @default #0099FF
 + * 
 + *  @langversion 3.0
 + *  @playerversion Flash 10
 + *  @playerversion AIR 1.5
 + *  @productversion Flex 4
 + */
 +[Style(name="accentColor", type="uint", format="Color", inherit="yes", theme="spark")]
 +
 +/**
 + *  If a background image is specified, this style specifies
 + *  whether it is fixed with regard to the viewport (<code>"fixed"</code>)
 + *  or scrolls along with the content (<code>"scroll"</code>).
 + *
 + *  @default "scroll"
 + *  
 + *  @langversion 3.0
 + *  @playerversion Flash 9
 + *  @playerversion AIR 1.1
 + *  @productversion Flex 3
 + */
 +[Style(name="backgroundAttachment", type="String", inherit="no")]
 +
 +/**
 + *  The alpha of the content background for this component.
 + * 
 + *  @langversion 3.0
 + *  @playerversion Flash 10
 + *  @playerversion AIR 1.5
 + *  @productversion Flex 4
 + */
 +[Style(name="contentBackgroundAlpha", type="Number", inherit="yes", theme="spark")]
 +
 +/**
 + *  Color of the content area of the component.
 + *   
 + *  @default 0xFFFFFF
 + *  
 + *  @langversion 3.0
 + *  @playerversion Flash 10
 + *  @playerversion AIR 1.5
 + *  @productversion Flex 4
 + */ 
 +[Style(name="contentBackgroundColor", type="uint", format="Color", inherit="yes", theme="spark")]
 +
 +/**
 + *  Radius of component corners.
 + *  The default value depends on the component class;
 + *  if not overridden for the class, the default value
 + *  is 0.
 + *  The default value for ApplicationControlBar is 5.
 + *  
 + *  @langversion 3.0
 + *  @playerversion Flash 9
 + *  @playerversion AIR 1.1
 + *  @productversion Flex 3
 + */
 +[Style(name="cornerRadius", type="Number", format="Length", inherit="no", theme="halo, spark")]
 +
 +/**
 + *  The alpha value for the overlay that is placed on top of the
 + *  container when it is disabled.
 + *  
 + *  @langversion 3.0
 + *  @playerversion Flash 9
 + *  @playerversion AIR 1.1
 + *  @productversion Flex 3
 + */
 +[Style(name="disabledOverlayAlpha", type="Number", inherit="no")]
 +
 +/**
 + *  Color of focus ring when the component is in focus
 + *   
 + *  @default 0x70B2EE
 + *  
 + *  @langversion 3.0
 + *  @playerversion Flash 10
 + *  @playerversion AIR 1.5
 + *  @productversion Flex 4
 + */ 
 +[Style(name="focusColor", type="uint", format="Color", inherit="yes", theme="spark")]
 +
 +/**
 + *  The name of the horizontal scrollbar style.
 + *
 + *  @default undefined
 + *  
 + *  @langversion 3.0
 + *  @playerversion Flash 9
 + *  @playerversion AIR 1.1
 + *  @productversion Flex 3
 + */
 +[Style(name="horizontalScrollBarStyleName", type="String", inherit="no")]
 +
 +/**
 + *  The name of the vertical scrollbar style.
 + *
 + *  @default undefined
 + *  
 + *  @langversion 3.0
 + *  @playerversion Flash 9
 + *  @playerversion AIR 1.1
 + *  @productversion Flex 3
 + */
 +[Style(name="verticalScrollBarStyleName", type="String", inherit="no")]
 +
 +/**
 + *  Number of pixels between the container's bottom border
 + *  and the bottom of its content area.
 + *
 + *  @default 0
 + *  
 + *  @langversion 3.0
 + *  @playerversion Flash 9
 + *  @playerversion AIR 1.1
 + *  @productversion Flex 3
 + */
 +[Style(name="paddingBottom", type="Number", format="Length", inherit="no")]
 +
 +/**
 + *  Number of pixels between the container's top border
 + *  and the top of its content area.
 + *
 + *  @default 0
 + *  
 + *  @langversion 3.0
 + *  @playerversion Flash 9
 + *  @playerversion AIR 1.1
 + *  @productversion Flex 3
 + */
 +[Style(name="paddingTop", type="Number", format="Length", inherit="no")]
 +
 +/**
 + *  Color of any symbol of a component. Examples include the check mark of a CheckBox or
 + *  the arrow of a ScrollBar button.
 + *   
 + *  @default 0x000000
 + * 
 + *  @langversion 3.0
 + *  @playerversion Flash 10
 + *  @playerversion AIR 1.5
 + *  @productversion Flex 4
 + */ 
 +[Style(name="symbolColor", type="uint", format="Color", inherit="yes", theme="spark")]
 +
 +[ResourceBundle("core")]
 +
 +/**
 + *  The Container class is an abstract base class for components that
 + *  controls the layout characteristics of child components.
 + *  You do not create an instance of Container in an application.
 + *  Instead, you create an instance of one of Container's subclasses,
 + *  such as Canvas or HBox.
 + *
 + *  <p>The Container class contains the logic for scrolling, clipping,
 + *  and dynamic instantiation. 
 + *  It contains methods for adding and removing children.
 + *  It also contains the <code>getChildAt()</code> method, and the logic
 + *  for drawing the background and borders of containers.</p>
 + *
 + *  @mxml
 + *
 + *  Flex Framework containers inherit the following attributes from the Container
 + *  class:</p>
 + *
 + *  <pre>
 + *  &lt;mx:<i>tagname</i>
 + *    <strong>Properties</strong>
 + *    autoLayout="true|false"
 + *    clipContent="true|false"
 + *    creationIndex="undefined"
 + *    creationPolicy="auto|all|queued|none"
 + *    defaultButton="<i>No default</i>"
 + *    horizontalLineScrollSize="5"
 + *    horizontalPageScrollSize="0"
 + *    horizontalScrollBar="null"
 + *    horizontalScrollPolicy="auto|on|off"
 + *    horizontalScrollPosition="0"
 + *    icon="undefined"
 + *    label=""
 + *    verticalLineScrollSize="5"
 + *    verticalPageScrollSize="0"
 + *    verticalScrollBar="null"
 + *    verticalScrollPolicy="auto|on|off"
 + *    verticalScrollPosition="0"
 + * 
 + *    <strong>Styles</strong>
 + *    backgroundAlpha="1.0"
 + *    backgroundAttachment="scroll"
 + *    backgroundColor="undefined"
 + *    backgroundDisabledColor="undefined"
 + *    backgroundImage="undefined"
 + *    backgroundSize="auto" 
 + *    <i>    For the Application container only,</i> backgroundSize="100%"
 + *    barColor="undefined"
 + *    borderColor="0xAAB3B3"
 + *    borderSides="left top right bottom"
 + *    borderSkin="mx.skins.halo.HaloBorder"
 + *    borderStyle="inset"
 + *    borderThickness="1"
 + *    color="0x0B333C"
 + *    cornerRadius="0"
 + *    disabledColor="0xAAB3B3"
 + *    disbledOverlayAlpha="undefined"
 + *    dropShadowColor="0x000000"
 + *    dropShadowEnabled="false"
 + *    fontAntiAliasType="advanced"
 + *    fontfamily="Verdana"
 + *    fontGridFitType="pixel"
 + *    fontSharpness="0""
 + *    fontSize="10"
 + *    fontStyle="normal"
 + *    fontThickness="0"
 + *    fontWeight="normal"
 + *    horizontalScrollBarStyleName="undefined"
 + *    paddingBottom="0"
 + *    paddingLeft="0"
 + *    paddingRight="0"
 + *    paddingTop="0"
 + *    shadowDirection="center"
 + *    shadowDistance="2"
 + *    textAlign="left"
 + *    textDecoration="none|underline"
 + *    textIndent="0"
 + *    verticalScrollBarStyleName="undefined"
 + * 
 + *    <strong>Events</strong>
 + *    childAdd="<i>No default</i>"
 + *    childIndexChange="<i>No default</i>"
 + *    childRemove="<i>No default</i>"
 + *    dataChange="<i>No default</i>"
 + *    scroll="<i>No default</i>"
 + *    &gt;
 + *      ...
 + *      <i>child tags</i>
 + *      ...
 + *  &lt;/mx:<i>tagname</i>&gt;
 + *  </pre>
 + *  
 + *  @langversion 3.0
 + *  @playerversion Flash 9
 + *  @playerversion AIR 1.1
 + *  @productversion Flex 3
 + */
 +public class Container extends UIComponent
 +                       implements IContainer, IDataRenderer, 
 +                       IFocusManagerContainer, IListItemRenderer,
 +                       IRawChildrenContainer, IChildList, IVisualElementContainer,
 +                       INavigatorContent
 +
 +{
 +    include "../core/Version.as"
 +
 +    //--------------------------------------------------------------------------
 +    //
 +    //  Notes: Child management
 +    //
 +    //--------------------------------------------------------------------------
 +
 +    /*
 +
 +        Although at the level of a Flash DisplayObjectContainer, all
 +        children are equal, in a Flex Container some children are "more
 +        equal than others". (George Orwell, "Animal Farm")
 +
 +        In particular, Flex distinguishes between content children and
 +        non-content (or "chrome") children. Content children are the kind
 +        that can be specified in MXML. If you put several controls
 +        into a VBox, those are its content children. Non-content children
 +        are the other ones that you get automatically, such as a
 +        background/border, scrollbars, the titlebar of a Panel,
 +        AccordionHeaders, etc.
 +
 +        Most application developers are uninterested in non-content children,
 +        so Container overrides APIs such as numChildren and getChildAt()
 +        to deal only with content children. For example, Container, keeps
 +        its own _numChildren counter.
 +
 +        Container assumes that content children are contiguous, and that
 +        non-content children come before or after the content children.
 +        In order words, Container partitions DisplayObjectContainer's
 +        index range into three parts:
 +
 +        A B C D E F G H I
 +        0 1 2 3 4 5 6 7 8    <- index for all children
 +              0 1 2 3        <- index for content children
 +
 +        The content partition contains the content children D E F G.
 +        The pre-content partition contains the non-content children
 +        A B C that always stay before the content children.
 +        The post-content partition contains the non-content children
 +        H I that always stay after the content children.
 +
 +        Container maintains two state variables, _firstChildIndex
 +        and _numChildren, which keep track of the partitioning.
 +        In this example, _firstChildIndex would be 3 and _numChildren
 +        would be 4.
 +
 +    */
 +
 +    //--------------------------------------------------------------------------
 +    //
 +    //  Class constants
 +    //
 +    //--------------------------------------------------------------------------
 +
 +    /**
 +     *  @private
 +     *  See changedStyles, below
 +     */
 +    private static const MULTIPLE_PROPERTIES:String = "<MULTIPLE>";
 +
 +    //--------------------------------------------------------------------------
 +    //
 +    //  Class methods
 +    //
 +    //--------------------------------------------------------------------------
 +    
 +    mx_internal function getLayoutChildAt(index:int):IUIComponent
 +    {
 +		COMPILE::LATER
 +		{
 +        return PostScaleAdapter.getCompatibleIUIComponent(getChildAt(index));
 +		}
 +		return getChildAt(index) as IUIComponent;
 +    }
 +
 +    //--------------------------------------------------------------------------
 +    //
 +    //  Constructor
 +    //
 +    //--------------------------------------------------------------------------
 +
 +    /**
 +     *  Constructor.
 +     *  
 +     *  @langversion 3.0
 +     *  @playerversion Flash 9
 +     *  @playerversion AIR 1.1
 +     *  @productversion Flex 3
 +     */
 +    public function Container()
 +    {
 +        super();
 +
- 		COMPILE::AS3
++		COMPILE::SWF
 +		{
 +        tabEnabled = false;
 +		}
 +        tabFocusEnabled = false;
 +        
 +        showInAutomationHierarchy = false;
 +
 +        // If available, get soft-link to the RichEditableText class
 +        // to use in keyDownHandler().
 +        var dm:DefinitionManager = new DefinitionManager();
 +        if (dm.hasDefinition(
 +                "spark.components.RichEditableText"))
 +        {
 +            richEditableTextClass =
 +                Class(dm.getDefinition(
 +                    "spark.components.RichEditableText"));
 +        }
 +    }
 +
 +    //--------------------------------------------------------------------------
 +    //
 +    //  Variables
 +    //
 +    //--------------------------------------------------------------------------
 +
 +    //----------------------------------
 +    //  Child creation vars
 +    //----------------------------------
 +
 +    /**
 +     *  The creation policy of this container. 
 +     *  
 +     *  @langversion 3.0
 +     *  @playerversion Flash 9
 +     *  @playerversion AIR 1.1
 +     *  @productversion Flex 3
 +     */
 +    protected var actualCreationPolicy:String;
 +
 +    /**
 +     *  @private
 +     */
 +    private var numChildrenBefore:int;
 +
 +    /**
 +     *  @private
 +     */
 +    private var recursionFlag:Boolean = true;
 +
 +    //----------------------------------
 +    //  Layout vars
 +    //----------------------------------
 +
 +    /**
 +     *  @private
 +     *  Remember when a child has been added or removed.
 +     *  When that occurs, we want to run the LayoutManager
 +     *  (even if autoLayout is false).
 +     */
 +    private var forceLayout:Boolean = false;
 +
 +    /**
 +     *  @private
 +     */
 +    mx_internal var doingLayout:Boolean = false;
 +
 +    //----------------------------------
 +    //  Style vars
 +    //----------------------------------
 +
 +    /**
 +     *  @private
 +     *  If this value is non-null, then we need to recursively notify children
 +     *  that a style property has changed.  If one style property has changed,
 +     *  this field holds the name of the style that changed.  If multiple style
 +     *  properties have changed, then the value of this field is
 +     *  Container.MULTIPLE_PROPERTIES.
 +     */
 +    private var changedStyles:String = null;
 +
 +    //----------------------------------
 +    //  Scrolling vars
 +    //----------------------------------
 +
 +    /**
 +     *  @private
 +     */
 +    private var _creatingContentPane:Boolean = false;
 +
 +    /**
 +     *  Containers use an internal content pane to control scrolling. 
 +     *  The <code>creatingContentPane</code> is <code>true</code> while the container is creating 
 +     *  the content pane so that some events can be ignored or blocked.
 +     *  
 +     *  @langversion 3.0
 +     *  @playerversion Flash 9
 +     *  @playerversion AIR 1.1
 +     *  @productversion Flex 3
 +     */
 +    public function get creatingContentPane():Boolean
 +    {
 +        return _creatingContentPane;
 +    }
 +    public function set creatingContentPane(value:Boolean):void
 +    {
 +        _creatingContentPane = value;
 +    }
 +
 +    /**
 +     *  @private
 +     *  A box that takes up space in the lower right corner,
 +     *  between the horizontal and vertical scrollbars.
 +     */
 +    protected var whiteBox:Shape;
 +
 +    /**
 +     *  @private
 +     */
 +    mx_internal var contentPane:Sprite = null;
 +
 +    /**
 +     *  @private
 +     *  Flags that remember what work to do during the next updateDisplayList().
 +     */
 +    private var scrollPropertiesChanged:Boolean = false;
 +    private var scrollPositionChanged:Boolean = true;
 +    private var horizontalScrollPositionPending:Number;
 +    private var verticalScrollPositionPending:Number;
 +
 +    /**
 +     *  @private
 +     *  Cached values describing the total size of the content being scrolled
 +     *  and the size of the area in which the scrolled content is displayed.
 +     */
 +    private var scrollableWidth:Number = 0;
 +    private var scrollableHeight:Number = 0;
 +    private var viewableWidth:Number = 0;
 +    private var viewableHeight:Number = 0;
 +
 +    //----------------------------------
 +    //  Other vars
 +    //----------------------------------
 +
 +    /**
 +     *  @private
 +     *  The border/background object.
 +     */
 +    mx_internal var border:IFlexDisplayObject;
 +
 +    /**
 +     *  @private
 +     *  Sprite used to block user input when the container is disabled.
 +     */
 +    mx_internal var blocker:Sprite;
 +
 +    /**
 +     *  @private
 +     *  Keeps track of the number of mouse events we are listening for
 +     */
 +    private var mouseEventReferenceCount:int = 0;
 +    
 +    /**
 +     *  @private
 +     *  Soft-link to RichEditableText class object, if available.
 +     */
 +    private var richEditableTextClass:Class;
 +
 +    //--------------------------------------------------------------------------
 +    //
 +    //  Overridden properties
 +    //
 +    //--------------------------------------------------------------------------
 +
 +    //----------------------------------
 +    //  baselinePosition
 +    //----------------------------------
 +
 +    /**
 +     *  @private
 +     *  The baselinePosition of a Container is calculated
 +     *  as if there was a UITextField using the Container's styles
 +     *  whose top is at viewMetrics.top.
 +     */
 +    override public function get baselinePosition():Number
 +    {
 +        if (!validateBaselinePosition())
 +            return NaN;
 +
 +        // Unless the height is very small, the baselinePosition
 +        // of a generic Container is calculated as if there was
 +        // a UITextField using the Container's styles
 +        // whose top is at viewMetrics.top.
 +        // If the height is small, the baselinePosition is calculated
 +        // as if there were text within whose ascent the Container
 +        // is vertically centered.
 +        // At the crossover height, these two calculations
 +        // produce the same result.
 +
 +        var lineMetrics:TextLineMetrics = measureText("Wj");
 +
 +        if (height < 2 * viewMetrics.top + 4 + lineMetrics.ascent)
 +            return int(height + (lineMetrics.ascent - height) / 2);
 +        
 +        return viewMetrics.top + 2 + lineMetrics.ascent;
 +    }
 +
 +    //----------------------------------
 +    //  contentMouseX
 +    //----------------------------------
 +
 +    /**
 +     *  @copy mx.core.UIComponent#contentMouseX
 +     *  
 +     *  @langversion 3.0
 +     *  @playerversion Flash 9
 +     *  @playerversion AIR 1.1
 +     *  @productversion Flex 3
 +     */
 +    override public function get contentMouseX():Number
 +    {
 +        if (contentPane)
 +            return contentPane.mouseX;
 +        
 +        return super.contentMouseX;
 +    }
 +    
 +    //----------------------------------
 +    //  contentMouseY
 +    //----------------------------------
 +
 +    /**
 +     *  @copy mx.core.UIComponent#contentMouseY
 +     *  
 +     *  @langversion 3.0
 +     *  @playerversion Flash 9
 +     *  @playerversion AIR 1.1
 +     *  @productversion Flex 3
 +     */
 +    override public function get contentMouseY():Number
 +    {
 +        if (contentPane)
 +            return contentPane.mouseY;
 +        
 +        return super.contentMouseY;
 +    }
 +
 +    //----------------------------------
 +    //  doubleClickEnabled
 +    //----------------------------------
 +
 +    /**
 +     *  @private
 +     *  Propagate to children.
 +     */
- 	COMPILE::AS3
++	COMPILE::SWF
 +    override public function set doubleClickEnabled(value:Boolean):void
 +    {
 +        super.doubleClickEnabled = value;
 +
 +        if (contentPane)
 +        {
 +            var n:int = contentPane.numChildren;
 +            for (var i:int = 0; i < n; i++)
 +            {
 +                var child:InteractiveObject =
 +                    contentPane.getChildAt(i) as InteractiveObject;
 +                if (child)
 +                    child.doubleClickEnabled = value;
 +            }
 +        }
 +    }
 +
 +    //----------------------------------
 +    //  enabled
 +    //----------------------------------
 +
 +    [Inspectable(category="General", enumeration="true,false", defaultValue="true")]
 +
 +    /**
 +     *  @private
 +     */
 +    override public function set enabled(value:Boolean):void
 +    {
 +        super.enabled = value;
 +
 +		COMPILE::LATER
 +		{
 +        // Scrollbars must be enabled/disabled when this container is.
 +        if (horizontalScrollBar)
 +            horizontalScrollBar.enabled = value;
 +        if (verticalScrollBar)
 +            verticalScrollBar.enabled = value;
 +		}
 +		
 +        invalidateProperties();
 +        
 +        if (border && border is IInvalidating)
 +            IInvalidating(border).invalidateDisplayList();
 +    }
 +
 +    //----------------------------------
 +    //  focusPane
 +    //----------------------------------
 +
 +    /**
 +     *  @private
 +     *  Storage for the focusPane property.
 +     */
 +    private var _focusPane:Sprite;
 +
 +    /**
 +     *  @private
 +     *  Focus pane associated with this object.
 +     *  An object has a focus pane when one of its children has got focus.
 +     */
 +    override public function get focusPane():Sprite
 +    {
 +        return _focusPane;
 +    }
 +
 +    /**
 +     *  @private
 +     */
 +    override public function set focusPane(o:Sprite):void
 +    {
 +        // The addition or removal of the focus sprite should not trigger
 +        // a measurement/layout pass.  Temporarily set the invalidation flags,
 +        // so that calls to invalidateSize() and invalidateDisplayList() have
 +        // no effect.
 +        var oldInvalidateSizeFlag:Boolean = invalidateSizeFlag;
 +        var oldInvalidateDisplayListFlag:Boolean = invalidateDisplayListFlag;
 +        invalidateSizeFlag = true;
 +        invalidateDisplayListFlag = true;
 +
 +        if (o)
 +        {
 +            rawChildren.addChild(o);
 +
 +            o.x = 0;
 +            o.y = 0;
 +			COMPILE::LATER
 +			{
 +            o.scrollRect = null;
 +			}
 +
 +            _focusPane = o;
 +        }
 +        else
 +        {
 +            rawChildren.removeChild(_focusPane);
 +
 +            _focusPane = null;
 +        }
 +
 +        if (o && contentPane)
 +        {
 +            o.x = contentPane.x;
 +            o.y = contentPane.y;
 +			COMPILE::LATER
 +			{
 +            o.scrollRect = contentPane.scrollRect;
 +			}
 +        }
 +
 +        invalidateSizeFlag = oldInvalidateSizeFlag;
 +        invalidateDisplayListFlag = oldInvalidateDisplayListFlag;
 +    }
 +    
 +    //----------------------------------
 +    //  moduleFactory
 +    //----------------------------------
 +    /**
 +     *  @private
 +     */
 +    override public function set moduleFactory(moduleFactory:IFlexModuleFactory):void
 +    {
 +        super.moduleFactory = moduleFactory;
 +        
 +        // Register the _creationPolicy style as inheriting. See the creationPolicy
 +        // getter for details on usage of this style.
 +        styleManager.registerInheritingStyle("_creationPolicy");
 +    }
 +
 +    //----------------------------------
 +    //  $numChildren
 +    //----------------------------------
 +
 +    /**
 +     *  @private
 +     *  This property allows access to the Player's native implementation
 +     *  of the numChildren property, which can be useful since components
 +     *  can override numChildren and thereby hide the native implementation.
 +     *  Note that this "base property" is final and cannot be overridden,
 +     *  so you can count on it to reflect what is happening at the player level.
 +     */
 +    mx_internal final function get $numChildren():int
 +    {
 +        return super.numChildren;
 +    }
 +
 +    //----------------------------------
 +    //  numChildren
 +    //----------------------------------
 +
 +    /**
 +     *  @private
 +     *  Storage for the numChildren property.
 +     */
 +    mx_internal var _numChildren:int = 0;
 +
 +    /**
 +     *  Number of child components in this container.
 +     *
 +     *  <p>The number of children is initially equal
 +     *  to the number of children declared in MXML.
 +     *  At runtime, new children may be added by calling
 +     *  <code>addChild()</code> or <code>addChildAt()</code>,
 +     *  and existing children may be removed by calling
 +     *  <code>removeChild()</code>, <code>removeChildAt()</code>,
 +     *  or <code>removeAllChildren()</code>.</p>
 +     *  
 +     *  @langversion 3.0
 +     *  @playerversion Flash 9
 +     *  @playerversion AIR 1.1
 +     *  @productversion Flex 3
 +     */
 +    override public function get numChildren():int
 +    {
 +        return contentPane ? contentPane.numChildren : _numChildren;
 +    }
 +
 +    //--------------------------------------------------------------------------
 +    //
 +    //  Properties
 +    //
 +    //--------------------------------------------------------------------------
 +
 +    //----------------------------------
 +    //  autoLayout
 +    //----------------------------------
 +
 +    /**
 +     *  @private
 +     *  Storage for the autoLayout property.
 +     */
 +    private var _autoLayout:Boolean = true;
 +
 +    [Inspectable(defaultValue="true")]
 +
 +    /**
 +     *  If <code>true</code>, measurement and layout are done
 +     *  when the position or size of a child is changed.
 +     *  If <code>false</code>, measurement and layout are done only once,
 +     *  when children are added to or removed from the container.
 +     *
 +     *  <p>When using the Move effect, the layout around the component that
 +     *  is moving does not readjust to fit that the Move effect animates.
 +     *  Setting a container's <code>autoLayout</code> property to
 +     *  <code>true</code> has no effect on this behavior.</p>
 +     *
 +     *  <p>The Zoom effect does not work when the <code>autoLayout</code> 
 +     *  property is <code>false</code>.</p>
 +     *
 +     *  <p>The <code>autoLayout</code> property does not apply to
 +     *  Accordion or ViewStack containers.</p>
 +     * 
 +     *  @default true
 +     *  
 +     *  @langversion 3.0
 +     *  @playerversion Flash 9
 +     *  @playerversion AIR 1.1
 +     *  @productversion Flex 3
 +     */
 +    public function get autoLayout():Boolean
 +    {
 +        return _autoLayout;
 +    }
 +
 +    /**
 +     *  @private
 +     */
 +    public function set autoLayout(value:Boolean):void
 +    {
 +        _autoLayout = value;
 +
 +        // If layout is being turned back on, trigger a layout to occur now.
 +        if (value)
 +        {
 +            invalidateSize();
 +            invalidateDisplayList();
 +
 +            var p:IInvalidating = parent as IInvalidating;
 +            if (p)
 +            {
 +                p.invalidateSize();
 +                p.invalidateDisplayList();
 +            }
 +        }
 +    }
 +
 +    //----------------------------------
 +    //  borderMetrics
 +    //----------------------------------
 +
 +    /**
 +     *  Returns an EdgeMetrics object that has four properties:
 +     *  <code>left</code>, <code>top</code>, <code>right</code>,
 +     *  and <code>bottom</code>.
 +     *  The value of each property is equal to the thickness of one side
 +     *  of the border, expressed in pixels.
 +     *
 +     *  <p>Unlike <code>viewMetrics</code>, this property is not
 +     *  overridden by subclasses of Container.</p>
 +     *  
 +     *  @langversion 3.0
 +     *  @playerversion Flash 9
 +     *  @playerversion AIR 1.1
 +     *  @productversion Flex 3
 +     */
 +    public function get borderMetrics():EdgeMetrics
 +    {
 +        return border && border is IRectangularBorder ?
 +               IRectangularBorder(border).borderMetrics :
 +               EdgeMetrics.EMPTY;
 +    }
 +
 +    //----------------------------------
 +    //  childDescriptors
 +    //----------------------------------
 +
 +    /**
 +     *  @private
 +     *  Storage for the childDescriptors property.
 +     *  This variable is initialized in the construct() method
 +     *  using the childDescriptors in the initObj, which is autogenerated.
 +     *  If this Container was not created by createComponentFromDescriptor(),
 +     *  its childDescriptors property is null.
 +     */
 +    private var _childDescriptors:Array /* of UIComponentDescriptor */;
 +
 +    /**
 +     *  Array of UIComponentDescriptor objects produced by the MXML compiler.
 +     *
 +     *  <p>Each UIComponentDescriptor object contains the information 
 +     *  specified in one child MXML tag of the container's MXML tag.
 +     *  The order of the UIComponentDescriptor objects in the Array
 +     *  is the same as the order of the child tags.
 +     *  During initialization, the child descriptors are used to create
 +     *  the container's child UIComponent objects and its Repeater objects, 
 +     *  and to give them the initial property values, event handlers, effects, 
 +     *  and so on, that were specified in MXML.</p>
 +     *
 +     *  @see mx.core.UIComponentDescriptor
 +     *  
 +     *  @langversion 3.0
 +     *  @playerversion Flash 9
 +     *  @playerversion AIR 1.1
 +     *  @productversion Flex 3
 +     */
 +    public function get childDescriptors():Array /* of UIComponentDescriptor */
 +    {
 +        return _childDescriptors;
 +    }
 +
 +    //----------------------------------
 +    //  childRepeaters
 +    //----------------------------------
 +
 +    /**
 +     *  @private
 +     *  Storage for the childRepeaters property.
 +     */
 +    private var _childRepeaters:Array;
 +
 +    /**
 +     *  @private
 +     *  An array of the Repeater objects found within this container.
 +     */
 +    mx_internal function get childRepeaters():Array
 +    {
 +        return _childRepeaters;
 +    }
 +
 +    /**
 +     *  @private
 +     */
 +    mx_internal function set childRepeaters(value:Array):void
 +    {
 +        _childRepeaters = value;
 +    }
 +
 +    //----------------------------------
 +    //  clipContent
 +    //----------------------------------
 +
 +    /**
 +     *  @private
 +     *  Storage for the clipContent property.
 +     */
 +    private var _clipContent:Boolean = true;
 +
 +    [Inspectable(defaultValue="true")]
 +
 +    /**
 +     *  Whether to apply a clip mask if the positions and/or sizes
 +     *  of this container's children extend outside the borders of
 +     *  this container.
 +     *  If <code>false</code>, the children of this container
 +     *  remain visible when they are moved or sized outside the
 +     *  borders of this container.
 +     *  If <code>true</code>, the children of this container are clipped.
 +     *
 +     *  <p>If <code>clipContent</code> is <code>false</code>, then scrolling
 +     *  is disabled for this container and scrollbars will not appear.
 +     *  If <code>clipContent</code> is true, then scrollbars will usually
 +     *  appear when the container's children extend outside the border of
 +     *  the container.
 +     *  For additional control over the appearance of scrollbars,
 +     *  see <code>horizontalScrollPolicy</code> and <code>verticalScrollPolicy</code>.</p>
 +     * 
 +     *  @default true
 +     *  
 +     *  @langversion 3.0
 +     *  @playerversion Flash 9
 +     *  @playerversion AIR 1.1
 +     *  @productversion Flex 3
 +     */
 +    public function get clipContent():Boolean
 +    {
 +        return _clipContent;
 +    }
 +
 +    /**
 +     *  @private
 +     */
 +    public function set clipContent(value:Boolean):void
 +    {
 +        if (_clipContent != value)
 +        {
 +            _clipContent = value;
 +
 +            invalidateDisplayList();
 +        }
 +    }
 +
 +    //----------------------------------
 +    //  createdComponents
 +    //----------------------------------
 +
 +    /**
 +     *  @private
 +     *  Internal variable used to keep track of the components created
 +     *  by this Container.  This is different than the list maintained
 +     *  by DisplayObjectContainer, because it includes Repeaters.
 +     */
 +    private var _createdComponents:Array;
 +
 +    /**
 +     *  @private
 +     *  An array of all components created by this container including
 +     *  Repeater components.
 +     */
 +    mx_internal function get createdComponents():Array
 +    {
 +        return _createdComponents;
 +    }
 +
 +    /**
 +     *  @private
 +     */
 +    mx_internal function set createdComponents(value:Array):void
 +    {
 +        _createdComponents = value;
 +    }
 +
 +    //----------------------------------
 +    //  creationIndex
 +    //----------------------------------
 +
 +    /**
 +     *  @private
 +     *  Storage for the creationIndex property.
 +     */
 +    private var _creationIndex:int = -1;
 +
 +    [Inspectable(defaultValue="undefined")]
 +
 +    /**
 +     *  Specifies the order to instantiate and draw the children
 +     *  of the container.
 +     *
 +     *  <p>This property can only be used when the <code>creationPolicy</code>
 +     *  property is set to <code>ContainerCreationPolicy.QUEUED</code>.
 +     *  Otherwise, it is ignored.</p>
 +     *
 +     *  @default -1
 +     *  
 +     *  @langversion 3.0
 +     *  @playerversion Flash 9
 +     *  @playerversion AIR 1.1
 +     *  @productversion Flex 3
 +     */
 +    [Deprecated]
 +    public function get creationIndex():int
 +    {
 +        return _creationIndex;
 +    }
 +
 +    /**
 +     *  @private
 +     */
 +    public function set creationIndex(value:int):void
 +    {
 +        _creationIndex = value;
 +    }
 +
 +    //----------------------------------
 +    //  creationPolicy
 +    //----------------------------------
 +
 +    // Internal flag used when creationPolicy="none".
 +    // When set, the value of the backing store _creationPolicy
 +    // style is "auto" so descendants inherit the correct value.
 +    private var creationPolicyNone:Boolean = false;
 +    
 +    [Inspectable(enumeration="all,auto,none")]
 +    
 +    /**
 +     *  The child creation policy for this MX Container.
 +     *  ActionScript values can be <code>ContainerCreationPolicy.AUTO</code>, 
 +     *  <code>ContainerCreationPolicy.ALL</code>,
 +     *  or <code>ContainerCreationPolicy.NONE</code>.
 +     *  MXML values can be <code>auto</code>, <code>all</code>, 
 +     *  or <code>none</code>.
 +     *
 +     *  <p>If no <code>creationPolicy</code> is specified for a container,
 +     *  that container inherits its parent's <code>creationPolicy</code>.
 +     *  If no <code>creationPolicy</code> is specified for the Application,
 +     *  it defaults to <code>ContainerCreationPolicy.AUTO</code>.</p>
 +     *
 +     *  <p>A <code>creationPolicy</code> of <code>ContainerCreationPolicy.AUTO</code> means
 +     *  that the container delays creating some or all descendants
 +     *  until they are needed, a process which is known as <i>deferred
 +     *  instantiation</i>.
 +     *  This policy produces the best startup time because fewer
 +     *  UIComponents are created initially.
 +     *  However, this introduces navigation delays when a user navigates
 +     *  to other parts of the application for the first time.
 +     *  Navigator containers such as Accordion, TabNavigator, and ViewStack
 +     *  implement the <code>ContainerCreationPolicy.AUTO</code> policy by creating all their
 +     *  children immediately, but wait to create the deeper descendants
 +     *  of a child until it becomes the selected child of the navigator
 +     *  container.</p>
 +     *
 +     *  <p>A <code>creationPolicy</code> of <code>ContainerCreationPolicy.ALL</code> means
 +     *  that the navigator containers immediately create deeper descendants
 +     *  for each child, rather than waiting until that child is
 +     *  selected. For single-view containers such as a VBox container,
 +     *  there is no difference  between the <code>ContainerCreationPolicy.AUTO</code> and
 +     *  <code>ContainerCreationPolicy.ALL</code> policies.</p>
 +     *
 +     *  <p>A <code>creationPolicy</code> of <code>ContainerCreationPolicy.NONE</code> means
 +     *  that the container creates none of its children.
 +     *  In that case, it is the responsibility of the MXML author
 +     *  to create the children by calling the
 +     *  <code>createComponentsFromDescriptors()</code> method.</p>
 +     *  
 +     *  @default ContainerCreationPolicy.AUTO
 +     *  
 +     *  @langversion 3.0
 +     *  @playerversion Flash 9
 +     *  @playerversion AIR 1.1
 +     *  @productversion Flex 3
 +     */
 +    public function get creationPolicy():String
 +    {
 +        // Use an inheriting style as the backing storage for this property.
 +        // This allows the property to be inherited by either mx or spark
 +        // containers, and also to correctly cascade through containers that
 +        // don't have this property (ie Group).
 +        // This style is an implementation detail and should be considered
 +        // private. Do not set it from CSS.
 +        if (creationPolicyNone)
 +            return ContainerCreationPolicy.NONE;
 +        return getStyle("_creationPolicy");
 +    }
 +
 +    /**
 +     *  @private
 +     */
 +    public function set creationPolicy(value:String):void
 +    {
 +        var styleValue:String = value;
 +        
 +        if (value == ContainerCreationPolicy.NONE)
 +        {
 +            // creationPolicy of none is not inherited by descendants.
 +            // In this case, set the style to "auto" and set a local
 +            // flag for subsequent access to the creationPolicy property.
 +            creationPolicyNone = true;
 +            styleValue = ContainerCreationPolicy.AUTO;
 +        }
 +        else
 +        {
 +            creationPolicyNone = false;
 +        }
 +        
 +        setStyle("_creationPolicy", styleValue);
 +
 +        setActualCreationPolicies(value);
 +    }
 +
 +    //----------------------------------
 +    //  defaultButton
 +    //----------------------------------
 +
 +    /**
 +     *  @private
 +     *  Storage for the defaultButton property.
 +     */
 +    private var _defaultButton:IFlexDisplayObject;
 +
 +    [Inspectable(category="General")]
 +
 +    /**
 +     *  The Button control designated as the default button
 +     *  for the container.
 +     *  When controls in the container have focus, pressing the
 +     *  Enter key is the same as clicking this Button control.
 +     *
 +     *  @default null
 +     *  
 +     *  @langversion 3.0
 +     *  @playerversion Flash 9
 +     *  @playerversion AIR 1.1
 +     *  @productversion Flex 3
 +     */
 +    public function get defaultButton():IFlexDisplayObject
 +    {
 +        return _defaultButton;
 +    }
 +
 +    /**
 +     *  @private
 +     */
 +    public function set defaultButton(value:IFlexDisplayObject):void
 +    {
 +        _defaultButton = value;
 +        ContainerGlobals.focusedContainer = null;
 +    }
 +
 +    //----------------------------------
 +    //  deferredContentCreated
 +    //----------------------------------
 +
 +    /**
 +     *  IDeferredContentOwner equivalent of processedDescriptors
 +     * 
 +     *  @see UIComponent#processedDescriptors
 +     *  
 +     *  @langversion 3.0
 +     *  @playerversion Flash 9
 +     *  @playerversion AIR 1.1
 +     *  @productversion Flex 3
 +     */
 +    public function get deferredContentCreated():Boolean
 +    {
 +        return processedDescriptors;
 +    }
 +
 +    //----------------------------------
 +    //  data
 +    //----------------------------------
 +
 +    /**
 +     *  @private
 +     *  Storage for the data property.
 +     */
 +    private var _data:Object;
 +
 +    [Bindable("dataChange")]
 +    [Inspectable(environment="none")]
 +
 +    /**
 +     *  The <code>data</code> property lets you pass a value
 +     *  to the component when you use it in an item renderer or item editor.
 +     *  You typically use data binding to bind a field of the <code>data</code>
 +     *  property to a property of this component.
 +     *
 +     *  <p>You do not set this property in MXML.</p>
 +     *
 +     *  @default null
 +     *  @see mx.core.IDataRenderer
 +     *  
 +     *  @langversion 3.0
 +     *  @playerversion Flash 9
 +     *  @playerversion AIR 1.1
 +     *  @productversion Flex 3
 +     */
 +    public function get data():Object
 +    {
 +        return _data;
 +    }
 +
 +    /**
 +     *  @private
 +     */
 +    public function set data(value:Object):void
 +    {
 +        _data = value;
 +
 +        dispatchEvent(new FlexEvent(FlexEvent.DATA_CHANGE));
 +
 +        invalidateDisplayList();
 +    }
 +
 +    //----------------------------------
 +    //  firstChildIndex
 +    //----------------------------------
 +
 +    /**
 +     *  @private
 +     *  Storage for the firstChildIndex property.
 +     */
 +    private var _firstChildIndex:int = 0;
 +
 +    /**
 +     *  @private
 +     *  The index of the first content child,
 +     *  when dealing with both content and non-content children.
 +     */
 +    mx_internal function get firstChildIndex():int
 +    {
 +        return _firstChildIndex;
 +    }
 +
 +    //----------------------------------
 +    //  horizontalLineScrollSize
 +    //----------------------------------
 +
 +    /**
 +     *  @private
 +     *  Storage for the horizontalLineScrollSize property.
 +     */
 +    private var _horizontalLineScrollSize:Number = 5;
 +
 +    [Bindable("horizontalLineScrollSizeChanged")]
 +    [Inspectable(defaultValue="5")]
 +
 +    /**
 +     *  Number of pixels to move when the left- or right-arrow
 +     *  button in the horizontal scroll bar is pressed.
 +     *  
 +     *  @default 5
 +     *  
 +     *  @langversion 3.0
 +     *  @playerversion Flash 9
 +     *  @playerversion AIR 1.1
 +     *  @productversion Flex 3
 +     */
 +    public function get horizontalLineScrollSize():Number
 +    {
 +        return _horizontalLineScrollSize;
 +    }
 +
 +    /**
 +     *  @private
 +     */
 +    public function set horizontalLineScrollSize(value:Number):void
 +    {
 +        scrollPropertiesChanged = true;
 +
 +        _horizontalLineScrollSize = value;
 +
 +        invalidateDisplayList();
 +
 +        dispatchEvent(new Event("horizontalLineScrollSizeChanged"));
 +    }
 +
 +    //----------------------------------
 +    //  horizontalPageScrollSize
 +    //----------------------------------
 +
 +    /**
 +     *  @private
 +     *  Storage for the horizontalPageScrollSize property.
 +     */
 +    private var _horizontalPageScrollSize:Number = 0;
 +
 +    [Bindable("horizontalPageScrollSizeChanged")]
 +    [Inspectable(defaultValue="0")]
 +
 +    /**
 +     *  Number of pixels to move when the track in the
 +     *  horizontal scroll bar is pressed.
 +     *  A value of 0 means that the page size
 +     *  will be calculated to be a full screen.
 +     * 
 +     *  @default 0
 +     *  
 +     *  @langversion 3.0
 +     *  @playerversion Flash 9
 +     *  @playerversion AIR 1.1
 +     *  @productversion Flex 3
 +     */
 +    public function get horizontalPageScrollSize():Number
 +    {
 +        return _horizontalPageScrollSize;
 +    }
 +
 +    /**
 +     *  @private
 +     */
 +    public function set horizontalPageScrollSize(value:Number):void
 +    {
 +        scrollPropertiesChanged = true;
 +
 +        _horizontalPageScrollSize = value;
 +
 +        invalidateDisplayList();
 +
 +        dispatchEvent(new Event("horizontalPageScrollSizeChanged"));
 +    }
 +
 +    //----------------------------------
 +    //  horizontalScrollBar
 +    //----------------------------------
 +
 +    /**
 +     *  @private
 +     *  The horizontal scrollbar (null if not present).
 +     */
 +	COMPILE::LATER
 +    private var _horizontalScrollBar:ScrollBar;
 +
 +    /**
 +     *  The horizontal scrollbar used in this container.
 +     *  This property is null if no horizontal scroll bar
 +     *  is currently displayed.
 +     *  In general you do not access this property directly.
 +     *  Manipulation of the <code>horizontalScrollPolicy</code> 
 +     *  and <code>horizontalScrollPosition</code>
 +     *  properties should provide sufficient control over the scroll bar.
 +     *  
 +     *  @langversion 3.0
 +     *  @playerversion Flash 9
 +     *  @playerversion AIR 1.1
 +     *  @productversion Flex 3
 +     */
 +	COMPILE::LATER
 +    public function get horizontalScrollBar():ScrollBar
 +    {
 +        return _horizontalScrollBar;
 +    }
 +
 +    /**
 +     *  @private
 +     */
 +	COMPILE::LATER
 +    public function set horizontalScrollBar(value:ScrollBar):void
 +    {
 +        _horizontalScrollBar = value;
 +    }
 +
 +    //----------------------------------
 +    //  horizontalScrollPosition
 +    //----------------------------------
 +
 +    /**
 +     *  @private
 +     *  Storage for the horizontalScrollPosition property.
 +     */
 +	COMPILE::LATER
 +    private var _horizontalScrollPosition:Number = 0;
 +
 +    [Bindable("scroll")]
 +    [Bindable("viewChanged")]
 +    [Inspectable(defaultValue="0")]
 +
 +    /**
 +     *  The current position of the horizontal scroll bar.
 +     *  This is equal to the distance in pixels between the left edge
 +     *  of the scrollable surface and the leftmost piece of the surface
 +     *  that is currently visible.
 +     *  
 +     *  @default 0
 +     *  
 +     *  @langversion 3.0
 +     *  @playerversion Flash 9
 +     *  @playerversion AIR 1.1
 +     *  @productversion Flex 3
 +     */
 +	COMPILE::LATER
 +    public function get horizontalScrollPosition():Number
 +    {
 +        if (!isNaN(horizontalScrollPositionPending))
 +            return horizontalScrollPositionPending;
 +        return _horizontalScrollPosition;
 +    }
 +
 +    /**
 +     *  @private
 +     */
 +	COMPILE::LATER
 +    public function set horizontalScrollPosition(value:Number):void
 +    {
 +        if (_horizontalScrollPosition == value)
 +            return;
 +
 +        // Note: We can't use maxHorizontalScrollPosition to clamp the value here.
 +        // The horizontalScrollBar may not exist yet,
 +        // or its maxPos might change during layout.
 +        // (For example, you could set the horizontalScrollPosition of a childless container,
 +        // then add a child which causes it to have a scrollbar.)
 +        // The horizontalScrollPosition gets clamped to the range 0 through maxHorizontalScrollPosition
 +        // late, in the updateDisplayList() method, just before the scrollPosition
 +        // of the horizontalScrollBar is set.
 +
 +        _horizontalScrollPosition = value;
 +        scrollPositionChanged = true;
 +        if (!initialized)
 +            horizontalScrollPositionPending = value;
 +
 +        invalidateDisplayList();
 +
 +        dispatchEvent(new Event("viewChanged"));
 +    }
 +
 +    //----------------------------------
 +    //  horizontalScrollPolicy
 +    //----------------------------------
 +
 +    /**
 +     *  @private
 +     *  Storage for the horizontalScrollPolicy property.
 +     */
 +	COMPILE::LATER
 +    mx_internal var _horizontalScrollPolicy:String = ScrollPolicy.AUTO;
 +
 +    [Bindable("horizontalScrollPolicyChanged")]
 +    [Inspectable(category="General", enumeration="off,on,auto", defaultValue="auto")]
 +
 +    /**
 +     *  Specifies whether the horizontal scroll bar is always present,
 +     *  always absent, or automatically added when needed.
 +     *  ActionScript values can be <code>ScrollPolicy.ON</code>, <code>ScrollPolicy.OFF</code>,
 +     *  and <code>ScrollPolicy.AUTO</code>. 
 +     *  MXML values can be <code>"on"</code>, <code>"off"</code>,
 +     *  and <code>"auto"</code>.
 +     *
 +     *  <p>Setting this property to <code>ScrollPolicy.OFF</code> also prevents the
 +     *  <code>horizontalScrollPosition</code> property from having an effect.</p>
 +     *
 +     *  <p>Note: This property does not apply to the ControlBar container.</p>
 +     *
 +     *  <p>If the <code>horizontalScrollPolicy</code> is <code>ScrollPolicy.AUTO</code>,
 +     *  the horizontal scroll bar appears when all of the following
 +     *  are true:</p>
 +     *  <ul>
 +     *    <li>One of the container's children extends beyond the left
 +     *      edge or right edge of the container.</li>
 +     *    <li>The <code>clipContent</code> property is <code>true</code>.</li>
 +     *    <li>The width and height of the container are large enough to
 +     *      reasonably accommodate a scroll bar.</li>
 +     *  </ul>
 +     *
 +     *  @default ScrollPolicy.AUTO
 +     *  
 +     *  @langversion 3.0
 +     *  @playerversion Flash 9
 +     *  @playerversion AIR 1.1
 +     *  @productversion Flex 3
 +     */
 +	COMPILE::LATER
 +    public function get horizontalScrollPolicy():String
 +    {
 +        return _horizontalScrollPolicy;
 +    }
 +
 +    /**
 +     *  @private
 +     */
 +	COMPILE::LATER
 +    public function set horizontalScrollPolicy(value:String):void
 +    {
 +        if (_horizontalScrollPolicy != value)
 +        {
 +            _horizontalScrollPolicy = value;
 +
 +            invalidateDisplayList();
 +
 +            dispatchEvent(new Event("horizontalScrollPolicyChanged"));
 +        }
 +    }
 +
 +    //----------------------------------
 +    //  icon
 +    //----------------------------------
 +
 +    /**
 +     *  @private
 +     *  Storage for the icon property.
 +     */
 +    private var _icon:Class = null;
 +
 +    [Bindable("iconChanged")]
 +    [Inspectable(category="General", defaultValue="", format="EmbeddedFile")]
 +
 +    /**
 +     *  The Class of the icon displayed by some navigator
 +     *  containers to represent this Container.
 +     *
 +     *  <p>For example, if this Container is a child of a TabNavigator,
 +     *  this icon appears in the corresponding tab.
 +     *  If this Container is a child of an Accordion,
 +     *  this icon appears in the corresponding header.</p>
 +     *
 +     *  <p>To embed the icon in the SWF file, use the &#64;Embed()
 +     *  MXML compiler directive:</p>
 +     *
 +     *  <pre>
 +     *    icon="&#64;Embed('filepath')"
 +     *  </pre>
 +     *
 +     *  <p>The image can be a JPEG, GIF, PNG, SVG, or SWF file.</p>
 +     *
 +     *  @default null
 +     *  
 +     *  @langversion 3.0
 +     *  @playerversion Flash 9
 +     *  @playerversion AIR 1.1
 +     *  @productversion Flex 3
 +     */
 +    public function get icon():Class
 +    {
 +        return _icon;
 +    }
 +
 +    /**
 +     *  @private
 +     */
 +    public function set icon(value:Class):void
 +    {
 +        _icon = value;
 +
 +        dispatchEvent(new Event("iconChanged"));
 +    }
 +
 +    //----------------------------------
 +    //  label
 +    //----------------------------------
 +
 +    /**
 +     *  @private
 +     *  Storage for the label property.
 +     */
 +    private var _label:String = "";
 +
 +    [Bindable("labelChanged")]
 +    [Inspectable(category="General", defaultValue="")]
 +
 +    /**
 +     *  The text displayed by some navigator containers to represent
 +     *  this Container.
 +     *
 +     *  <p>For example, if this Container is a child of a TabNavigator,
 +     *  this string appears in the corresponding tab.
 +     *  If this Container is a child of an Accordion,
 +     *  this string appears in the corresponding header.</p>
 +     *
 +     *  @default ""
 +     *  
 +     *  @langversion 3.0
 +     *  @playerversion Flash 9
 +     *  @playerversion AIR 1.1
 +     *  @productversion Flex 3
 +     */
 +    public function get label():String
 +    {
 +        return _label;
 +    }
 +
 +    /**
 +     *  @private
 +     */
 +    public function set label(value:String):void
 +    {
 +        _label = value;
 +
 +        dispatchEvent(new Event("labelChanged"));
 +    }
 +
 +    //----------------------------------
 +    //  maxHorizontalScrollPosition
 +    //----------------------------------
 +
 +    /**
 +     *  The largest possible value for the
 +     *  <code>horizontalScrollPosition</code> property.
 +     *  Defaults to 0 if the horizontal scrollbar is not present.
 +     *  
 +     *  @langversion 3.0
 +     *  @playerversion Flash 9
 +     *  @playerversion AIR 1.1
 +     *  @productversion Flex 3
 +     */
 +	COMPILE::LATER
 +    public function get maxHorizontalScrollPosition():Number
 +    {
 +        return horizontalScrollBar ?
 +               horizontalScrollBar.maxScrollPosition :
 +               Math.max(scrollableWidth - viewableWidth, 0);
 +    }
 +
 +    //----------------------------------
 +    //  maxVerticalScrollPosition
 +    //----------------------------------
 +
 +    /**
 +     *  The largest possible value for the
 +     *  <code>verticalScrollPosition</code> property.
 +     *  Defaults to 0 if the vertical scrollbar is not present.
 +     *  
 +     *  @langversion 3.0
 +     *  @playerversion Flash 9
 +     *  @playerversion AIR 1.1
 +     *  @productversion Flex 3
 +     */
 +	COMPILE::LATER
 +    public function get maxVerticalScrollPosition():Number
 +    {
 +        return verticalScrollBar ?
 +               verticalScrollBar.maxScrollPosition :
 +               Math.max(scrollableHeight - viewableHeight, 0);
 +    }
 +
 +    //----------------------------------
 +    //  numChildrenCreated
 +    //----------------------------------
 +
 +    /**
 +     *  @private
 +     */
 +    private var _numChildrenCreated:int = -1;
 +
 +    /**
 +     *  @private
 +     *  The number of children created inside this container.
 +     *  The default value is 0.
 +     */
 +    mx_internal function get numChildrenCreated():int
 +    {
 +        return _numChildrenCreated;
 +    }
 +
 +    /**
 +     *  @private
 +     */
 +    mx_internal function set numChildrenCreated(value:int):void
 +    {
 +        _numChildrenCreated = value;
 +    }
 +
 +    //----------------------------------
 +    //  numRepeaters
 +    //----------------------------------
 +
 +    /**
 +     *  @private 
 +     *  The number of Repeaters in this Container.
 +     *
 +     *  <p>This number includes Repeaters that are immediate children of this
 +     *  container and Repeaters that are nested inside other Repeaters.
 +     *  Consider the following example:</p>
 +     *
 +     *  <pre>
 +     *  &lt;mx:HBox&gt;
 +     *    &lt;mx:Repeater dataProvider="[1, 2]"&gt;
 +     *      &lt;mx:Repeater dataProvider="..."&gt;
 +     *        &lt;mx:Button/&gt;
 +     *      &lt;/mx:Repeater&gt;
 +     *    &lt;/mx:Repeater&gt;
 +     *  &lt;mx:HBox&gt;
 +     *  </pre>
 +     *
 +     *  <p>In this example, the <code>numRepeaters</code> property
 +     *  for the HBox would be set equal to 3 -- one outer Repeater
 +     *  and two inner repeaters.</p>
 +     *
 +     *  <p>The <code>numRepeaters</code> property does not include Repeaters
 +     *  that are nested inside other containers.
 +     *  Consider this example:</p>
 +     *
 +     *  <pre>
 +     *  &lt;mx:HBox&gt;
 +     *    &lt;mx:Repeater dataProvider="[1, 2]"&gt;
 +     *      &lt;mx:VBox&gt;
 +     *        &lt;mx:Repeater dataProvider="..."&gt;
 +     *          &lt;mx:Button/&gt;
 +     *        &lt;/mx:Repeater&gt;
 +     *      &lt;/mx:VBox&gt;
 +     *    &lt;/mx:Repeater&gt;
 +     *  &lt;mx:HBox&gt;
 +     *  </pre>
 +     *
 +     *  <p>In this example, the <code>numRepeaters</code> property
 +     *  for the outer HBox would be set equal to 1 -- just the outer repeater.
 +     *  The two inner VBox containers would also have a
 +     *  <code>numRepeaters</code> property equal to 1 -- one Repeater
 +     *  per VBox.</p>
 +     */
 +    mx_internal function get numRepeaters():int
 +    {
 +        return childRepeaters ? childRepeaters.length : 0;
 +    }
 +
 +    //----------------------------------
 +    //  rawChildren
 +    //----------------------------------
 +
 +    /**
 +     *  @private
 +     *  The single IChildList object that's always returned
 +     *  from the rawChildren property, below.
 +     */
 +    private var _rawChildren:ContainerRawChildrenList;
 +
 +    /**
 +     *  A container typically contains child components, which can be enumerated
 +     *  using the <code>Container.getChildAt()</code> method and 
 +     *  <code>Container.numChildren</code> property.  In addition, the container
 +     *  may contain style elements and skins, such as the border and background.
 +     *  Flash Player and AIR do not draw any distinction between child components
 +     *  and skins.  They are all accessible using the player's 
 +     *  <code>getChildAt()</code> method  and
 +     *  <code>numChildren</code> property.  
 +     *  However, the Container class overrides the <code>getChildAt()</code> method 
 +     *  and <code>numChildren</code> property (and several other methods) 
 +     *  to create the illusion that
 +     *  the container's children are the only child components.
 +     *
 +     *  <p>If you need to access all of the children of the container (both the
 +     *  content children and the skins), then use the methods and properties
 +     *  on the <code>rawChildren</code> property instead of the regular Container methods. 
 +     *  For example, use the <code>Container.rawChildren.getChildAt())</code> method.
 +     *  However, if a container creates a ContentPane Sprite object for its children,
 +     *  the <code>rawChildren</code> property value only counts the ContentPane, not the
 +     *  container's children.
 +     *  It is not always possible to determine when a container will have a ContentPane.</p>
 +     * 
 +     *  <p><b>Note:</b>If you call the <code>addChild</code> or 
 +     *  <code>addChildAt</code> method of the <code>rawChildren</code> object,
 +     *  set <code>tabFocusEnabled = false</code> on the component that you have added.
 +     *  Doing so prevents users from tabbing to the visual-only component
 +     *  that you have added.</p>
 +     *  
 +     *  @langversion 3.0
 +     *  @playerversion Flash 9
 +     *  @playerversion AIR 1.1
 +     *  @productversion Flex 3
 +     */
 +    public function get rawChildren():IChildList
 +    {
 +        if (!_rawChildren)
 +            _rawChildren = new ContainerRawChildrenList(this);
 +
 +        return _rawChildren;
 +    }
 +
 +    //----------------------------------
 +    //  usePadding
 +    //----------------------------------
 +
 +    /**
 +     *  @private
 +     */
 +    mx_internal function get usePadding():Boolean
 +    {
 +        // Containers, by default, always use padding.
 +        return true;
 +    }
 +
 +    //----------------------------------
 +    //  verticalLineScrollSize
 +    //----------------------------------
 +
 +    /**
 +     *  @private
 +     *  Storage for the verticalLineScrollSize property.
 +     */
 +    private var _verticalLineScrollSize:Number = 5;
 +
 +    [Bindable("verticalLineScrollSizeChanged")]
 +    [Inspectable(defaultValue="5")]
 +
 +    /**
 +     *  Number of pixels to scroll when the up- or down-arrow
 +     *  button in the vertical scroll bar is pressed,
 +     *  or when you scroll by using the mouse wheel.
 +     *  
 +     *  @default 5
 +     *  
 +     *  @langversion 3.0
 +     *  @playerversion Flash 9
 +     *  @playerversion AIR 1.1
 +     *  @productversion Flex 3
 +     */
 +    public function get verticalLineScrollSize():Number
 +    {
 +        return _verticalLineScrollSize;
 +    }
 +
 +    /**
 +     *  @private
 +     */
 +    public function set verticalLineScrollSize(value:Number):void
 +    {
 +        scrollPropertiesChanged = true;
 +
 +        _verticalLineScrollSize = value;
 +
 +        invalidateDisplayList();
 +
 +        dispatchEvent(new Event("verticalLineScrollSizeChanged"));
 +    }
 +
 +    //----------------------------------
 +    //  verticalPageScrollSize
 +    //----------------------------------
 +
 +    /**
 +     *  @private
 +     *  Storage for the verticalPageScrollSize property.
 +     */
 +    private var _verticalPageScrollSize:Number = 0;
 +
 +    [Bindable("verticalPageScrollSizeChanged")]
 +    [Inspectable(defaultValue="0")]
 +
 +    /**
 +     *  Number of pixels to scroll when the track
 +     *  in the vertical scroll bar is pressed.
 +     *  A value of 0 means that the page size
 +     *  will be calculated to be a full screen.
 +     * 
 +     *  @default 0   
 +     *  
 +     *  @langversion 3.0
 +     *  @playerversion Flash 9
 +     *  @playerversion AIR 1.1
 +     *  @productversion Flex 3
 +     */
 +    public function get verticalPageScrollSize():Number
 +    {
 +        return _verticalPageScrollSize;
 +    }
 +
 +    /**
 +     *  @private
 +     */
 +    public function set verticalPageScrollSize(value:Number):void
 +    {
 +        scrollPropertiesChanged = true;
 +
 +        _verticalPageScrollSize = value;
 +
 +        invalidateDisplayList();
 +
 +        dispatchEvent(new Event("verticalPageScrollSizeChanged"));
 +    }
 +
 +    //----------------------------------
 +    //  verticalScrollBar
 +    //----------------------------------
 +
 +    /**
 +     *  @private
 +     *  The vertical scrollbar (null if not present).
 +     */
 +	COMPILE::LATER
 +    private var _verticalScrollBar:ScrollBar;
 +
 +    /**
 +     *  The vertical scrollbar used in this container.
 +     *  This property is null if no vertical scroll bar
 +     *  is currently displayed.
 +     *  In general you do not access this property directly.
 +     *  Manipulation of the <code>verticalScrollPolicy</code> 
 +     *  and <code>verticalScrollPosition</code>
 +     *  properties should provide sufficient control over the scroll bar.
 +     *  
 +     *  @langversion 3.0
 +     *  @playerversion Flash 9
 +     *  @playerversion AIR 1.1
 +     *  @productversion Flex 3
 +     */
 +	COMPILE::LATER
 +    public function get verticalScrollBar():ScrollBar
 +    {
 +        return _verticalScrollBar;
 +    }
 +
 +    /**
 +     *  @private
 +     */
 +	COMPILE::LATER
 +    public function set verticalScrollBar(value:ScrollBar):void
 +    {
 +        _verticalScrollBar = value;
 +    }
 +
 +    //----------------------------------
 +    //  verticalScrollPosition
 +    //----------------------------------
 +
 +    /**
 +     *  @private
 +     *  Storage for the verticalScrollPosition property.
 +     */
 +	COMPILE::LATER
 +    private var _verticalScrollPosition:Number = 0;
 +
 +    [Bindable("scroll")]
 +    [Bindable("viewChanged")]
 +    [Inspectable(defaultValue="0")]
 +
 +    /**
 +     *  The current position of the vertical scroll bar.
 +     *  This is equal to the distance in pixels between the top edge
 +     *  of the scrollable surface and the topmost piece of the surface
 +     *  that is currently visible.
 +     *
 +     *  @default 0
 +     *  
 +     *  @langversion 3.0
 +     *  @playerversion Flash 9
 +     *  @playerversion AIR 1.1
 +     *  @productversion Flex 3
 +     */
 +	COMPILE::LATER
 +    public function get verticalScrollPosition():Number
 +    {
 +        if (!isNaN(verticalScrollPositionPending))
 +            return verticalScrollPositionPending;
 +
 +        return _verticalScrollPosition;
 +    }
 +
 +    /**
 +     *  @private
 +     */
 +	COMPILE::LATER
 +    public function set verticalScrollPosition(value:Number):void
 +    {
 +        if (_verticalScrollPosition == value)
 +            return;
 +
 +        // Note: We can't use maxVerticalScrollPosition to clamp the value here.
 +        // The verticalScrollBar may not exist yet,
 +        // or its maxPos might change during layout.
 +        // (For example, you could set the verticalScrollPosition of a childless container,
 +        // then add a child which causes it to have a scrollbar.)
 +        // The verticalScrollPosition gets clamped to the range 0 through maxVerticalScrollPosition
 +        // late, in the updateDisplayList() method, just before the scrollPosition
 +        // of the verticalScrollBar is set.
 +
 +        _verticalScrollPosition = value;
 +        scrollPositionChanged = true;
 +        if (!initialized)
 +            verticalScrollPositionPending = value;
 +
 +        invalidateDisplayList();
 +
 +        dispatchEvent(new Event("viewChanged"));
 +    }
 +
 +    //----------------------------------
 +    //  verticalScrollPolicy
 +    //----------------------------------
 +
 +    /**
 +     *  @private
 +     *  Storage for the verticalScrollPolicy property.
 +     */
 +	COMPILE::LATER
 +    mx_internal var _verticalScrollPolicy:String = ScrollPolicy.AUTO;
 +
 +    [Bindable("verticalScrollPolicyChanged")]
 +    [Inspectable(category="General", enumeration="off,on,auto", defaultValue="auto")]
 +
 +    /**
 +     *  Specifies whether the vertical scroll bar is always present,
 +     *  always absent, or automatically added when needed.
 +     *  Possible values are <code>ScrollPolicy.ON</code>, <code>ScrollPolicy.OFF</code>,
 +     *  and <code>ScrollPolicy.AUTO</code>.
 +     *  MXML values can be <code>"on"</code>, <code>"off"</code>,
 +     *  and <code>"auto"</code>.
 +     *
 +     *  <p>Setting this property to <code>ScrollPolicy.OFF</code> also prevents the
 +     *  <code>verticalScrollPosition</code> property from having an effect.</p>
 +     *
 +     *  <p>Note: This property does not apply to the ControlBar container.</p>
 +     *
 +     *  <p>If the <code>verticalScrollPolicy</code> is <code>ScrollPolicy.AUTO</code>,
 +     *  the vertical scroll bar appears when all of the following
 +     *  are true:</p>
 +     *  <ul>
 +     *    <li>One of the container's children extends beyond the top
 +     *      edge or bottom edge of the container.</li>
 +     *    <li>The <code>clipContent</code> property is <code>true</code>.</li>
 +     *    <li>The width and height of the container are large enough to
 +     *      reasonably accommodate a scroll bar.</li>
 +     *  </ul>
 +     *
 +     *  @default ScrollPolicy.AUTO
 +     *  
 +     *  @langversion 3.0
 +     *  @playerversion Flash 9
 +     *  @playerversion AIR 1.1
 +     *  @productversion Flex 3
 +     */
 +	COMPILE::LATER
 +    public function get verticalScrollPolicy():String
 +    {
 +        return _verticalScrollPolicy;
 +    }
 +
 +    /**
 +     *  @private
 +     */
 +	COMPILE::LATER
 +    public function set verticalScrollPolicy(value:String):void
 +    {
 +        if (_verticalScrollPolicy != value)
 +        {
 +            _verticalScrollPolicy = value;
 +
 +            invalidateDisplayList();
 +
 +            dispatchEvent(new Event("verticalScrollPolicyChanged"));
 +        }
 +    }
 +
 +    //----------------------------------
 +    //  viewMetrics
 +    //----------------------------------
 +
 +    /**
 +     *  @private
 +     *  Offsets including borders and scrollbars
 +     */
 +    private var _viewMetrics:EdgeMetrics;
 +
 +    /**
 +     *  Returns an object that has four properties: <code>left</code>,
 +     *  <code>top</code>, <code>right</code>, and <code>bottom</code>.
 +     *  The value of each property equals the thickness of the chrome
 +     *  (visual elements) around the edge of the container. 
 +     *
 +     *  <p>The chrome includes the border thickness.
 +     *  If the <code>horizontalScrollPolicy</code> or <code>verticalScrollPolicy</code> 
 +     *  property value is <code>ScrollPolicy.ON</code>, the
 +     *  chrome also includes the thickness of the corresponding
 +     *  scroll bar. If a scroll policy is <code>ScrollPolicy.AUTO</code>,
 +     *  the chrome measurement does not include the scroll bar thickness, 
 +     *  even if a scroll bar is displayed.</p>
 +     *
 +     *  <p>Subclasses of Container should override this method, so that
 +     *  they include other chrome to be taken into account when positioning
 +     *  the Container's children.
 +     *  For example, the <code>viewMetrics</code> property for the
 +     *  Panel class should return an object whose <code>top</code> property
 +     *  includes the thickness of the Panel container's title bar.</p>
 +     *  
 +     *  @langversion 3.0
 +     *  @playerversion Flash 9
 +     *  @playerversion AIR 1.1
 +     *  @productversion Flex 3
 +     */
 +    public function get viewMetrics():EdgeMetrics
 +    {
 +        var bm:EdgeMetrics = borderMetrics;
 +
 +        // If scrollPolicy is ScrollPolicy.ON, then the scrollbars are accounted for
 +        // during both measurement and layout.
 +        //
 +        // If scrollPolicy is ScrollPolicy.AUTO, then scrollbars are ignored during
 +        // measurement.  Otherwise, the entire layout of the app could change
 +        // everytime that the scrollbars turn on or off.
 +        //
 +        // However, we do take the width of scrollbars into account when laying
 +        // out our children.  That way, children that have a percentage width or
 +        // percentage height will only expand to consume space that's left over
 +        // after leaving room for the scrollbars.
 +		COMPILE::LATER
 +		{
 +        var verticalScrollBarIncluded:Boolean =
 +            verticalScrollBar != null &&
 +            (doingLayout || verticalScrollPolicy == ScrollPolicy.ON);
 +        var horizontalScrollBarIncluded:Boolean =
 +            horizontalScrollBar != null &&
 +            (doingLayout || horizontalScrollPolicy == ScrollPolicy.ON);
 +        if (!verticalScrollBarIncluded && !horizontalScrollBarIncluded)
 +            return bm;
 +		}
 +        // The viewMetrics property needs to return its own object.
 +        // Rather than allocating a new one each time, we'll allocate one once
 +        // and then hold a reference to it.
 +        if (!_viewMetrics)
 +        {
 +            _viewMetrics = bm.clone();
 +        }
 +        else
 +        {
 +            _viewMetrics.left = bm.left;
 +            _viewMetrics.right = bm.right;
 +            _viewMetrics.top = bm.top;
 +            _viewMetrics.bottom = bm.bottom;
 +        }
 +
 +		COMPILE::LATER
 +		{
 +        if (verticalScrollBarIncluded)
 +            _viewMetrics.right += verticalScrollBar.minWidth;
 +        if (horizontalScrollBarIncluded)
 +            _viewMetrics.bottom += horizontalScrollBar.minHeight;
 +		}
 +        return _viewMetrics;
 +    }
 +
 +    //----------------------------------
 +    //  viewMetricsAndPadding
 +    //----------------------------------
 +
 +    /**
 +     *  @private
 +     *  Cached value containing the view metrics plus the object's margins.
 +     */
 +    private var _viewMetricsAndPadding:EdgeMetrics;
 +
 +    /**
 +     *  Returns an object that has four properties: <code>left</code>,
 +     *  <code>top</code>, <code>right</code>, and <code>bottom</code>.
 +     *  The value of each property is equal to the thickness of the chrome
 +     *  (visual elements)
 +     *  around the edge of the container plus the thickness of the object's margins.
 +     *
 +     *  <p>The chrome includes the border thickness.
 +     *  If the <code>horizontalScrollPolicy</code> or <code>verticalScrollPolicy</code> 
 +     *  property value is <code>ScrollPolicy.ON</code>, the
 +     *  chrome also includes the thickness of the corresponding
 +     *  scroll bar. If a scroll policy is <code>ScrollPolicy.AUTO</code>,
 +     *  the chrome measurement does not include the scroll bar thickness, 
 +     *  even if a scroll bar is displayed.</p>
 +     *  
 +     *  @langversion 3.0
 +     *  @playerversion Flash 9
 +     *  @playerversion AIR 1.1
 +     *  @productversion Flex 3
 +     */
 +    public function get viewMetricsAndPadding():EdgeMetrics
 +    {
 +        // If this object has scrollbars, and if the verticalScrollPolicy
 +        // is not ScrollPolicy.ON, then the view metrics change
 +        // depending on whether we're doing layout or not.
 +        // In that case, we can't use a cached value.
 +        // In all other cases, use the cached value if it exists.
 +		COMPILE::LATER
 +		{
 +        if (_viewMetricsAndPadding &&
 +            (!horizontalScrollBar ||
 +             horizontalScrollPolicy == ScrollPolicy.ON) &&
 +            (!verticalScrollBar ||
 +             verticalScrollPolicy == ScrollPolicy.ON))
 +        {
 +            return _viewMetricsAndPadding;
 +        }
 +		}
 +		
 +        if (!_viewMetricsAndPadding)
 +            _viewMetricsAndPadding = new EdgeMetrics();
 +
 +        var o:EdgeMetrics = _viewMetricsAndPadding;
 +        var vm:EdgeMetrics = viewMetrics;
 +
 +        o.left = vm.left + getStyle("paddingLeft");
 +        o.right = vm.right + getStyle("paddingRight");
 +        o.top = vm.top + getStyle("paddingTop");
 +        o.bottom = vm.bottom + getStyle("paddingBottom");
 +
 +        return o;
 +    }
 +
 +    //--------------------------------------------------------------------------
 +    //
 +    //  Overridden methods: EventDispatcher
 +    //
 +    //--------------------------------------------------------------------------
 +
 +    /**
 +     *  @private
 +     *  If we add a mouse event, then we need to add a mouse shield
 +     *  to us and to all our children
 +     *  The mouseShield style is a non-inheriting style
 +     *  that is used by the view.
 +     *  The mouseShieldChildren style is an inherting style
 +     *  that is used by the children views.
 +     */
- 	COMPILE::AS3
++	COMPILE::SWF
 +    override public function addEventListener(
 +                                    type:String, listener:Function,
 +                                    useCapture:Boolean = false,
 +                                    priority:int = 0,
 +                                    useWeakReference:Boolean = false):void
 +    {
 +        super.addEventListener(type, listener, useCapture,
 +                               priority, useWeakReference);
 +
 +        // If we are a mouse event, then create a mouse shield.
 +        if (type == MouseEvent.CLICK ||
 +            type == MouseEvent.DOUBLE_CLICK ||
 +            type == MouseEvent.MOUSE_DOWN ||
 +            type == MouseEvent.MOUSE_MOVE ||
 +            type == MouseEvent.MOUSE_OVER ||
 +            type == MouseEvent.MOUSE_OUT ||
 +            type == MouseEvent.MOUSE_UP ||
 +            type == MouseEvent.MOUSE_WHEEL)
 +        {
 +            if (mouseEventReferenceCount < 0x7FFFFFFF /* int_max */ &&
 +                mouseEventReferenceCount++ == 0)
 +            {
 +                setStyle("mouseShield", true);
 +                setStyle("mouseShieldChildren", true);
 +            }
 +        }
 +    }
 +
 +    /**
 +     *  @private
 +     *  We're doing special behavior on addEventListener to make sure that 
 +     *  we successfully capture mouse events, even when there's no background.
 +     *  However, this means adding an event listener changes the behavior 
 +     *  a little, and this can be troublesome for overlapping components
 +     *  that now don't get any mouse events.  This is acceptable normally; 
 +     *  however, automation adds certain events to the Container, and 
 +     *  it'd be better if automation support didn't modify the behavior of 
 +     *  the component.  For this reason, especially, we have an mx_internal 
 +     *  $addEventListener to add event listeners without affecting the behavior 
 +     *  of the component.
 +     */
- 	COMPILE::AS3
++	COMPILE::SWF
 +    mx_internal function $addEventListener(
 +                            type:String, listener:Function,
 +                            useCapture:Boolean = false,
 +                            priority:int = 0,
 +                            useWeakReference:Boolean = false):void
 +    {
 +        super.addEventListener(type, listener, useCapture,
 +                               priority, useWeakReference);
 +    }
 +
 +    /**
 +     *  @private
 +     *  Remove the mouse shield if we no longer listen to any mouse events
 +     */
-     COMPILE::AS3
++    COMPILE::SWF
 +    override public function removeEventListener(
 +                                    type:String, listener:Function,
 +                                    useCapture:Boolean = false):void
 +    {
 +        super.removeEventListener(type, listener, useCapture);
 +
 +        // If we are a mouse event,
 +        // then decrement the mouse shield reference count.
 +        if (type == MouseEvent.CLICK ||
 +            type == MouseEvent.DOUBLE_CLICK ||
 +            type == MouseEvent.MOUSE_DOWN ||
 +            type == MouseEvent.MOUSE_MOVE ||
 +            type == MouseEvent.MOUSE_OVER ||
 +            type == MouseEvent.MOUSE_OUT ||
 +            type == MouseEvent.MOUSE_UP ||
 +            type == MouseEvent.MOUSE_WHEEL)
 +        {
 +            if (mouseEventReferenceCount > 0 &&
 +                --mouseEventReferenceCount == 0)
 +            {
 +                setStyle("mouseShield", false);
 +                setStyle("mouseShieldChildren", false);
 +            }
 +        }
 +    }
 +    
 +     /**
 +     *  @private
 +     *  We're doing special behavior on removeEventListener to make sure that 
 +     *  we successfully capture mouse events, even when there's no background.
 +     *  However, this means removing an event listener changes the behavior 
 +     *  a little, and this can be troublesome for overlapping components
 +     *  that now don't get any mouse events.  This is acceptable normally; 
 +     *  however, automation adds certain events to the Container, and 
 +     *  it'd be better if automation support didn't modify the behavior of 
 +     *  the component.  For this reason, especially, we have an mx_internal 
 +     *  $removeEventListener to remove event listeners without affecting the behavior 
 +     *  of the component.
 +     */
- 	COMPILE::AS3
++	COMPILE::SWF
 +    mx_internal function $removeEventListener(
 +                              type:String, listener:Function,
 +                              useCapture:Boolean = false):void
 +    {
 +        super.removeEventListener(type, listener, useCapture);
 +    }
 +
 +    //--------------------------------------------------------------------------
 +    //
 +    //  Overridden methods: DisplayObjectContainer
 +    //
 +    //--------------------------------------------------------------------------
 +
 +    /**
 +     *  Adds a child DisplayObject to this Container.
 +     *  The child is added after other existing children,
 +     *  so that the first child added has index 0,
 +     *  the next has index 1, an so on.
 +     *
 +     *  <p><b>Note: </b>While the <code>child</code> argument to the method
 +     *  is specified as of type DisplayObject, the argument must implement
 +     *  the IUIComponent interface to be added as a child of a container.
 +     *  All Flex components implement this interface.</p>
 +     *
 +     *  <p>Children are layered from back to front.
 +     *  In other words, if children overlap, the one with index 0
 +     *  is farthest to the back, and the one with index
 +     *  <code>numChildren - 1</code> is frontmost.
 +     *  This means the newly added children are layered
 +     *  in front of existing children.</p>
 +     *
 +     *  @param child The DisplayObject to add as a child of this Container.
 +     *  It must implement the IUIComponent interface.
 +     *
 +     *  @return The added child as an object of type DisplayObject. 
 +     *  You typically cast the return value to UIComponent, 
 +     *  or to the type of the added component.
 +     *
 +     *  @see mx.core.IUIComponent
 +     *
 +     *  @tiptext Adds a child object to this container.
 +     *  
 +     *  @langversion 3.0
 +     *  @playerversion Flash 9
 +     *  @playerversion AIR 1.1
 +     *  @productversion Flex 3
 +     */
 +    override public function addChild(child:DisplayObject):DisplayObject
 +    {
 +        return addChildAt(child, numChildren);
 +
 +        /* Application and Panel are depending on addChild calling addChildAt */
 +        
 +        /*
 +        addingChild(child);
 +
 +        if (contentPane)
 +            contentPane.addChild(child);
 +        else
 +            $addChild(child);
 +
 +        childAdded(child);
 +
 +        return child;
 +        */
 +    }
 +
 +    /**
 +     *  Adds a child DisplayObject to this Container.
 +     *  The child is added at the index specified.
 +     *
 +     *  <p><b>Note: </b>While the <code>child</code> argument to the method
 +     *  is specified as of type DisplayObject, the argument must implement
 +     *  the IUIComponent interface to be added as a child of a container.
 +     *  All Flex components implement this interface.</p>
 +     *
 +     *  <p>Children are layered from back to front.
 +     *  In other words, if children overlap, the one with index 0
 +     *  is farthest to the back, and the one with index
 +     *  <code>numChildren - 1</code> is frontmost.
 +     *  This means the newly added children are layered
 +     *  in front of existing children.</p>
 +     *
 +     *  <p>When you add a new child at an index that is already occupied
 +     *  by an old child, it doesn't replace the old child; instead the
 +     *  old child and the ones after it "slide over" and have their index
 +     *  incremented by one.
 +     *  For example, suppose a Container contains the children
 +     *  (A, B, C) and you add D at index 1.
 +     *  Then the container will contain (A, D, B, C).
 +     *  If you want to replace an old child, you must first remove it
 +     *  before adding the new one.</p>
 +     *
 +     *  @param child The DisplayObject to add as a child of this Container.
 +     *  It must implement the IUIComponent interface.
 +     *
 +     *  @param index The index to add the child at.
 +     *
 +     *  @return The added child as an object of type DisplayObject. 
 +     *  You typi

<TRUNCATED>