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

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

commit ea9279bb16da91dec0c16019044af2b7ec77387a
Author: Alex Harui <[email protected]>
AuthorDate: Tue Feb 18 23:39:27 2020 -0800

    mxtests pass
---
 .../royale/org/apache/royale/html/DataContainer.as |   9 +-
 .../MXRoyale/src/main/resources/defaults.css       |   2 +
 .../MXRoyale/src/main/royale/MXRoyaleClasses.as    |   1 +
 .../main/royale/mx/collections/ICollectionView.as  |   1 -
 .../MXRoyale/src/main/royale/mx/controls/Button.as |   6 +-
 .../controls/beads/ListItemRendererInitializer.as  |   2 +-
 .../controls/beads/models/ListPresentationModel.as |  47 +++++++++
 ...ataItemRendererFactoryForICollectionViewData.as | 108 ++++++++++++++++++++-
 .../royale/mx/controls/listClasses/ListBase.as     |   1 +
 9 files changed, 168 insertions(+), 9 deletions(-)

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 d3dae3d..be71a3a 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
@@ -35,6 +35,7 @@ package org.apache.royale.html
        import org.apache.royale.core.IDataProviderModel;
        import org.apache.royale.core.UIBase;
        import org.apache.royale.core.ValuesManager;
+       import org.apache.royale.utils.loadBeadFromValuesManager;
     COMPILE::JS
     {
         import org.apache.royale.core.WrappedHTMLElement;
@@ -146,8 +147,12 @@ package org.apache.royale.html
                {
                        var presModel:IListPresentationModel = 
getBeadByType(IListPresentationModel) as IListPresentationModel;
                        if (presModel == null) {
-                               presModel = new ListPresentationModel();
-                               addBead(presModel);
+                           presModel = 
loadBeadFromValuesManager(IListPresentationModel, "iListPresentationModel", 
this) as IListPresentationModel;
+                               if (presModel == null)
+                               {               
+                                       presModel = new ListPresentationModel();
+                                       addBead(presModel);
+                               }
                        }
                        return presModel;
                }
diff --git a/frameworks/projects/MXRoyale/src/main/resources/defaults.css 
b/frameworks/projects/MXRoyale/src/main/resources/defaults.css
index b0f4e39..3f18c00 100644
--- a/frameworks/projects/MXRoyale/src/main/resources/defaults.css
+++ b/frameworks/projects/MXRoyale/src/main/resources/defaults.css
@@ -59,12 +59,14 @@ Basic|CascadingMenu
        IDataProviderItemRendererMapper: 
ClassReference("mx.controls.listClasses.DataItemRendererFactoryForICollectionViewData");
        IBeadController: 
ClassReference("mx.controls.beads.controllers.CascadingMenuSelectionMouseController");
        IMenu: 
ClassReference("mx.controls.menuClasses.CascadingMenuWithOnScreenCheck");
+       IListPresentationModel: 
ClassReference("mx.controls.beads.models.ListPresentationModel");
 }
 
 Basic|ComboBoxList
 {
        IDataProviderItemRendererMapper: 
ClassReference("mx.controls.listClasses.DataItemRendererFactoryForICollectionViewData");
        IBeadModel: 
ClassReference("mx.controls.beads.models.SingleSelectionICollectionViewModel");
+       IListPresentationModel: 
ClassReference("mx.controls.beads.models.ListPresentationModel");
 }
 
 Basic|DataGridColumnList {
diff --git a/frameworks/projects/MXRoyale/src/main/royale/MXRoyaleClasses.as 
b/frameworks/projects/MXRoyale/src/main/royale/MXRoyaleClasses.as
index cd54e79..b2de5ae 100644
--- a/frameworks/projects/MXRoyale/src/main/royale/MXRoyaleClasses.as
+++ b/frameworks/projects/MXRoyale/src/main/royale/MXRoyaleClasses.as
@@ -257,6 +257,7 @@ internal class MXRoyaleClasses
        import mx.controls.beads.models.DataGridColumnICollectionViewModel; 
DataGridColumnICollectionViewModel;
     import mx.controls.beads.models.DataGridICollectionViewModel; 
DataGridICollectionViewModel;
     import mx.controls.beads.models.DataGridPresentationModel; 
DataGridPresentationModel;
+    import mx.controls.beads.models.ListPresentationModel; 
ListPresentationModel;
     import mx.controls.beads.models.SingleSelectionIListModel; 
SingleSelectionIListModel;
     import mx.controls.buttonBarClasses.TextButtonDataGridColumnItemRenderer; 
TextButtonDataGridColumnItemRenderer;
     
diff --git 
a/frameworks/projects/MXRoyale/src/main/royale/mx/collections/ICollectionView.as
 
b/frameworks/projects/MXRoyale/src/main/royale/mx/collections/ICollectionView.as
index d9ea7e0..33e4b94 100644
--- 
a/frameworks/projects/MXRoyale/src/main/royale/mx/collections/ICollectionView.as
+++ 
b/frameworks/projects/MXRoyale/src/main/royale/mx/collections/ICollectionView.as
@@ -21,7 +21,6 @@ package mx.collections
 {
 import mx.events.CollectionEvent;
 
-import org.apache.royale.collections.ICollectionView;
 import org.apache.royale.events.IEventDispatcher;
 
 /**
diff --git a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/Button.as 
b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/Button.as
index 311b077..fc3ea48 100644
--- a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/Button.as
+++ b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/Button.as
@@ -479,7 +479,7 @@ public class Button extends UIComponent implements 
IDataRenderer, IListItemRende
         *  @private
         *  Storage for the listData property.
         */
-       private var _listData:BaseListData;
+       private var _listData:Object;
        
        [Bindable("dataChange")]
        [Inspectable(environment="none")]
@@ -504,7 +504,7 @@ public class Button extends UIComponent implements 
IDataRenderer, IListItemRende
         *  @playerversion AIR 1.1
         *  @productversion Flex 3
         */
-       public function get listData():BaseListData
+       public function get listData():Object
        {
                return _listData;
        }
@@ -512,7 +512,7 @@ public class Button extends UIComponent implements 
IDataRenderer, IListItemRende
        /**
         *  @private
         */
-       public function set listData(value:BaseListData):void
+       public function set listData(value:Object):void
        {
                _listData = value;
        }
diff --git 
a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/beads/ListItemRendererInitializer.as
 
b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/beads/ListItemRendererInitializer.as
index 439ce92..642e72c 100644
--- 
a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/beads/ListItemRendererInitializer.as
+++ 
b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/beads/ListItemRendererInitializer.as
@@ -75,7 +75,7 @@ package mx.controls.beads
             if (!dataProviderModel)
                 return;
             
-            super.initializeItemRenderer(ir, data, index);
+            super.initializeIndexedItemRenderer(ir, data, index);
             
                        if (ir is IOwnerViewItemRenderer)
                                (ir as 
IOwnerViewItemRenderer).itemRendererOwnerView = ownerView;
diff --git 
a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/beads/models/ListPresentationModel.as
 
b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/beads/models/ListPresentationModel.as
new file mode 100644
index 0000000..6dfaa74
--- /dev/null
+++ 
b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/beads/models/ListPresentationModel.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.controls.beads.models
+{
+    import org.apache.royale.html.beads.models.ListPresentationModel;
+
+    /**
+     *  DataGrid Presentation Model
+     *  
+     *  @langversion 3.0
+     *  @playerversion Flash 10.2
+     *  @playerversion AIR 2.6
+     *  @productversion Royale 0.0
+     */
+       public class ListPresentationModel extends 
org.apache.royale.html.beads.models.ListPresentationModel
+       {
+        /**
+         *  Constructor.
+         *  
+         *  @langversion 3.0
+         *  @playerversion Flash 10.2
+         *  @playerversion AIR 2.6
+         *  @productversion Royale 0.0
+         */
+               public function ListPresentationModel()
+               {
+            super();
+            rowHeight = 22;
+               }               
+    }
+}
diff --git 
a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/listClasses/DataItemRendererFactoryForICollectionViewData.as
 
b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/listClasses/DataItemRendererFactoryForICollectionViewData.as
index ee6d141..7ecf118 100644
--- 
a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/listClasses/DataItemRendererFactoryForICollectionViewData.as
+++ 
b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/listClasses/DataItemRendererFactoryForICollectionViewData.as
@@ -30,7 +30,9 @@ package mx.controls.listClasses
     import org.apache.royale.core.IItemRendererOwnerView;
     import org.apache.royale.core.IListPresentationModel;
     import org.apache.royale.core.IIndexedItemRenderer;
+    import org.apache.royale.core.IIndexedItemRendererInitializer;
     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;
@@ -41,7 +43,8 @@ package mx.controls.listClasses
     import org.apache.royale.events.IEventDispatcher;
     import org.apache.royale.events.ItemRendererEvent;
     import org.apache.royale.html.List;
-    import 
org.apache.royale.html.beads.DataItemRendererFactoryForCollectionView;
+    import org.apache.royale.html.beads.IListView;
+    import org.apache.royale.html.beads.DataItemRendererFactoryBase;
     import org.apache.royale.html.supportClasses.TreeListData;
        
     /**
@@ -56,7 +59,7 @@ package mx.controls.listClasses
      *  @playerversion AIR 2.6
      *  @productversion Royale 0.0
      */
-       public class DataItemRendererFactoryForICollectionViewData extends 
DataItemRendererFactoryForCollectionView
+       public class DataItemRendererFactoryForICollectionViewData extends 
DataItemRendererFactoryBase
        {
         /**
          *  Constructor.
@@ -122,5 +125,106 @@ package mx.controls.listClasses
             cursor.moveNext();
             return obj;
         }
+
+               /**
+                * @private
+                * @royaleignorecoercion 
org.apache.royale.collections.ICollectionView
+                * @royaleignorecoercion 
org.apache.royale.core.IListPresentationModel
+                * @royaleignorecoercion 
org.apache.royale.core.IIndexedItemRenderer
+                * @royaleignorecoercion 
org.apache.royale.events.IEventDispatcher
+                */
+               protected function itemAddedHandler(event:CollectionEvent):void
+               {
+                       if (!dataProviderModel)
+                               return;
+                       dp = dataProviderModel.dataProvider as ICollectionView;
+                       if (!dp)
+                               return;
+                       
+            var view:IListView = (_strand as IStrandWithModelView).view as 
IListView;
+            var dataGroup:IItemRendererOwnerView = view.dataGroup;
+            
+                       var ir:IIndexedItemRenderer = 
itemRendererFactory.createItemRenderer() as IIndexedItemRenderer;
+                       dataGroup.addItemRendererAt(ir, event.index);
+
+            var data:Object = event.item;
+            (itemRendererInitializer as 
IIndexedItemRendererInitializer).initializeIndexedItemRenderer(ir, data, 
event.index);
+            ir.data = data;                            
+                       
+                       // update the index values in the itemRenderers to 
correspond to their shifted positions.
+                       var n:int = dataGroup.numItemRenderers;
+                       for (var i:int = event.index; i < n; i++)
+                       {
+                               ir = dataGroup.getItemRendererAt(i) as 
IIndexedItemRenderer;
+                               ir.index = i;
+                               
+                               // could let the IR know its index has been 
changed (eg, it might change its
+                               // UI based on the index). Instead (PAYG), 
allow another bead to detect
+                               // this event and do this as not every IR will 
need to be updated.
+                               //var ubase:UIItemRendererBase = ir as 
UIItemRendererBase;
+                               //if (ubase) ubase.updateRenderer()
+                       }
+                       
+                       (_strand as IEventDispatcher).dispatchEvent(new 
Event("itemsCreated"));
+                       (_strand as IEventDispatcher).dispatchEvent(new 
Event("layoutNeeded"));
+               }
+               
+               protected function 
itemRemovedHandler(event:CollectionEvent):void
+               {
+                       if (!dataProviderModel)
+                               return;
+                       dp = dataProviderModel.dataProvider as ICollectionView;
+                       if (!dp)
+                               return;
+                       
+            var view:IListView = (_strand as IStrandWithModelView).view as 
IListView;
+            var dataGroup:IItemRendererOwnerView = view.dataGroup;
+            
+                       var ir:IIndexedItemRenderer = 
dataGroup.getItemRendererAt(event.index) as IIndexedItemRenderer;
+                       if (!ir) return; // may have already been cleaned up, 
possibly when a tree node closes
+                       dataGroup.removeItemRenderer(ir);
+                       
+                       // adjust the itemRenderers' index to adjust for the 
shift
+                       var n:int = dataGroup.numItemRenderers;
+                       for (var i:int = event.index; i < n; i++)
+                       {
+                               ir = dataGroup.getItemRendererAt(i) as 
IIndexedItemRenderer;
+                               ir.index = i;
+                               
+                               // could let the IR know its index has been 
changed (eg, it might change its
+                               // UI based on the index). Instead (PAYG), 
allow another bead to detect
+                               // this event and do this as not every IR will 
need to be updated.
+                               //var ubase:UIItemRendererBase = ir as 
UIItemRendererBase;
+                               //if (ubase) ubase.updateRenderer()
+                       }
+                       
+                       (_strand as IEventDispatcher).dispatchEvent(new 
Event("layoutNeeded"));
+               }
+               
+               /**
+                * @private
+                * @royaleignorecoercion 
org.apache.royale.collections.ICollectionView
+                * @royaleignorecoercion 
org.apache.royale.core.IIndexedItemRenderer
+                */
+               protected function 
itemUpdatedHandler(event:CollectionEvent):void
+               {
+                       if (!dataProviderModel)
+                               return;
+                       dp = dataProviderModel.dataProvider as ICollectionView;
+                       if (!dp)
+                               return;
+
+            var view:IListView = (_strand as IStrandWithModelView).view as 
IListView;
+            var dataGroup:IItemRendererOwnerView = view.dataGroup;
+            
+                       // update the given renderer with (possibly) new 
information so it can change its
+                       // appearence or whatever.
+                       var ir:IIndexedItemRenderer = 
dataGroup.getItemRendererAt(event.index) as IIndexedItemRenderer;
+
+            var data:Object = event.item;
+            (itemRendererInitializer as 
IIndexedItemRendererInitializer).initializeIndexedItemRenderer(ir, data, 
event.index);
+            ir.data = data;                            
+               }
+               
        }
 }
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 13fa268..ef9b9b0 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
@@ -733,6 +733,7 @@ use namespace mx_internal;
                public function ListBase()
                {
                        super();            
+                       rowHeight = 22; //match Flex?
                }
         
         private var _DCinitialized:Boolean = true;

Reply via email to