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 <[email protected]>
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;
                

Reply via email to