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;