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

aharui pushed a commit to branch has
in repository https://gitbox.apache.org/repos/asf/royale-asjs.git

commit ea6e90ef44188dc39404c4c067bdb6eab150221e
Author: Alex Harui <[email protected]>
AuthorDate: Mon Feb 17 13:18:56 2020 -0800

    Button and Label as dropin item renderers
---
 .../MXRoyale/src/main/royale/mx/controls/Button.as | 43 +++++++++-
 .../MXRoyale/src/main/royale/mx/controls/Label.as  | 43 +++++++++-
 .../AdvancedDataGridHeaderRenderer.as              | 19 -----
 .../AdvancedDataGridItemRendererInitializer.as     | 25 +++++-
 .../listClasses/IDropInListItemRenderer.as         | 23 +----
 .../mx/controls/listClasses/IListItemRenderer.as   |  2 +-
 .../mx/controls/listClasses/ListItemRenderer.as    | 20 -----
 .../mx/controls/treeClasses/TreeItemRenderer.as    | 98 ----------------------
 .../src/main/royale/mx/core/IDataRenderer.as       | 22 +----
 .../src/main/royale/mx/core/UIComponent.as         | 18 ++++
 10 files changed, 128 insertions(+), 185 deletions(-)

diff --git a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/Button.as 
b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/Button.as
index e97663f..311b077 100644
--- a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/Button.as
+++ b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/Button.as
@@ -25,7 +25,10 @@ COMPILE::JS
        import org.apache.royale.events.BrowserEvent;
        import org.apache.royale.html.util.addElementToWrapper;
 }
+import mx.controls.dataGridClasses.DataGridListData;
 import mx.controls.listClasses.BaseListData;
+import mx.controls.listClasses.IDropInListItemRenderer;
+import mx.controls.listClasses.IListItemRenderer;
 import mx.core.IDataRenderer;
 import mx.core.UIComponent;
 import mx.events.FlexEvent;
@@ -243,7 +246,7 @@ use namespace mx_internal;
  *  @playerversion AIR 1.1
  *  @productversion Flex 3
  */
