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

Reply via email to