You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@royale.apache.org by ah...@apache.org on 2018/05/04 17:15:50 UTC

[royale-asjs] 04/05: get List and DataGrid to come up. DataGrid still needs to autogenerate columns

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

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

commit f4c1cfcc406f8bbf7aeb611cb8eb47ec0a71b50b
Author: Alex Harui <ah...@apache.org>
AuthorDate: Fri May 4 10:14:25 2018 -0700

    get List and DataGrid to come up.  DataGrid still needs to autogenerate columns
---
 .../MXRoyale/src/main/resources/defaults.css       |  44 +
 .../src/main/resources/mx-royale-manifest.xml      |   8 +-
 .../src/main/royale/mx/controls/DataGrid.as        | 831 +++++++++++++++++++
 .../MXRoyale/src/main/royale/mx/controls/List.as   | 360 +++++++++
 .../mx/controls/dataGridClasses/DataGridColumn.as  | 399 +++++++++
 .../royale/mx/controls/listClasses/ListBase.as     | 896 ++++++++++++++++++++-
 .../mx/controls/listClasses/ListItemRenderer.as    |  52 ++
 .../MXRoyale/src/main/royale/mx/core/Container.as  |   6 +-
 .../main/royale/mx/styles/CSSStyleDeclaration.as   | 216 +++++
 .../src/main/royale/mx/styles/IStyleManager2.as    |  47 ++
 10 files changed, 2843 insertions(+), 16 deletions(-)

diff --git a/frameworks/projects/MXRoyale/src/main/resources/defaults.css b/frameworks/projects/MXRoyale/src/main/resources/defaults.css
index b1244b5..46aad73 100644
--- a/frameworks/projects/MXRoyale/src/main/resources/defaults.css
+++ b/frameworks/projects/MXRoyale/src/main/resources/defaults.css
@@ -67,6 +67,20 @@ Container
 	IViewportModel: ClassReference("org.apache.royale.html.beads.models.ViewportModel");
 }
 
+DataGrid
+{
+	IChangePropagator: ClassReference("org.apache.royale.html.beads.DataGridColumnChangePropagator");
+	IDataGridPresentationModel: ClassReference("org.apache.royale.html.beads.models.DataGridPresentationModel");
+	IBeadView: ClassReference("org.apache.royale.html.beads.DataGridView");
+	IBeadModel: ClassReference("org.apache.royale.html.beads.models.DataGridModel");
+	IBeadLayout: ClassReference("org.apache.royale.html.beads.layouts.DataGridLayout");
+	
+	background-color: #FFFFFF;
+	border: 1px solid #222222;
+	width: 200px;
+	height: 200px;
+}
+
 DateChooser 
 {
 	IBeadView:   ClassReference("org.apache.royale.html.beads.DateChooserView");
@@ -83,6 +97,19 @@ Image
 	IBeadView:  ClassReference("org.apache.royale.html.beads.ImageView");
 }
 
+List
+{
+	IBeadModel: ClassReference("org.apache.royale.html.beads.models.ArraySelectionModel");
+	IBeadView:  ClassReference("org.apache.royale.html.beads.ListView");			
+	IBeadController: ClassReference("org.apache.royale.html.beads.controllers.ListSingleSelectionMouseController");
+	IBeadLayout: ClassReference("org.apache.royale.html.beads.layouts.VerticalLayout");
+	IDataProviderItemRendererMapper: ClassReference("org.apache.royale.html.beads.DataItemRendererFactoryForArrayData");
+	IItemRendererClassFactory: ClassReference("org.apache.royale.core.ItemRendererClassFactory");
+	IItemRenderer: ClassReference("mx.controls.listClasses.ListItemRenderer");
+	IViewport: ClassReference("org.apache.royale.html.supportClasses.ScrollingViewport");
+	IViewportModel: ClassReference("org.apache.royale.html.beads.models.ViewportModel");
+}
+
 NumericStepper
 {
 	IBeadModel: ClassReference("org.apache.royale.html.beads.models.RangeModel");
@@ -137,6 +164,13 @@ Panel .TitleBar
 		IContentView: ClassReference("org.apache.royale.html.supportClasses.ContainerContentArea");
 	}
 	
+	DataGrid {
+		IBackgroundBead: ClassReference("org.apache.royale.html.beads.SolidBackgroundBead");
+		IBorderBead: ClassReference("org.apache.royale.html.beads.SingleLineBorderBead");
+		font-size: 11px;
+		font-family: Arial;
+	}
+	
 	Label
 	{
 		IBeadModel: ClassReference("org.apache.royale.html.beads.models.TextModel");
@@ -144,6 +178,16 @@ Panel .TitleBar
 		iMeasurementBead: ClassReference("org.apache.royale.html.beads.TextFieldLabelMeasurementBead");
 	}
 	
