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:46 UTC

[royale-asjs] branch feature/MXRoyale updated (9ca87e0 -> 67deef0)

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

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


    from 9ca87e0  Update MXRoyaleClasses for SwitchSymbolFormatter
     new 194bd35  clean out old mxtest files
     new 3f91884  try forcing a measure on demand
     new 7ff361e  rename and refactor some interfaces and implementations so it is easier to replicate hosts in other component sets like MXRoyale
     new f4c1cfc  get List and DataGrid to come up.  DataGrid still needs to autogenerate columns
     new 67deef0  mxtests pass for List.  DGTest needs Drag/Drop

The 5 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 build.xml                                          |  22 +-
 .../royale/org/apache/royale/core/ContainerBase.as |   2 +-
 .../royale/core/ContainerBaseStrandChildren.as     |   6 +-
 .../org/apache/royale/core/DataContainerBase.as    |  53 +-
 .../royale/org/apache/royale/core/IDataGrid.as}    |  20 +-
 .../royale/core/IListWithPresentationModel.as      |  46 --
 .../{IList.as => IStrandWithPresentationModel.as}  |  18 +-
 .../main/royale/org/apache/royale/core/UIBase.as   |   2 +-
 .../royale/org/apache/royale/html/DataContainer.as |   8 +-
 .../main/royale/org/apache/royale/html/DataGrid.as |  23 +-
 .../src/main/royale/org/apache/royale/html/List.as |   6 +-
 .../org/apache/royale/html/beads/ContainerView.as  |  27 +-
 .../apache/royale/html/beads/DataContainerView.as  | 148 +---
 .../org/apache/royale/html/beads/DataGridView.as   |  15 +-
 .../beads/DataItemRendererFactoryForArrayData.as   |  10 +-
 .../beads/DataItemRendererFactoryForArrayList.as   |  11 +-
 .../DynamicAddItemRendererForArrayListData.as      |  10 +-
 ...cRemoveAllByNullItemRendererForArrayListData.as |   9 +-
 ...DynamicRemoveAllItemRendererForArrayListData.as |   9 +-
 .../DynamicRemoveItemRendererForArrayListData.as   |   9 +-
 .../DynamicUpdateItemRendererForArrayListData.as   |   9 +-
 .../org/apache/royale/html/beads/ListView.as       |   1 -
 .../beads/TextItemRendererFactoryForArrayData.as   |  10 +-
 .../TextItemRendererFactoryForStringVectorData.as  |  11 +-
 .../org/apache/royale/html/beads/TreeGridView.as   |   6 +-
 .../royale/html/beads/VirtualDataContainerView.as  |   1 -
 .../VirtualDataItemRendererFactoryForArrayData.as  |  37 +-
 .../apache/royale/html/beads/VirtualListView.as    |  84 +-
 .../beads/layouts/VirtualListVerticalLayout.as     |  15 +-
 .../projects/Core/src/main/royale/CoreClasses.as   |   3 +-
 ...vate.as => IContainerBaseStrandChildrenHost.as} |   9 +-
 .../apache/royale/core/IItemRendererProvider.as    |  10 -
 ...IStrandWithModel.as => IStrandWithModelView.as} |  10 +-
 .../apache/royale/core/ItemRendererClassFactory.as |   2 +-
 .../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 ++++++++++++++++++++-
 .../listClasses/ListItemRenderer.as}               |  40 +-
 .../MXRoyale/src/main/royale/mx/core/Container.as  |   6 +-
 .../src/main/royale/mx/core/UIComponent.as         |  14 +-
 .../main/royale/mx/styles/CSSStyleDeclaration.as   | 216 +++++
 .../mx_internal.as => styles/IStyleManager2.as}    |  28 +-
 .../tests/mxtests/basicTests/BasicTests-config.xml |   2 +-
 mustella/tests/mxtests/basicTests/BasicTests.mxml  |   4 +-
 .../halo/scripts/ListAndDataGridTestScript.mxml    |   4 +-
 .../halo/views/ListAndDataGridTests.mxml           |   2 +-
 49 files changed, 3050 insertions(+), 466 deletions(-)
 copy frameworks/projects/{Core/src/main/royale/org/apache/royale/core/IRenderedObject.as => Basic/src/main/royale/org/apache/royale/core/IDataGrid.as} (75%)
 delete mode 100644 frameworks/projects/Basic/src/main/royale/org/apache/royale/core/IListWithPresentationModel.as
 rename frameworks/projects/Basic/src/main/royale/org/apache/royale/core/{IList.as => IStrandWithPresentationModel.as} (69%)
 rename frameworks/projects/Core/src/main/royale/org/apache/royale/core/{IStrandPrivate.as => IContainerBaseStrandChildrenHost.as} (80%)
 copy frameworks/projects/Core/src/main/royale/org/apache/royale/core/{IStrandWithModel.as => IStrandWithModelView.as} (84%)
 create mode 100644 frameworks/projects/MXRoyale/src/main/royale/mx/controls/DataGrid.as
 create mode 100644 frameworks/projects/MXRoyale/src/main/royale/mx/controls/List.as
 create mode 100644 frameworks/projects/MXRoyale/src/main/royale/mx/controls/dataGridClasses/DataGridColumn.as
 copy frameworks/projects/MXRoyale/src/main/royale/mx/{managers/IFocusManager.as => controls/listClasses/ListItemRenderer.as} (58%)
 create mode 100644 frameworks/projects/MXRoyale/src/main/royale/mx/styles/CSSStyleDeclaration.as
 copy frameworks/projects/MXRoyale/src/main/royale/mx/{core/mx_internal.as => styles/IStyleManager2.as} (67%)

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

[royale-asjs] 01/05: clean out old mxtest files

Posted by ah...@apache.org.
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 194bd3542eca61d437c02e414a170a3c0c9e35a9
Author: Alex Harui <ah...@apache.org>
AuthorDate: Fri May 4 10:07:13 2018 -0700

    clean out old mxtest files
---
 build.xml | 22 ++++++++++++----------
 1 file changed, 12 insertions(+), 10 deletions(-)

diff --git a/build.xml b/build.xml
index d175c9c..0d3ca81 100644
--- a/build.xml
+++ b/build.xml
@@ -556,6 +556,7 @@ limitations under the License.
     
     <target name="super-clean" depends="thirdparty-clean,clean" description="Cleans everything including thirdparty downloads.">
         <delete dir="${basedir}/mustella/tests/basicTests/bin"/>
+        <delete dir="${basedir}/mustella/tests/mxtests/basicTests/bin"/>
         <delete dir="${basedir}/bin" failonerror="false">
             <include name="**"/>
             <exclude name=".gitignore"/>
@@ -1588,16 +1589,17 @@ limitations under the License.
 
     <target name="mxtests-run-js" >
         <property name="profile_arg" value="dummy=false" />
-        <echo>url=file://${basedir}/mustella/tests/mxTests/bin/js-debug/index.html</echo>
+        <echo>url=file://${basedir}/mustella/tests/mxtests/bin/js-debug/index.html</echo>
         <java classname="marmotinni.MarmotinniRunner" classpath="${basedir}/mustella/target/classes" fork="true" failonerror="yes">
             <!--<arg value="browser=chrome" />-->
-            <arg value="url=file://${basedir}/mustella/tests/mxTests/basicTests/bin/js-debug/index.html" />
-            <arg value="script=${basedir}/mustella/tests/mxTests/basicTests/halo/scripts/ButtonTestScript.mxml" />
-            <arg value="script=${basedir}/mustella/tests/mxTests/basicTests/halo/scripts/CheckBoxTestScript.mxml" />
-            <arg value="script=${basedir}/mustella/tests/mxTests/basicTests/halo/scripts/RadioButtonTestScript.mxml" />
-            <arg value="script=${basedir}/mustella/tests/mxTests/basicTests/halo/scripts/TextInputTestScript.mxml" />
-            <arg value="script=${basedir}/mustella/tests/mxTests/basicTests/halo/scripts/TextAreaTestScript.mxml" />
-            <arg value="script=${basedir}/mustella/tests/mxTests/basicTests/halo/scripts/ComboBoxTestScript.mxml" />
+            <arg value="url=file://${basedir}/mustella/tests/mxtests/basicTests/bin/js-debug/index.html" />
+            <arg value="script=${basedir}/mustella/tests/mxtests/basicTests/halo/scripts/ButtonTestScript.mxml" />
+            <arg value="script=${basedir}/mustella/tests/mxtests/basicTests/halo/scripts/CheckBoxTestScript.mxml" />
+            <arg value="script=${basedir}/mustella/tests/mxtests/basicTests/halo/scripts/RadioButtonTestScript.mxml" />
+            <arg value="script=${basedir}/mustella/tests/mxtests/basicTests/halo/scripts/TextInputTestScript.mxml" />
+            <arg value="script=${basedir}/mustella/tests/mxtests/basicTests/halo/scripts/TextAreaTestScript.mxml" />
+            <arg value="script=${basedir}/mustella/tests/mxtests/basicTests/halo/scripts/ComboBoxTestScript.mxml" />
+            <arg value="script=${basedir}/mustella/tests/mxtests/basicTests/halo/scripts/ListAndDataGridTestScript.mxml" />
             <arg value="showSteps=true" />
             <arg value="showScripts=true" />
             <arg value="${profile_arg}" />
@@ -1666,10 +1668,10 @@ limitations under the License.
         <echo message="ROYALE_HOME: ${ROYALE_HOME}"/>
         <echo message="ROYALE_COMPILER_HOME: ${ROYALE_COMPILER_HOME}"/>
         <echo message="GOOG_HOME: ${GOOG_HOME}"/>
-        <delete dir="${basedir}/mustella/tests/mxTests/bin" failonerror="false" />
+        <delete dir="${basedir}/mustella/tests/mxtests/basicTests/bin" failonerror="false" />
         <mxmlc fork="true" debug="true"
             closure-lib="${env.GOOG_HOME}"
-            file="${basedir}/mustella/tests/mxTests/BasicTestsApp.mxml">
+            file="${basedir}/mustella/tests/mxtests/BasicTestsApp.mxml">
             <jvmarg line="${mxmlc.jvm.args}"/>
             <targets>JSRoyale</targets>
             <library-path dir="${ROYALE_HOME}" append="true">

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

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

Posted by ah...@apache.org.
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.

[royale-asjs] 03/05: rename and refactor some interfaces and implementations so it is easier to replicate hosts in other component sets like MXRoyale

Posted by ah...@apache.org.
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 7ff361e8eaf14d1e8c902611cda8f6f9e016210c
Author: Alex Harui <ah...@apache.org>
AuthorDate: Fri May 4 10:12:35 2018 -0700

    rename and refactor some interfaces and implementations so it is easier to replicate hosts in other component sets like MXRoyale
