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;