-public class Button extends UIComponent implements IDataRenderer
+public class Button extends UIComponent implements IDataRenderer, 
IListItemRenderer, IDropInListItemRenderer
 {
        
        public function Button()
@@ -430,8 +433,42 @@ public class Button extends UIComponent implements 
IDataRenderer
         */
        public function set data(value:Object):void
        {
-               _data = value;
-               dispatchEvent(new FlexEvent(FlexEvent.DATA_CHANGE));
+        var newSelected:*;
+        var newLabel:*;
+
+        _data = value;
+
+        if (_listData && _listData is DataGridListData && 
+            DataGridListData(_listData).dataField !=null)
+        {
+            newSelected = _data[DataGridListData(_listData).dataField];
+
+            newLabel = "";
+        }
+        else if (_listData)
+        {
+            if (selectedField)
+                newSelected = _data[selectedField];
+
+            newLabel = _listData.label;
+        }
+        else
+        {
+            newSelected = _data;
+        }
+
+        if (newSelected !== undefined/* && !selectedSet*/)
+        {
+            selected = newSelected as Boolean;
+            //selectedSet = false;
+        }
+        if (newLabel !== undefined/* && !labelSet*/)
+        {
+            label = newLabel;
+            //labelSet = false;
+        }
+
+        dispatchEvent(new FlexEvent(FlexEvent.DATA_CHANGE));
        }
        
        //-----------------------------------
diff --git a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/Label.as 
b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/Label.as
index 585bc6f..83c5107 100644
--- a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/Label.as
+++ b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/Label.as
@@ -28,10 +28,10 @@ import flash.geom.Rectangle;
 import flash.text.StyleSheet;
 import flash.text.TextFormat;
 import flash.text.TextLineMetrics;
+*/
 import mx.controls.listClasses.BaseListData;
 import mx.controls.listClasses.IDropInListItemRenderer;
 import mx.controls.listClasses.IListItemRenderer;
-*/
 import mx.core.IDataRenderer;
 import mx.core.UIComponent;
 import mx.events.FlexEvent;
@@ -187,7 +187,7 @@ import org.apache.royale.core.ITextModel;
  *  @productversion Flex 3
  */
 public class Label extends UIComponent
-                   implements IDataRenderer
+                   implements IDataRenderer, IListItemRenderer, 
IDropInListItemRenderer
 
 {
 
@@ -419,11 +419,48 @@ public class Label extends UIComponent
     {
         var newText:*;
 
-        _data = value;
+        if (_listData)
+        {
+            newText = (_listData as BaseListData).label;
+        }
+        else if (_data != null)
+        {
+            if (_data is String)
+                newText = String(_data);
+            else
+                newText = _data.toString();
+        }
+
+        if (newText !== undefined/* && !textSet*/)
+        {
+            text = newText;
+            /*textSet = false;*/
+        }
 
         dispatchEvent(new FlexEvent(FlexEvent.DATA_CHANGE));
     }
 
+    private var _listData:Object;
+    
+    [Bindable("__NoChangeEvent__")]
+    /**
+     *  Additional data about the list structure the itemRenderer may
+     *  find useful.
+     *
+     *  @langversion 3.0
+     *  @playerversion Flash 10.2
+     *  @playerversion AIR 2.6
+     *  @productversion Royale 0.0
+     */
+    public function get listData():Object
+    {
+        return _listData;
+    }
+    public function set listData(value:Object):void
+    {
+        _listData = value;
+    }
+    
     //----------------------------------
     //  htmlText
     //----------------------------------
diff --git 
a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/advancedDataGridClasses/AdvancedDataGridHeaderRenderer.as
 
b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/advancedDataGridClasses/AdvancedDataGridHeaderRenderer.as
index 30a2d7c..654637a 100644
--- 
a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/advancedDataGridClasses/AdvancedDataGridHeaderRenderer.as
+++ 
b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/advancedDataGridClasses/AdvancedDataGridHeaderRenderer.as
@@ -211,25 +211,6 @@ public class AdvancedDataGridHeaderRenderer extends 
UIComponent implements IData
         dispatchEvent(newEvent);
     }
     
-    private var _index:int;
-    
-    /**
-     *  The position with the dataProvider being shown by the itemRenderer 
instance.
-     *
-     *  @langversion 3.0
-     *  @playerversion Flash 10.2
-     *  @playerversion AIR 2.6
-     *  @productversion Royale 0.8
-     */
-    public function get index():int
-    {
-        return _index;
-    }
-    public function set index(value:int):void
-    {
-        _index = value;
-    }
-
     
//--------------------------------------------------------------------------
     //
     //  Variables
diff --git 
a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/beads/AdvancedDataGridItemRendererInitializer.as
 
b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/beads/AdvancedDataGridItemRendererInitializer.as
index ecebb99..732dcf7 100644
--- 
a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/beads/AdvancedDataGridItemRendererInitializer.as
+++ 
b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/beads/AdvancedDataGridItemRendererInitializer.as
@@ -35,6 +35,7 @@ package mx.controls.beads
     import mx.controls.advancedDataGridClasses.AdvancedDataGridListData;
        import mx.controls.advancedDataGridClasses.AdvancedDataGridColumnList;
     import mx.controls.beads.models.DataGridColumnICollectionViewModel;
+       import mx.core.UIComponent;
     
        /**
         *  The AdvancedDataGridItemRendererInitializer class initializes item 
renderers
@@ -81,8 +82,15 @@ package mx.controls.beads
                        var hasChildren:Boolean = 
adgColumnList.adg.hasChildren(data);
             var firstColumn:Boolean =  adgColumnListModel.columnIndex == 0;
 
+                       var dataField:String = 
adgColumnList.adg.columns[adgColumnListModel.columnIndex].dataField;
+                       var text:String = "";
+                       try {
+                               text = data[dataField];
+                       } catch (e:Error)
+                       {
+                       }
                        // Set the listData with the depth of this item
-                       var treeListData:AdvancedDataGridListData = new 
AdvancedDataGridListData("", "", adgColumnListModel.columnIndex, "", 
adgColumnList.adg, index);
+                       var treeListData:AdvancedDataGridListData = new 
AdvancedDataGridListData(text, dataField, adgColumnListModel.columnIndex, "", 
adgColumnList.adg, index);
                        treeListData.depth = depth;
                        treeListData.open = isOpen;
                        treeListData.hasChildren = hasChildren;
@@ -92,6 +100,19 @@ package mx.controls.beads
                 (ir as ILabelFieldItemRenderer).labelField = 
adgColumnList.adg.groupLabelField;
                                    
         }
-        
+
+        override protected function 
setupVisualsForItemRenderer(ir:IIndexedItemRenderer):void
+        {
+                       super.setupVisualsForItemRenderer(ir);
+                       COMPILE::JS
+                       {
+                               if (ir is UIComponent)
+                               {
+                                       (ir as UIComponent).isAbsolute = false;
+                                       (ir as 
UIComponent).element.style.position = null;
+                               }
+                       }
+               }
+                       
        }
 }
diff --git 
a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/listClasses/IDropInListItemRenderer.as
 
b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/listClasses/IDropInListItemRenderer.as
index fc7f79b..db4a355 100644
--- 
a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/listClasses/IDropInListItemRenderer.as
+++ 
b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/listClasses/IDropInListItemRenderer.as
@@ -20,6 +20,8 @@
 package mx.controls.listClasses
 {
 
+import org.apache.royale.core.IListDataItemRenderer;
+
 /**
  *  The interface for "drop-in" item renderers.  Most IListItemRenderers
  *  are not "drop-ins".  They are expecting to use a particular field of
@@ -131,7 +133,7 @@ package mx.controls.listClasses
  *  @playerversion AIR 1.1
  *  @productversion Flex 3
  */
-public interface IDropInListItemRenderer
+public interface IDropInListItemRenderer extends IListDataItemRenderer
 {
     
//--------------------------------------------------------------------------
     //
@@ -139,25 +141,6 @@ public interface IDropInListItemRenderer
     //
     
//--------------------------------------------------------------------------
 
-    //----------------------------------
-    //  listData
-    //----------------------------------
-
-    /**
-     *  Implements the <code>listData</code> property
-     *  using setter and getter methods. 
-     *  
-     *  @langversion 3.0
-     *  @playerversion Flash 9
-     *  @playerversion AIR 1.1
-     *  @productversion Flex 3
-     */
-    function get listData():Object;
-    
-    /**
-     *  @private
-     */
-    function set listData(value:Object):void;
 }
 
 }