---
 .../royale/org/apache/royale/core/ContainerBase.as |   2 +-
 .../royale/core/ContainerBaseStrandChildren.as     |   6 +-
 .../org/apache/royale/core/DataContainerBase.as    |  53 ++------
 .../apache/royale/core/{IList.as => IDataGrid.as}  |  22 +--
 ...ionModel.as => IStrandWithPresentationModel.as} |  16 ++-
 .../main/royale/org/apache/royale/core/UIBase.as   |   2 +-
 .../royale/org/apache/royale/html/DataContainer.as |   8 +-
 .../main/royale/org/apache/royale/html/DataGrid.as |  23 ++--
 .../src/main/royale/org/apache/royale/html/List.as |   6 +-
 .../org/apache/royale/html/beads/ContainerView.as  |  27 +++-
 .../apache/royale/html/beads/DataContainerView.as  | 148 ++++-----------------
 .../org/apache/royale/html/beads/DataGridView.as   |  15 ++-
 .../beads/DataItemRendererFactoryForArrayData.as   |  10 +-
 .../beads/DataItemRendererFactoryForArrayList.as   |  11 +-
 .../DynamicAddItemRendererForArrayListData.as      |  10 +-
 ...cRemoveAllByNullItemRendererForArrayListData.as |   9 +-
 ...DynamicRemoveAllItemRendererForArrayListData.as |   9 +-
 .../DynamicRemoveItemRendererForArrayListData.as   |   9 +-
 .../DynamicUpdateItemRendererForArrayListData.as   |   9 +-
 .../org/apache/royale/html/beads/ListView.as       |   1 -
 .../beads/TextItemRendererFactoryForArrayData.as   |  10 +-
 .../TextItemRendererFactoryForStringVectorData.as  |  11 +-
 .../org/apache/royale/html/beads/TreeGridView.as   |   6 +-
 .../royale/html/beads/VirtualDataContainerView.as  |   1 -
 .../VirtualDataItemRendererFactoryForArrayData.as  |  37 +++++-
 .../apache/royale/html/beads/VirtualListView.as    |  84 +-----------
 .../beads/layouts/VirtualListVerticalLayout.as     |  15 ++-
 .../projects/Core/src/main/royale/CoreClasses.as   |   3 +-
 ...vate.as => IContainerBaseStrandChildrenHost.as} |   9 +-
 .../apache/royale/core/IItemRendererProvider.as    |  10 --
 .../apache/royale/core/IStrandWithModelView.as}    |  24 ++--
 .../apache/royale/core/ItemRendererClassFactory.as |   2 +-
 32 files changed, 245 insertions(+), 363 deletions(-)

diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/core/ContainerBase.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/core/ContainerBase.as
index 7703f8c..0b62964 100644
--- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/core/ContainerBase.as
+++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/core/ContainerBase.as
@@ -65,7 +65,7 @@ package org.apache.royale.core
      *  @playerversion AIR 2.6
      *  @productversion Royale 0.0
      */
-	public class ContainerBase extends GroupBase implements IStrandPrivate
+	public class ContainerBase extends GroupBase implements IContainerBaseStrandChildrenHost
 	{
         /**
          *  Constructor.
diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/core/ContainerBaseStrandChildren.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/core/ContainerBaseStrandChildren.as
index ef4f8bf..26db4b4 100644
--- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/core/ContainerBaseStrandChildren.as
+++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/core/ContainerBaseStrandChildren.as
@@ -40,16 +40,16 @@ package org.apache.royale.core
          *  @playerversion Flash 10.2
          *  @playerversion AIR 2.6
          *  @productversion Royale 0.0
-		 * 	@royaleignorecoercion org.apache.royale.core.IStrandPrivate
+		 * 	@royaleignorecoercion org.apache.royale.core.IContainerBaseStrandChildrenHost
          */
 		public function ContainerBaseStrandChildren(owner:IParent)
 		{
 			super();
 			
-			this.owner = owner as IStrandPrivate;
+			this.owner = owner as IContainerBaseStrandChildrenHost;
 		}
 		
-		public var owner:IStrandPrivate;
+		public var owner:IContainerBaseStrandChildrenHost;
 		
 		/**
 		 *  @private
diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/core/DataContainerBase.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/core/DataContainerBase.as
index c2ee3a6..06440f2 100644
--- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/core/DataContainerBase.as
+++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/core/DataContainerBase.as
@@ -24,7 +24,6 @@ package org.apache.royale.core
 	import org.apache.royale.events.ItemAddedEvent;
 	import org.apache.royale.events.ItemRemovedEvent;
 	import org.apache.royale.html.supportClasses.DataItemRenderer;
-	import org.apache.royale.utils.loadBeadFromValuesManager;
 	
 	/**
 	 *  Indicates that the initialization of the list is complete.
@@ -45,7 +44,7 @@ package org.apache.royale.core
      *  @playerversion AIR 2.6
      *  @productversion Royale 0.0
      */
-	public class DataContainerBase extends ContainerBase implements IItemRendererParent, IList
+	public class DataContainerBase extends ContainerBase
 	{
         /**
          *  Constructor.
@@ -78,13 +77,7 @@ package org.apache.royale.core
 			}
 			
 			super.addedToParent();
-			
-			// 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"));
 		}
 		
@@ -100,18 +93,18 @@ package org.apache.royale.core
 		 *  @playerversion AIR 2.6
 		 *  @productversion Royale 0.0
 		 * 	@royaleignorecoercion org.apache.royale.html.beads.IListView
-		 */
 		public function get dataGroup():IItemRendererParent
 		{
 			// The JS-side's view.dataGroup is actually this instance of DataContainerBase
 			return (view as IListView).dataGroup;
 		}
+		 */
 		
 		/*
 		* IItemRendererProvider
 		*/
 		
-		private var _itemRenderer:IFactory;
+		private var _itemRenderer:IFactory = null;
 		
 		/**
 		 *  The class or factory used to display each item.
@@ -129,33 +122,7 @@ package org.apache.royale.core
 		{
 			_itemRenderer = value;
 		}
-		
-		/**
-		 * Returns whether or not the itemRenderer property has been set.
-		 *
-		 *  @see org.apache.royale.core.IItemRendererProvider
-		 *
-		 *  @langversion 3.0
-		 *  @playerversion Flash 10.2
-		 *  @playerversion AIR 2.6
-		 *  @productversion Royale 0.0
-		 */
-		public function get hasItemRenderer():Boolean
-		{
-			var result:Boolean = false;
-			
-			COMPILE::SWF {
-				result = _itemRenderer != null;
-			}
 				
-				COMPILE::JS {
-					var test:* = _itemRenderer;
-					result = _itemRenderer !== null && test !== undefined;
-				}
-				
-				return result;
-		}
-		
 		/*
 		* IItemRendererParent
 		*/
@@ -168,12 +135,12 @@ package org.apache.royale.core
 		 *  @playerversion Flash 10.2
 		 *  @playerversion AIR 2.6
 		 *  @productversion Royale 0.8
-		 */
 		public function addItemRenderer(renderer:IItemRenderer, dispatchAdded:Boolean):void
 		{
 			addElement(renderer, dispatchAdded);
 			dispatchItemAdded(renderer);
 		}
+		 */
 		
 		/**
 		 * @copy org.apache.royale.core.IItemRendererParent#addItemRendererAt()
@@ -183,7 +150,6 @@ package org.apache.royale.core
 		 *  @playerversion Flash 10.2
 		 *  @playerversion AIR 2.6
 		 *  @productversion Royale 0.9
-		 */
 		public function addItemRendererAt(renderer:IItemRenderer, index:int):void
 		{
 			addElementAt(renderer, index, true);
@@ -197,6 +163,7 @@ package org.apache.royale.core
 			
 			dispatchEvent(newEvent);
 		}
+		 */
 		/**
 		 * @copy org.apache.royale.core.IItemRendererParent#removeItemRenderer()
 		 * @private
@@ -205,7 +172,6 @@ package org.apache.royale.core
 		 *  @playerversion Flash 10.2
 		 *  @playerversion AIR 2.6
 		 *  @productversion Royale 0.8
-		 */
 		public function removeItemRenderer(renderer:IItemRenderer):void
 		{
 			removeElement(renderer);
@@ -215,6 +181,7 @@ package org.apache.royale.core
 			
 			dispatchEvent(newEvent);
 		}
+		 */
 		
 		/**
 		 * @copy org.apache.royale.core.IItemRendererParent#removeAllItemRenderers()
@@ -224,7 +191,6 @@ package org.apache.royale.core
 		 *  @playerversion Flash 10.2
 		 *  @playerversion AIR 2.6
 		 *  @productversion Royale 0.8
-		 */
 		public function removeAllItemRenderers():void
 		{
 			while (numElements > 0) {
@@ -232,6 +198,7 @@ package org.apache.royale.core
 				removeElement(child);
 			}
 		}
+		 */
 		
 		/**
 		 *  @copy org.apache.royale.core.IItemRendererParent#getItemRendererForIndex()
@@ -241,12 +208,12 @@ package org.apache.royale.core
 		 *  @playerversion AIR 2.6
 		 *  @productversion Royale 0.8
 		 * 	@royaleignorecoercion org.apache.royale.core.IItemRenderer
-		 */
 		public function getItemRendererForIndex(index:int):IItemRenderer
 		{
 			if (index < 0 || index >= numElements) return null;
 			return getElementAt(index) as IItemRenderer;
 		}
+		 */
 		
 		/**
 		 *  Refreshes the itemRenderers. Useful after a size change by the data group.
@@ -257,7 +224,6 @@ package org.apache.royale.core
 		 *  @playerversion AIR 2.6
 		 *  @productversion Royale 0.8
 		 * 	@royaleignorecoercion org.apache.royale.html.supportClasses.DataItemRenderer
-		 */
 		public function updateAllItemRenderers():void
 		{
 			var n:Number = numElements;
@@ -270,6 +236,7 @@ package org.apache.royale.core
 				}
 			}
 		}
+		 */
 
     }
 }
diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/core/IList.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/core/IDataGrid.as
similarity index 64%
rename from frameworks/projects/Basic/src/main/royale/org/apache/royale/core/IList.as
rename to frameworks/projects/Basic/src/main/royale/org/apache/royale/core/IDataGrid.as
index f25d036..ccdcd5e 100644
--- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/core/IList.as
+++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/core/IDataGrid.as
@@ -18,12 +18,10 @@
 ////////////////////////////////////////////////////////////////////////////////
 package org.apache.royale.core
 {
-	import org.apache.royale.core.IItemRendererParent;
-	import org.apache.royale.core.IItemRendererProvider;
 
     /**
-     *  The IList interface is implemented by any component that supports being
-	 *  a "list" which means its content is generated by a factory and whose
+     *  The IDataGrid interface is implemented by any component that supports being
+	 *  a "DataGrid" which means its content is generated by a factory and whose
 	 *  children are item renderers (IItemRenderer).
      * 
      *  @langversion 3.0
@@ -31,18 +29,10 @@ package org.apache.royale.core
      *  @playerversion AIR 2.6
      *  @productversion Royale 0.0
      */
-	public interface IList extends IItemRendererProvider
+	public interface IDataGrid extends IParentIUIBase, IContainer, IStrandWithPresentationModel
 	{
-        /**
-         *  Returns the component within the list (maybe even the list shell itself)
-		 *  which will be the parent of each itemRenderer.
-         * 
-         *  @langversion 3.0
-         *  @playerversion Flash 10.2
-         *  @playerversion AIR 2.6
-         *  @productversion Royale 0.0
-         */
-		function get dataGroup():IItemRendererParent;
-		
+        function get model():Object;
+        function set model(value:Object):void;
+        
 	}
 }
diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/core/IListWithPresentationModel.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/core/IStrandWithPresentationModel.as
similarity index 69%
copy from frameworks/projects/Basic/src/main/royale/org/apache/royale/core/IListWithPresentationModel.as
copy to frameworks/projects/Basic/src/main/royale/org/apache/royale/core/IStrandWithPresentationModel.as
index 3e24bfc..2d9be95 100644
--- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/core/IListWithPresentationModel.as
+++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/core/IStrandWithPresentationModel.as
@@ -18,29 +18,31 @@
 ////////////////////////////////////////////////////////////////////////////////
 package org.apache.royale.core
 {
-	import org.apache.royale.core.IListPresentationModel;
+	import org.apache.royale.core.IBead;
 
     /**
-     *  The IListWithPresentationModel interface is implemented by any IList
-	 *  that supports a separate IListPresentationModel
+     *  The IStrandWithPresentationModel interface is implemented by any IStrand
+	 *  that supports a separate bead that is a presentationModel.  A presentationModel
+     *  is a set of properties that act as parameters to the View as opposed to the
+     *  regular model that is the data to be displayed by the view.  A simple example
+     *  is the rowHeight of a vertical list.
      * 
      *  @langversion 3.0
      *  @playerversion Flash 10.2
      *  @playerversion AIR 2.6
      *  @productversion Royale 0.0
      */
-	public interface IListWithPresentationModel extends IList
+	public interface IStrandWithPresentationModel
 	{
         /**
-         *  Returns the component within the list (maybe even the list shell itself)
-		 *  which will be the parent of each itemRenderer.
+         *  Returns the bead that holds the properties for the presentationModel.
          * 
          *  @langversion 3.0
          *  @playerversion Flash 10.2
          *  @playerversion AIR 2.6
          *  @productversion Royale 0.0
          */
-		function get presentationModel():IListPresentationModel;
+		function get presentationModel():IBead;
 		
 	}
 }
diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/core/UIBase.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/core/UIBase.as
index fc0b96f..fc91aff 100644
--- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/core/UIBase.as
+++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/core/UIBase.as
@@ -171,7 +171,7 @@ package org.apache.royale.core
      *  @playerversion AIR 2.6
      *  @productversion Royale 0.0
      */
