This is an automated email from the ASF dual-hosted git repository.
piotrz 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 7cbb30fa87 Jewel DataGrid: Add ability to dynamically assign
itemRenderer to DataGridColumn
7cbb30fa87 is described below
commit 7cbb30fa87c2b534e9dd8221ec3a95903da34cfb
Author: Piotr Zarzycki <[email protected]>
AuthorDate: Fri Jun 21 17:08:41 2024 +0200
Jewel DataGrid: Add ability to dynamically assign itemRenderer to
DataGridColumn
- Dispatch event "itemRendererChanged" in DataGridColumn
- Swapping existing itemRenderer in column by removing specific cell and in
that place creating new one with fresh item renderer
- Copying some properties from old cell to new one
---
.../royale/jewel/beads/views/DataGridView.as | 113 +++++++++++++--------
.../supportClasses/datagrid/DataGridColumn.as | 24 +++++
2 files changed, 97 insertions(+), 40 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 2d1ddb313e..48ca6d14a3 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
@@ -234,52 +234,15 @@ package org.apache.royale.jewel.beads.views
*/
protected function createLists():void
{
- // get the name of the class to use for the columns
- var columnClass:Class = ValuesManager.valuesImpl.getValue(host,
"columnClass") as Class;
var len:uint = sharedModel.columns.length;
for (var i:int=0; i < len; i++)
{
ignoreSizeChange = i != len-1;
var dataGridColumn:IDataGridColumn = sharedModel.columns[i] as
IDataGridColumn;
IEventDispatcher(dataGridColumn).addEventListener("labelChanged",
labelChangedHandler);
+
IEventDispatcher(dataGridColumn).addEventListener("itemRendererChanged",
itemRendererChangedHandler);
- var list:IDataGridColumnList = new columnClass();
- list.columnInfo = dataGridColumn;
-
- list.datagrid = _dg;
- list.emphasis = (_dg as IEmphasis).emphasis;
-
- if (i == 0) {
- list.className = "first";
- }
- else if (i == len-1) {
- list.className = "last";
- }
- else {
- list.className = "middle";
- }
-
- // by default make columns get the 1/n of the maximun space
available
- // (list as ILayoutChild).percentWidth = 100 / len;
-
- // need to add itemRenderer interface to DataGrid
- if((_dg as IItemRendererProvider).itemRenderer)
- list.itemRenderer = (_dg as
IItemRendererProvider).itemRenderer;
- else
- 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.addEventListener('beadsAdded',
configureColumnListPresentationModel);
- (list as StyledUIBase).tabIndex = -1;
- setColumnHeight(list as StyledUIBase);
-
+ var list:IDataGridColumnList = createColumnList(i, len,
dataGridColumn);
(_listArea as IParent).addElement(list as IChild);
@@ -324,6 +287,49 @@ package org.apache.royale.jewel.beads.views
columnLists.length = 0;
}
+ protected function createColumnList(index:int, len:int,
dataGridColumn:IDataGridColumn):IDataGridColumnList
+ {
+ // get the name of the class to use for the columns
+ var columnClass:Class = ValuesManager.valuesImpl.getValue(host,
"columnClass") as Class;
+ var list:IDataGridColumnList = new columnClass();
+ list.columnInfo = dataGridColumn;
+
+ list.datagrid = _dg;
+ list.emphasis = (_dg as IEmphasis).emphasis;
+
+ if (index == 0) {
+ list.className = "first";
+ }
+ else if (index == len-1) {
+ list.className = "last";
+ }
+ else {
+ list.className = "middle";
+ }
+
+ // by default make columns get the 1/n of the maximun space
available
+ // (list as ILayoutChild).percentWidth = 100 / len;
+
+ // need to add itemRenderer interface to DataGrid
+ if((_dg as IItemRendererProvider).itemRenderer)
+ list.itemRenderer = (_dg as
IItemRendererProvider).itemRenderer;
+ else
+ 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.addEventListener('beadsAdded',
configureColumnListPresentationModel);
+ (list as StyledUIBase).tabIndex = -1;
+ setColumnHeight(list as StyledUIBase);
+ return list;
+ }
+
/**
* finish setup
*
@@ -497,7 +503,8 @@ package org.apache.royale.jewel.beads.views
sharedModel.rollOverIndex = list.rollOverIndex;
var columnLists:Array = this.columnLists;
for(var i:int=0; i < columnLists.length; i++) {
- if (list != columnLists[i]) {
+ if (list != columnLists[i])
+ {
var otherList:IDataGridColumnList = columnLists[i] as
IDataGridColumnList;
otherList.rollOverIndex = list.rollOverIndex;
}
@@ -524,6 +531,32 @@ package org.apache.royale.jewel.beads.views
}
_header.dataProvider = new ArrayList(_sharedModel.columns);
}
+
+ private function itemRendererChangedHandler(event:Event):void
+ {
+ var columnListLength:int = columnLists.length;
+ for(var i:int=0; i < columnLists.length; i++)
+ {
+ var dataGridColumnList:IDataGridColumnList = columnLists[i] as
IDataGridColumnList;
+ if (dataGridColumnList.columnInfo == event.currentTarget)
+ {
+ var elementIndex:int = (_listArea as
IParent).getElementIndex(dataGridColumnList as IChild);
+ (_listArea as IParent).removeElement(dataGridColumnList
as IChild);
+
+ var newDataGridColumnList:IDataGridColumnList =
createColumnList(elementIndex, columnListLength, sharedModel.columns[i]);
+
+ (newDataGridColumnList as
IChild).element.style["minWidth"] = (dataGridColumnList as
IChild).element.style["minWidth"];
+ (newDataGridColumnList as
IChild).element.style["maxWidth"] = (dataGridColumnList as
IChild).element.style["maxWidth"];
+ (newDataGridColumnList as IChild).element.style["width"]
= (dataGridColumnList as IChild).element.style["width"];
+ (newDataGridColumnList as IChild).element.style["flex"] =
(dataGridColumnList as IChild).element.style["flex"];
+
+ (_listArea as IParent).addElementAt(newDataGridColumnList
as IChild, elementIndex);
+ columnLists[elementIndex] = newDataGridColumnList;
+
+ newDataGridColumnList.dataProvider = dp;
+ }
+ }
+ }
}
}
diff --git
a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/supportClasses/datagrid/DataGridColumn.as
b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/supportClasses/datagrid/DataGridColumn.as
index 39ca5753b6..7941ed60f7 100644
---
a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/supportClasses/datagrid/DataGridColumn.as
+++
b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/supportClasses/datagrid/DataGridColumn.as
@@ -20,6 +20,7 @@ package org.apache.royale.jewel.supportClasses.datagrid
{
import org.apache.royale.core.IStyledUIBase;
import org.apache.royale.jewel.supportClasses.table.TableColumn;
+import org.apache.royale.core.IFactory;
/**
* The DataGridColumn class is the collection of properties that describe
@@ -47,8 +48,31 @@ public class DataGridColumn extends TableColumn implements
IDataGridColumn
{
}
+ private var _itemRenderer:IFactory;
+ /**
+ * The itemRenderer class or factory to use to make instances of
itemRenderers for
+ * display of data.
+ *
+ * @langversion 3.0
+ * @playerversion Flash 10.2
+ * @playerversion AIR 2.6
+ * @productversion Royale 0.9.11
+ */
+ override public function get itemRenderer():IFactory
+ {
+ return _itemRenderer;
+ }
+ override public function set itemRenderer(value:IFactory):void
+ {
+ if (_itemRenderer != value)
+ {
+ _itemRenderer = value;
+
+ dispatchEvent(new Event('itemRendererChanged'));
+ }
+ }
private var _visible:Boolean = true;
public function set visible(value:Boolean):void{