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 2020/02/20 02:07:14 UTC

[royale-asjs] 07/13: mxtests pass

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