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 037768395fcc6af4216cb1f49a0152bc2c1866ae
Author: Alex Harui <[email protected]>
AuthorDate: Sun Dec 2 22:24:10 2018 -0800

    refactor virtual layout so it can be re-used in MXRoyale
---
 .../Basic/src/main/resources/basic-manifest.xml    |   1 +
 .../apache/royale/html/beads/DataContainerView.as  |   9 +-
 .../royale/html/beads/VirtualDataContainerView.as  | 170 ++++-----------------
 .../apache/royale/html/beads/VirtualListView.as    |  21 +--
 .../beads/layouts/VirtualListVerticalLayout.as     |  15 +-
 5 files changed, 43 insertions(+), 173 deletions(-)

diff --git a/frameworks/projects/Basic/src/main/resources/basic-manifest.xml 
b/frameworks/projects/Basic/src/main/resources/basic-manifest.xml
index fcb5c78..2a5b73e 100644
--- a/frameworks/projects/Basic/src/main/resources/basic-manifest.xml
+++ b/frameworks/projects/Basic/src/main/resources/basic-manifest.xml
@@ -81,6 +81,7 @@
     <component id="RemovableBasicLayout" 
class="org.apache.royale.html.beads.layouts.RemovableBasicLayout"/>
     <component id="LayoutChangeNotifier" 
class="org.apache.royale.html.beads.layouts.LayoutChangeNotifier"/>
     <component id="VerticalLayout" 
class="org.apache.royale.html.beads.layouts.VerticalLayout"/>
+    <component id="VirtualDataContainerView" 
class="org.apache.royale.html.beads.VirtualDataContainerView"/>
     <component id="VirtualListView" 
class="org.apache.royale.html.beads.VirtualListView"/>
     <component id="VirtualListVerticalLayout" 
class="org.apache.royale.html.beads.layouts.VirtualListVerticalLayout"/>
     <component id="VerticalLayoutWithPaddingAndGap" 
class="org.apache.royale.html.beads.layouts.VerticalLayoutWithPaddingAndGap"/>
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 3641ad8..e4fa1fa 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
@@ -121,14 +121,7 @@ package org.apache.royale.html.beads
                protected function dataProviderChangeHandler(event:Event):void
                {
                        // trace("DataContainerView: 
dataProviderChangeHandler");
-            COMPILE::JS
-            {
-                       performLayout(event);
-            }
-            COMPILE::SWF
-            {
-                host.dispatchEvent(new Event("layoutNeeded"));                
-            }
+            host.dispatchEvent(new Event("layoutNeeded"));                
                }
         
         /**
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 7e6d17e..2901996 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
@@ -18,7 +18,7 @@
 
////////////////////////////////////////////////////////////////////////////////
 package org.apache.royale.html.beads
 {      
-       import org.apache.royale.html.beads.ContainerView;
+       import org.apache.royale.html.beads.DataContainerView;
        import org.apache.royale.core.BeadViewBase;
        import org.apache.royale.core.ContainerBase;
        import org.apache.royale.core.IBead;
@@ -43,6 +43,9 @@ package org.apache.royale.html.beads
        import org.apache.royale.html.supportClasses.Border;
        import org.apache.royale.html.supportClasses.DataGroup;
        import org.apache.royale.html.beads.IListView;
+    COMPILE::SWF {
+        import org.apache.royale.geom.Size;
+    }
 
        /**
         *  The DataContainerView provides the visual elements for the 
DataContainer.
@@ -53,8 +56,7 @@ package org.apache.royale.html.beads
         *  @playerversion AIR 2.6
         *  @productversion Royale 0.8
         */
