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/08/10 15:24:14 UTC

[royale-asjs] branch develop updated: jewel-datagrid: support LabelFunction at column (DataGridColumnList) level

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 578567c  jewel-datagrid: support LabelFunction at column (DataGridColumnList) level
578567c is described below

commit 578567cae8590e6aa8aac3b57748cf72d553285b
Author: Carlos Rovira <ca...@apache.org>
AuthorDate: Mon Aug 10 17:24:01 2020 +0200

    jewel-datagrid: support LabelFunction at column (DataGridColumnList) level
---
 .../royale/jewel/beads/views/DataGridView.as       | 13 ++++--
 .../jewel/itemRenderers/DataGridItemRenderer.as    |  9 ++++-
 .../jewel/supportClasses/table/ITableColumn.as     | 36 +++++++++++++++++
 .../jewel/supportClasses/table/TableColumn.as      | 46 ++++++++++++++++++++++
 4 files changed, 98 insertions(+), 6 deletions(-)

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 a86dfd7..7dd9308 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
@@ -37,10 +37,9 @@ package org.apache.royale.jewel.beads.views
 	import org.apache.royale.events.IEventDispatcher;
 	import org.apache.royale.html.beads.GroupView;
 	import org.apache.royale.html.beads.IDataGridView;
+	import org.apache.royale.html.beads.LabelFunction;
 	import org.apache.royale.jewel.DataGrid;
-	import org.apache.royale.jewel.beads.layouts.ButtonBarLayout;
-import org.apache.royale.jewel.beads.models.IJewelSelectionModel;
-import org.apache.royale.jewel.beads.models.ListPresentationModel;
+	import org.apache.royale.jewel.beads.models.ListPresentationModel;
 	import org.apache.royale.jewel.supportClasses.Viewport;
 	import org.apache.royale.jewel.supportClasses.datagrid.DataGridButtonBar;
 	import org.apache.royale.jewel.supportClasses.datagrid.IDataGridColumn;
@@ -49,7 +48,7 @@ import org.apache.royale.jewel.beads.models.ListPresentationModel;
 	import org.apache.royale.jewel.supportClasses.list.IListPresentationModel;
 	import org.apache.royale.utils.IEmphasis;
 	import org.apache.royale.utils.loadBeadFromValuesManager;
-    import org.apache.royale.utils.observeElementSize;
+	import org.apache.royale.utils.observeElementSize;
     
     /**
      *  The DataGridView class is the visual bead for the org.apache.royale.jewel.DataGrid.
@@ -198,6 +197,12 @@ import org.apache.royale.jewel.beads.models.ListPresentationModel;
                 (list as ILayoutChild).percentWidth = 100 / sharedModel.columns.length;
                 list.itemRenderer = dataGridColumn.itemRenderer;
                 list.labelField = dataGridColumn.dataField;
+                if(dataGridColumn.labelFunction)
+                {
+                    var lf:LabelFunction = new LabelFunction();
+                    lf.labelFunction = dataGridColumn.labelFunction;
+                    list.addBead(lf);
+                }
                 list.addEventListener('rollOverIndexChanged', handleColumnListRollOverChange);
                 list.addEventListener('selectionChanged', handleColumnListSelectionChange);
                 (list as StyledUIBase).tabIndex = -1;
diff --git a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/itemRenderers/DataGridItemRenderer.as b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/itemRenderers/DataGridItemRenderer.as
index ebef955..10bd497 100644
--- a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/itemRenderers/DataGridItemRenderer.as
+++ b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/itemRenderers/DataGridItemRenderer.as
@@ -22,7 +22,6 @@ package org.apache.royale.jewel.itemRenderers
     import org.apache.royale.core.ILabelFunction;
     import org.apache.royale.core.IStrand;
     import org.apache.royale.html.util.getLabelFromData;
-    import org.apache.royale.jewel.supportClasses.datagrid.DataGridColumnList;
 
     /**
 	 *  The DataGridItemRenderer defines the basic Item Renderer for a Jewel DataGrid Component.
@@ -48,7 +47,13 @@ package org.apache.royale.jewel.itemRenderers
 		override public function get labelFunctionBead():ILabelFunction {
 			if(!_labelFunctionBead) {
 				//itemRendererOwnerView.host is DataGridColumnList -> parent is DataGridListArea -> parent is DataGrid
-				_labelFunctionBead = ((itemRendererOwnerView.host.parent as IChild).parent as IStrand).getBeadByType(ILabelFunction) as ILabelFunction;
+				
+				// first try to retrieve from the DataGridColumnList
+				_labelFunctionBead = itemRendererOwnerView.host.getBeadByType(ILabelFunction) as ILabelFunction;
+
+				// if not exists try to retrieve from the DataGrid root
+				if(!_labelFunctionBead)
+					_labelFunctionBead = ((itemRendererOwnerView.host.parent as IChild).parent as IStrand).getBeadByType(ILabelFunction) as ILabelFunction;
 			}
 			return _labelFunctionBead;
 		}
diff --git a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/supportClasses/table/ITableColumn.as b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/supportClasses/table/ITableColumn.as
index 9e31f63..a3cd472 100644
--- a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/supportClasses/table/ITableColumn.as
+++ b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/supportClasses/table/ITableColumn.as
@@ -75,6 +75,42 @@ package org.apache.royale.jewel.supportClasses.table
 		 */
 		function get dataField():String;
 		function set dataField(value:String):void;
