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/12/03 07:19:17 UTC

[royale-asjs] 05/08: refactor virtual layout so it can be re-used in MXRoyale

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 <ah...@apache.org>
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);