+	List
+	{
+		iBackgroundBead: ClassReference("org.apache.royale.html.beads.SolidBackgroundBead");
+		iBorderBead: ClassReference('org.apache.royale.html.beads.SingleLineBorderBead');
+		iBorderModel: ClassReference('org.apache.royale.html.beads.models.SingleLineBorderModel');
+		IContentView: ClassReference("org.apache.royale.html.supportClasses.DataGroup");
+		font-size: 11px;
+		font-family: Arial;
+	}
+	
 	Panel
 	{
 		IContentView: ClassReference("org.apache.royale.html.supportClasses.ContainerContentArea");
diff --git a/frameworks/projects/MXRoyale/src/main/resources/mx-royale-manifest.xml b/frameworks/projects/MXRoyale/src/main/resources/mx-royale-manifest.xml
index eedabdb..6e163d4 100644
--- a/frameworks/projects/MXRoyale/src/main/resources/mx-royale-manifest.xml
+++ b/frameworks/projects/MXRoyale/src/main/resources/mx-royale-manifest.xml
@@ -25,10 +25,13 @@
 	<component id="Button" class="mx.controls.Button" />
 	<component id="CheckBox" class="mx.controls.CheckBox" />
     <component id="ComboBox" class="mx.controls.ComboBox" />
+    <component id="DataGrid" class="mx.controls.DataGrid" />
+    <component id="DataGridColumn" class="mx.controls.dataGridClasses.DataGridColumn" />
 	<component id="DateChooser" class="mx.controls.DateChooser" />
 	<component id="Image" class="mx.controls.Image" />
 	<component id="Label" class="mx.controls.Label" />
 	<component id="LinkButton" class="mx.controls.LinkButton" />
+    <component id="List" class="mx.controls.List" />
 	<component id="NumericStepper" class="mx.controls.NumericStepper" />
 	<component id="ProgressBar" class="mx.controls.ProgressBar" />
 	<component id="RadioButton" class="mx.controls.RadioButton" />
@@ -45,10 +48,13 @@
 	<component id="HDividedBox" class="mx.containers.HDividedBox" />
 	<component id="VBox" class="mx.containers.VBox" />	
 	<component id="VDividedBox" class="mx.containers.VDividedBox" />
+    <component id="Panel" class="mx.containers.Panel" />
 	<!--<component id="ViewStack" class="mx.containers.ViewStack" /> waiting for commit -->
 	<component id="ApplicationLayout" class="mx.containers.beads.ApplicationLayout" />
 	<component id="BoxLayout" class="mx.containers.beads.BoxLayout" />
 	<component id="CanvasLayout" class="mx.containers.beads.CanvasLayout" />
 	
-    <component id="State" class="mx.states.State" /> 
+    <component id="State" class="mx.states.State" />
+    
+    <component id="ListItemRenderer" class="mx.controls.listClasses.ListItemRenderer" />
 </componentPackage>
diff --git a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/DataGrid.as b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/DataGrid.as
new file mode 100644
index 0000000..2666643
--- /dev/null
+++ b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/DataGrid.as
@@ -0,0 +1,831 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  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
+{
+COMPILE::JS
+{
+    import goog.DEBUG;
+}
+/*
+import flash.display.DisplayObject;
+import flash.display.DisplayObjectContainer;
+import flash.display.InteractiveObject;
+import flash.display.Graphics;
+import flash.display.Shape;
+import flash.display.Sprite;
+import flash.events.Event;
+import flash.events.FocusEvent;
+import flash.events.KeyboardEvent;
+import flash.events.MouseEvent;
+import flash.geom.Point;
+import flash.ui.Keyboard;
+import flash.utils.Dictionary;
+import flash.utils.describeType;
+
+import mx.collections.CursorBookmark;
+import mx.collections.ICollectionView;
+import mx.collections.ISort;
+import mx.collections.ISortField;
+import mx.collections.ItemResponder;
+import mx.collections.Sort;
+import mx.collections.SortField;
+import mx.collections.errors.ItemPendingError;
+import mx.controls.dataGridClasses.DataGridBase;
+import mx.controls.dataGridClasses.DataGridColumn;
+import mx.controls.dataGridClasses.DataGridDragProxy;
+import mx.controls.dataGridClasses.DataGridHeader;
+import mx.controls.dataGridClasses.DataGridItemRenderer;
+import mx.controls.dataGridClasses.DataGridListData;
+import mx.controls.listClasses.IDropInListItemRenderer;
+import mx.controls.listClasses.IListItemRenderer;
+import mx.controls.listClasses.ListBaseContentHolder;
+import mx.controls.listClasses.ListBaseSeekPending;
+import mx.controls.listClasses.ListRowInfo;
+import mx.controls.scrollClasses.ScrollBar;
+import mx.core.ContextualClassFactory;
+import mx.core.EdgeMetrics;
+import mx.core.EventPriority;
+import mx.core.FlexShape;
+import mx.core.FlexSprite;
+import mx.core.IFactory;
+import mx.core.IFlexDisplayObject;
+import mx.core.IFlexModuleFactory;
+import mx.core.IIMESupport;
+import mx.core.IInvalidating;
+import mx.core.IPropertyChangeNotifier;
+import mx.core.IRectangularBorder;
+import mx.core.IUIComponent;
+import mx.core.ScrollPolicy;
+import mx.core.UIComponent;
+import mx.core.UIComponentGlobals;
+import mx.core.mx_internal;
+import mx.events.CollectionEvent;
+import mx.events.CollectionEventKind;
+import mx.events.DataGridEvent;
+import mx.events.DataGridEventReason;
+import mx.events.DragEvent;
+import mx.events.IndexChangedEvent;
+import mx.events.ListEvent;
+import mx.events.SandboxMouseEvent;
+import mx.events.ScrollEvent;
+import mx.events.ScrollEventDetail;
+import mx.managers.IFocusManager;
+import mx.managers.IFocusManagerComponent;
+import mx.skins.halo.ListDropIndicator;
+import mx.styles.ISimpleStyleClient;
+import mx.utils.ObjectUtil;
+import mx.utils.StringUtil;
+
+use namespace mx_internal;
+*/
+    
+import mx.controls.listClasses.ListBase;
+import org.apache.royale.core.IBead;
+import org.apache.royale.core.IDataGrid;
+import org.apache.royale.core.IDataGridPresentationModel;
+import org.apache.royale.core.IDataGridModel;
+import org.apache.royale.core.ValuesManager;
+
+//--------------------------------------
+//  Events
+//--------------------------------------
+
+/**
+ *  Dispatched when the user releases the mouse button while over an item 
+ *  renderer, tabs to the DataGrid control or within the DataGrid control, 
+ *  or in any other way attempts to edit an item.
+ *
+ *  @eventType mx.events.DataGridEvent.ITEM_EDIT_BEGINNING
+ *  
+ *  @langversion 3.0
+ *  @playerversion Flash 9
+ *  @playerversion AIR 1.1
+ *  @productversion Flex 3
+ */
+//[Event(name="itemEditBeginning", type="mx.events.DataGridEvent")]
+
+/**
+ *  Dispatched when the <code>editedItemPosition</code> property has been set
+ *  and the item can be edited.
+ *
+ *  @eventType mx.events.DataGridEvent.ITEM_EDIT_BEGIN
+ *  
+ *  @langversion 3.0
+ *  @playerversion Flash 9
+ *  @playerversion AIR 1.1
+ *  @productversion Flex 3
+ */
+//[Event(name="itemEditBegin", type="mx.events.DataGridEvent")]
+
+/**
+ *  Dispatched when the item editor has just been instantiated.
+ *
+ *  @eventType mx.events.DataGridEvent.ITEM_EDITOR_CREATE
+ *  
+ *  @langversion 3.0
+ *  @playerversion Flash 9
+ *  @playerversion AIR 1.1
+ *  @productversion Flex 3
+ */
+//[Event(name="itemEditorCreate", type="mx.events.DataGridEvent")]
+
+/**
+ *  Dispatched when an item editing session ends for any reason.
+ *
+ *  @eventType mx.events.DataGridEvent.ITEM_EDIT_END
+ *  
+ *  @langversion 3.0
+ *  @playerversion Flash 9
+ *  @playerversion AIR 1.1
+ *  @productversion Flex 3
+ */
+//[Event(name="itemEditEnd", type="mx.events.DataGridEvent")]
+
+/**
+ *  Dispatched when an item renderer gets focus, which can occur if the user
+ *  clicks on an item in the DataGrid control or navigates to the item using
+ *  a keyboard.  Only dispatched if the item is editable.
+ *
+ *  @eventType mx.events.DataGridEvent.ITEM_FOCUS_IN
+ *  
+ *  @langversion 3.0
+ *  @playerversion Flash 9
+ *  @playerversion AIR 1.1
+ *  @productversion Flex 3
+ */
+//[Event(name="itemFocusIn", type="mx.events.DataGridEvent")]
+
+/**
+ *  Dispatched when an item renderer loses focus, which can occur if the user
+ *  clicks another item in the DataGrid control or clicks outside the control,
+ *  or uses the keyboard to navigate to another item in the DataGrid control
+ *  or outside the control.
+ *  Only dispatched if the item is editable.
+ *
+ *  @eventType mx.events.DataGridEvent.ITEM_FOCUS_OUT
+ *  
+ *  @langversion 3.0
+ *  @playerversion Flash 9
+ *  @playerversion AIR 1.1
+ *  @productversion Flex 3
+ */
+//[Event(name="itemFocusOut", type="mx.events.DataGridEvent")]
+
+/**
+ *  Dispatched when a user changes the width of a column, indicating that the 
+ *  amount of data displayed in that column may have changed.
+ *  If <code>horizontalScrollPolicy</code> is <code>"off"</code>, other
+ *  columns shrink or expand to compensate for the columns' resizing,
+ *  and they also dispatch this event.
+ *
+ *  @eventType mx.events.DataGridEvent.COLUMN_STRETCH
+ *  
+ *  @langversion 3.0
+ *  @playerversion Flash 9
+ *  @playerversion AIR 1.1
+ *  @productversion Flex 3
+ */
+//[Event(name="columnStretch", type="mx.events.DataGridEvent")]
+
+/**
+ *  Dispatched when the user releases the mouse button on a column header
+ *  to request the control to sort
+ *  the grid contents based on the contents of the column.
+ *  Only dispatched if the column is sortable and the data provider supports 
+ *  sorting. The DataGrid control has a default handler for this event that implements
+ *  a single-column sort.  Multiple-column sort can be implemented by calling the 
+ *  <code>preventDefault()</code> method to prevent the single column sort and setting 
+ *  the <code>sort</code> property of the data provider.
+ * <p>
+ * <b>Note</b>: The sort arrows are defined by the default event handler for
+ * the headerRelease event. If you call the <code>preventDefault()</code> method
+ * in your event handler, the arrows are not drawn.
+ * </p>
+ *
+ *  @eventType mx.events.DataGridEvent.HEADER_RELEASE
+ *  
+ *  @langversion 3.0
+ *  @playerversion Flash 9
+ *  @playerversion AIR 1.1
+ *  @productversion Flex 3
+ */
+//[Event(name="headerRelease", type="mx.events.DataGridEvent")]
+
+/**
+ *  Dispatched when the user releases the mouse button on a column header after 
+ *  having dragged the column to a new location resulting in shifting the column
+ *  to a new index.
+ *
+ *  @eventType mx.events.IndexChangedEvent.HEADER_SHIFT
+ *  
+ *  @langversion 3.0
+ *  @playerversion Flash 9
+ *  @playerversion AIR 1.1
+ *  @productversion Flex 3
+ */
+//[Event(name="headerShift", type="mx.events.IndexChangedEvent")]
+
+//--------------------------------------
+//  Styles
+//--------------------------------------
+
+//include "../styles/metadata/IconColorStyles.as"
+
+/**
+ *  Name of the class of the itemEditor to be used if one is not
+ *  specified for a column.  This is a way to set
+ *  an item editor for a group of DataGrids instead of having to
+ *  set each one individually.  If you set the DataGridColumn's itemEditor
+ *  property, it supercedes this value.
+ *  @default null
+ *  
+ *  @langversion 3.0
+ *  @playerversion Flash 10
+ *  @playerversion AIR 1.5
+ *  @productversion Flex 4
+ */
+//[Style(name="defaultDataGridItemEditor", type="Class", inherit="no")]
+
+/**
+ *  Name of the class of the itemRenderer to be used if one is not
+ *  specified for a column or its header.  This is a way to set
+ *  an itemRenderer for a group of DataGrids instead of having to
+ *  set each one individually.  If you set the DataGrid's itemRenderer
+ *  property, it supercedes this value.
+ *  @default null
+ *  
+ *  @langversion 3.0
+ *  @playerversion Flash 10
+ *  @playerversion AIR 1.5
+ *  @productversion Flex 4
+ */
+//[Style(name="defaultDataGridItemRenderer", type="Class", inherit="no")]
+
+/**
+ *  A flag that indicates whether to show vertical grid lines between
+ *  the columns.
+ *  If <code>true</code>, shows vertical grid lines.
+ *  If <code>false</code>, hides vertical grid lines.
+ *  @default true
+ *  
+ *  @langversion 3.0
+ *  @playerversion Flash 9
+ *  @playerversion AIR 1.1
+ *  @productversion Flex 3
+ */
+//[Style(name="verticalGridLines", type="Boolean", inherit="no")]
+
+/**
+ *  A flag that indicates whether to show horizontal grid lines between
+ *  the rows.
+ *  If <code>true</code>, shows horizontal grid lines.
+ *  If <code>false</code>, hides horizontal grid lines.
+ *  @default false
+ *  
+ *  @langversion 3.0
+ *  @playerversion Flash 9
+ *  @playerversion AIR 1.1
+ *  @productversion Flex 3
+ */
+//[Style(name="horizontalGridLines", type="Boolean", inherit="no")]
+
+/**
+ *  The color of the vertical grid lines.
+ *  
+ *  The default value for the Halo theme is <code>0xCCCCCC</code>.
+ *  The default value for the Spark theme is <code>0x696969</code>.
+ *  
+ *  @langversion 3.0
+ *  @playerversion Flash 9
+ *  @playerversion AIR 1.1
+ *  @productversion Flex 3
+ */
+//[Style(name="verticalGridLineColor", type="uint", format="Color", inherit="yes")]
+
+/**
+ *  The color of the horizontal grid lines.
+ *  @default 0xF7F7F7
+ *  
+ *  @langversion 3.0
+ *  @playerversion Flash 9
+ *  @playerversion AIR 1.1
+ *  @productversion Flex 3
+ */
+//[Style(name="horizontalGridLineColor", type="uint", format="Color", inherit="yes")]
+
+/**
+ *  An array of two colors used to draw the header background gradient.
+ *  The first color is the top color.
+ *  The second color is the bottom color.
+ *  @default [0xFFFFFF, 0xE6E6E6]
+ *  
+ *  @langversion 3.0
+ *  @playerversion Flash 9
+ *  @playerversion AIR 1.1
+ *  @productversion Flex 3
+ */
+//[Style(name="headerColors", type="Array", arrayType="uint", format="Color", inherit="yes", theme="halo")]
+
+/**
+ *  The color of the row background when the user rolls over the row.
+ *  
+ *  The default value for the Halo theme is <code>0xB2E1FF</code>.
+ *  The default value for the Spark theme is <code>0xCEDBEF</code>.
+ *  
+ *  @langversion 3.0
+ *  @playerversion Flash 9
+ *  @playerversion AIR 1.1
+ *  @productversion Flex 3
+ */
+//[Style(name="rollOverColor", type="uint", format="Color", inherit="yes")]
+
+/**
+ *  The color of the background for the row when the user selects 
+ *  an item renderer in the row.
+ * 
+ *  The default value for the Halo theme is <code>0x7FCEFF</code>.
+ *  The default value for the Spark theme is <code>0xA8C6EE</code>.
+ *  
+ *  @langversion 3.0
+ *  @playerversion Flash 9
+ *  @playerversion AIR 1.1
+ *  @productversion Flex 3
+ */
+//[Style(name="selectionColor", type="uint", format="Color", inherit="yes")]
+
+/**
+ *  The name of a CSS style declaration for controlling other aspects of
+ *  the appearance of the column headers.
+ *  @default "dataGridStyles"
+ *  
+ *  @langversion 3.0
+ *  @playerversion Flash 9
+ *  @playerversion AIR 1.1
+ *  @productversion Flex 3
+ */
+//[Style(name="headerStyleName", type="String", inherit="no")]
+
+/**
+ *  The class to use as the skin for a column that is being resized.
+ * 
+ *  @default mx.skins.halo.DataGridColumnResizeSkin (for both Halo and Spark themes)
+ *  
+ *  @langversion 3.0
+ *  @playerversion Flash 9
+ *  @playerversion AIR 1.1
+ *  @productversion Flex 3
+ */
+//[Style(name="columnResizeSkin", type="Class", inherit="no")]
+
+
+/**
+ *  The class to use as the skin that defines the appearance of the  
+ *  background of the column headers in a DataGrid control.
+ *  The default value for the Halo theme is <code>mx.skins.halo.DataGridHeaderBackgroundSkin</code>.
+ *  The default value for the Spark theme is <code>mx.skins.spark.DataGridHeaderBackgroundSkin</code>.
+ *  
+ *  @langversion 3.0
+ *  @playerversion Flash 9
+ *  @playerversion AIR 1.1
+ *  @productversion Flex 3
+ */
+//[Style(name="headerBackgroundSkin", type="Class", inherit="no")]
+
+/**
+ *  The class to use as the skin that defines the appearance of the 
+ *  separator between column headers in a DataGrid control.
+ *  The default value for the Halo theme is <code>mx.skins.halo.DataGridHeaderSeparator</code>.
+ *  The default value for the Spark theme is <code>mx.skins.spark.DataGridHeaderSeparatorSkin</code>.
+ *  
+ *  @langversion 3.0
+ *  @playerversion Flash 9
+ *  @playerversion AIR 1.1
+ *  @productversion Flex 3
+ */
+//[Style(name="headerSeparatorSkin", type="Class", inherit="no")]
+
+/**
+ *  The class to use as the skin that defines the appearance of the 
+ *  separator between rows in a DataGrid control. 
+ *  By default, the DataGrid control uses the 
+ *  <code>drawHorizontalLine()</code> and <code>drawVerticalLine()</code> methods
+ *  to draw the separators.
+ *
+ *  @default undefined
+ *  
+ *  @langversion 3.0
+ *  @playerversion Flash 9
+ *  @playerversion AIR 1.1
+ *  @productversion Flex 3
+ */
+//[Style(name="horizontalSeparatorSkin", type="Class", inherit="no")]
+
+/**
+ *  The class to use as the skin that defines the appearance of the 
+ *  separator between the locked and unlocked rows in a DataGrid control.
+ *  By default, the DataGrid control uses the 
+ *  <code>drawHorizontalLine()</code> and <code>drawVerticalLine()</code> methods
+ *  to draw the separators.
+ *
+ *  @default undefined
+ *  
+ *  @langversion 3.0
+ *  @playerversion Flash 9
+ *  @playerversion AIR 1.1
+ *  @productversion Flex 3
+ */
+//[Style(name="horizontalLockedSeparatorSkin", type="Class", inherit="no")]
+
+/**
+ *  The class to use as the skin that defines the appearance of the 
+ *  separators between columns in a DataGrid control.
+ *  By default, the DataGrid control uses the 
+ *  <code>drawHorizontalLine()</code> and <code>drawVerticalLine()</code> methods
+ *  to draw the separators.
+ *
+ *  @default undefined
+ *  
+ *  @langversion 3.0
+ *  @playerversion Flash 9
+ *  @playerversion AIR 1.1
+ *  @productversion Flex 3
+ */
+//[Style(name="verticalSeparatorSkin", type="Class", inherit="no")]
+
+/**
+ *  The class to use as the skin that defines the appearance of the 
+ *  separator between the locked and unlocked columns in a DataGrid control.
+ *  By default, the DataGrid control uses the 
+ *  <code>drawHorizontalLine()</code> and <code>drawVerticalLine()</code> methods
+ *  to draw the separators.
+ *
+ *  @default undefined
+ *  
+ *  @langversion 3.0
+ *  @playerversion Flash 9
+ *  @playerversion AIR 1.1
+ *  @productversion Flex 3
+ */
+//[Style(name="verticalLockedSeparatorSkin", type="Class", inherit="no")]
+
+/**
+ *  The class to use as the skin for the arrow that indicates the column sort 
+ *  direction.
+ *  The default value for the Halo theme is <code>mx.skins.halo.DataGridSortArrow</code>.
+ *  The default value for the Spark theme is <code>mx.skins.spark.DataGridSortArrow</code>.
+ *  
+ *  @langversion 3.0
+ *  @playerversion Flash 9
+ *  @playerversion AIR 1.1
+ *  @productversion Flex 3
+ */
+//[Style(name="sortArrowSkin", type="Class", inherit="no")]
+
+/**
+ *  The class to use as the skin for the cursor that indicates that a column
+ *  can be resized.
+ *  The default value is the "cursorStretch" symbol from the Assets.swf file.
+ *  
+ *  @langversion 3.0
+ *  @playerversion Flash 9
+ *  @playerversion AIR 1.1
+ *  @productversion Flex 3
+ */
+//[Style(name="stretchCursor", type="Class", inherit="no")]
+
+/**
+ *  The class to use as the skin that indicates that 
+ *  a column can be dropped in the current location.
+ *
+ *  @default mx.skins.halo.DataGridColumnDropIndicator (for both Halo and Spark themes)
+ *  
+ *  @langversion 3.0
+ *  @playerversion Flash 9
+ *  @playerversion AIR 1.1
+ *  @productversion Flex 3
+ */
+//[Style(name="columnDropIndicatorSkin", type="Class", inherit="no")]
+
+/**
+ *  The name of a CSS style declaration for controlling aspects of the
+ *  appearance of column when the user is dragging it to another location.
+ *
+ *  @default "headerDragProxyStyle"
+ *  
+ *  @langversion 3.0
+ *  @playerversion Flash 9
+ *  @playerversion AIR 1.1
+ *  @productversion Flex 3
+ */
+//[Style(name="headerDragProxyStyleName", type="String", inherit="no")]
+
+//--------------------------------------
+//  Excluded APIs
+//--------------------------------------
+
+[Exclude(name="columnCount", kind="property")]
+[Exclude(name="columnWidth", kind="property")]
+[Exclude(name="iconField", kind="property")]
+[Exclude(name="iconFunction", kind="property")]
+[Exclude(name="labelField", kind="property")]
+[Exclude(name="offscreenExtraRowsOrColumns", kind="property")]
+[Exclude(name="offscreenExtraRows", kind="property")]
+[Exclude(name="offscreenExtraRowsTop", kind="property")]
+[Exclude(name="offscreenExtraRowsBottom", kind="property")]
+[Exclude(name="offscreenExtraColumns", kind="property")]
+[Exclude(name="offscreenExtraColumnsLeft", kind="property")]
+[Exclude(name="offscreenExtraColumnsRight", kind="property")]
+[Exclude(name="offscreenExtraRowsOrColumnsChanged", kind="property")]
+[Exclude(name="showDataTips", kind="property")]
+[Exclude(name="cornerRadius", kind="style")]
+
+//--------------------------------------
+//  Other metadata
+//--------------------------------------
+
+[AccessibilityClass(implementation="mx.accessibility.DataGridAccImpl")]
+
+[DataBindingInfo("acceptedTypes", "{ dataProvider: &quot;String&quot; }")]
+
+[DefaultBindingProperty(source="selectedItem", destination="dataProvider")]
+
+[DefaultProperty("dataProvider")]
+
+[DefaultTriggerEvent("change")]
+
+//[IconFile("DataGrid.png")]
+
+[RequiresDataBinding(true)]
+
+[Alternative(replacement="spark.components.DataGrid", since="4.5")]
+
+/**
+ *  The <code>DataGrid</code> control is like a List except that it can 
+ *  show more than one column of data making it suited for showing 
+ *  objects with multiple properties.
+ *  <p>
+ *  The DataGrid control provides the following features:
+ *  <ul>
+ *  <li>Columns of different widths or identical fixed widths</li>
+ *  <li>Columns that the user can resize at runtime </li>
+ *  <li>Columns that the user can reorder at runtime </li>
+ *  <li>Optional customizable column headers</li>
+ *  <li>Ability to use a custom item renderer for any column to display 
+ *      data 
+ *  other than text</li>
+ *  <li>Support for sorting the data by clicking on a column</li>
+ *  </ul>
+ *  </p>
+ *  The DataGrid control is intended for viewing data, and not as a
+ *  layout tool like an HTML table.
+ *  The mx.containers package provides those layout tools.
+ *  
+ *  <p>The DataGrid control has the following default sizing 
+ *     characteristics:</p>
+ *     <table class="innertable">
+ *        <tr>
+ *           <th>Characteristic</th>
+ *           <th>Description</th>
+ *        </tr>
+ *        <tr>
+ *           <td>Default size</td>
+ *           <td>If the columns are empty, the default width is 300 
+ *               pixels. If the columns contain information but define 
+ *               no explicit widths, the default width is 100 pixels 
+ *               per column. The DataGrid width is sized to fit the 
+ *               width of all columns, if possible. 
+ *               The default number of displayed rows, including the 
+ *               header is 7, and each row, by default, is 20 pixels 
+ *               high.
+ *           </td>
+ *        </tr>
+ *        <tr>
+ *           <td>Minimum size</td>
+ *           <td>0 pixels.</td>
+ *        </tr>
+ *        <tr>
+ *           <td>Maximum size</td>
+ *           <td>5000 by 5000.</td>
+ *        </tr>
+ *     </table>
+ *
+ *  @mxml
+ *  <p>
+ *  The <code>&lt;mx:DataGrid&gt;</code> tag inherits all of the tag 
+ *  attributes of its superclass, except for <code>labelField</code>, 
+ *  <code>iconField</code>, and <code>iconFunction</code>, and adds the 
+ *  following tag attributes:
+ *  </p>
+ *  <pre>
+ *  &lt;mx:DataGrid
+ *    <b>Properties</b>
+ *    columns="<i>From dataProvider</i>"
+ *    draggableColumns="true|false"
+ *    editable="false|true"
+ *    editedItemPosition="<code>null</code>"
+ *    horizontalScrollPosition="null"
+ *    imeMode="null"
+ *    itemEditorInstance="null"
+ *    minColumnWidth="<code>NaN</code>"
+ *    resizableColumns="true|false"
+ *    sortableColumns="true|false"
+ *    
+ *    <b>Styles</b>
+ *    backgroundDisabledColor="0xEFEEEF"
+ *    columnDropIndicatorSkin="DataGridColumnDropIndicator"
+ *    columnResizeSkin="DataGridColumnResizeSkin"
+ *    disabledIconColor="0x999999"
+ *    headerColors="[#FFFFFF, #E6E6E6]"
+ *    headerDragProxyStyleName="headerDragProxyStyle"
+ *    headerSeparatorSkin="DataGridHeaderSeparator"
+ *    headerStyleName="dataGridStyles"
+ *    horizontalGridLineColor="0xF7F7F7"
+ *    horizontalGridLines="false|true"
+ *    horizontalLockedSeparatorSkin="undefined"
+ *    horizontalSeparatorSkin="undefined"
+ *    iconColor="0x111111"
+ *    rollOverColor="0xB2E1FF"
+ *    selectionColor="0x7FCEFF"
+ *    sortArrowSkin="DataGridSortArrow"
+ *    stretchCursor="<i>"cursorStretch" symbol from the Assets.swf file</i>"
+ *    verticalGridLineColor="0xCCCCCC"
+ *    verticalGridLines="false|true"
+ *    verticalLockedSeparatorSkin="undefined"
+ *    verticalSeparatorSkin="undefined"
+ *     
+ *    <b>Events</b>
+ *    columnStretch="<i>No default</i>"
+ *    headerRelease="<i>No default</i>"
+ *    headerShift="<i>No default</i>"
+ *    itemEditBegin="<i>No default</i>"
+ *    itemEditBeginning="<i>No default</i>" 
+ *    itemEditEnd="<i>No default</i>"
+ *    itemFocusIn="<i>No default</i>"
+ *    itemFocusOut="<i>No default</i>"
+ *  /&gt;
+ *   
+ *  <b>The following DataGrid code sample specifies the column order:</b>
+ *  &lt;mx:DataGrid&gt;
+ *    &lt;mx:dataProvider&gt;
+ *        &lt;mx:Object Artist="Pavement" Price="11.99"
+ *          Album="Slanted and Enchanted"/&gt;
+ *        &lt;mx:Object Artist="Pavement"
+ *          Album="Brighten the Corners" Price="11.99"/&gt;
+ *    &lt;/mx:dataProvider&gt;
+ *    &lt;mx:columns&gt;
+ *        &lt;mx:DataGridColumn dataField="Album"/&gt;
+ *        &lt;mx:DataGridColumn dataField="Price"/&gt;
+ *    &lt;/mx:columns&gt;
+ *  &lt;/mx:DataGrid&gt;
+ *  </pre>
+ *  </p>
+ *
+ *  @see mx.controls.dataGridClasses.DataGridItemRenderer
+ *  @see mx.controls.dataGridClasses.DataGridColumn
+ *  @see mx.controls.dataGridClasses.DataGridDragProxy
+ *  @see mx.events.DataGridEvent
+ *
+ *  @includeExample examples/SimpleDataGrid.mxml
+ *  
+ *  @langversion 3.0
+ *  @playerversion Flash 9
+ *  @playerversion AIR 1.1
+ *  @productversion Flex 3
+ */
+public class DataGrid extends ListBase implements IDataGrid// implements IIMESupport
+{
+
+    //--------------------------------------------------------------------------
+    //
+    //  Constructor
+    //
+    //--------------------------------------------------------------------------
+
+    /**
+     *  Constructor.
+     *  
+     *  @langversion 3.0
+     *  @playerversion Flash 9
+     *  @playerversion AIR 1.1
+     *  @productversion Flex 3
+     */
+    public function DataGrid()
+    {
+        super();
+    }
+
+    //--------------------------------------------------------------------------
+    //
+    //  Variables
+    //
+    //--------------------------------------------------------------------------
+
+    [Inspectable(environment="none")]
+
+
+
+    //--------------------------------------------------------------------------
+    //
+    //  Overridden properties
+    //
+    //--------------------------------------------------------------------------
+
+
+    //--------------------------------------------------------------------------
+    //
+    //  Properties
+    //
+    //--------------------------------------------------------------------------
+
+    //----------------------------------
+    //  columns
+    //----------------------------------
+
+    [Bindable("columnsChanged")]
+    [Inspectable(category="General", arrayType="mx.controls.dataGridClasses.DataGridColumn")]
+
+    /**
+     *  An array of DataGridColumn objects, one for each column that
+     *  can be displayed.  If not explicitly set, the DataGrid control 
+     *  attempts to examine the first data provider item to determine the
+     *  set of properties and display those properties in alphabetic
+     *  order.
+     *
+     *  <p>If you want to change the set of columns, you must get this array,
+     *  make modifications to the columns and order of columns in the array,
+     *  and then assign the new array to the columns property.  This is because
+     *  the DataGrid control returned a new copy of the array of columns and therefore
+     *  did not notice the changes.</p>
+     *  
+     *  @langversion 3.0
+     *  @playerversion Flash 9
+     *  @playerversion AIR 1.1
+     *  @productversion Flex 3
+     */
+    public function get columns():Array
+    {
+        return IDataGridModel(model).columns;
+    }
+    /**
+     * @royaleignorecoercion org.apache.royale.core.IDataGridModel
+     */
+    public function set columns(value:Array):void
+    {
+        IDataGridModel(model).columns = value;
+    }
+	
+    /**
+     * @private
+     */
+    private var _presentationModel:IDataGridPresentationModel;
+    
+    /**
+     *  The DataGrid's presentation model
+     *
+     *  @langversion 3.0
+     *  @playerversion Flash 10.2
+     *  @playerversion AIR 2.6
+     *  @productversion Royale 0.9
+     *  @royaleignorecoercion org.apache.royale.core.IDataGridPresentationModel
+     *  @royaleignorecoercion org.apache.royale.core.IBead
+     */
+    public function get presentationModel():IBead
+    {
+        if (_presentationModel == null) {
+            var c:Class = ValuesManager.valuesImpl.getValue(this, "iDataGridPresentationModel");
+            if (c) {
+                _presentationModel = new c() as IDataGridPresentationModel;
+                addBead(_presentationModel as IBead);
+            }
+        }
+        
+        return _presentationModel;
+    }
+    /**
+     *  @royaleignorecoercion org.apache.royale.core.IDataGridPresentationModel
+     *  @royaleignorecoercion org.apache.royale.core.IBead
+     */
+    public function set presentationModel(value:IBead):void
+    {
+        _presentationModel = value as IDataGridPresentationModel;
+    }
+}
+
+}
diff --git a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/List.as b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/List.as
new file mode 100644
index 0000000..30c8e22
--- /dev/null
+++ b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/List.as
@@ -0,0 +1,360 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  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
+{
+COMPILE::JS
+{
+    import goog.DEBUG;
+}
+/*
+import flash.display.DisplayObject;
+import flash.display.DisplayObjectContainer;
+import flash.display.Graphics;
+import flash.display.Shape;
+import flash.display.Sprite;
+import flash.events.Event;
+import flash.events.FocusEvent;
+import flash.events.KeyboardEvent;
+import flash.events.MouseEvent;
+import flash.geom.Point;
+import flash.ui.Keyboard;
+import flash.utils.Dictionary;
+
+import mx.collections.CursorBookmark;
+import mx.collections.IList;
+import mx.collections.ItemResponder;
+import mx.collections.ItemWrapper;
+import mx.collections.ModifiedCollectionView;
+import mx.collections.errors.ItemPendingError;
+import mx.controls.listClasses.BaseListData;
+import mx.controls.listClasses.IDropInListItemRenderer;
+import mx.controls.listClasses.IListItemRenderer;
+import mx.controls.listClasses.ListBaseContentHolder;
+import mx.controls.listClasses.ListBaseSeekPending;
+import mx.controls.listClasses.ListData;
+import mx.controls.listClasses.ListItemRenderer;
+import mx.controls.listClasses.ListRowInfo;
+import mx.controls.scrollClasses.ScrollBar;
+import mx.core.EdgeMetrics;
+import mx.core.EventPriority;
+import mx.core.FlexShape;
+import mx.core.FlexSprite;
+import mx.core.IChildList;
+import mx.core.IFactory;
+import mx.core.IIMESupport;
+import mx.core.IInvalidating;
+import mx.core.IPropertyChangeNotifier;
+import mx.core.IUIComponent;
+import mx.core.ScrollPolicy;
+import mx.core.UIComponent;
+import mx.core.UIComponentGlobals;
+import mx.core.mx_internal;
+import mx.events.CollectionEvent;
+import mx.events.CollectionEventKind;
+import mx.events.ListEvent;
+import mx.events.ListEventReason;
+import mx.events.SandboxMouseEvent;
+import mx.events.ScrollEvent;
+import mx.events.ScrollEventDetail;
+import mx.managers.IFocusManager;
+import mx.managers.IFocusManagerComponent;
+import mx.managers.ISystemManager;
+
+use namespace mx_internal;
+*/
+    
+import mx.core.ClassFactory;
+import mx.controls.listClasses.ListBase;
+
+//[IconFile("List.png")]
+
+[DataBindingInfo("acceptedTypes", "{ dataProvider: { label: &quot;String&quot; } }")]
+
+[DefaultProperty("dataProvider")]
+
+[DefaultBindingProperty(source="selectedItem", destination="dataProvider")]
+
+[DefaultTriggerEvent("change")]
+
+[AccessibilityClass(implementation="mx.accessibility.ListAccImpl")]
+
+/**
+ *  Dispatched when the user releases the mouse button while over an item,
+ *  tabs to the List or within the List, or in any other way
+ *  attempts to edit an item.
+ *
+ *  @eventType mx.events.ListEvent.ITEM_EDIT_BEGINNING
+ *  
+ *  @langversion 3.0
+ *  @playerversion Flash 9
+ *  @playerversion AIR 1.1
+ *  @productversion Flex 3
+ */
+//[Event(name="itemEditBeginning", type="mx.events.ListEvent")]
+
+/**
+ *  Dispatched when the <code>editedItemPosition</code> property is set
+ *  and the item can be edited.
+ *
+ *  @eventType mx.events.ListEvent.ITEM_EDIT_BEGIN
+ *  
+ *  @langversion 3.0
+ *  @playerversion Flash 9
+ *  @playerversion AIR 1.1
+ *  @productversion Flex 3
+ */
+//[Event(name="itemEditBegin", type="mx.events.ListEvent")]
+
+/**
+ *  Dispatched when an item editing session is ending for any reason.
+ *
+ *  @eventType mx.events.ListEvent.ITEM_EDIT_END
+ *  
+ *  @langversion 3.0
+ *  @playerversion Flash 9
+ *  @playerversion AIR 1.1
+ *  @productversion Flex 3
+ */
+//[Event(name="itemEditEnd", type="mx.events.ListEvent")]
+
+/**
+ *  Dispatched when an item renderer gets focus, which can occur if the user
+ *  clicks on an item in the List control or navigates to the item using a 
+ *  keyboard.
+ *  Only dispatched if the list item is editable.
+ *
+ *  @eventType mx.events.ListEvent.ITEM_FOCUS_IN
+ *  
+ *  @langversion 3.0
+ *  @playerversion Flash 9
+ *  @playerversion AIR 1.1
+ *  @productversion Flex 3
+ */
+//[Event(name="itemFocusIn", type="mx.events.ListEvent")]
+
+/**
+ *  Dispatched when an item renderer loses the focus, which can occur if the 
+ *  user clicks another item in the List control or outside the list, 
+ *  or uses the keyboard to navigate to another item in the List control
+ *  or outside the List control.
+ *  Only dispatched if the list item is editable.
+ *
+ *  @eventType mx.events.ListEvent.ITEM_FOCUS_OUT
+ *  
+ *  @langversion 3.0
+ *  @playerversion Flash 9
+ *  @playerversion AIR 1.1
+ *  @productversion Flex 3
+ */
+//[Event(name="itemFocusOut", type="mx.events.ListEvent")]
+
+//--------------------------------------
+//  Effects
+//--------------------------------------
+
+/**
+ *  The data effect to play when a change occur to the control's data provider.
+ *
+ *  <p>By default, the List control does not use a data effect. 
+ *  For the List control, use an instance of the the DefaultListEffect class 
+ *  to configure the data effect. </p>
+ *
+ *  @default undefined
+ *  
+ *  @langversion 3.0
+ *  @playerversion Flash 9
+ *  @playerversion AIR 1.1
+ *  @productversion Flex 3
+ */
+[Effect(name="itemsChangeEffect", event="itemsChange")]
+
+[Alternative(replacement="spark.components.List", since="4.0")]
+
+/**
+ *  The List control displays a vertical list of items.
+ *  Its functionality is very similar to that of the SELECT
+ *  form element in HTML.
+ *  If there are more items than can be displayed at once, it
+ *  can display a vertical scroll bar so the user can access
+ *  all items in the list.
+ *  An optional horizontal scroll bar lets the user view items
+ *  when the full width of the list items is unlikely to fit.
+ *  The user can select one or more items from the list, depending
+ *  on the value of the <code>allowMultipleSelection</code> property.
+ *
+ *  <p>The List control has the following default sizing 
+ *     characteristics:</p>
+ *     <table class="innertable">
+ *        <tr>
+ *           <th>Characteristic</th>
+ *           <th>Description</th>
+ *        </tr>
+ *        <tr>
+ *           <td>Default size</td>
+ *           <td>Wide enough to fit the widest label in the first seven 
+ *               visible items (or all visible items in the list, if 
+ *               there are less than seven); seven rows high, where 
+ *               each row is 20 pixels high.</td>
+ *        </tr>
+ *        <tr>
+ *           <td>Minimum size</td>
+ *           <td>0 pixels.</td>
+ *        </tr>
+ *        <tr>
+ *           <td>Maximum size</td>
+ *           <td>5000 by 5000.</td>
+ *        </tr>
+ *     </table>
+ *
+ *  @mxml
+ *
+ *  <p>The <code>&lt;mx:List&gt;</code> tag inherits all the tag attributes
+ *  of its superclass, and adds the following tag attributes:</p>
+ *
+ *  <pre>
+ *  &lt;mx:List
+ *    <b>Properties</b>
+ *    editable="false|true"
+ *    editedItemPosition="<i>No default</i>"
+ *    editorDataField="text"
+ *    editorHeightOffset="0"
+ *    editorUsesEnterKey="false|true"
+ *    editorWidthOffset="0"
+ *    editorXOffset="0"
+ *    editorYOffset="0"
+ *    imeMode="null"    
+ *    itemEditor="TextInput"
+ *    itemEditorInstance="<i>Current item editor</i>"
+ *    rendererIsEditor="false|true"
+ *    
+ *    <b>Styles</b>
+ *    backgroundDisabledColor="0xDDDDDD"
+ *    
+ *    <b>Events</b>
+ *    itemEditBegin="<i>No default</i>"
+ *    itemEditEnd="<i>No default</i>"
+ *    itemEditBeginning="<i>No default</i>"
+ *    itemFocusIn="<i>No default</i>"
+ *    itemFocusOut="<i>No default</i>"
+ *  /&gt;
+ *  </pre>
+ *
+ *  @includeExample examples/SimpleList.mxml
+ *
+ *  @see mx.events.ListEvent
+ *  
+ *  @langversion 3.0
+ *  @playerversion Flash 9
+ *  @playerversion AIR 1.1
+ *  @productversion Flex 3
+ */
+public class List extends ListBase // implements IIMESupport
+{
+
+    //--------------------------------------------------------------------------
+    //
+    //  Constructor
+    //
+    //--------------------------------------------------------------------------
+
+    /**
+     *  Constructor.
+     *  
+     *  @langversion 3.0
+     *  @playerversion Flash 9
+     *  @playerversion AIR 1.1
+     *  @productversion Flex 3
+     */
+    public function List()
+    {
+        super();
+
+    }
+
+
+    //--------------------------------------------------------------------------
+    //
+    //  Overridden properties
+    //
+    //--------------------------------------------------------------------------
+
+
+    //--------------------------------------------------------------------------
+    //
+    //  Properties
+    //
+    //--------------------------------------------------------------------------
+
+    //----------------------------------
+    //  editable
+    //----------------------------------
+
+    private var _editable:Boolean = false;
+
+    [Inspectable(category="General")]
+
+    /**
+     *  A flag that indicates whether or not the user can edit
+     *  items in the data provider.
+     *  If <code>true</code>, the item renderers in the control are editable.
+     *  The user can click on an item renderer to open an editor.
+     *
+     *  @default false
+     *  
+     *  @langversion 3.0
+     *  @playerversion Flash 9
+     *  @playerversion AIR 1.1
+     *  @productversion Flex 3
+     */
+    public function get editable():Boolean
+    {
+        return _editable;
+    }
+
+    /**
+     *  @private
+     */
+    public function set editable(value:Boolean):void
+    {
+        _editable = value;
+    }
+
+    //--------------------------------------------------------------------------
+    //
+    //  Overridden methods
+    //
+    //--------------------------------------------------------------------------
+
+    [Inspectable(category="Data", defaultValue="undefined")]
+
+    /**
+     *  @private
+    override public function set dataProvider(value:Object):void
+    {
+        if (itemEditorInstance)
+            endEdit(ListEventReason.OTHER);
+        
+        super.dataProvider = value;
+    }
+     */
+
+}
+
+}
diff --git a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/dataGridClasses/DataGridColumn.as b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/dataGridClasses/DataGridColumn.as
new file mode 100644
index 0000000..2336624
--- /dev/null
+++ b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/dataGridClasses/DataGridColumn.as
@@ -0,0 +1,399 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  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.dataGridClasses
+{
+
+/*
+import flash.display.DisplayObject;
+import flash.events.Event;
+import flash.utils.Dictionary;
+
+import mx.controls.TextInput;
+import mx.controls.listClasses.IListItemRenderer;
+import mx.core.ClassFactory;
+import mx.core.ContextualClassFactory;
+import mx.core.IEmbeddedFontRegistry;
+import mx.core.IFactory;
+import mx.core.IFlexModuleFactory;
+import mx.core.IIMESupport;
+import mx.core.Singleton;
+import mx.core.mx_internal;
+import mx.styles.StyleManager;
+import mx.utils.StringUtil;
+
+use namespace mx_internal;
+*/
+import org.apache.royale.html.supportClasses.DataGridColumn;
+    
+//--------------------------------------
+//  Styles
+//--------------------------------------
+
+//include "../../styles/metadata/TextStyles.as";
+
+/**
+ *  The Background color of the column.
+ *  The default value is <code>undefined</code>, which means it uses the value of the 
+ *  <code>backgroundColor</code> style of the associated DataGrid control.
+ *  The default value for the DataGrid control is <code>0xFFFFFF</code>.
+ *  
+ *  @langversion 3.0
+ *  @playerversion Flash 9
+ *  @playerversion AIR 1.1
+ *  @productversion Flex 3
+ */
+//[Style(name="backgroundColor", type="uint", format="Color", inherit="no")]
+
+/**
+ *  The name of a CSS style declaration for controlling other aspects of
+ *  the appearance of the column headers.
+ *  The default value is <code>undefined</code>, which means it uses the value of the 
+ *  <code>headerStyleName</code> style of the associated DataGrid control.
+ *  The default value for the DataGrid control is 
+ *  <code>".dataGridStyles"</code>.
+ *  
+ *  @langversion 3.0
+ *  @playerversion Flash 9
+ *  @playerversion AIR 1.1
+ *  @productversion Flex 3
+ */
+//[Style(name="headerStyleName", type="String", inherit="no")]
+
+/**
+ *  The number of pixels between the container's left border and its content 
+ *  area.
+ *  @default 0
+ *  
+ *  @langversion 3.0
+ *  @playerversion Flash 9
+ *  @playerversion AIR 1.1
+ *  @productversion Flex 3
+ */
+//[Style(name="paddingLeft", type="Number", format="Length", inherit="no")]
+
+/**
+ *  The number of pixels between the container's right border and its content 
+ *  area.
+ *  @default 0
+ *  
+ *  @langversion 3.0
+ *  @playerversion Flash 9
+ *  @playerversion AIR 1.1
+ *  @productversion Flex 3
+ */
+//[Style(name="paddingRight", type="Number", format="Length", inherit="no")]
+
+/**
+ *  The DataGridColumn class describes a column in a DataGrid control.
+ *  There is one DataGridColumn per displayable column, even if a column
+ *  is hidden or off-screen.
+ *  The data provider items of a DataGrid control 
+ *  can contain properties that are not displayed
+ *  and, therefore, do not need a DataGridColumn.
+ *  A DataGridColumn allows specification of the color and font of the text
+ *  in a column; what kind of component displays the data for the column;
+ *  whether the column is editable, sortable, or resizable;
+ *  and the text for the column header.
+ *
+ *  <p><strong>Notes:</strong><ul>
+ *  <li>A DataGridColumn only holds information about a column;
+ *  it is not the parent of the item renderers in the column.</li>
+ *  <li>If you specify a DataGridColumn class without a <code>dataField</code>
+ *  property, you must specify a <code>sortCompareFunction</code>
+ *  property. Otherwise, sort operations may cause run-time errors.</li></ul> 
+ *  </p>
+ *
+ *  @mxml
+ *
+ *  <p>You use the <code>&lt;mx.DataGridColumn&gt;</code> tag to configure a column
+ *  of a DataGrid control.
+ *  You specify the <code>&lt;mx.DataGridColumn&gt;</code> tag as a child
+ *  of the columns property in MXML.
+ *  The <code>&lt;mx.DataGridColumn&gt;</code> tag inherits all of the 
+ *  tag attributes of its superclass, and adds the following tag attributes:</p>
+ *
+ *  <pre>
+ *  &lt;mx:DataGridColumn
+ *  <b>Properties </b>
+ *    dataField="<i>No default</i>"
+ *    dataTipField="<i>No default</i>"
+ *    dataTipFunction="<i>No default</i>"
+ *    editable="true|false"
+ *    editorDataField="text"
+ *    editorHeightOffset="0"
+ *    editorUsesEnterKey="false|true"
+ *    editorWidthOffset="0"
+ *    editorXOffset="0"
+ *    editorYOffset="0"
+ *    headerRenderer="DataGridItemRenderer"
+ *    headerText="<i>No default</i>"
+ *    headerWordWrap="undefined"
+ *    imeMode="null"
+ *    itemEditor="TextInput"
+ *    itemRenderer="DataGridItemRenderer"
+ *    labelFunction="<i>No default</i>"
+ *    minWidth="20"
+ *    rendererIsEditor="false|true"
+ *    resizable="true|false"
+ *    showDataTips="false|true"
+ *    sortable="true|false"
+ *    sortCompareFunction="<i>No default</i>"
+ *    sortDescending="false|true"
+ *    visible="true|false"
+ *    width="100"
+ *    wordWrap="false|true"
+ * 
+ *  <b>Styles</b>
+ *    backgroundColor="0xFFFFFF"
+ *    color="<i>No default.</i>"
+ *    disabledColor="0xAAB3B3"
+ *    fontAntiAliasType="advanced"
+ *    fontFamily="<i>No default</i>"
+ *    fontGridFitType="pixel"
+ *    fontSharpness="0"
+ *    fontSize="<i>No default</i>"
+ *    fontStyle="normal|italic"
+ *    fontThickness="0"
+ *    fontWeight="normal|bold"
+ *    headerStyleName="<i>No default</i>"
+ *    paddingLeft="0"
+ *    paddingRight="0"
+ *    textAlign="right|center|left"
+ *    textDecoration="none|underline"
+ *    textIndent="0"
+ *  /&gt;
+ *  </pre>
+ *  </p>
+ *
+ *  @see mx.controls.DataGrid
+ *
+ *  @see mx.styles.CSSStyleDeclaration
+ *  
+ *  @langversion 3.0
+ *  @playerversion Flash 9
+ *  @playerversion AIR 1.1
+ *  @productversion Flex 3
+ */
+public class DataGridColumn extends org.apache.royale.html.supportClasses.DataGridColumn // implements IIMESupport
+{
+    //--------------------------------------------------------------------------
+    //
+    //  Constructor
+    //
+    //--------------------------------------------------------------------------
+
+    /**
+     *  Constructor.
+     *
+     *  @param columnName The name of the field in the data provider 
+     *  associated with the column, and the text for the header cell of this 
+     *  column.  This is equivalent to setting the <code>dataField</code>
+     *  and <code>headerText</code> properties.
+     *  
+     *  @langversion 3.0
+     *  @playerversion Flash 9
+     *  @playerversion AIR 1.1
+     *  @productversion Flex 3
+     */
+    public function DataGridColumn(columnName:String = null)
+    {
+        super();
+
+        if (columnName)
+        {
+            dataField = columnName;
+            headerText = columnName;
+        }
+    }
+
+    //--------------------------------------------------------------------------
+    //
+    //  Variables
+    //
+    //--------------------------------------------------------------------------
+
+    //--------------------------------------------------------------------------
+    //
+    //  Overridden properties
+    //
+    //--------------------------------------------------------------------------
+
+    //--------------------------------------------------------------------------
+    //
+    //  Properties
+    //
+    //--------------------------------------------------------------------------
+
+
+
+    //----------------------------------
+    //  headerText
+    //----------------------------------
+
+    /**
+     *  @private
+     *  Storage for the headerText property.
+     */
+    private var _headerText:String;
+
+    [Bindable("headerTextChanged")]
+    [Inspectable(category="General")]
+
+    /**
+     *  Text for the header of this column. By default, the DataGrid
+     *  control uses the value of the <code>dataField</code> property 
+     *  as the header text.
+     *  
+     *  @langversion 3.0
+     *  @playerversion Flash 9
+     *  @playerversion AIR 1.1
+     *  @productversion Flex 3
+     */
+    public function get headerText():String
+    {
+        return (_headerText != null) ? _headerText : dataField;
+    }
+
+    /**
+     *  @private
+     */
+    public function set headerText(value:String):void
+    {
+        _headerText = value;
+    }
+
+
+    //----------------------------------
+    //  rendererIsEditor
+    //----------------------------------
+
+    [Inspectable(category="General", defaultValue="false")]
+
+    /**
+     *  A flag that indicates that the item renderer is also an item editor.
+     *  If this property is <code>true</code>, Flex
+     *  ignores the <code>itemEditor</code> property and uses the item
+     *  renderer for that item as the editor.
+     *
+     *  @default false
+     *  
+     *  @langversion 3.0
+     *  @playerversion Flash 9
+     *  @playerversion AIR 1.1
+     *  @productversion Flex 3
+     *  @royalesuppresspublicvarwarning
+     */
+    public var rendererIsEditor:Boolean = false;
+
+    //----------------------------------
+    //  labelFunction
+    //----------------------------------
+
+    /**
+     *  @private
+     *  Storage for the labelFunction property.
+     */
+    private var _labelFunction:Function;
+
+    [Bindable("labelFunctionChanged")]
+    [Inspectable(category="Other")]
+
+    /**
+     *  A function that determines the text to display in this column.  By default
+     *  the column displays the text for the field in the data that matches the
+     *  column name.  However, sometimes you want to display text based on
+     *  more than one field in the data, or display something that does not
+     *  have the format that you want.
+     *  In such a case you specify a callback function using <code>labelFunction</code>.
+     *
+     *  <p>For the DataGrid control, the method signature has the following form:</p>
+     *
+     *  <pre>labelFunction(item:Object, column:DataGridColumn):String</pre>
+     *
+     *  <p>Where <code>item</code> contains the DataGrid item object, and
+     *  <code>column</code> specifies the DataGrid column.</p>
+     *
+     *  <p>A callback function might concatenate the firstName and
+     *  lastName fields in the data, or do some custom formatting on a Date,
+     *  or convert a number for the month into the string for the month.</p>
+     *  
+     *  @langversion 3.0
+     *  @playerversion Flash 9
+     *  @playerversion AIR 1.1
+     *  @productversion Flex 3
+     */
+    public function get labelFunction():Function
+    {
+        return _labelFunction;
+    }
+
+    /**
+     *  @private
+     */
+    public function set labelFunction(value:Function):void
+    {
+        _labelFunction = value;
+    }
+
+    //----------------------------------
+    //  width
+    //----------------------------------
+
+    /**
+     *  @private
+     *  Storage for the width property.
+     */
+    private var _width:Number = 100;
+
+    [Bindable("widthChanged")]
+    [Inspectable(category="General", defaultValue="100")]
+
+    /**
+     *  The width of the column, in pixels. 
+     *  If the DataGrid's <code>horizontalScrollPolicy</code> property 
+     *  is <code>false</code>, all visible columns must fit in the displayable 
+     *  area, and the DataGrid will not always honor the width of
+     *  the columns if the total width of the columns is too
+     *  small or too large for the displayable area.
+     *
+     *  @default 100
+     *  
+     *  @langversion 3.0
+     *  @playerversion Flash 9
+     *  @playerversion AIR 1.1
+     *  @productversion Flex 3
+     */
+    public function get width():Number
+    {
+        return _width;
+    }
+
+    /**
+     *  @private
+     */
+    public function set width(value:Number):void
+    {
+        // otherwise, just store the size
+        _width = value;
+    }
+
+}
+
+}
diff --git a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/listClasses/ListBase.as b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/listClasses/ListBase.as
index b38870d..cabddd2 100644
--- a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/listClasses/ListBase.as
+++ b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/listClasses/ListBase.as
@@ -18,12 +18,61 @@
 ////////////////////////////////////////////////////////////////////////////////
 package mx.controls.listClasses
 {   
+COMPILE::JS
+{
+    import goog.DEBUG;
+}
+
+import mx.core.EdgeMetrics;
+import mx.core.IFactory;
+import mx.core.ScrollPolicy;
+import mx.core.UIComponent;
 import mx.core.mx_internal;
-import org.apache.royale.core.ListBase;
+
+import org.apache.royale.core.ContainerBaseStrandChildren;
+import org.apache.royale.core.IBeadLayout;
+import org.apache.royale.core.IChild;
+import org.apache.royale.core.IContainer;
+import org.apache.royale.core.IContainerBaseStrandChildrenHost;
+import org.apache.royale.core.IDataProviderItemRendererMapper;
+import org.apache.royale.core.IItemRendererClassFactory;
+import org.apache.royale.core.ILayoutHost;
+import org.apache.royale.core.ILayoutChild;
+import org.apache.royale.core.ILayoutParent;
+import org.apache.royale.core.ILayoutView;
+import org.apache.royale.core.IParent;
+import org.apache.royale.core.ISelectionModel;
+import org.apache.royale.core.ValuesManager;
+import org.apache.royale.events.Event;
+import org.apache.royale.events.ValueEvent;
+import org.apache.royale.utils.loadBeadFromValuesManager;
 
 use namespace mx_internal;
 
 	
+/**
+ *  Dispatched when the user clicks on an item in the control.
+ *
+ *  @eventType mx.events.ListEvent.ITEM_CLICK
+ *  
+ *  @langversion 3.0
+ *  @playerversion Flash 9
+ *  @playerversion AIR 1.1
+ *  @productversion Flex 3
+ */
+[Event(name="itemClick", type="mx.events.ListEvent")]
+
+/**
+ *  Dispatched when the user double-clicks on an item in the control.
+ *
+ *  @eventType mx.events.ListEvent.ITEM_DOUBLE_CLICK
+ *  
+ *  @langversion 3.0
+ *  @playerversion Flash 9
+ *  @playerversion AIR 1.1
+ *  @productversion Flex 3
+ */
+[Event(name="itemDoubleClick", type="mx.events.ListEvent")]
 	
     /**
      *  
@@ -33,19 +82,229 @@ use namespace mx_internal;
      *  @productversion Royale 0.0
      *  @royalesuppresspublicvarwarning
 	*/
-	public class ListBase extends org.apache.royale.core.ListBase
+	public class ListBase extends UIComponent implements IContainerBaseStrandChildrenHost, IContainer, ILayoutParent, ILayoutView
 	{
 	
+        //----------------------------------
+        //  dragEnabled
+        //----------------------------------
+        
+        /**
+         *  @private
+         *  Storage for the dragEnabled property.
+         */
+        private var _dragEnabled:Boolean = false;
+        
+        /**
+         *  A flag that indicates whether you can drag items out of
+         *  this control and drop them on other controls.
+         *  If <code>true</code>, dragging is enabled for the control.
+         *  If the <code>dropEnabled</code> property is also <code>true</code>,
+         *  you can drag items and drop them within this control
+         *  to reorder the items.
+         *
+         *  @default false
+         *  
+         *  @langversion 3.0
+         *  @playerversion Flash 9
+         *  @playerversion AIR 1.1
+         *  @productversion Flex 3
+         */
+        public function get dragEnabled():Boolean
+        {
+            return _dragEnabled;
+        }
+        
+        /**
+         *  @private
+         */
+        public function set dragEnabled(value:Boolean):void
+        {
+            _dragEnabled = value;
+        }
+        
+        //----------------------------------
+        //  dragMoveEnabled
+        //----------------------------------
+        
+        /**
+         *  @private
+         *  Storage for the dragMoveEnabled property.
+         */
+        private var _dragMoveEnabled:Boolean = false;
+        
+        [Inspectable(defaultValue="false")]
+        
+        /**
+         *  A flag that indicates whether items can be moved instead
+         *  of just copied from the control as part of a drag-and-drop
+         *  operation.
+         *  If <code>true</code>, and the <code>dragEnabled</code> property
+         *  is <code>true</code>, items can be moved.
+         *  Often the data provider cannot or should not have items removed
+         *  from it, so a MOVE operation should not be allowed during
+         *  drag-and-drop.
+         *
+         *  @default false
+         *  
+         *  @langversion 3.0
+         *  @playerversion Flash 9
+         *  @playerversion AIR 1.1
+         *  @productversion Flex 3
+         */
+        public function get dragMoveEnabled():Boolean
+        {
+            return _dragMoveEnabled;
+        }
+        
+        /**
+         *  @private
+         */
+        public function set dragMoveEnabled(value:Boolean):void
+        {
+            _dragMoveEnabled = value;
+        }
+        
+        //----------------------------------
+        //  dataProvider
+        //----------------------------------
+        
+        [Bindable("collectionChange")]
+        [Inspectable(category="Data", defaultValue="undefined")]
+        
+        /**
+         *  Set of data to be viewed.
+         *  This property lets you use most types of objects as data providers.
+         *  If you set the <code>dataProvider</code> property to an Array, 
+         *  it will be converted to an ArrayCollection. If you set the property to
+         *  an XML object, it will be converted into an XMLListCollection with
+         *  only one item. If you set the property to an XMLList, it will be 
+         *  converted to an XMLListCollection.  
+         *  If you set the property to an object that implements the 
+         *  IList or ICollectionView interface, the object will be used directly.
+         *
+         *  <p>As a consequence of the conversions, when you get the 
+         *  <code>dataProvider</code> property, it will always be
+         *  an ICollectionView, and therefore not necessarily be the type of object
+         *  you used to  you set the property.
+         *  This behavior is important to understand if you want to modify the data 
+         *  in the data provider: changes to the original data may not be detected, 
+         *  but changes to the ICollectionView object that you get back from the 
+         *  <code>dataProvider</code> property will be detected.</p>
+         * 
+         *  @default null
+         *  @see mx.collections.ICollectionView
+         *  
+         *  @langversion 3.0
+         *  @playerversion Flash 9
+         *  @playerversion AIR 1.1
+         *  @productversion Flex 3
+         *  @royaleignorecoercion org.apache.royale.core.ISelectionModel
+         */
+        public function get dataProvider():Object
+        {
+            return (model as ISelectionModel).dataProvider;
+        }
+        /**
+         *  @royaleignorecoercion org.apache.royale.core.ISelectionModel
+         */
+        public function set dataProvider(value:Object):void
+        {
+            (model as ISelectionModel).dataProvider = value;
+        }
+        
+        
+        //----------------------------------
+        //  dropEnabled
+        //----------------------------------
+        
+        /**
+         *  @private
+         *  Storage for the <code>dropEnabled</code> property.
+         */
+        private var _dropEnabled:Boolean = false;
+        
+        [Inspectable(defaultValue="false")]
+        
+        /**
+         *  A flag that indicates whether dragged items can be dropped onto the 
+         *  control.
+         *
+         *  <p>If you set this property to <code>true</code>,
+         *  the control accepts all data formats, and assumes that
+         *  the dragged data matches the format of the data in the data provider.
+         *  If you want to explicitly check the data format of the data
+         *  being dragged, you must handle one or more of the drag events,
+         *  such as <code>dragOver</code>, and call the DragEvent's
+         *  <code>preventDefault()</code> method to customize
+         *  the way the list class accepts dropped data.</p>
+         *
+         *  <p>When you set <code>dropEnabled</code> to <code>true</code>, 
+         *  Flex automatically calls the <code>showDropFeedback()</code> 
+         *  and <code>hideDropFeedback()</code> methods to display the drop indicator.</p>
+         *
+         *  @default false
+         *  
+         *  @langversion 3.0
+         *  @playerversion Flash 9
+         *  @playerversion AIR 1.1
+         *  @productversion Flex 3
+         */
+        public function get dropEnabled():Boolean
+        {
+            return _dropEnabled;
+        }
+        
+        /**
+         *  @private
+         */
+        public function set dropEnabled(value:Boolean):void
+        {
+            _dropEnabled = value;
+        }
+        
+        //----------------------------------
+        //  labelField
+        //----------------------------------
+                
+        [Bindable("labelFieldChanged")]
+        [Inspectable(category="Data", defaultValue="label")]
+        
+        /**
+         *  The name of the field in the data provider items to display as the label. 
+         *  By default the list looks for a property named <code>label</code> 
+         *  on each item and displays it.
+         *  However, if the data objects do not contain a <code>label</code> 
+         *  property, you can set the <code>labelField</code> property to
+         *  use a different property in the data object. An example would be 
+         *  "FullName" when viewing a set of people names fetched from a database.
+         *
+         *  @default "label"
+         *  
+         *  @langversion 3.0
+         *  @playerversion Flash 9
+         *  @playerversion AIR 1.1
+         *  @productversion Flex 3
+         *  @royaleignorecoercion org.apache.royale.core.ISelectionModel
+         */
+        public function get labelField():String
+        {
+            return (model as ISelectionModel).labelField;
+        }
+        
+        /**
+         *  @private
+         *  @royaleignorecoercion org.apache.royale.core.ISelectionModel
+         */
+        public function set labelField(value:String):void
+        {
+            (model as ISelectionModel).labelField = value;
+        }
+        
 	//----------------------------------
     //  selectedIndex
     //----------------------------------
 
-    /**
-     *  @private
-     *  Storage for the selectedIndex property.
-     */
-    mx_internal var _selectedIndex:int = -1;
-
     [Bindable("change")]
     [Bindable("valueCommit")]
     [Inspectable(category="General", defaultValue="-1")]
@@ -60,20 +319,22 @@ use namespace mx_internal;
      *  @playerversion Flash 9
      *  @playerversion AIR 1.1
      *  @productversion Flex 3
+     *  @royaleignorecoercion org.apache.royale.core.ISelectionModel
      */
     public function get selectedIndex():int
     {
-        return _selectedIndex;
+        return (model as ISelectionModel).selectedIndex;
     }
 
     /**
      *  @private
+     *  @royaleignorecoercion org.apache.royale.core.ISelectionModel
      */
     public function set selectedIndex(value:int):void
     {
        // if (!collection || collection.length == 0)
        // {
-            _selectedIndex = value;
+        (model as ISelectionModel).selectedIndex = value;
          //   bSelectionChanged = true;
          //   bSelectedIndexChanged = true;
           //  invalidateDisplayList();
@@ -82,7 +343,78 @@ use namespace mx_internal;
         //commitSelectedIndex(value);
     }
 	
-	 //----------------------------------
+    //----------------------------------
+    //  selectedIndices
+    //----------------------------------
+    
+    [Bindable("change")]
+    [Bindable("valueCommit")]
+    [Inspectable(category="General")]
+    
+    /**
+     *  An array of indices in the data provider of the selected items. The
+     *  items are in the reverse order that the user selected the items.
+     *  @default [ ]
+     *  
+     *  @langversion 3.0
+     *  @playerversion Flash 9
+     *  @playerversion AIR 1.1
+     *  @productversion Flex 3
+     */
+    public function get selectedIndices():Array
+    {
+        // TODO
+        if (GOOG::DEBUG)
+            trace("selectedIndices not implemented");
+        return null;
+    }
+    
+    /**
+     *  @private
+     */
+    public function set selectedIndices(indices:Array):void
+    {
+        // TODO
+        if (GOOG::DEBUG)
+            trace("selectedIndices not implemented");
+    }
+    
+    //----------------------------------
+    //  selectedItems
+    //----------------------------------
+    
+    [Bindable("change")]
+    [Bindable("valueCommit")]
+    
+    /**
+     *  An array of references to the selected items in the data provider. The
+     *  items are in the reverse order that the user selected the items.
+     *  @default [ ]
+     *  
+     *  @langversion 3.0
+     *  @playerversion Flash 9
+     *  @playerversion AIR 1.1
+     *  @productversion Flex 3
+     */
+    public function get selectedItems():Array
+    {
+        // TODO
+        if (GOOG::DEBUG)
+            trace("selectedItems not implemented");
+        return null;
+    }
+    
+    /**
+     *  @private
+     */
+    public function set selectedItems(items:Array):void
+    {
+        // TODO
+        if (GOOG::DEBUG)
+            trace("selectedItems not implemented");
+    }
+    
+	//----------------------------------
     //  variableRowHeight
     //----------------------------------
 
@@ -124,7 +456,46 @@ use namespace mx_internal;
        // dispatchEvent(new Event("variableRowHeightChanged"));
     }
 
-	
+    //----------------------------------
+    //  allowMultipleSelection
+    //----------------------------------
+    
+    /**
+     *  @private
+     *  Storage for the allowMultipleSelection property.
+     */
+    private var _allowMultipleSelection:Boolean = false;
+    
+    [Inspectable(category="General", enumeration="false,true", defaultValue="false")]
+    
+    /**
+     *  A flag that indicates whether you can allow more than one item to be
+     *  selected at the same time.
+     *  If <code>true</code>, users can select multiple items.
+     *  There is no option to disallow discontiguous selection.
+     *  Standard complex selection options are always in effect 
+     *  (Shift-click, Ctrl-click).
+     *
+     *  @default false
+     *  
+     *  @langversion 3.0
+     *  @playerversion Flash 9
+     *  @playerversion AIR 1.1
+     *  @productversion Flex 3
+     */
+    public function get allowMultipleSelection():Boolean
+    {
+        return _allowMultipleSelection;
+    }
+    
+    /**
+     *  @private
+     */
+    public function set allowMultipleSelection(value:Boolean):void
+    {
+        _allowMultipleSelection = value;
+    }
+
 	
         /**
          *  Constructor.
@@ -138,5 +509,506 @@ use namespace mx_internal;
 		{
 			super();            
 		}
+        
+        private var _DCinitialized:Boolean = true;
+        
+        /**
+         * @private
+         */
+        override public function addedToParent():void
+        {
+            if (!_DCinitialized)
+            {
+                ValuesManager.valuesImpl.init(this);
+                _DCinitialized = true;
+            }
+            
+            super.addedToParent();
+
+            // Load the layout bead if it hasn't already been loaded.
+            loadBeadFromValuesManager(IBeadLayout, "iBeadLayout", this);
+
+            // Even though super.addedToParent dispatched "beadsAdded", DataContainer still needs its data mapper
+            // and item factory beads. These beads are added after super.addedToParent is called in case substitutions
+            // were made; these are just defaults extracted from CSS.
+            loadBeadFromValuesManager(IDataProviderItemRendererMapper, "iDataProviderItemRendererMapper", this);
+            loadBeadFromValuesManager(IItemRendererClassFactory, "iItemRendererClassFactory", this);
+            
+            dispatchEvent(new Event("initComplete"));
+        }
+        
+        /*
+        * IItemRendererProvider
+        */
+        
+        private var _itemRenderer:IFactory;
+        
+        /**
+         *  The class or factory used to display each item.
+         *
+         *  @langversion 3.0
+         *  @playerversion Flash 10.2
+         *  @playerversion AIR 2.6
+         *  @productversion Royale 0.0
+         */
+        public function get itemRenderer():IFactory
+        {
+            return _itemRenderer;
+        }
+        public function set itemRenderer(value:IFactory):void
+        {
+            _itemRenderer = value;
+        }
+        
+        private var _strandChildren:ContainerBaseStrandChildren;
+        
+        /**
+         * @private
+         */
+        public function get strandChildren():IParent
+        {
+            if (_strandChildren == null) {
+                _strandChildren = new ContainerBaseStrandChildren(this);
+            }
+            return _strandChildren;
+        }
+        
+        /**
+         *  @private
+         */
+        public function childrenAdded():void
+        {
+            dispatchEvent(new ValueEvent("childrenAdded"));
+        }
+        
+        /**
+         * Returns the ILayoutHost which is its view. From ILayoutParent.
+         *
+         *  @langversion 3.0
+         *  @playerversion Flash 10.2
+         *  @playerversion AIR 2.6
+         *  @productversion Royale 0.8
+         *  @royaleignorecoercion org.apache.royale.core.ILayoutHost
+         */
+        public function getLayoutHost():ILayoutHost
+        {
+            return view as ILayoutHost;
+        }
+        
+        /*
+        * The following functions are for the SWF-side only and re-direct element functions
+        * to the content area, enabling scrolling and clipping which are provided automatically
+        * in the JS-side. GroupBase handles event dispatching if necessary.
+        */
+        
+        /**
+         * @private
+         */
+        COMPILE::SWF
+        override public function addElement(c:IChild, dispatchEvent:Boolean = true):void
+        {
+            var contentView:IParent = getLayoutHost().contentView as IParent;
+            if (contentView == this)
+                return super.addElement(c, dispatchEvent);
+            contentView.addElement(c, dispatchEvent);
+            if (dispatchEvent)
+                this.dispatchEvent(new ValueEvent("childrenAdded", c));
+        }
+        
+        /**
+         * @private
+         */
+        COMPILE::SWF
+        override public function addElementAt(c:IChild, index:int, dispatchEvent:Boolean = true):void
+        {
+            var contentView:IParent = getLayoutHost().contentView as IParent;
+            if (contentView == this)
+                return super.addElementAt(c, index, dispatchEvent);
+            contentView.addElementAt(c, index, dispatchEvent);
+            if (dispatchEvent)
+                this.dispatchEvent(new ValueEvent("childrenAdded", c));
+        }
+        
+        /**
+         * @private
+         */
+        COMPILE::SWF
+        override public function getElementIndex(c:IChild):int
+        {
+            var layoutHost:ILayoutHost = view as ILayoutHost;
+            var contentView:IParent = layoutHost.contentView as IParent;
+            if (contentView == this)
+                return super.getElementIndex(c);
+            return contentView.getElementIndex(c);
+        }
+        
+        /**
+         * @private
+         */
+        COMPILE::SWF
+        override public function removeElement(c:IChild, dispatchEvent:Boolean = true):void
+        {
+            var layoutHost:ILayoutHost = view as ILayoutHost;
+            var contentView:IParent = layoutHost.contentView as IParent;
+            contentView.removeElement(c, dispatchEvent);
+            //TODO This should possibly be ultimately refactored to be more PAYG
+            if(dispatchEvent)
+                this.dispatchEvent(new ValueEvent("childrenRemoved", c));
+        }
+        
+        /**
+         * @private
+         */
+        COMPILE::SWF
+        override public function get numElements():int
+        {
+            var layoutHost:ILayoutHost = view as ILayoutHost;
+            var contentView:IParent = layoutHost.contentView as IParent;
+            if (contentView == this)
+                return super.numElements;
+            return contentView.numElements;
+        }
+        
+        /**
+         * @private
+         */
+        COMPILE::SWF
+        override public function getElementAt(index:int):IChild
+        {
+            var layoutHost:ILayoutHost = view as ILayoutHost;
+            var contentView:IParent = layoutHost.contentView as IParent;
+            if (contentView == this)
+                    return super.getElementAt(index);
+            return contentView.getElementAt(index);
+        }
+        
+        /*
+        * IStrandPrivate
+        *
+        * These "internal" function provide a backdoor way for proxy classes to
+        * operate directly at strand level. While these function are available on
+        * both SWF and JS platforms, they really only have meaning on the SWF-side. 
+        * Other subclasses may provide use on the JS-side.
+        *
+        * @see org.apache.royale.core.IContainer#strandChildren
+        */
+        
+        /**
+         * @private
+         * @suppress {undefinedNames}
+         * Support strandChildren.
+         */
+        public function $numElements():int
+        {
+            return super.numElements;
+        }
+        
+        /**
+         * @private
+         * @suppress {undefinedNames}
+         * Support strandChildren.
+         */
+        public function $addElement(c:IChild, dispatchEvent:Boolean = true):void
+        {
+            super.addElement(c, dispatchEvent);
+        }
+        
+        /**
+         * @private
+         * @suppress {undefinedNames}
+         * Support strandChildren.
+         */
+        public function $addElementAt(c:IChild, index:int, dispatchEvent:Boolean = true):void
+        {
+            super.addElementAt(c, index, dispatchEvent);
+        }
+        
+        /**
+         * @private
+         * @suppress {undefinedNames}
+         * Support strandChildren.
+         */
+        public function $removeElement(c:IChild, dispatchEvent:Boolean = true):void
+        {
+            super.removeElement(c, dispatchEvent);
+        }
+        
+        /**
+         * @private
+         * @suppress {undefinedNames}
+         * Support strandChildren.
+         */
+        public function $getElementIndex(c:IChild):int
+        {
+            return super.getElementIndex(c);
+        }
+        
+        /**
+         * @private
+         * @suppress {undefinedNames}
+         * Support strandChildren.
+         */
+        public function $getElementAt(index:int):IChild
+        {
+            return super.getElementAt(index);
+        }
+        
+        //----------------------------------
+        //  explicitColumnCount
+        //----------------------------------
+        
+        /**
+         *  The column count requested by explicitly setting the
+         *  <code>columnCount</code> property.
+         *  
+         *  @langversion 3.0
+         *  @playerversion Flash 9
+         *  @playerversion AIR 1.1
+         *  @productversion Flex 3
+         */
+        protected var explicitColumnCount:int = -1;
+        
+        //----------------------------------
+        //  explicitColumnWidth
+        //----------------------------------
+        
+        /**
+         *  The column width requested by explicitly setting the 
+         *  <code>columnWidth</code>.
+         *  
+         *  @langversion 3.0
+         *  @playerversion Flash 9
+         *  @playerversion AIR 1.1
+         *  @productversion Flex 3
+         */
+        protected var explicitColumnWidth:Number;
+        
+        //----------------------------------
+        //  explicitRowHeight
+        //----------------------------------
+        
+        /**
+         *  The row height requested by explicitly setting
+         *  <code>rowHeight</code>.
+         *  
+         *  @langversion 3.0
+         *  @playerversion Flash 9
+         *  @playerversion AIR 1.1
+         *  @productversion Flex 3
+         */
+        protected var explicitRowHeight:Number;
+        
+        //----------------------------------
+        //  explicitRowCount
+        //----------------------------------
+        
+        /**
+         *  The row count requested by explicitly setting
+         *  <code>rowCount</code>.
+         *  
+         *  @langversion 3.0
+         *  @playerversion Flash 9
+         *  @playerversion AIR 1.1
+         *  @productversion Flex 3
+         */
+        protected var explicitRowCount:int = -1;
+        
+        //----------------------------------
+        //  defaultColumnCount
+        //----------------------------------
+        
+        /**
+         *  The default number of columns to display.  This value
+         *  is used if the calculation for the number of
+         *  columns results in a value less than 1 when
+         *  trying to calculate the columnCount based on size or
+         *  content.
+         *
+         *  @default 4
+         *  
+         *  @langversion 3.0
+         *  @playerversion Flash 9
+         *  @playerversion AIR 1.1
+         *  @productversion Flex 3
+         */
+        protected var defaultColumnCount:int = 4;
+        
+        //----------------------------------
+        //  defaultRowCount
+        //----------------------------------
+        
+        /**
+         *  The default number of rows to display.  This value
+         *  is used  if the calculation for the number of
+         *  columns results in a value less than 1 when
+         *  trying to calculate the rowCount based on size or
+         *  content.
+         *
+         *  @default 4
+         *  
+         *  @langversion 3.0
+         *  @playerversion Flash 9
+         *  @playerversion AIR 1.1
+         *  @productversion Flex 3
+         */
+        protected var defaultRowCount:int = 4;
+        
+        //----------------------------------
+        //  rowHeight
+        //----------------------------------
+        
+        /**
+         *  @private
+         *  Storage for the rowHeight property.
+         */
+        private var _rowHeight:Number;
+        
+        /**
+         *  @private
+         */
+        private var rowHeightChanged:Boolean = false;
+        
+        [Inspectable(category="General")]
+        
+        /**
+         *  The height of the rows in pixels.
+         *  Unless the <code>variableRowHeight</code> property is
+         *  <code>true</code>, all rows are the same height.  
+         *  If not specified, the row height is based on
+         *  the font size and other properties of the renderer.
+         *  
+         *  @langversion 3.0
+         *  @playerversion Flash 9
+         *  @playerversion AIR 1.1
+         *  @productversion Flex 3
+         */
+        public function get rowHeight():Number
+        {
+            return _rowHeight;
+        }
+        
+        /**
+         *  @private
+         */
+        public function set rowHeight(value:Number):void
+        {
+            explicitRowHeight = value;
+            
+            if (_rowHeight != value)
+            {
+                _rowHeight = value;
+                
+                /*
+                invalidateSize();
+                itemsSizeChanged = true;
+                invalidateDisplayList();
+                
+                dispatchEvent(new Event("rowHeightChanged"));
+                */
+            }
+        }
+        
+        //----------------------------------
+        //  columnWidth
+        //----------------------------------
+        
+        /**
+         *  @private
+         *  Storage for the columnWidth property.
+         */
+        private var _columnWidth:Number;
+        
+        /**
+         *  @private
+         */
+        private var columnWidthChanged:Boolean = false;
+        
+        /**
+         *  The width of the control's columns.
+         *  This property is used by TileList and HorizontalList controls;
+         *  It has no effect on DataGrid controls, where you set the individual
+         *  DataGridColumn widths.
+         *  
+         * @default 50
+         *  
+         *  @langversion 3.0
+         *  @playerversion Flash 9
+         *  @playerversion AIR 1.1
+         *  @productversion Flex 3
+         */
+        public function get columnWidth():Number
+        {
+            return _columnWidth;
+        }
+        
+        /**
+         *  @private
+         */
+        public function set columnWidth(value:Number):void
+        {
+            explicitColumnWidth = value;
+            
+            if (_columnWidth != value)
+            {
+                _columnWidth = value;
+                
+                /*
+                invalidateSize();
+                itemsSizeChanged = true;
+                invalidateDisplayList();
+                
+                dispatchEvent(new Event("columnWidthChanged"));*/
+            }
+        }
+        
+        /**
+         *  @royaleignorecoercion org.apache.royale.core.ILayoutChild
+         */
+        override protected function measure():void
+        {
+            super.measure();
+            
+            var cc:int = explicitColumnCount < 1 ?
+                defaultColumnCount :
+                explicitColumnCount;
+            
+            var rc:int = explicitRowCount < 1 ?
+                defaultRowCount :
+                explicitRowCount;
+            
+            if (!isNaN(explicitRowHeight))
+            {
+                measuredHeight = explicitRowHeight * rc // + o.top + o.bottom;
+                //measuredMinHeight = explicitRowHeight * Math.min(rc, 2) +
+                //    o.top + o.bottom;
+            }
+            else
+            {
+                if (isNaN(rowHeight) && numChildren > 0)
+                {
+                    rowHeight = (getElementAt(0) as ILayoutChild).height;
+                }
+                measuredHeight = rowHeight * rc // + o.top + o.bottom;
+                //measuredMinHeight = rowHeight * Math.min(rc, 2) +
+                //    o.top + o.bottom;
+            }
+            
+            if (!isNaN(explicitColumnWidth))
+            {
+                measuredWidth = explicitColumnWidth * cc // + o.left + o.right;
+                //measuredMinWidth = explicitColumnWidth * Math.min(cc, 1) +
+                //    o.left + o.right;
+            }
+            else
+            {
+                if (isNaN(columnWidth) && numChildren > 0)
+                {
+                    columnWidth = (getElementAt(0) as ILayoutChild).width;
+                }
+                measuredWidth = columnWidth * cc // + o.left + o.right;
+                //measuredMinWidth = columnWidth * Math.min(cc, 1) +
+                //    o.left + o.right;
+            }
+        }
     }
 }