+
+		/**
+         *  A user-supplied function to run on each item to determine its label.  
+         *  By default, the list looks for a property named <code>label</code> 
+         *  on each data provider item and displays it.
+         *  However, some data sets do not have a <code>label</code> property
+         *  nor do they have another property that can be used for displaying.
+         *  An example is a data set that has lastName and firstName fields
+         *  but you want to display full names.
+         *
+         *  <p>You can supply a <code>labelFunction</code> that finds the 
+         *  appropriate fields and returns a displayable string. The 
+         *  <code>labelFunction</code> is also good for handling formatting and 
+         *  localization. </p>
+         *
+         *  <p>For most components, the label function takes a single argument
+         *  which is the item in the data provider and returns a String.</p>
+         *  <pre>
+         *  myLabelFunction(item:Object):String</pre>
+         *
+         *  <p>The method signature for the data grid classes is:</p>
+         *  <pre>
+         *  myLabelFunction(item:Object, column:DataGridColumn):String</pre>
+         * 
+         *  <p>where <code>item</code> contains the DataGrid item object, and
+         *  <code>column</code> specifies the DataGrid column.</p>
+         *
+         *  @default null
+         *  
+         *  @langversion 3.0
+         *  @playerversion Flash 9
+         *  @playerversion AIR 1.1
+         *  @productversion Royale 0.10.0
+         */
+		function get labelFunction():Function;
+		function set labelFunction(value:Function):void;
 		
 		/**
 		 *  The name of the style class to use for this column.
diff --git a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/supportClasses/table/TableColumn.as b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/supportClasses/table/TableColumn.as
index 8c6e44b..3a45d7b 100644
--- a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/supportClasses/table/TableColumn.as
+++ b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/supportClasses/table/TableColumn.as
@@ -242,6 +242,52 @@ package org.apache.royale.jewel.supportClasses.table
 		{
 			_dataField = value;
 		}
+
+		private var _labelFunction:Function;
+        /**
+         *  A user-supplied function to run on each item to determine its label.  
+         *  By default, the list looks for a property named <code>label</code> 
+         *  on each data provider item and displays it.
+         *  However, some data sets do not have a <code>label</code> property
+         *  nor do they have another property that can be used for displaying.
+         *  An example is a data set that has lastName and firstName fields
+         *  but you want to display full names.
+         *
+         *  <p>You can supply a <code>labelFunction</code> that finds the 
+         *  appropriate fields and returns a displayable string. The 
+         *  <code>labelFunction</code> is also good for handling formatting and 
+         *  localization. </p>
+         *
+         *  <p>For most components, the label function takes a single argument
+         *  which is the item in the data provider and returns a String.</p>
+         *  <pre>
+         *  myLabelFunction(item:Object):String</pre>
+         *
+         *  <p>The method signature for the data grid classes is:</p>
+         *  <pre>
+         *  myLabelFunction(item:Object, column:DataGridColumn):String</pre>
+         * 
+         *  <p>where <code>item</code> contains the DataGrid item object, and
+         *  <code>column</code> specifies the DataGrid column.</p>
+         *
+         *  @default null
+         *  
+         *  @langversion 3.0
+         *  @playerversion Flash 9
+         *  @playerversion AIR 1.1
+         *  @productversion Royale 0.10.0
+         */
+        public function get labelFunction():Function
+        {
+            return _labelFunction;
+        }
+        /**
+         *  @private
+         */
+        public function set labelFunction(value:Function):void
+        {
+            _labelFunction = value;
+        }
 		
 		private var _className:String;