You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@royale.apache.org by ah...@apache.org on 2020/01/08 00:55:25 UTC

[royale-asjs] branch develop updated: Tree support for labelFunction. Fixes #563

This is an automated email from the ASF dual-hosted git repository.

aharui 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 4bb92b4  Tree support for labelFunction.  Fixes #563
4bb92b4 is described below

commit 4bb92b40bc081e2b978b56ac2f538d41d858ee88
Author: Alex Harui <ah...@apache.org>
AuthorDate: Tue Jan 7 16:55:10 2020 -0800

    Tree support for labelFunction.  Fixes #563
---
 .../royale/mx/controls/listClasses/ListBase.as     | 39 +++++++++++++++++++++-
 ...rerFactoryForICollectionViewHierarchicalData.as |  4 +--
 .../mx/controls/treeClasses/TreeItemRenderer.as    | 25 ++++++--------
 3 files changed, 50 insertions(+), 18 deletions(-)

diff --git a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/listClasses/ListBase.as b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/listClasses/ListBase.as
index 19c3c68..13fa268 100644
--- a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/listClasses/ListBase.as
+++ b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/listClasses/ListBase.as
@@ -349,7 +349,44 @@ use namespace mx_internal;
             (model as ISelectionModel).labelField = value;
         }
         
-	//----------------------------------
+        //----------------------------------
+        //  labelFunction
+        //----------------------------------
+        
+        private var _labelFunction:Function;
+        
+        /**
+         *  The name of the field in the data provider items to display as the label. 
+         *  By default the list looks for a property named <code>label</code> 
+         *  on each item and displays it.
+         *  However, if the data objects do not contain a <code>label</code> 
+         *  property, you can set the <code>labelField</code> property to
+         *  use a different property in the data object. An example would be 
+         *  "FullName" when viewing a set of people names fetched from a database.
+         *
+         *  @default "label"
+         *  
+         *  @langversion 3.0
+         *  @playerversion Flash 9
+         *  @playerversion AIR 1.1
+         *  @productversion Flex 3
+         *  @royaleignorecoercion org.apache.royale.core.ISelectionModel
+         */
+        public function get labelFunction():Function
+        {
+            return _labelFunction;
+        }
+        
+        /**
+         *  @private
+         *  @royaleignorecoercion org.apache.royale.core.ISelectionModel
+         */
+        public function set labelFunction(value:Function):void
+        {
+            _labelFunction = value;
+        }
+
+        //----------------------------------
     //  selectedIndex
     //----------------------------------
 
diff --git a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/treeClasses/DataItemRendererFactoryForICollectionViewHierarchicalData.as b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/treeClasses/DataItemRendererFactoryForICollectionViewHierarchicalData.as
index bb8b0ff..60604ea 100644
--- a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/treeClasses/DataItemRendererFactoryForICollectionViewHierarchicalData.as
+++ b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/treeClasses/DataItemRendererFactoryForICollectionViewHierarchicalData.as
@@ -45,7 +45,6 @@ package mx.controls.treeClasses
 	import org.apache.royale.events.ItemRendererEvent;
 	import org.apache.royale.html.List;
     import org.apache.royale.html.beads.DataItemRendererFactoryForCollectionView;
-	import org.apache.royale.html.supportClasses.TreeListData;
 	
 	[Event(name="itemRendererCreated",type="org.apache.royale.events.ItemRendererEvent")]
 
@@ -152,10 +151,11 @@ package mx.controls.treeClasses
 			var hasChildren:Boolean = treeData.hasChildren(data);
 			
 			// Set the listData with the depth of this item
-			var treeListData:org.apache.royale.html.supportClasses.TreeListData = new org.apache.royale.html.supportClasses.TreeListData();
+			var treeListData:TreeListData = new TreeListData();
 			treeListData.depth = depth;
 			treeListData.isOpen = isOpen;
 			treeListData.hasChildren = hasChildren;
+            treeListData.owner = _strand;
 			
 			ir.listData = treeListData;
 			
diff --git a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/treeClasses/TreeItemRenderer.as b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/treeClasses/TreeItemRenderer.as
index 687c84c..94e2895 100644
--- a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/treeClasses/TreeItemRenderer.as
+++ b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/treeClasses/TreeItemRenderer.as
@@ -48,12 +48,12 @@ import mx.utils.PopUpUtil;
  */
 import mx.controls.Label;
 import mx.controls.listClasses.BaseListData;
+import mx.controls.listClasses.IDropInListItemRenderer;
+import mx.controls.Tree;
+import mx.core.IDataRenderer;
 import mx.core.IFlexDisplayObject;
-
-import mx.core.mx_internal;
 import mx.core.UIComponent;
-import mx.core.IDataRenderer;
-import mx.controls.listClasses.IDropInListItemRenderer;
+import mx.core.mx_internal;
 
 use namespace mx_internal;
 
@@ -297,9 +297,13 @@ public class TreeItemRenderer extends UIComponent
     public function set data(value:Object):void
     {
         _data = value;
-        text = dataToString(value);
-        
         var treeListData:mx.controls.treeClasses.TreeListData = listData as mx.controls.treeClasses.TreeListData;
+
+        if ((treeListData.owner as Tree).labelFunction)
+            text = (treeListData.owner as Tree).labelFunction(data);
+        else
+            text = dataToString(value);
+        
         var indentSpace:String = "    ";
         var extraSpace:String = " ";
         
@@ -342,15 +346,6 @@ public class TreeItemRenderer extends UIComponent
     }
     public function set listData(value:Object):void
     {
-        if (value is org.apache.royale.html.supportClasses.TreeListData)
-        {
-            var otld:org.apache.royale.html.supportClasses.TreeListData = value as org.apache.royale.html.supportClasses.TreeListData;
-            var tld:mx.controls.treeClasses.TreeListData = new mx.controls.treeClasses.TreeListData();
-            tld.depth = otld.depth;
-            tld.hasChildren = otld.hasChildren;
-            tld.isOpen = otld.isOpen;
-            value = tld;
-        }
         _listData = value;
     }