You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@royale.apache.org by pi...@apache.org on 2020/12/18 12:58:11 UTC
[royale-asjs] branch develop updated: MXRoyale: Add implementation
of item renderer change which allows user dynamically change already
created item renderer
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 8f9df0b MXRoyale: Add implementation of item renderer change which allows user dynamically change already created item renderer
8f9df0b is described below
commit 8f9df0baa6fcb8c4500579476ae07d593724d7fd
Author: Piotr Zarzycki <pi...@gmail.com>
AuthorDate: Fri Dec 18 13:57:55 2020 +0100
MXRoyale: Add implementation of item renderer change which allows user dynamically change already created item renderer
---
.../main/royale/mx/controls/beads/DataGridView.as | 45 ++++++++++++++++++++--
.../mx/controls/dataGridClasses/DataGridColumn.as | 25 ++++++++----
2 files changed, 59 insertions(+), 11 deletions(-)
diff --git a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/beads/DataGridView.as b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/beads/DataGridView.as
index b5011cf..c129123 100644
--- a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/beads/DataGridView.as
+++ b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/beads/DataGridView.as
@@ -123,12 +123,31 @@ COMPILE::JS{
}
protected function columnsChanged(event:Event):void{
- if (columnLists == null) createLists()
- else recreateLists();
+ if (columnLists == null)
+ {
+ createLists()
+ }
+ else
+ {
+ recreateLists();
+ }
handleColumnsInvalid(null);
}
-
+ protected function itemRendererChangedHandler(event:Event):void
+ {
+ var sharedModel:IDataGridModel = _strand.getBeadByType(IBeadModel) as IDataGridModel;
+ if (sharedModel.columns != null)
+ {
+ for (var i:int = 0; i < sharedModel.columns.length; i++)
+ {
+ var col:DataGridColumn = (sharedModel.columns[i] as DataGridColumn);
+ col.removeEventListener("itemRendererChanged", itemRendererChangedHandler);
+ }
+ }
+ columnsChanged(event);
+ }
+
protected function handleCollectionChanged(event:Event):void
{
if (columnLists == null) return;
@@ -203,13 +222,32 @@ COMPILE::JS{
{
generateCols();
createLists();
+
(header as DataGridButtonBar).dataProvider = sharedModel.columns;
}
if (sharedModel.columns == null)
return;
+
+ registerRendererChange();
+
super.handleDataProviderChanged(event);
}
+ private function registerRendererChange():void
+ {
+ var sharedModel:IDataGridModel = _strand.getBeadByType(IBeadModel) as IDataGridModel;
+ if (sharedModel.columns == null || sharedModel.dataProvider == null) return;
+
+ for (var i:int=0; i < sharedModel.columns.length; i++)
+ {
+ var col:DataGridColumn = (sharedModel.columns[i] as DataGridColumn);
+ if (!col.hasEventListener("itemRendererChanged"))
+ {
+ col.addEventListener("itemRendererChanged", itemRendererChangedHandler);
+ }
+ }
+ }
+
/**
* @private
* Searches the iterator to determine columns.
@@ -317,6 +355,7 @@ COMPILE::JS{
(sharedModel.columns[i] as DataGridColumn).itemRenderer = host.itemRenderer;
}
}
+
super.createLists();
}
diff --git a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/dataGridClasses/DataGridColumn.as b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/dataGridClasses/DataGridColumn.as
index 575c1f4..05bfb0b 100644
--- a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/dataGridClasses/DataGridColumn.as
+++ b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/dataGridClasses/DataGridColumn.as
@@ -30,7 +30,6 @@ import mx.controls.listClasses.IListItemRenderer;
import mx.core.ClassFactory;
import mx.core.ContextualClassFactory;
import mx.core.IEmbeddedFontRegistry;
-import mx.core.IFactory;
import mx.core.IFlexModuleFactory;
import mx.core.IIMESupport;
import mx.core.Singleton;
@@ -41,8 +40,8 @@ import mx.utils.StringUtil;
import mx.core.UIComponent;
import mx.core.mx_internal;
import mx.controls.TextInput;
-import mx.core.IFactory;
import mx.core.ClassFactory;
+import mx.core.IFactory;
use namespace mx_internal;
import org.apache.royale.events.Event;
@@ -895,11 +894,11 @@ public class DataGridColumn extends org.apache.royale.html.supportClasses.DataGr
private var _headerRenderer:IFactory;
- /**
+ /**
* The itemRenderer class or factory to use to make instances of itemRenderers for
* display of data.
*
- * @langversion 3.0
+ * @langversion 3.0
* @playerversion Flash 10.2
* @playerversion AIR 2.6
* @productversion Royale 0.0
@@ -909,15 +908,25 @@ public class DataGridColumn extends org.apache.royale.html.supportClasses.DataGr
{
return _headerRenderer;
}
+
public function set headerRenderer(value:IFactory):void
{
_headerRenderer = value;
trace("DataGridColumn.headerRenderer is not implemented");
}
-
- //----------------------------------
- // editable
- //----------------------------------
+
+ public function set mxItemRenderer(value:IFactory):void
+ {
+ if (super.itemRenderer != value)
+ {
+ super.itemRenderer = value;
+
+ dispatchEvent(new Event("itemRendererChanged"));
+ }
+ }
+ //----------------------------------
+ // editable
+ //----------------------------------
private var _editable:Boolean = true;