-	public class UIBase extends HTMLElementWrapper implements IStrandWithModel, IEventDispatcher, IParentIUIBase, IStyleableObject, ILayoutChild, IRoyaleElement
+	public class UIBase extends HTMLElementWrapper implements IStrandWithModelView, IEventDispatcher, IParentIUIBase, IStyleableObject, ILayoutChild, IRoyaleElement
 	{
         /**
          *  Constructor.
diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/DataContainer.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/DataContainer.as
index 40e8d75..e8d3f9f 100644
--- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/DataContainer.as
+++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/DataContainer.as
@@ -21,6 +21,7 @@ package org.apache.royale.html
 	import org.apache.royale.core.DataContainerBase;
 	
 	import org.apache.royale.core.ContainerBaseStrandChildren;
+    import org.apache.royale.core.IBead;
 	import org.apache.royale.core.IContentViewHost;
 	import org.apache.royale.core.IChild;
 	import org.apache.royale.core.IDataProviderItemRendererMapper;
@@ -29,8 +30,7 @@ package org.apache.royale.html
 	import org.apache.royale.core.IItemRenderer;
 	import org.apache.royale.core.IItemRendererParent;
 	import org.apache.royale.core.ILayoutView;
-	import org.apache.royale.core.IList;
-    import org.apache.royale.core.IListWithPresentationModel;
+    import org.apache.royale.core.IStrandWithPresentationModel;
 	import org.apache.royale.core.IListPresentationModel;
 	import org.apache.royale.core.IRollOverModel;
 	import org.apache.royale.core.IDataProviderModel;
@@ -74,7 +74,7 @@ package org.apache.royale.html
 	 *  @playerversion AIR 2.6
 	 *  @productversion Royale 0.0
 	 */
-	public class DataContainer extends DataContainerBase implements IListWithPresentationModel
+	public class DataContainer extends DataContainerBase implements IStrandWithPresentationModel
 	{
 		/**
 		 *  constructor.
@@ -143,7 +143,7 @@ package org.apache.royale.html
 		 *  @productversion Royale 0.9
 		 *  @royaleignorecoercion org.apache.royale.core.IListPresentationModel
 		 */
-		public function get presentationModel():IListPresentationModel
+		public function get presentationModel():IBead
 		{
 			var presModel:IListPresentationModel = getBeadByType(IListPresentationModel) as IListPresentationModel;
 			if (presModel == null) {
diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/DataGrid.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/DataGrid.as
index 7cc59e4..6075eaa 100644
--- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/DataGrid.as
+++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/DataGrid.as
@@ -18,15 +18,16 @@
 ////////////////////////////////////////////////////////////////////////////////
 package org.apache.royale.html
 {
+	import org.apache.royale.core.GroupBase;
 	import org.apache.royale.core.IBead;
+	import org.apache.royale.core.IChangePropagator;
+	import org.apache.royale.core.IDataGrid;
 	import org.apache.royale.core.IDataGridModel;
 	import org.apache.royale.core.IDataGridPresentationModel;
 	import org.apache.royale.core.UIBase;
-	import org.apache.royale.core.GroupBase;
 	import org.apache.royale.core.ValuesManager;
-	import org.apache.royale.html.beads.models.DataGridPresentationModel;
 	import org.apache.royale.events.Event;
-	import org.apache.royale.core.IChangePropagator;
+	import org.apache.royale.html.beads.models.DataGridPresentationModel;
 	import org.apache.royale.utils.loadBeadFromValuesManager;
 	
 	[Event(name="change", type="org.apache.royale.events.Event")]
@@ -45,7 +46,7 @@ package org.apache.royale.html
 	 *  @playerversion AIR 2.6
 	 *  @productversion Royale 0.0
 	 */
-	public class DataGrid extends GroupBase
+	public class DataGrid extends GroupBase implements IDataGrid
 	{
 		/**
 		 *  constructor.
@@ -146,7 +147,7 @@ package org.apache.royale.html
 		 *  @royaleignorecoercion org.apache.royale.core.IDataGridPresentationModel
 		 *  @royaleignorecoercion org.apache.royale.core.IBead
 		 */
-		public function get presentationModel():IDataGridPresentationModel
+		public function get presentationModel():IBead
 		{
 			if (_presentationModel == null) {
 				var c:Class = ValuesManager.valuesImpl.getValue(this, "iDataGridPresentationModel");
@@ -161,9 +162,9 @@ package org.apache.royale.html
 		/**
 		 * @royaleignorecoercion org.apache.royale.core.IDataGridPresentationModel
 		 */
-		public function set presentationModel(value:IDataGridPresentationModel):void
+		public function set presentationModel(value:IBead):void
 		{
-			_presentationModel = value;
+			_presentationModel = value as IDataGridPresentationModel;
 		}
 				
 		/**
@@ -173,14 +174,18 @@ package org.apache.royale.html
 		 *  @playerversion Flash 10.2
 		 *  @playerversion AIR 2.6
 		 *  @productversion Royale 0.9
+		 *  @royaleignorecoercion org.apache.royale.core.IDataGridPresentationModel
 		 */
 		public function get rowHeight():Number
 		{
-			return presentationModel.rowHeight;
+			return (presentationModel as IDataGridPresentationModel).rowHeight;
 		}
+        /**
+         * @royaleignorecoercion org.apache.royale.core.IDataGridPresentationModel
+         */
 		public function set rowHeight(value:Number):void
 		{
-			presentationModel.rowHeight = value;
+			(presentationModel as IDataGridPresentationModel).rowHeight = value;
 		}
 		
 		override public function addedToParent():void
diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/List.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/List.as
index a9e3b50..8124a28 100644
--- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/List.as
+++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/List.as
@@ -18,6 +18,7 @@
 ////////////////////////////////////////////////////////////////////////////////
 package org.apache.royale.html
 {
+	import org.apache.royale.core.IListPresentationModel;
 	import org.apache.royale.core.IRollOverModel;
 	import org.apache.royale.core.ISelectionModel;
 
@@ -131,14 +132,15 @@ package org.apache.royale.html
 		 *  @playerversion Flash 10.2
 		 *  @playerversion AIR 2.6
 		 *  @productversion Royale 0.0
+         *  @royaleignorecoercion org.apache.royale.core.IListPresentationModel
 		 */
 		public function get rowHeight():Number
 		{
-			return presentationModel.rowHeight;
+			return (presentationModel as IListPresentationModel).rowHeight;
 		}
 		public function set rowHeight(value:Number):void
 		{
-			presentationModel.rowHeight = value;
+			(presentationModel as IListPresentationModel).rowHeight = value;
 		}
 
 		/**
diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/ContainerView.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/ContainerView.as
index f72ebd9..84c40e1 100644
--- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/ContainerView.as
+++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/ContainerView.as
@@ -23,7 +23,7 @@ package org.apache.royale.html.beads
 	import org.apache.royale.core.IBead;
 	import org.apache.royale.core.IBeadLayout;
 	import org.apache.royale.core.IBeadView;
-    import org.apache.royale.core.IBorderPaddingMarginValuesImpl;
+	import org.apache.royale.core.IBorderPaddingMarginValuesImpl;
 	import org.apache.royale.core.IChild;
 	import org.apache.royale.core.IContainer;
 	import org.apache.royale.core.IContainerView;
@@ -37,9 +37,9 @@ package org.apache.royale.html.beads
 	import org.apache.royale.core.IUIBase;
 	import org.apache.royale.core.IViewport;
 	import org.apache.royale.core.IViewportModel;
-    import org.apache.royale.core.layout.EdgeData;
 	import org.apache.royale.core.UIBase;
 	import org.apache.royale.core.ValuesManager;
+	import org.apache.royale.core.layout.EdgeData;
 	import org.apache.royale.events.Event;
 	import org.apache.royale.events.IEventDispatcher;
 	import org.apache.royale.geom.Rectangle;
@@ -219,6 +219,29 @@ package org.apache.royale.html.beads
 		{
             var host:ILayoutChild = this.host as ILayoutChild;
             var vm:IViewportModel = viewportModel;
+            COMPILE::SWF
+            {
+                // if earlier layouts set the size of the host
+                // then it won't reflect changes in content size
+                if (host is UIBase)
+                {
+                    var uiBase:UIBase = host as UIBase;
+                    if (host.isWidthSizedToContent())
+                    {
+                        if (uiBase.width != uiBase.$width)
+                        {
+                            host.setWidth(uiBase.$width, true);
+                        }
+                    }
+                    if (host.isHeightSizedToContent())
+                    {
+                        if (uiBase.height != uiBase.$height)
+                        {
+                            host.setHeight(uiBase.$height, true);
+                        }
+                    }                    
+                }
+            }
 			var hostWidth:Number = host.width;
 			var hostHeight:Number = host.height;
 
diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DataContainerView.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DataContainerView.as
index fc4ba3b..560daf1 100644
--- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DataContainerView.as
+++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DataContainerView.as
@@ -24,10 +24,11 @@ package org.apache.royale.html.beads
 	import org.apache.royale.core.IBeadLayout;
 	import org.apache.royale.core.IBeadModel;
 	import org.apache.royale.core.IBeadView;
-	import org.apache.royale.core.IDataProviderModel;
+    import org.apache.royale.core.IDataProviderItemRendererMapper;
+    import org.apache.royale.core.IDataProviderModel;
 	import org.apache.royale.core.IItemRenderer;
+    import org.apache.royale.core.IItemRendererClassFactory;
 	import org.apache.royale.core.IItemRendererParent;
-	import org.apache.royale.core.IList;
 	import org.apache.royale.core.IParent;
 	import org.apache.royale.core.IParentIUIBase;
 	import org.apache.royale.core.ISelectableItemRenderer;
@@ -42,6 +43,7 @@ package org.apache.royale.html.beads
 	import org.apache.royale.events.IEventDispatcher;
 	import org.apache.royale.html.supportClasses.Border;
 	import org.apache.royale.html.supportClasses.DataGroup;
+	import org.apache.royale.utils.loadBeadFromValuesManager;
 
 	/**
 	 *  The DataContainerView provides the visual elements for the DataContainer.
@@ -52,7 +54,6 @@ package org.apache.royale.html.beads
 	 *  @playerversion AIR 2.6
 	 *  @productversion Royale 0.8
 	 */
-	COMPILE::JS
 	public class DataContainerView extends ContainerView implements IListView
 	{
 		public function DataContainerView()
@@ -73,9 +74,17 @@ package org.apache.royale.html.beads
 			_strand = value;
 			super.strand = value;
 			
+            // 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", value);
+            loadBeadFromValuesManager(IItemRendererClassFactory, "iItemRendererClassFactory", value);
+            
 			host.addEventListener("beadsAdded", beadsAddedHandler);
+            //host.addEventListener("itemsCreated", itemsCreatedHandler); in beadsAddedHandler
 		}
 		
+        
 		protected var dataModel:IDataProviderModel;
 		
 		/**
@@ -95,14 +104,7 @@ package org.apache.royale.html.beads
 			host.addEventListener("itemsCreated", itemsCreatedHandler);
 			dataModel.addEventListener("dataProviderChanged", dataProviderChangeHandler);
 		}
-		
-		/**
-		 * @private
-		 */
-		override protected function handleInitComplete(event:Event):void
-		{
-			super.handleInitComplete(event);
-		}
+        
 		
 		/**
 		 * @private
@@ -119,115 +121,23 @@ package org.apache.royale.html.beads
 		protected function dataProviderChangeHandler(event:Event):void
 		{
 			// trace("DataContainerView: dataProviderChangeHandler");
-			performLayout(event);
-		}
-	}
-	
-	COMPILE::SWF
-	public class DataContainerView extends ContainerView implements IListView
-	{
-		public function DataContainerView()
-		{
-			super();
-		}
-						
-		protected var dataModel:IDataProviderModel;
-		
-		/**
-		 * @private
-		 */
-		override public function get host():IUIBase
-		{
-			return _strand as IUIBase;
-		}
-		
-		/**
-		 *  @copy org.apache.royale.core.IBead#strand
-		 *  
-		 *  @langversion 3.0
-		 *  @playerversion Flash 10.2
-		 *  @playerversion AIR 2.6
-		 *  @productversion Royale 0.8
-		 */
-		override public function set strand(value:IStrand):void
-		{
-			_strand = value;
-			super.strand = value;
-			
-			host.addEventListener("beadsAdded", beadsAddedHandler);
-			host.addEventListener("itemsCreated", itemsCreatedHandler);
-		}
-		
-		override protected function completeSetup():void
-		{
-			super.completeSetup();
-			
-			// list is not interested in UI children, it wants to know when new items
-			// have been added or the dataProvider has changed.
-//			host.removeEventListener("childrenAdded", childrenChangedHandler);
-//			host.removeEventListener("childrenAdded", performLayout);
-		}
-		
-		protected function beadsAddedHandler(event:Event):void
-		{
-			dataModel = _strand.getBeadByType(IDataProviderModel) as IDataProviderModel;
-			dataModel.addEventListener("dataProviderChanged", dataProviderChangeHandler);
-		}
-		
-		override protected function handleInitComplete(event:Event):void
-		{
-			super.handleInitComplete(event);
-		}
-		
-		/**
-		 *  The area holding the itemRenderers.
-		 *
-		 *  @langversion 3.0
-		 *  @playerversion Flash 10.2
-		 *  @playerversion AIR 2.6
-		 *  @productversion Royale 0.8
-		 */
-		public function get dataGroup():IItemRendererParent
-		{
-			return super.contentView as IItemRendererParent;
-		}
-				
-		/**
-		 * @private
-		 */
-		override public function get resizableView():IUIBase
-		{
-			return _strand as IUIBase;
-		}
-		
-		/**
-		 * @private
-		 */
-		protected function itemsCreatedHandler(event:Event):void
-		{
-			host.dispatchEvent(new Event("layoutNeeded"));
-		}
-		
-		/**
-		 * @private
-		 */
-		protected function dataProviderChangeHandler(event:Event):void
-		{
-			host.dispatchEvent(new Event("layoutNeeded"));
-		}
-		        
+            COMPILE::JS
+            {
+    			performLayout(event);
+            }
+            COMPILE::SWF
+            {
+                host.dispatchEvent(new Event("layoutNeeded"));                
+            }
+		}
+        
         /**
-         *  respond to a change in size or request to re-layout everything
-         *  
-         *  @langversion 3.0
-         *  @playerversion Flash 10.2
-         *  @playerversion AIR 2.6
-         *  @productversion Royale 0.9
+         * @private
          */
-		override protected function resizeHandler(event:Event):void
-		{
-			// might need to do something here, not sure yet.
-			super.resizeHandler(event);
-		}
+        COMPILE::SWF
+        override public function get resizableView():IUIBase
+        {
+            return _strand as IUIBase;
+        }
 	}
 }
diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DataGridView.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DataGridView.as
index fe14fc3..462159c 100644
--- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DataGridView.as
+++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DataGridView.as
@@ -22,6 +22,7 @@ package org.apache.royale.html.beads
 	import org.apache.royale.core.IBeadModel;
 	import org.apache.royale.core.IBeadView;
 	import org.apache.royale.core.IChild;
+    import org.apache.royale.core.IDataGrid;
 	import org.apache.royale.core.IDataGridModel;
 	import org.apache.royale.core.IDataGridPresentationModel;
 	import org.apache.royale.core.IUIBase;
@@ -29,7 +30,6 @@ package org.apache.royale.html.beads
 	import org.apache.royale.events.Event;
 	import org.apache.royale.events.IEventDispatcher;
 	import org.apache.royale.html.Container;
-	import org.apache.royale.html.DataGrid;
 	import org.apache.royale.html.DataGridButtonBar;
 	import org.apache.royale.html.beads.layouts.ButtonBarLayout;
 	import org.apache.royale.html.supportClasses.DataGridColumnList;
@@ -108,7 +108,7 @@ package org.apache.royale.html.beads
 			 */
 			override protected function handleInitComplete(event:Event):void
 			{
-				var host:DataGrid = _strand as DataGrid;
+				var host:IDataGrid = _strand as IDataGrid;
 
 				// see if there is a presentation model already in place. if not, add one.
 				var sharedModel:IDataGridModel = host.model as IDataGridModel;
@@ -131,9 +131,9 @@ package org.apache.royale.html.beads
 				var bblayout:ButtonBarLayout = new ButtonBarLayout();
 				_header.addBead(bblayout as IBead);
 				_header.addBead(new Viewport() as IBead);
-				host.addElement(_header as IChild);
+				host.strandChildren.addElement(_header as IChild);
 
-				host.addElement(_listArea as IChild);
+				host.strandChildren.addElement(_listArea as IChild);
 
 				handleDataProviderChanged(event);
 
@@ -204,12 +204,13 @@ package org.apache.royale.html.beads
 			 * @royaleignorecoercion org.apache.royale.core.IDataGridModel
 			 * @royaleignorecoercion org.apache.royale.core.IBead
 			 * @royaleignorecoercion org.apache.royale.core.IChild
-			 * @royaleignorecoercion org.apache.royale.html.DataGrid
+			 * @royaleignorecoercion org.apache.royale.core.IDataGrid
+			 * @royaleignorecoercion org.apache.royale.core.IDataGridPresentationModel
 			 * @royaleignorecoercion org.apache.royale.html.supportClasses.IDataGridColumn
 			 */
 			private function createLists():void
 			{
-				var host:DataGrid = _strand as DataGrid;
+				var host:IDataGrid = _strand as IDataGrid;
 				
 				// get the name of the class to use for the columns
 				var columnClassName:String = ValuesManager.valuesImpl.getValue(host, "columnClassName") as String;
@@ -218,7 +219,7 @@ package org.apache.royale.html.beads
 				}
 
 				var sharedModel:IDataGridModel = host.model as IDataGridModel;
-				var presentationModel:IDataGridPresentationModel = host.presentationModel;
+				var presentationModel:IDataGridPresentationModel = host.presentationModel as IDataGridPresentationModel;
 
 				_lists = [];
 
diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DataItemRendererFactoryForArrayData.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DataItemRendererFactoryForArrayData.as
index dc1f1c4..90ce86c 100644
--- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DataItemRendererFactoryForArrayData.as
+++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DataItemRendererFactoryForArrayData.as
@@ -26,6 +26,7 @@ package org.apache.royale.html.beads
 	import org.apache.royale.core.ISelectableItemRenderer;
 	import org.apache.royale.core.IDataProviderModel;
 	import org.apache.royale.core.IStrand;
+    import org.apache.royale.core.IStrandWithModelView;
 	import org.apache.royale.core.IUIBase;
 	import org.apache.royale.core.SimpleCSSStyles;
 	import org.apache.royale.core.UIBase;
@@ -36,7 +37,7 @@ package org.apache.royale.html.beads
 	import org.apache.royale.events.ItemRendererEvent;
 	import org.apache.royale.html.List;
 	
-	import org.apache.royale.core.IList;
+    import org.apache.royale.html.beads.IListView;
 	import org.apache.royale.core.IChild;
 	import org.apache.royale.core.ILayoutHost;
 	import org.apache.royale.core.IParentIUIBase;
@@ -158,7 +159,8 @@ package org.apache.royale.html.beads
          *  @playerversion AIR 2.6
          *  @productversion Royale 0.8
 		 *  @royaleignorecoercion Array
-		 *  @royaleignorecoercion org.apache.royale.core.IList
+         *  @royaleignorecoercion org.apache.royale.core.IStrandWithModelView
+         *  @royaleignorecoercion org.apache.royale.html.beads.IListView
 		 *  @royaleignorecoercion org.apache.royale.core.IListPresentationModel
 		 *  @royaleignorecoercion org.apache.royale.core.UIBase
 		 *  @royaleignorecoercion org.apache.royale.core.ISelectableItemRenderer
@@ -171,8 +173,8 @@ package org.apache.royale.html.beads
 			if (!dp)
 				return;
 			
-			var list:IList = _strand as IList;
-			var dataGroup:IItemRendererParent = list.dataGroup;
+            var view:IListView = (_strand as IStrandWithModelView).view as IListView;
+			var dataGroup:IItemRendererParent = view.dataGroup;
 			
 			dataGroup.removeAllItemRenderers();
 			
diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DataItemRendererFactoryForArrayList.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DataItemRendererFactoryForArrayList.as
index a24ede7..02e6cd0 100644
--- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DataItemRendererFactoryForArrayList.as
+++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DataItemRendererFactoryForArrayList.as
@@ -27,6 +27,7 @@ package org.apache.royale.html.beads
 	import org.apache.royale.core.ISelectableItemRenderer;
 	import org.apache.royale.core.IDataProviderModel;
 	import org.apache.royale.core.IStrand;
+    import org.apache.royale.core.IStrandWithModelView;
 	import org.apache.royale.core.SimpleCSSStyles;
 	import org.apache.royale.core.UIBase;
 	import org.apache.royale.events.Event;
@@ -36,7 +37,7 @@ package org.apache.royale.html.beads
     import org.apache.royale.html.supportClasses.DataItemRenderer;
 	import org.apache.royale.utils.loadBeadFromValuesManager;
 
-	import org.apache.royale.core.IList;
+    import org.apache.royale.html.beads.IListView;
 	
 	[Event(name="itemRendererCreated",type="org.apache.royale.events.ItemRendererEvent")]
 	
@@ -146,7 +147,9 @@ package org.apache.royale.html.beads
 		}
 		
 		/**
-		 * @private
+		 *  @private
+         *  @royaleignorecoercion org.apache.royale.core.IStrandWithModelView
+         *  @royaleignorecoercion org.apache.royale.html.beads.IListView
 		 */
 		protected function dataProviderChangeHandler(event:Event):void
 		{
@@ -154,8 +157,8 @@ package org.apache.royale.html.beads
 			if (!dp)
 				return;
 			
-			var list:IList = _strand as IList;
-			var dataGroup:IItemRendererParent = list.dataGroup;
+            var view:IListView = (_strand as IStrandWithModelView).view as IListView;
+			var dataGroup:IItemRendererParent = view.dataGroup;
 			
 			dataGroup.removeAllItemRenderers();
 			
diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DynamicAddItemRendererForArrayListData.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DynamicAddItemRendererForArrayListData.as
index e8f5ed4..da86642 100644
--- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DynamicAddItemRendererForArrayListData.as
+++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DynamicAddItemRendererForArrayListData.as
@@ -22,16 +22,18 @@ package org.apache.royale.html.beads
 	import org.apache.royale.core.IDataProviderModel;
 	import org.apache.royale.core.IItemRendererClassFactory;
 	import org.apache.royale.core.IItemRendererParent;
-	import org.apache.royale.core.IList;
+	import org.apache.royale.core.IItemRendererProvider;
 	import org.apache.royale.core.IListPresentationModel;
 	import org.apache.royale.core.ISelectableItemRenderer;
 	import org.apache.royale.core.ISelectionModel;
 	import org.apache.royale.core.IStrand;
+    import org.apache.royale.core.IStrandWithModelView;
 	import org.apache.royale.core.SimpleCSSStyles;
 	import org.apache.royale.core.UIBase;
 	import org.apache.royale.events.CollectionEvent;
 	import org.apache.royale.events.Event;
 	import org.apache.royale.events.IEventDispatcher;
+    import org.apache.royale.html.beads.IListView;
 	import org.apache.royale.utils.loadBeadFromValuesManager;
 
     /**
@@ -165,12 +167,14 @@ package org.apache.royale.html.beads
 		 *  @playerversion Flash 10.2
 		 *  @playerversion AIR 2.6
 		 *  @productversion Royale 0.9.0
+         *  @royaleignorecoercion org.apache.royale.core.IStrandWithModelView
+         *  @royaleignorecoercion org.apache.royale.html.beads.IListView
 		 */
 		public function get itemRendererParent():IItemRendererParent
 		{
 			if (_itemRendererParent == null) {
-				var list:IList = _strand as IList;
-				_itemRendererParent = list.dataGroup;
+				var view:IListView = (_strand as IStrandWithModelView).view as IListView;
+				_itemRendererParent = view.dataGroup;
 			}
 			return _itemRendererParent;
 		}
diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DynamicRemoveAllByNullItemRendererForArrayListData.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DynamicRemoveAllByNullItemRendererForArrayListData.as
index 8215562..ab64441 100644
--- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DynamicRemoveAllByNullItemRendererForArrayListData.as
+++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DynamicRemoveAllByNullItemRendererForArrayListData.as
@@ -21,12 +21,13 @@ package org.apache.royale.html.beads
 	import org.apache.royale.core.IBead;
 	import org.apache.royale.core.IDataProviderModel;
 	import org.apache.royale.core.IItemRendererParent;
-	import org.apache.royale.core.IList;
 	import org.apache.royale.core.ISelectionModel;
 	import org.apache.royale.core.IStrand;
+    import org.apache.royale.core.IStrandWithModelView;
 	import org.apache.royale.events.CollectionEvent;
 	import org.apache.royale.events.Event;
 	import org.apache.royale.events.IEventDispatcher;
+    import org.apache.royale.html.beads.IListView;
 
 	/**
 	 * Handles the removal of all itemRenderers once data source is being set to null.
@@ -135,12 +136,14 @@ package org.apache.royale.html.beads
 		 *  @playerversion Flash 10.2
 		 *  @playerversion AIR 2.6
 		 *  @productversion Royale 0.9.0
+         *  @royaleignorecoercion org.apache.royale.core.IStrandWithModelView
+         *  @royaleignorecoercion org.apache.royale.html.beads.IListView
 		 */
 		public function get itemRendererParent():IItemRendererParent
 		{
 			if (_itemRendererParent == null) {
-				var list:IList = _strand as IList;
-				_itemRendererParent = list.dataGroup;
+                var view:IListView = (_strand as IStrandWithModelView).view as IListView;
+                _itemRendererParent = view.dataGroup;
 			}
 			return _itemRendererParent;
 		}
diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DynamicRemoveAllItemRendererForArrayListData.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DynamicRemoveAllItemRendererForArrayListData.as
index 558cf0a..c78805c 100644
--- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DynamicRemoveAllItemRendererForArrayListData.as
+++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DynamicRemoveAllItemRendererForArrayListData.as
@@ -21,12 +21,13 @@ package org.apache.royale.html.beads
 	import org.apache.royale.core.IBead;
 	import org.apache.royale.core.IDataProviderModel;
 	import org.apache.royale.core.IItemRendererParent;
-	import org.apache.royale.core.IList;
 	import org.apache.royale.core.ISelectionModel;
 	import org.apache.royale.core.IStrand;
+    import org.apache.royale.core.IStrandWithModelView;
 	import org.apache.royale.events.CollectionEvent;
 	import org.apache.royale.events.Event;
 	import org.apache.royale.events.IEventDispatcher;
+    import org.apache.royale.html.beads.IListView;
 
 	/**
 	 * Handles the removal of all itemRenderers once the all items has been removed
@@ -149,12 +150,14 @@ package org.apache.royale.html.beads
 		 *  @playerversion Flash 10.2
 		 *  @playerversion AIR 2.6
 		 *  @productversion Royale 0.9.0
+         *  @royaleignorecoercion org.apache.royale.core.IStrandWithModelView
+         *  @royaleignorecoercion org.apache.royale.html.beads.IListView
 		 */
 		public function get itemRendererParent():IItemRendererParent
 		{
 			if (_itemRendererParent == null) {
-				var list:IList = _strand as IList;
-				_itemRendererParent = list.dataGroup;
+                var view:IListView = (_strand as IStrandWithModelView).view as IListView;
+                _itemRendererParent = view.dataGroup;
 			}
 			return _itemRendererParent;
 		}
diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DynamicRemoveItemRendererForArrayListData.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DynamicRemoveItemRendererForArrayListData.as
index e3f1a00..d0bee21 100644
--- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DynamicRemoveItemRendererForArrayListData.as
+++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DynamicRemoveItemRendererForArrayListData.as
@@ -21,14 +21,15 @@ package org.apache.royale.html.beads
 	import org.apache.royale.core.IBead;
 	import org.apache.royale.core.IDataProviderModel;
 	import org.apache.royale.core.IItemRendererParent;
-	import org.apache.royale.core.IList;
 	import org.apache.royale.core.ISelectableItemRenderer;
 	import org.apache.royale.core.ISelectionModel;
 	import org.apache.royale.core.IStrand;
+    import org.apache.royale.core.IStrandWithModelView;
 	import org.apache.royale.core.UIBase;
 	import org.apache.royale.events.CollectionEvent;
 	import org.apache.royale.events.Event;
 	import org.apache.royale.events.IEventDispatcher;
+    import org.apache.royale.html.beads.IListView;
 
 	/**
 	 * Handles the removal of an itemRenderer once the corresponding datum has been removed
@@ -155,12 +156,14 @@ package org.apache.royale.html.beads
 		 *  @playerversion Flash 10.2
 		 *  @playerversion AIR 2.6
 		 *  @productversion Royale 0.9.0
+         *  @royaleignorecoercion org.apache.royale.core.IStrandWithModelView
+         *  @royaleignorecoercion org.apache.royale.html.beads.IListView
 		 */
 		public function get itemRendererParent():IItemRendererParent
 		{
 			if (_itemRendererParent == null) {
-				var list:IList = _strand as IList;
-				_itemRendererParent = list.dataGroup;
+                var view:IListView = (_strand as IStrandWithModelView).view as IListView;
+                _itemRendererParent = view.dataGroup;
 			}
 			return _itemRendererParent;
 		}
diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DynamicUpdateItemRendererForArrayListData.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DynamicUpdateItemRendererForArrayListData.as
index d939f9f..7661058 100644
--- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DynamicUpdateItemRendererForArrayListData.as
+++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DynamicUpdateItemRendererForArrayListData.as
@@ -21,13 +21,14 @@ package org.apache.royale.html.beads
 	import org.apache.royale.core.IBead;
 	import org.apache.royale.core.IDataProviderModel;
     import org.apache.royale.core.IItemRendererParent;
-	import org.apache.royale.core.IList;
 	import org.apache.royale.core.ISelectableItemRenderer;
 	import org.apache.royale.core.ISelectionModel;
 	import org.apache.royale.core.IStrand;
+    import org.apache.royale.core.IStrandWithModelView;
 	import org.apache.royale.events.CollectionEvent;
 	import org.apache.royale.events.Event;
 	import org.apache.royale.events.IEventDispatcher;
+    import org.apache.royale.html.beads.IListView;
 
     /**
 	 * Handles the update of an itemRenderer once the corresponding datum has been updated
@@ -150,12 +151,14 @@ package org.apache.royale.html.beads
 		 *  @playerversion Flash 10.2
 		 *  @playerversion AIR 2.6
 		 *  @productversion Royale 0.9.0
+         *  @royaleignorecoercion org.apache.royale.core.IStrandWithModelView
+         *  @royaleignorecoercion org.apache.royale.html.beads.IListView
 		 */
 		public function get itemRendererParent():IItemRendererParent
 		{
 			if (_itemRendererParent == null) {
-				var list:IList = _strand as IList;
-				_itemRendererParent = list.dataGroup;
+                var view:IListView = (_strand as IStrandWithModelView).view as IListView;
+                _itemRendererParent = view.dataGroup;
 			}
 			return _itemRendererParent;
 		}
diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/ListView.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/ListView.as
index e0d103d..8ff7ad2 100644
--- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/ListView.as
+++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/ListView.as
@@ -24,7 +24,6 @@ package org.apache.royale.html.beads
 	import org.apache.royale.core.IBeadLayout;
 	import org.apache.royale.core.IBeadModel;
 	import org.apache.royale.core.IBeadView;
-	import org.apache.royale.core.IList;
 	import org.apache.royale.core.ISelectableItemRenderer;
 	import org.apache.royale.core.IItemRenderer;
 	import org.apache.royale.core.IItemRendererParent;
diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/TextItemRendererFactoryForArrayData.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/TextItemRendererFactoryForArrayData.as
index 1e3536d..606708d 100644
--- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/TextItemRendererFactoryForArrayData.as
+++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/TextItemRendererFactoryForArrayData.as
@@ -19,17 +19,18 @@
 package org.apache.royale.html.beads
 {
     import org.apache.royale.core.IBead;
-	import org.apache.royale.core.IList;
 	import org.apache.royale.core.IDataProviderItemRendererMapper;
     import org.apache.royale.core.IItemRendererClassFactory;
     import org.apache.royale.core.IItemRendererParent;
     import org.apache.royale.core.ISelectionModel;
     import org.apache.royale.core.IStrand;
+    import org.apache.royale.core.IStrandWithModelView;
     import org.apache.royale.core.ValuesManager;
     import org.apache.royale.events.Event;
 	import org.apache.royale.events.EventDispatcher;
 	import org.apache.royale.events.ItemRendererEvent;
     import org.apache.royale.events.IEventDispatcher;
+    import org.apache.royale.html.beads.IListView;
 	import org.apache.royale.utils.loadBeadFromValuesManager;
 
 	[Event(name="itemRendererCreated",type="org.apache.royale.events.ItemRendererEvent")]
@@ -137,7 +138,8 @@ package org.apache.royale.html.beads
          *  @royaleignorecoercion Array
          *  @royaleignorecoercion org.apache.royale.html.beads.ITextItemRenderer
          *  @royaleignorecoercion org.apache.royale.events.IEventDispatcher
-         * @royaleignorecoercion org.apache.royale.core.IList
+         *  @royaleignorecoercion org.apache.royale.core.IStrandWithModelView
+         *  @royaleignorecoercion org.apache.royale.html.beads.IListView
          */
 		private function dataProviderChangeHandler(event:Event):void
 		{
@@ -145,8 +147,8 @@ package org.apache.royale.html.beads
 			if (!dp)
 				return;
 
-			var list:IList = _strand as IList;
-			var dataGroup:IItemRendererParent = list.dataGroup;
+            var view:IListView = (_strand as IStrandWithModelView).view as IListView;
+			var dataGroup:IItemRendererParent = view.dataGroup;
 
 			dataGroup.removeAllItemRenderers();
 
diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/TextItemRendererFactoryForStringVectorData.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/TextItemRendererFactoryForStringVectorData.as
index eceb5f3..7363e3d 100644
--- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/TextItemRendererFactoryForStringVectorData.as
+++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/TextItemRendererFactoryForStringVectorData.as
@@ -22,14 +22,15 @@ package org.apache.royale.html.beads
     import org.apache.royale.core.IBead;
     import org.apache.royale.core.IItemRendererClassFactory;
     import org.apache.royale.core.IItemRendererParent;
-	import org.apache.royale.core.IList;
     import org.apache.royale.core.ISelectionModel;
     import org.apache.royale.core.IStrand;
+    import org.apache.royale.core.IStrandWithModelView;
 	import org.apache.royale.core.ValuesManager;
 	import org.apache.royale.events.Event;
 	import org.apache.royale.events.EventDispatcher;
 	import org.apache.royale.events.IEventDispatcher;
 	import org.apache.royale.events.ItemRendererEvent;
+    import org.apache.royale.html.beads.IListView;
 	import org.apache.royale.utils.loadBeadFromValuesManager;
 	
 	[Event(name="itemRendererCreated",type="org.apache.royale.events.ItemRendererEvent")]
@@ -131,12 +132,16 @@ package org.apache.royale.html.beads
          */
         protected var dataGroup:IItemRendererParent;
 		
+        /**
+         *  @royaleignorecoercion org.apache.royale.core.IStrandWithModelView
+         *  @royaleignorecoercion org.apache.royale.core.IListView
+         */
 		private function dataProviderChangeHandler(event:Event):void
 		{
 			var dp:Vector.<String> = selectionModel.dataProvider as Vector.<String>;
 			
-			var list:IList = _strand as IList;
-			var dataGroup:IItemRendererParent = list.dataGroup;
+            var view:IListView = (_strand as IStrandWithModelView).view as IListView;
+			var dataGroup:IItemRendererParent = view.dataGroup;
 			
 			dataGroup.removeAllItemRenderers();
 			
diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/TreeGridView.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/TreeGridView.as
index 7905fc3..757d04b 100644
--- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/TreeGridView.as
+++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/TreeGridView.as
@@ -136,13 +136,14 @@ package org.apache.royale.html.beads
 		
 		/**
 		 * @private
+         * @royaleignorecoercion org.apache.royale.core.IDataGridPresentationModel
 		 */
 		protected function finishSetup(event:Event):void
 		{
 			var host:TreeGrid = _strand as TreeGrid;
 			
 			// see if there is a presentation model already in place. if not, add one.
-			var presentationModel:IDataGridPresentationModel = host.presentationModel;
+			var presentationModel:IDataGridPresentationModel = host.presentationModel as IDataGridPresentationModel;
 			var sharedModel:IDataGridModel = host.model as IDataGridModel;
 			IEventDispatcher(sharedModel).addEventListener("dataProviderChanged",handleDataProviderChanged);
 			IEventDispatcher(sharedModel).addEventListener("selectedIndexChanged", handleSelectedIndexChanged);
@@ -248,6 +249,7 @@ package org.apache.royale.html.beads
 		
 		/**
 		 * @private
+         * @royaleignorecoercion org.apache.royale.core.IDataGridPresentationModel
 		 */
 		private function createColumns():void
 		{
@@ -259,7 +261,7 @@ package org.apache.royale.html.beads
 				columnClassName = "TreeGridColumn";
 			}
 			
-			var presentationModel:IDataGridPresentationModel = host.presentationModel;
+			var presentationModel:IDataGridPresentationModel = host.presentationModel as IDataGridPresentationModel;
 			var sharedModel:IDataGridModel = host.model as IDataGridModel;
 			
 			_lists = new Array();
diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/VirtualDataContainerView.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/VirtualDataContainerView.as
index 86905b8..0cb7bed 100644
--- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/VirtualDataContainerView.as
+++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/VirtualDataContainerView.as
@@ -27,7 +27,6 @@ package org.apache.royale.html.beads
 	import org.apache.royale.core.IDataProviderModel;
 	import org.apache.royale.core.IItemRenderer;
 	import org.apache.royale.core.IItemRendererParent;
-	import org.apache.royale.core.IList;
 	import org.apache.royale.core.IParent;
 	import org.apache.royale.core.IParentIUIBase;
 	import org.apache.royale.core.ISelectableItemRenderer;
diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/VirtualDataItemRendererFactoryForArrayData.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/VirtualDataItemRendererFactoryForArrayData.as
index e78e67f..3aeaa44 100644
--- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/VirtualDataItemRendererFactoryForArrayData.as
+++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/VirtualDataItemRendererFactoryForArrayData.as
@@ -25,11 +25,11 @@ package org.apache.royale.html.beads
 	import org.apache.royale.core.IItemRendererClassFactory;
 	import org.apache.royale.core.IItemRendererParent;
 	import org.apache.royale.core.ILayoutHost;
-	import org.apache.royale.core.IList;
 	import org.apache.royale.core.IListPresentationModel;
 	import org.apache.royale.core.IParentIUIBase;
 	import org.apache.royale.core.ISelectableItemRenderer;
 	import org.apache.royale.core.IStrand;
+    import org.apache.royale.core.IStrandWithModelView;
 	import org.apache.royale.core.IUIBase;
 	import org.apache.royale.core.SimpleCSSStyles;
 	import org.apache.royale.core.UIBase;
@@ -39,6 +39,7 @@ package org.apache.royale.html.beads
 	import org.apache.royale.events.IEventDispatcher;
 	import org.apache.royale.events.ItemRendererEvent;
 	import org.apache.royale.html.List;
+    import org.apache.royale.html.beads.IListView;
 	import org.apache.royale.html.supportClasses.DataItemRenderer;
 	import org.apache.royale.utils.loadBeadFromValuesManager;
 
@@ -151,6 +152,8 @@ package org.apache.royale.html.beads
          *  @playerversion Flash 10.2
          *  @playerversion AIR 2.6
          *  @productversion Royale 0.0
+         *  @royaleignorecoercion org.apache.royale.core.IStrandWithModelView
+         *  @royaleignorecoercion org.apache.royale.html.beads.IListView
          */		
 		protected function dataProviderChangeHandler(event:Event):void
 		{
@@ -158,23 +161,43 @@ package org.apache.royale.html.beads
 			if (!dp)
 				return;
 			
-			var list:IList = _strand as IList;
-			var dataGroup:IItemRendererParent = list.dataGroup;
+            var view:IListView = (_strand as IStrandWithModelView).view as IListView;
+			var dataGroup:IItemRendererParent = view.dataGroup;
 			
 			dataGroup.removeAllItemRenderers();
         }
         
+        /**
+         *  Free an item renderer for a given index.
+         *
+         *  @langversion 3.0
+         *  @playerversion Flash 10.2
+         *  @playerversion AIR 2.6
+         *  @productversion Royale 0.9.0
+         *  @royaleignorecoercion org.apache.royale.core.IStrandWithModelView
+         *  @royaleignorecoercion org.apache.royale.html.beads.IListView
+         */
         public function freeItemRendererForIndex(index:int):void
         {
             var ir:ISelectableItemRenderer = rendererMap[index];
-            var list:IList = _strand as IList;
-            var dataGroup:IItemRendererParent = list.dataGroup;
+            var view:IListView = (_strand as IStrandWithModelView).view as IListView;
+            var dataGroup:IItemRendererParent = view.dataGroup;
             dataGroup.removeItemRenderer(ir);
             delete rendererMap[index];
         }
         
         private var rendererMap:Object = {};
         
+        /**
+         *  Get an item renderer for a given index.
+         *
+         *  @langversion 3.0
+         *  @playerversion Flash 10.2
+         *  @playerversion AIR 2.6
+         *  @productversion Royale 0.9.0
+         *  @royaleignorecoercion org.apache.royale.core.IStrandWithModelView
+         *  @royaleignorecoercion org.apache.royale.html.beads.IListView
+         */
         public function getItemRendererForIndex(index:int, elementIndex:int):ISelectableItemRenderer
         {
             var ir:ISelectableItemRenderer = rendererMap[index];
@@ -185,8 +208,8 @@ package org.apache.royale.html.beads
 			ir = itemRendererFactory.createItemRenderer(dataGroup) as ISelectableItemRenderer;
             var dataItemRenderer:DataItemRenderer = ir as DataItemRenderer;
 
-            var list:IList = _strand as IList;
-            var dataGroup:IItemRendererParent = list.dataGroup;
+            var view:IListView = (_strand as IStrandWithModelView).view as IListView;
+            var dataGroup:IItemRendererParent = view.dataGroup;
 			dataGroup.addItemRendererAt(ir, elementIndex);
 			ir.index = index;
 			ir.labelField = labelField;
diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/VirtualListView.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/VirtualListView.as
index b689c2a..fcf2dbb 100644
--- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/VirtualListView.as
+++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/VirtualListView.as
@@ -24,9 +24,6 @@ package org.apache.royale.html.beads
 	import org.apache.royale.core.IBeadLayout;
 	import org.apache.royale.core.IBeadModel;
 	import org.apache.royale.core.IBeadView;
-	import org.apache.royale.core.IList;
-    import org.apache.royale.core.IListPresentationModel;
-    import org.apache.royale.core.IListWithPresentationModel;
 	import org.apache.royale.core.ISelectableItemRenderer;
 	import org.apache.royale.core.IItemRenderer;
 	import org.apache.royale.core.IItemRendererParent;
@@ -59,8 +56,7 @@ package org.apache.royale.html.beads
 	 *  @playerversion AIR 2.6
 	 *  @productversion Royale 0.0
 	 */
-	COMPILE::JS
-	public class VirtualListView extends VirtualDataContainerView
+	public class VirtualListView extends DataContainerView // was VirtualDataContainerView
 	{
 		public function VirtualListView()
 		{
@@ -116,88 +112,22 @@ package org.apache.royale.html.beads
 				ir.hovered = true;
 			lastRollOverIndex = (listModel as IRollOverModel).rollOverIndex;
 		}
-	}
-
-	COMPILE::SWF
-	public class VirtualListView extends VirtualDataContainerView
-	{
-		public function VirtualListView()
-		{
-			super();
-		}
-
-		protected var listModel:ISelectionModel;
-
-		/**
-		 *  @copy org.apache.royale.core.IBead#strand
-		 *
-		 *  @langversion 3.0
-		 *  @playerversion Flash 10.2
-		 *  @playerversion AIR 2.6
-		 *  @productversion Royale 0.0
-		 */
-		override public function set strand(value:IStrand):void
-		{
-			_strand = value;
-			super.strand = value;
-		}
-
-		/**
-		 * @private
-		 */
-		override protected function handleInitComplete(event:Event):void
-		{
-			super.handleInitComplete(event);
-
-			listModel = _strand.getBeadByType(ISelectionModel) as ISelectionModel;
-			listModel.addEventListener("selectedIndexChanged", selectionChangeHandler);
-			listModel.addEventListener("rollOverIndexChanged", rollOverIndexChangeHandler);
-		}
-
-		protected var lastSelectedIndex:int = -1;
-
-		/**
-		 * @private
-		 */
-		protected function selectionChangeHandler(event:Event):void
-		{
-			var ir:ISelectableItemRenderer = dataGroup.getItemRendererForIndex(lastSelectedIndex) as ISelectableItemRenderer;
-            if (ir)
-				ir.selected = false;
-			ir = dataGroup.getItemRendererForIndex(listModel.selectedIndex) as ISelectableItemRenderer;
-			if (ir)
-				ir.selected = true;
-            lastSelectedIndex = listModel.selectedIndex;
-		}
-
-		protected var lastRollOverIndex:int = -1;
-
-		/**
-		 * @private
-		 */
-		protected function rollOverIndexChangeHandler(event:Event):void
-		{
-			var ir:ISelectableItemRenderer = dataGroup.getItemRendererForIndex(lastRollOverIndex) as ISelectableItemRenderer;
-			if(ir)
-				ir.hovered = false;
-			ir = dataGroup.getItemRendererForIndex(IRollOverModel(listModel).rollOverIndex) as ISelectableItemRenderer;
-			if(ir)
-				ir.hovered = true;
-			
-			lastRollOverIndex = IRollOverModel(listModel).rollOverIndex;
-		}
-
+        
+        COMPILE::SWF
         override protected function calculateContentSize():Size
         {
             return _lastContentSize;
         }
         
+        COMPILE::SWF
         private var _lastContentSize:Size;
         
+        COMPILE::SWF
         public function set lastContentSize(value:Size):void
         {
             _lastContentSize = value;
         }
+        
 
-    }
+	}
 }
diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/layouts/VirtualListVerticalLayout.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/layouts/VirtualListVerticalLayout.as
index 4ab3896..f62ae94 100644
--- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/layouts/VirtualListVerticalLayout.as
+++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/layouts/VirtualListVerticalLayout.as
@@ -20,7 +20,7 @@ package org.apache.royale.html.beads.layouts
 {
 	import org.apache.royale.core.IBeadLayout;
 	import org.apache.royale.core.IBeadModel;
-    import org.apache.royale.core.IBorderPaddingMarginValuesImpl;
+	import org.apache.royale.core.IBorderPaddingMarginValuesImpl;
 	import org.apache.royale.core.IDataProviderModel;
 	import org.apache.royale.core.IDataProviderVirtualItemRendererMapper;
 	import org.apache.royale.core.ILayoutChild;
@@ -28,15 +28,15 @@ package org.apache.royale.html.beads.layouts
 	import org.apache.royale.core.ILayoutParent;
 	import org.apache.royale.core.ILayoutView;
 	import org.apache.royale.core.IListPresentationModel;
-	import org.apache.royale.core.IListWithPresentationModel;
 	import org.apache.royale.core.IParentIUIBase;
-    import org.apache.royale.core.IScrollingViewport;
+	import org.apache.royale.core.IScrollingViewport;
 	import org.apache.royale.core.ISelectableItemRenderer;
 	import org.apache.royale.core.IStrand;
+	import org.apache.royale.core.IStrandWithPresentationModel;
 	import org.apache.royale.core.IUIBase;
-    import org.apache.royale.core.layout.EdgeData;
 	import org.apache.royale.core.LayoutBase;
 	import org.apache.royale.core.ValuesManager;
+	import org.apache.royale.core.layout.EdgeData;
 	COMPILE::JS
 	{
 		import org.apache.royale.core.WrappedHTMLElement;
@@ -46,6 +46,7 @@ package org.apache.royale.html.beads.layouts
 	import org.apache.royale.geom.Rectangle;
     import org.apache.royale.html.beads.VirtualListView;
 	import org.apache.royale.utils.CSSUtils;
+
     COMPILE::SWF {
         import org.apache.royale.geom.Size;
     }
@@ -113,6 +114,8 @@ package org.apache.royale.html.beads.layouts
 		 *  @productversion Royale 0.0
 		 *  @royaleignorecoercion org.apache.royale.core.ILayoutHost
 		 *  @royaleignorecoercion org.apache.royale.core.WrappedHTMLElement
+		 *  @royaleignorecoercion org.apache.royale.core.IListPresentationModel
+		 *  @royaleignorecoercion org.apache.royale.core.IStrandWithPresentationModel
 		 */
 		override public function layout():Boolean
 		{
@@ -131,7 +134,7 @@ package org.apache.royale.html.beads.layouts
 				var maxWidth:Number = 0;
 				var maxHeight:Number = 0;
                 var dp:Array = dataProviderModel.dataProvider as Array;
-                var presentationModel:IListPresentationModel = (host as IListWithPresentationModel).presentationModel;
+                var presentationModel:IListPresentationModel = (host as IStrandWithPresentationModel).presentationModel as IListPresentationModel;
 				var hostWidthSizedToContent:Boolean = host.isWidthSizedToContent();
 				var hostHeightSizedToContent:Boolean = host.isHeightSizedToContent();
 				var hostWidth:Number = host.width;
@@ -251,7 +254,7 @@ package org.apache.royale.html.beads.layouts
                 // going off-screen
                 var contentView:ILayoutView = layoutView;
                 var dp:Array = dataProviderModel.dataProvider as Array;
-                var presentationModel:IListPresentationModel = (host as IListWithPresentationModel).presentationModel;
+                var presentationModel:IListPresentationModel = (host as IStrandWithPresentationModel).presentationModel as IListPresentationModel;
                 var totalHeight:Number = presentationModel.rowHeight * dp.length;
                 var viewportTop:Number = Math.max(contentView.element.scrollTop, 0);
                 var viewportHeight:Number = contentView.element.clientHeight;
diff --git a/frameworks/projects/Core/src/main/royale/CoreClasses.as b/frameworks/projects/Core/src/main/royale/CoreClasses.as
index a1061dd..6f25cd2 100644
--- a/frameworks/projects/Core/src/main/royale/CoreClasses.as
+++ b/frameworks/projects/Core/src/main/royale/CoreClasses.as
@@ -103,8 +103,9 @@ internal class CoreClasses
     import org.apache.royale.core.ISelectable; ISelectable;
     import org.apache.royale.core.ISelectionModel; ISelectionModel;
     import org.apache.royale.core.IStrand; IStrand;
-	import org.apache.royale.core.IStrandPrivate; IStrandPrivate;
+	import org.apache.royale.core.IContainerBaseStrandChildrenHost; IContainerBaseStrandChildrenHost;
     import org.apache.royale.core.IStrandWithModel; IStrandWithModel;
+    import org.apache.royale.core.IStrandWithModelView; IStrandWithModelView;
     import org.apache.royale.core.ITextModel; ITextModel;
     import org.apache.royale.core.ITitleBarModel; ITitleBarModel;
     import org.apache.royale.core.IToggleButtonModel; IToggleButtonModel;
diff --git a/frameworks/projects/Core/src/main/royale/org/apache/royale/core/IStrandPrivate.as b/frameworks/projects/Core/src/main/royale/org/apache/royale/core/IContainerBaseStrandChildrenHost.as
similarity index 80%
rename from frameworks/projects/Core/src/main/royale/org/apache/royale/core/IStrandPrivate.as
rename to frameworks/projects/Core/src/main/royale/org/apache/royale/core/IContainerBaseStrandChildrenHost.as
index 21cb3d7..9fc29bf 100644
--- a/frameworks/projects/Core/src/main/royale/org/apache/royale/core/IStrandPrivate.as
+++ b/frameworks/projects/Core/src/main/royale/org/apache/royale/core/IContainerBaseStrandChildrenHost.as
@@ -19,15 +19,18 @@
 package org.apache.royale.core
 {
     /**
-     *  The IStrandPrivate interface is implemented by components that permit 
-	 *  access to their direct children.
+     *  The IContainerBaseStrandChildrenHost interface is implemented by 
+     *  components that use a ContainerBaseStrandChildren to proxy
+     *  addElement/removeElement calls to an internal child and
+     *  has the following APIs so the View can set up the "chrome" around
+     *  the internal child.
      *  
      *  @langversion 3.0
      *  @playerversion Flash 10.2
      *  @playerversion AIR 2.6
      *  @productversion Royale 0.8
      */
-	public interface IStrandPrivate
+	public interface IContainerBaseStrandChildrenHost
 	{
 		function $numElements():int;
 		function $addElement(c:IChild, dispatchEvent:Boolean = true):void;
diff --git a/frameworks/projects/Core/src/main/royale/org/apache/royale/core/IItemRendererProvider.as b/frameworks/projects/Core/src/main/royale/org/apache/royale/core/IItemRendererProvider.as
index 2e0384d..6ec6a0a 100644
--- a/frameworks/projects/Core/src/main/royale/org/apache/royale/core/IItemRendererProvider.as
+++ b/frameworks/projects/Core/src/main/royale/org/apache/royale/core/IItemRendererProvider.as
@@ -33,16 +33,6 @@ package org.apache.royale.core
      */
 	public interface IItemRendererProvider
 	{
-        /**
-         *  Returns whether or not the class has an itemRenderer set.
-         *  @return true if the itemRenderer has been set, false otherwise.
-         * 
-         *  @langversion 3.0
-         *  @playerversion Flash 10.2
-         *  @playerversion AIR 2.6
-         *  @productversion Royale 0.0
-         */
-        function get hasItemRenderer():Boolean;
         
         /**
          * Returns the class factory that will generate instances of the itemRenderer.
diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/core/IListWithPresentationModel.as b/frameworks/projects/Core/src/main/royale/org/apache/royale/core/IStrandWithModelView.as
similarity index 62%
rename from frameworks/projects/Basic/src/main/royale/org/apache/royale/core/IListWithPresentationModel.as
rename to frameworks/projects/Core/src/main/royale/org/apache/royale/core/IStrandWithModelView.as
index 3e24bfc..a2dc035 100644
--- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/core/IListWithPresentationModel.as
+++ b/frameworks/projects/Core/src/main/royale/org/apache/royale/core/IStrandWithModelView.as
@@ -18,29 +18,33 @@
 ////////////////////////////////////////////////////////////////////////////////
 package org.apache.royale.core
 {
-	import org.apache.royale.core.IListPresentationModel;
-
     /**
-     *  The IListWithPresentationModel interface is implemented by any IList
-	 *  that supports a separate IListPresentationModel
+     *  The IStrandWithModelView interface is the basic interface for a host component for
+     *  a set of plug-ins known as Beads where two of the plugins are a model and a view.
+     *  In Royale, the recommended pattern is to break out optional functionality
+     *  into small plug-ins that can be re-used in other components, or replaced with
+     *  different implementations optimized for different things such as size,
+     *  performance, advanced features, debugging, etc.
      * 
+     *  Beads are added to and removed from a Strand and can find and coordinate with
+     *  other beads on the strand.
+     *  
      *  @langversion 3.0
      *  @playerversion Flash 10.2
      *  @playerversion AIR 2.6
      *  @productversion Royale 0.0
      */
-	public interface IListWithPresentationModel extends IList
+	public interface IStrandWithModelView extends IStrandWithModel
 	{
         /**
-         *  Returns the component within the list (maybe even the list shell itself)
-		 *  which will be the parent of each itemRenderer.
-         * 
+         *  Each Strand has an view object.
+         *  
          *  @langversion 3.0
          *  @playerversion Flash 10.2
          *  @playerversion AIR 2.6
          *  @productversion Royale 0.0
          */
-		function get presentationModel():IListPresentationModel;
-		
+        function get view():IBeadView;
+        	
 	}
 }
diff --git a/frameworks/projects/Core/src/main/royale/org/apache/royale/core/ItemRendererClassFactory.as b/frameworks/projects/Core/src/main/royale/org/apache/royale/core/ItemRendererClassFactory.as
index 1d44130..6031bc9 100644
--- a/frameworks/projects/Core/src/main/royale/org/apache/royale/core/ItemRendererClassFactory.as
+++ b/frameworks/projects/Core/src/main/royale/org/apache/royale/core/ItemRendererClassFactory.as
@@ -71,7 +71,7 @@ package org.apache.royale.core
         {
             _strand = value;
             
-            if (_strand is IItemRendererProvider && (_strand as IItemRendererProvider).hasItemRenderer) {
+            if (_strand is IItemRendererProvider && (_strand as IItemRendererProvider).itemRenderer) {
             	itemRendererFactory = (_strand as IItemRendererProvider).itemRenderer;
             	createFunction = createFromClass;
             }

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

[royale-asjs] 05/05: mxtests pass for List. DGTest needs Drag/Drop

Posted by ah...@apache.org.
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 67deef0d2050e190f4733f8c5def69285674e677
Author: Alex Harui <ah...@apache.org>
AuthorDate: Fri May 4 10:15:24 2018 -0700

    mxtests pass for List.  DGTest needs Drag/Drop
---
 mustella/tests/mxtests/basicTests/BasicTests-config.xml               | 2 +-
 mustella/tests/mxtests/basicTests/BasicTests.mxml                     | 4 ++--
 .../mxtests/basicTests/halo/scripts/ListAndDataGridTestScript.mxml    | 4 +++-
 .../tests/mxtests/basicTests/halo/views/ListAndDataGridTests.mxml     | 2 +-
 4 files changed, 7 insertions(+), 5 deletions(-)

diff --git a/mustella/tests/mxtests/basicTests/BasicTests-config.xml b/mustella/tests/mxtests/basicTests/BasicTests-config.xml
index cc3f9fd..4b3e154 100644
--- a/mustella/tests/mxtests/basicTests/BasicTests-config.xml
+++ b/mustella/tests/mxtests/basicTests/BasicTests-config.xml
@@ -28,6 +28,7 @@
         <symbol>halo.scripts.TextInputTestScript</symbol>
         <symbol>halo.scripts.TextAreaTestScript</symbol>
         <symbol>halo.scripts.ComboBoxTestScript</symbol>
+        <symbol>halo.scripts.ListAndDataGridTestScript</symbol>
         <!--
         <symbol>halo.scripts.ColorPickerTestScript</symbol>
         <symbol>halo.scripts.NumericStepperTestScript</symbol>
@@ -35,7 +36,6 @@
         <symbol>halo.scripts.MenuTestScript</symbol>
         <symbol>halo.scripts.MenuBarTestScript</symbol>
         <symbol>halo.scripts.FocusManagerTestScript</symbol>
-        <symbol>halo.scripts.ListAndDataGridTestScript</symbol>
         <symbol>halo.scripts.TreeTestScript</symbol>
         <symbol>halo.scripts.ImageTestScript</symbol>
         <symbol>halo.scripts.SWFLoaderTestScript</symbol>
diff --git a/mustella/tests/mxtests/basicTests/BasicTests.mxml b/mustella/tests/mxtests/basicTests/BasicTests.mxml
index 7b46852..78e46bc 100644
--- a/mustella/tests/mxtests/basicTests/BasicTests.mxml
+++ b/mustella/tests/mxtests/basicTests/BasicTests.mxml
@@ -42,6 +42,7 @@ preloader="BasicTestsPreloader"
         <mx:State name="haloTextInputTest" />
         <mx:State name="haloTextAreaTest" />
         <mx:State name="haloComboBoxTest" />
+        <mx:State name="haloListAndDataGridTest" />
         <!--
         <mx:State name="haloColorPickerTest" />
         <mx:State name="haloNumericStepperTest" />
@@ -49,7 +50,6 @@ preloader="BasicTestsPreloader"
         <mx:State name="haloMenuTest" />
         <mx:State name="haloMenuBarTest" />
         <mx:State name="haloFocusManagerTest" />
-        <mx:State name="haloListAndDataGridTest" />
         <mx:State name="haloTreeTest" />
         <mx:State name="haloImageTest" />
         <mx:State name="haloSWFLoaderTest" />
@@ -116,6 +116,7 @@ preloader="BasicTestsPreloader"
     <haloviews:TextInputTests id="haloTextInputTests" includeIn="haloTextInputTest" />    
     <haloviews:TextAreaTests id="haloTextAreaTests" includeIn="haloTextAreaTest" />    
     <haloviews:ComboBoxTests id="haloComboBoxTests" includeIn="haloComboBoxTest" />    
+    <haloviews:ListAndDataGridTests id="haloListAndDataGridTests" includeIn="haloListAndDataGridTest" />    
     <!--
     <haloviews:ColorPickerTests id="haloColorPickerTests" includeIn="haloColorPickerTest" />    
     <haloviews:NumericStepperTests id="haloNumericStepperTests" includeIn="haloNumericStepperTest" />    
@@ -123,7 +124,6 @@ preloader="BasicTestsPreloader"
     <haloviews:MenuTests id="haloMenuTests" includeIn="haloMenuTest" />    
     <haloviews:MenuBarTests id="haloMenuBarTests" includeIn="haloMenuBarTest" />    
     <haloviews:FocusManagerTests id="haloFocusManagerTests" includeIn="haloFocusManagerTest" />    
-    <haloviews:ListAndDataGridTests id="haloListAndDataGridTests" includeIn="haloListAndDataGridTest" />    
     <haloviews:TreeTests id="haloTreeTests" includeIn="haloTreeTest" />    
     <haloviews:ImageTests id="haloImageTests" includeIn="haloImageTest" />    
     <haloviews:SWFLoaderTests id="haloSWFLoaderTests" includeIn="haloSWFLoaderTest" />    
diff --git a/mustella/tests/mxtests/basicTests/halo/scripts/ListAndDataGridTestScript.mxml b/mustella/tests/mxtests/basicTests/halo/scripts/ListAndDataGridTestScript.mxml
index 01dd929..5fa3a86 100644
--- a/mustella/tests/mxtests/basicTests/halo/scripts/ListAndDataGridTestScript.mxml
+++ b/mustella/tests/mxtests/basicTests/halo/scripts/ListAndDataGridTestScript.mxml
@@ -22,7 +22,7 @@
 	<!-- this set of lines form a template that must be in each unit test -->
 	<mx:Script>
 	<![CDATA[
-	public static function init(o:DisplayObject):void
+	public static function init(o:Object):void
 	{
 	}
 	]]>
@@ -56,6 +56,7 @@
 				<AssertPropertyValue target="haloListAndDataGridTests.testList" propertyName="selectedIndex" value="2" />
 			</body>
 		</TestCase>
+        <!--
 		<TestCase testID="DragDropTest1">
 			<body>
 				<DispatchMouseEvent target="haloListAndDataGridTests.testList" type="mouseOver" localX="10" localY="55" />
@@ -86,5 +87,6 @@
 				<AssertPropertyValue target="haloListAndDataGridTests.testDataGrid.dataProvider" propertyName="length" value="7" />
 			</body>
 		</TestCase>
+        -->
 	</testCases>
 </UnitTester>
diff --git a/mustella/tests/mxtests/basicTests/halo/views/ListAndDataGridTests.mxml b/mustella/tests/mxtests/basicTests/halo/views/ListAndDataGridTests.mxml
index 3ff807e..4bd94d1 100644
--- a/mustella/tests/mxtests/basicTests/halo/views/ListAndDataGridTests.mxml
+++ b/mustella/tests/mxtests/basicTests/halo/views/ListAndDataGridTests.mxml
@@ -20,7 +20,7 @@
 <mx:VBox 
     xmlns:fx="http://ns.adobe.com/mxml/2009"
     xmlns:s="library://ns.adobe.com/flex/spark"
-    xmlns:mx="library://ns.adobe.com/flex/mx"     
+    xmlns:mx="library://ns.apache.org/royale/mx"     
     initialize="initListComponents()"
     >
 

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

[royale-asjs] 02/05: try forcing a measure on demand

Posted by ah...@apache.org.
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 3f91884f6b6d059e1271d221a0e55abb50889b26
Author: Alex Harui <ah...@apache.org>
AuthorDate: Fri May 4 10:09:09 2018 -0700

    try forcing a measure on demand
---
 .../MXRoyale/src/main/royale/mx/core/UIComponent.as        | 14 ++++++++++++--
 1 file changed, 12 insertions(+), 2 deletions(-)

diff --git a/frameworks/projects/MXRoyale/src/main/royale/mx/core/UIComponent.as b/frameworks/projects/MXRoyale/src/main/royale/mx/core/UIComponent.as
index f74d054..337d655 100644
--- a/frameworks/projects/MXRoyale/src/main/royale/mx/core/UIComponent.as
+++ b/frameworks/projects/MXRoyale/src/main/royale/mx/core/UIComponent.as
@@ -1173,7 +1173,12 @@ public class UIComponent extends UIBase
     public function get measuredWidth():Number
     {
 		COMPILE::SWF {
-			if (isNaN(_measuredWidth)) return width;
+			if (isNaN(_measuredWidth))
+            {
+                measure();
+                if (isNaN(_measuredWidth))
+                    return width;
+            }
 		}
 		COMPILE::JS {
 			if (isNaN(_measuredWidth)) {
@@ -1215,7 +1220,12 @@ public class UIComponent extends UIBase
     public function get measuredHeight():Number
     {
 		COMPILE::SWF {
-			if (isNaN(_measuredHeight)) return height;
+			if (isNaN(_measuredHeight))
+            {
+                measure();
+                if (isNaN(_measuredHeight))
+                    return height;
+            }
 		}
 		COMPILE::JS {
 			if (isNaN(_measuredHeight)) {

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