You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@royale.apache.org by ca...@apache.org on 2020/09/03 21:54:44 UTC

[royale-asjs] branch develop updated: jewel-datagrid: add item renderer support (IItemRendererProvider). Now we can add item renderers via CSS or in MXML and AS3 to DataGrid and will fallback to columns configuration

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

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


The following commit(s) were added to refs/heads/develop by this push:
     new 7f7e267  jewel-datagrid: add item renderer support (IItemRendererProvider). Now we can add item renderers via CSS or in MXML and AS3 to DataGrid and will fallback to columns configuration
7f7e267 is described below

commit 7f7e267e2d5e34e1436235baa32234f3cde24fdb
Author: Carlos Rovira <ca...@apache.org>
AuthorDate: Thu Sep 3 23:54:30 2020 +0200

    jewel-datagrid: add item renderer support (IItemRendererProvider). Now we can add item renderers via CSS or in MXML and AS3 to DataGrid and will fallback to columns configuration
---
 .../royale/org/apache/royale/jewel/DataGrid.as     | 54 +++++++++++++++++++++-
 .../royale/jewel/beads/views/DataGridView.as       |  7 ++-
 2 files changed, 59 insertions(+), 2 deletions(-)

diff --git a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/DataGrid.as b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/DataGrid.as
index cc6f92e..a011d59 100644
--- a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/DataGrid.as
+++ b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/DataGrid.as
@@ -18,9 +18,13 @@
 ////////////////////////////////////////////////////////////////////////////////
 package org.apache.royale.jewel
 {
+	import org.apache.royale.core.ClassFactory;
 	import org.apache.royale.core.IBead;
 	import org.apache.royale.core.IDataGrid;
 	import org.apache.royale.core.IDataGridModel;
+	import org.apache.royale.core.IFactory;
+	import org.apache.royale.core.IItemRendererProvider;
+	import org.apache.royale.core.ValuesManager;
 	import org.apache.royale.jewel.beads.models.DataGridPresentationModel;
 	import org.apache.royale.jewel.supportClasses.datagrid.IDataGridPresentationModel;
 	
@@ -54,7 +58,7 @@ package org.apache.royale.jewel
 	 *  @playerversion AIR 2.6
 	 *  @productversion Royale 0.9.7
 	 */
-	public class DataGrid extends Group implements IDataGrid
+	public class DataGrid extends Group implements IDataGrid, IItemRendererProvider
 	{
 		/**
 		 *  constructor.
@@ -181,6 +185,29 @@ package org.apache.royale.jewel
 			IDataGridModel(model).selectedItem = value;
 		}
 
+		/*
+		* IItemRendererProvider
+		*/
+		
+		private var _itemRenderer:IFactory = null;
+		
+		/**
+		 *  The class or factory used to display each item.
+		 *
+		 *  @langversion 3.0
+		 *  @playerversion Flash 10.2
+		 *  @playerversion AIR 2.6
+		 *  @productversion Royale 0.9.7
+		 */
+		public function get itemRenderer():IFactory
+		{
+			return _itemRenderer;
+		}
+		public function set itemRenderer(value:IFactory):void
+		{
+			_itemRenderer = value;
+		}
+
 		/**
 		 *  The DataGrid's presentation model
 		 *
@@ -221,5 +248,30 @@ package org.apache.royale.jewel
 		{
 			(presentationModel as IDataGridPresentationModel).rowHeight = value;
 		}
+
+		/**
+         *  load necesary beads. This method can be override in subclasses to
+         *  add other custom beads needed, so all requested beads be loaded before
+         *  signal the "beadsAdded" event.
+         * 
+         *  @langversion 3.0
+         *  @playerversion Flash 10.2
+         *  @playerversion AIR 2.6
+         *  @productversion Royale 0.10.0
+         */
+        override protected function loadBeads():void
+        {
+			// check for item renderer in css if it was not provided in code
+			// this must be done before load of view bead, since we'll use the renderer at that time
+			if(!itemRenderer) {
+				var itemRendererClass:Class = ValuesManager.valuesImpl.getValue(this, "iItemRenderer") as Class;
+				if (itemRendererClass) {
+					itemRenderer = new ClassFactory(itemRendererClass);			
+				}
+			}
+
+			// load view (and other) beads
+			super.loadBeads();
+		}
 	}
 }
diff --git a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/views/DataGridView.as b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/views/DataGridView.as
index cb42ab1..18ce298 100644
--- a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/views/DataGridView.as
+++ b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/views/DataGridView.as
@@ -223,7 +223,12 @@ package org.apache.royale.jewel.beads.views
                 
                 // by default make columns get the 1/n of the maximun space available
                 // (list as ILayoutChild).percentWidth = 100 / len;
-                list.itemRenderer = dataGridColumn.itemRenderer;
+                
+                // need to add itemRenderer interface to DataGrid
+                if((_dg as DataGrid).itemRenderer)
+                    list.itemRenderer = (_dg as DataGrid).itemRenderer;
+                else
+                    list.itemRenderer = dataGridColumn.itemRenderer;
                 list.labelField = dataGridColumn.dataField;
                 if(dataGridColumn.labelFunction)
                 {