diff --git 
a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/listClasses/IListItemRenderer.as
 
b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/listClasses/IListItemRenderer.as
index ce4798c..5cfbbcd 100644
--- 
a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/listClasses/IListItemRenderer.as
+++ 
b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/listClasses/IListItemRenderer.as
@@ -72,7 +72,7 @@ package mx.controls.listClasses
         */
        public interface IListItemRenderer extends IDataRenderer, 
IEventDispatcher,
                IFlexDisplayObject,
-               ILayoutManagerClient,
+               //ILayoutManagerClient,
                ISimpleStyleClient, IUIComponent
        {
        }
diff --git 
a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/listClasses/ListItemRenderer.as
 
b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/listClasses/ListItemRenderer.as
index d72557a..164d824 100644
--- 
a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/listClasses/ListItemRenderer.as
+++ 
b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/listClasses/ListItemRenderer.as
@@ -293,26 +293,6 @@ public class ListItemRenderer extends UIComponent 
implements IListItemRenderer,
         _listData = value;
     }
     
-    [Bindable("__NoChangeEvent__")]
-    /**
-     *  The index being represented by this itemRenderer. This can be 
something simple like a String or
-     *  a Number or something very complex.
-     *
-     *  @langversion 3.0
-     *  @playerversion Flash 10.2
-     *  @playerversion AIR 2.6
-     *  @productversion Royale 0.0
-     */
-    public function get index():int
-    {
-        return _index;
-    }
-    
-    public function set index(value:int):void
-    {
-        _index = value;
-    }
-    
     public function get nestLevel():int
     {
        throw new Error("Method not implemented.");
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 634ed25..f1bc2f5 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
@@ -379,104 +379,6 @@ public class TreeItemRenderer extends UIComponent
         _labelField = value;
     }
     