-       COMPILE::JS
-       public class VirtualDataContainerView extends ContainerView implements 
IListView
+       public class VirtualDataContainerView extends DataContainerView 
implements IListView
        {
                public function VirtualDataContainerView()
                {
@@ -77,147 +79,29 @@ package org.apache.royale.html.beads
                        host.addEventListener("beadsAdded", beadsAddedHandler);
                }
                
-               protected var dataModel:IDataProviderModel;
-               
-               /**
-                * @royaleignorecoercion 
org.apache.royale.core.IItemRendererParent
-                */
-               public function get dataGroup():IItemRendererParent
-               {
-                       return super.contentView as IItemRendererParent;
-               }
-               
-               protected function beadsAddedHandler(event:Event):void
-               {
-                       dataModel = _strand.getBeadByType(IDataProviderModel) 
as IDataProviderModel;
-                       host.addEventListener("itemsCreated", 
itemsCreatedHandler);
-                       dataModel.addEventListener("dataProviderChanged", 
dataProviderChangeHandler);
-               }
-               
-               /**
-                * @private
-                */
-               override protected function handleInitComplete(event:Event):void
-               {
-                       super.handleInitComplete(event);
-               }
-               
-               /**
-                * @private
-                */
-               protected function itemsCreatedHandler(event:Event):void
-               {
-                       // trace("DataContainerView: itemsCreatedHandler");
-                       host.dispatchEvent(new Event("layoutNeeded"));
-               }
-               
-               /**
-                * @private
-                */
-               protected function dataProviderChangeHandler(event:Event):void
-               {
-                       // trace("DataContainerView: 
dataProviderChangeHandler");
-                       performLayout(event);
-               }
-        
-       }
-       
-       COMPILE::SWF
-       public class VirtualDataContainerView extends ContainerView implements 
IListView
-       {
-               public function VirtualDataContainerView()
-               {
-                       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);
-               }
-               
-               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 dataProviderChangeHandler(event:Event):void
-               {
-                       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.0
+         * @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;
+        }
+
+        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/VirtualListView.as
 
b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/VirtualListView.as
index da97038..6b4a259 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
@@ -40,9 +40,6 @@ 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;
-    COMPILE::SWF {
-        import org.apache.royale.geom.Size;
-    }
         
        /**
         *  The List class creates the visual elements of the 
org.apache.royale.html.List
@@ -55,7 +52,7 @@ package org.apache.royale.html.beads
         *  @playerversion AIR 2.6
         *  @productversion Royale 0.0
         */
-       public class VirtualListView extends DataContainerView // was 
VirtualDataContainerView
+       public class VirtualListView extends VirtualDataContainerView
        {
                public function VirtualListView()
                {
@@ -112,21 +109,5 @@ package org.apache.royale.html.beads
                        lastRollOverIndex = (listModel as 
IRollOverModel).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 f62ae94..923b8b9 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
@@ -44,7 +44,7 @@ package org.apache.royale.html.beads.layouts
        import org.apache.royale.events.Event;
        import org.apache.royale.events.IEventDispatcher;
        import org.apache.royale.geom.Rectangle;
-    import org.apache.royale.html.beads.VirtualListView;
+    import org.apache.royale.html.beads.VirtualDataContainerView;
        import org.apache.royale.utils.CSSUtils;
 
     COMPILE::SWF {
@@ -112,6 +112,7 @@ package org.apache.royale.html.beads.layouts
                 *  @playerversion Flash 10.2
                 *  @playerversion AIR 2.6
                 *  @productversion Royale 0.0
+                *  @royaleignorecoercion Array
                 *  @royaleignorecoercion org.apache.royale.core.ILayoutHost
                 *  @royaleignorecoercion 
org.apache.royale.core.WrappedHTMLElement
                 *  @royaleignorecoercion 
org.apache.royale.core.IListPresentationModel
@@ -134,6 +135,11 @@ package org.apache.royale.html.beads.layouts
                                var maxWidth:Number = 0;
                                var maxHeight:Number = 0;
                 var dp:Array = dataProviderModel.dataProvider as Array;
+                if (!dp) 
+                {
+                    inLayout = false;
+                    return true;
+                }
                 var presentationModel:IListPresentationModel = (host as 
IStrandWithPresentationModel).presentationModel as IListPresentationModel;
                                var hostWidthSizedToContent:Boolean = 
host.isWidthSizedToContent();
                                var hostHeightSizedToContent:Boolean = 
host.isHeightSizedToContent();
@@ -238,7 +244,7 @@ package org.apache.royale.html.beads.layouts
                 }
                 visibleIndexes = visibleIndexes.sort(numberSort);
 
-                var view:VirtualListView = host.getBeadByType(VirtualListView) 
as VirtualListView;
+                var view:VirtualDataContainerView = 
host.getBeadByType(VirtualDataContainerView) as VirtualDataContainerView;
                 view.lastContentSize = new Size(hostWidth, dp.length * 
presentationModel.rowHeight);
 
                 inLayout = false;
@@ -254,6 +260,11 @@ package org.apache.royale.html.beads.layouts
                 // going off-screen
                 var contentView:ILayoutView = layoutView;
                 var dp:Array = dataProviderModel.dataProvider as Array;
+                if (!dp) 
+                {
+                    inLayout = false;
+                    return true;
+                }
                 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);

Reply via email to