diff --git a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/listClasses/ListItemRenderer.as b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/listClasses/ListItemRenderer.as
new file mode 100644
index 0000000..922aa3f
--- /dev/null
+++ b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/listClasses/ListItemRenderer.as
@@ -0,0 +1,52 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  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.listClasses
+{
+import org.apache.royale.html.supportClasses.StringItemRenderer;
+import org.apache.royale.core.IBorderPaddingMarginValuesImpl;
+import org.apache.royale.core.layout.EdgeData;
+import org.apache.royale.core.ValuesManager;
+
+/**
+ *  The ListItemRenderer is the default renderer for mx.controls.List
+ *
+ *  @langversion 3.0
+ *  @playerversion Flash 9
+ *  @playerversion AIR 1.1
+ *  @productversion Flex 3
+ */
+
+public class ListItemRenderer extends StringItemRenderer
+{
+    override public function set text(value:String):void
+    {
+        super.text = value;
+        COMPILE::SWF
+        {
+            var edge:EdgeData = (ValuesManager.valuesImpl as IBorderPaddingMarginValuesImpl).getPaddingMetrics(this);
+            var h:Number = textField.textHeight + edge.top + edge.bottom;
+            textField.autoSize = "none";
+            textField.height = h;
+        }
+    }
+
+}
+
+}
diff --git a/frameworks/projects/MXRoyale/src/main/royale/mx/core/Container.as b/frameworks/projects/MXRoyale/src/main/royale/mx/core/Container.as
index b497c30..6964e92 100644
--- a/frameworks/projects/MXRoyale/src/main/royale/mx/core/Container.as
+++ b/frameworks/projects/MXRoyale/src/main/royale/mx/core/Container.as
@@ -31,7 +31,7 @@ package mx.core
 	import org.apache.royale.core.IMXMLDocument;
 	import org.apache.royale.core.IParent;
 	import org.apache.royale.core.IStatesImpl;