-    private var _index:int;
-    
-    /**
-     *  The position with the dataProvider being shown by the itemRenderer 
instance.
-     *
-     *  @langversion 3.0
-     *  @playerversion Flash 10.2
-     *  @playerversion AIR 2.6
-     *  @productversion Royale 0.0
-     */
-    public function get index():int
-    {
-        return _index;
-    }
-    public function set index(value:int):void
-    {
-        _index = value;
-    }
-    
-    private var _hovered:Boolean;
-    
-    /**
-     *  Whether or not the itemRenderer is in a hovered state.
-     *
-     *  @langversion 3.0
-     *  @playerversion Flash 10.2
-     *  @playerversion AIR 2.6
-     *  @productversion Royale 0.0
-     */
-    public function get hovered():Boolean
-    {
-        return _hovered;
-    }
-    public function set hovered(value:Boolean):void
-    {
-        _hovered = value;
-        updateRenderer();
-    }
-    
-    private var _selected:Boolean;
-    
-    /**
-     *  Whether or not the itemRenderer is in a selected state.
-     *
-     *  @langversion 3.0
-     *  @playerversion Flash 10.2
-     *  @playerversion AIR 2.6
-     *  @productversion Royale 0.0
-     */
-    public function get selected():Boolean
-    {
-        return _selected;
-    }
-    public function set selected(value:Boolean):void
-    {
-        _selected = value;
-        updateRenderer();
-    }
-    
-    private var _down:Boolean;
-    
-    /**
-     *  Whether or not the itemRenderer is in a down (or pre-selected) state.
-     *
-     *  @langversion 3.0
-     *  @playerversion Flash 10.2
-     *  @playerversion AIR 2.6
-     *  @productversion Royale 0.0
-     */
-    public function get down():Boolean
-    {
-        return _down;
-    }
-    public function set down(value:Boolean):void
-    {
-        _down = value;
-        updateRenderer();
-    }
-    
-    /**
-     * @private
-     */
-    public function updateRenderer():void
-    {
-        if (down)
-            useColor = downColor;
-        else if (hovered)
-            useColor = highlightColor;
-        else if (selected)
-            useColor = selectedColor;
-        else
-            useColor = backgroundColor;
-        COMPILE::JS
-        {
-            element.style.backgroundColor = '#' + useColor.toString(16);
-        }
-    }
-    
     /**
      * @private
      */
diff --git 
a/frameworks/projects/MXRoyale/src/main/royale/mx/core/IDataRenderer.as 
b/frameworks/projects/MXRoyale/src/main/royale/mx/core/IDataRenderer.as
index c3bfe10..90f01a3 100644
--- a/frameworks/projects/MXRoyale/src/main/royale/mx/core/IDataRenderer.as
+++ b/frameworks/projects/MXRoyale/src/main/royale/mx/core/IDataRenderer.as
@@ -20,6 +20,8 @@
 package mx.core
 {
 
+import org.apache.royale.core.IIndexedItemRenderer;
+
 /**
  *  The IDataRenderer interface defines the interface for components that have 
a <code>data</code> property.
  *
@@ -72,7 +74,7 @@ package mx.core
  *  @playerversion AIR 1.1
  *  @productversion Flex 3
  */
-public interface IDataRenderer
+public interface IDataRenderer extends IIndexedItemRenderer
 {
        
//--------------------------------------------------------------------------
        //
@@ -80,24 +82,6 @@ public interface IDataRenderer
        //
        
//--------------------------------------------------------------------------
 
-       //----------------------------------
-       //  data
-       //----------------------------------
-
-       /**
-        *  The data to render or edit.
-        *  
-        *  @langversion 3.0
-        *  @playerversion Flash 9
-        *  @playerversion AIR 1.1
-        *  @productversion Flex 3
-        */
-       function get data():Object;
-       
-       /**
-        *  @private
-        */
-       function set data(value:Object):void;
 }
 
 }
diff --git 
a/frameworks/projects/MXRoyale/src/main/royale/mx/core/UIComponent.as 
b/frameworks/projects/MXRoyale/src/main/royale/mx/core/UIComponent.as
index 33de1e5..80eeeaf 100644
--- a/frameworks/projects/MXRoyale/src/main/royale/mx/core/UIComponent.as
+++ b/frameworks/projects/MXRoyale/src/main/royale/mx/core/UIComponent.as
@@ -633,7 +633,25 @@ public class UIComponent extends UIBase
        
        }
        
+       private var _index:int;
        
+       /**
+        *  The position with the dataProvider being shown by the itemRenderer 
instance.
+        *
+        *  @langversion 3.0
+        *  @playerversion Flash 10.2
+        *  @playerversion AIR 2.6
+        *  @productversion Royale 0.0
+        */
+       public function get index():int
+       {
+               return _index;
+       }
+       public function set index(value:int):void
+       {
+               _index = value;
+       }                               
+                               
     //----------------------------------
     //  chromeColor
     //----------------------------------

Reply via email to