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

Reply via email to