-	import org.apache.royale.core.IStrandPrivate;
+	import org.apache.royale.core.IContainerBaseStrandChildrenHost;
     import org.apache.royale.core.layout.EdgeData;
 	import org.apache.royale.core.ValuesManager;
 	import org.apache.royale.events.Event;
@@ -315,7 +315,7 @@ use namespace mx_internal;
 public class Container extends UIComponent
 					   implements IDataRenderer, IChildList,
 					   IContainer, ILayoutParent, ILayoutView, IContentViewHost,
-					   IStrandPrivate, IMXMLDocument, IFocusManagerContainer
+					   IContainerBaseStrandChildrenHost, IMXMLDocument, IFocusManagerContainer
                        //implements IContainer, IDataRenderer,
                        //IListItemRenderer,
                        //IRawChildrenContainer, IChildList, IVisualElementContainer,
@@ -867,7 +867,7 @@ public class Container extends UIComponent
     }
 
 	/*
-	* IStrandPrivate
+	* IContainerBaseStrandChildrenHost
 	*
 	* These "internal" function provide a backdoor way for proxy classes to
 	* operate directly at strand level. While these function are available on
diff --git a/frameworks/projects/MXRoyale/src/main/royale/mx/styles/CSSStyleDeclaration.as b/frameworks/projects/MXRoyale/src/main/royale/mx/styles/CSSStyleDeclaration.as
new file mode 100644
index 0000000..728d114
--- /dev/null
+++ b/frameworks/projects/MXRoyale/src/main/royale/mx/styles/CSSStyleDeclaration.as
@@ -0,0 +1,216 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  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.styles
+{
+/*
+import flash.display.DisplayObject;
+import flash.events.EventDispatcher;
+import flash.utils.Dictionary;
+
+import mx.core.Singleton;
+import mx.core.mx_internal;
+import mx.events.FlexChangeEvent;
+import mx.managers.ISystemManager;
+import mx.managers.SystemManagerGlobals;
+import mx.utils.ObjectUtil;
+
+use namespace mx_internal;
+*/
+import org.apache.royale.events.EventDispatcher;
+
+/**
+ *  The CSSStyleDeclaration class represents a set of CSS style rules.
+ *  The MXML compiler automatically generates one CSSStyleDeclaration object
+ *  for each selector in the CSS files associated with a Flex application.
+ *  
+ *  <p>A CSS rule such as
+ *  <pre>
+ *      Button { color: #FF0000 }
+ *  </pre>
+ *  affects every instance of the Button class;
+ *  a selector like <code>Button</code> is called a type selector
+ *  and must not start with a dot.</p>
+ *
+ *  <p>A CSS rule such as
+ *  <pre>
+ *      .redButton { color: #FF0000 }
+ *  </pre>
+ *  affects only components whose <code>styleName</code> property
+ *  is set to <code>"redButton"</code>;
+ *  a selector like <code>.redButton</code> is called a class selector
+ *  and must start with a dot.</p>
+ *
+ *  <p>You can access the autogenerated CSSStyleDeclaration objects
+ *  using the <code>StyleManager.getStyleDeclaration()</code> method,
+ *  passing it either a type selector
+ *  <pre>
+ *  var buttonDeclaration:CSSStyleDeclaration =
+ *      StyleManager.getStyleDeclaration("Button");
+ *  </pre>
+ *  or a class selector
+ *  <pre>
+ *  var redButtonStyleDeclaration:CSSStyleDeclaration =
+ *      StyleManager.getStyleDeclaration(".redButton");
+ *  </pre>
+ *  </p>
+ *
+ *  <p>You can use the <code>getStyle()</code>, <code>setStyle()</code>,
+ *  and <code>clearStyle()</code> methods to get, set, and clear 
+ *  style properties on a CSSStyleDeclaration.</p>
+ *
+ *  <p>You can also create and install a CSSStyleDeclaration at run time
+ *  using the <code>StyleManager.setStyleDeclaration()</code> method:
+ *  <pre>
+ *  var newStyleDeclaration:CSSStyleDeclaration = new CSSStyleDeclaration(".bigMargins");
+ *  newStyleDeclaration.defaultFactory = function():void
+ *  {
+ *      leftMargin = 50;
+ *      rightMargin = 50;
+ *  }
+ *  StyleManager.setStyleDeclaration(".bigMargins", newStyleDeclaration, true);
+ *  </pre>
+ *  </p>
+ *
+ *  @see mx.core.UIComponent
+ *  @see mx.styles.StyleManager
+ *  
+ *  @langversion 3.0
+ *  @playerversion Flash 9
+ *  @playerversion AIR 1.1
+ *  @productversion Flex 3
+ */
+public class CSSStyleDeclaration extends EventDispatcher
+{
+//    include "../core/Version.as";
+        
+    //--------------------------------------------------------------------------
+    //
+    //  Constructor
+    //
+    //--------------------------------------------------------------------------
+
+    /**
+     *  Constructor.
+     *
+     *  @param selector - If the selector is a CSSSelector then advanced
+     *  CSS selectors are supported. If a String is used for the selector then
+     *  only simple CSS selectors are supported. If the String starts with a
+     *  dot it is interpreted as a universal class selector, otherwise it must
+     *  represent a simple type selector. If not null, this CSSStyleDeclaration
+     *  will be registered with StyleManager. 
+     *  
+     *  @param styleManager - The style manager to set this declaration into. If the
+     *  styleManager is null the top-level style manager will be used.
+     * 
+     *  @param autoRegisterWithStyleManager - If true set the selector in the styleManager. The selector
+     *  will only be set if both <code>selector</code> and <code>styleManager</code> are
+     *  both non-null.
+     *
+     *  @langversion 3.0
+     *  @playerversion Flash 9
+     *  @playerversion AIR 1.1
+     *  @productversion Flex 3
+     */
+    public function CSSStyleDeclaration(selector:Object=null, styleManager:IStyleManager2=null, autoRegisterWithStyleManager:Boolean = true)
+    {
+        super();
+
+        /*
+        // Do not reference StyleManager directly because this is a bootstrap class
+        if (!styleManager)
+            styleManager = Singleton.getInstance("mx.styles::IStyleManager2") as IStyleManager2;
+
+        this.styleManager = styleManager;
+
+        if (selector)
+        {
+            if (selector is CSSSelector)
+            {
+                this.selector = selector as CSSSelector;
+            }
+            else
+            {
+                // Otherwise, a legacy Flex 3 String selector was provided
+                selectorString = selector.toString();
+            }
+
+            if (autoRegisterWithStyleManager)
+                styleManager.setStyleDeclaration(selectorString, this, false);            
+        }
+        */
+
+    }
+
+    //--------------------------------------------------------------------------
+    //
+    //  Variables
+    //
+    //--------------------------------------------------------------------------
+
+    //--------------------------------------------------------------------------
+    //
+    //  Properties
+    //
+    //--------------------------------------------------------------------------
+    
+    //----------------------------------
+    //  defaultFactory
+    //----------------------------------
+
+    private var _defaultFactory:Function;
+    
+    [Inspectable(environment="none")]
+    
+    /**
+     *  This function, if it isn't <code>null</code>,
+     *  is usually autogenerated by the MXML compiler.
+     *  It produce copies of a plain Object, such as
+     *  <code>{ leftMargin: 10, rightMargin: 10 }</code>,
+     *  containing name/value pairs for style properties; the object is used
+     *  to build a node of the prototype chain for looking up style properties.
+     *
+     *  <p>If this CSSStyleDeclaration is owned by a UIComponent
+     *  written in MXML, this function encodes the style attributes
+     *  that were specified on the root tag of the component definition.</p>
+     *
+     *  <p>If the UIComponent was written in ActionScript,
+     *  this property is <code>null</code>.</p>
+     *  
+     *  @langversion 3.0
+     *  @playerversion Flash 9
+     *  @playerversion AIR 1.1
+     *  @productversion Flex 3
+     */
+    public function get defaultFactory():Function
+    {
+        return _defaultFactory;
+    }
+    
+    /**
+     *  @private
+     */ 
+    public function set defaultFactory(f:Function):void
+    {
+        _defaultFactory = f;
+    }
+    
+}
+
+}
diff --git a/frameworks/projects/MXRoyale/src/main/royale/mx/styles/IStyleManager2.as b/frameworks/projects/MXRoyale/src/main/royale/mx/styles/IStyleManager2.as
new file mode 100644
index 0000000..8eb2ae9
--- /dev/null
+++ b/frameworks/projects/MXRoyale/src/main/royale/mx/styles/IStyleManager2.as
@@ -0,0 +1,47 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  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.styles
+{
+/*
+import flash.events.IEventDispatcher;
+import flash.system.ApplicationDomain;
+import flash.system.SecurityDomain;
+*/
+/**
+ *  The IStyleManager2 class manages the following:
+ *  <ul>
+ *    <li>Which CSS style properties the class inherits</li>
+ *    <li>Which style properties are colors, and therefore get special handling</li>
+ *    <li>A list of strings that are aliases for color values</li>
+ *  </ul>
+ *
+ *  @see mx.styles.CSSStyleDeclaration
+ *  
+ *  @langversion 3.0
+ *  @playerversion Flash 9
+ *  @playerversion AIR 1.1
+ *  @productversion Flex 3
+ *
+ */
+public interface IStyleManager2 // extends IStyleManager
+{
+}
+
+}

-- 
To stop receiving notification emails like this one, please contact
aharui@apache.org.