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;