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

gregdove 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 69ae7a9  WIP on getting mx emulation renderers to support more of the 
original Flex behavior.
69ae7a9 is described below

commit 69ae7a9a892567dfdb96a26d0ffe096bb38ed729
Author: greg-dove <greg.d...@gmail.com>
AuthorDate: Wed Feb 2 15:55:16 2022 +1300

    WIP on getting mx emulation renderers to support more of the original Flex 
behavior.
---
 .../MXRoyale/src/main/royale/mx/controls/Button.as | 41 +++++++++++-
 .../src/main/royale/mx/controls/CheckBox.as        |  6 +-
 .../AdvancedDataGridItemRendererInitializer.as     | 50 +++++++++-----
 .../beads/DataGridItemRendererInitializer.as       | 38 +++++------
 .../controls/beads/ListItemRendererInitializer.as  | 74 +++++++++++++++++---
 .../controls/beads/TreeItemRendererInitializer.as  | 78 +++++++++++-----------
 .../src/main/royale/mx/core/UIComponent.as         | 15 -----
 7 files changed, 198 insertions(+), 104 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 5fdd7c8..706d206 100644
--- a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/Button.as
+++ b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/Button.as
@@ -343,6 +343,11 @@ public class Button extends UIComponent implements 
IDataRenderer, IListItemRende
        //----------------------------------
        
     private var labelSet:Boolean;
+       private var selectedSet:Boolean;
+
+
+
+
        public function get label():String
        {
                return ITextModel(model).text;
@@ -493,10 +498,10 @@ public class Button extends UIComponent implements 
IDataRenderer, IListItemRende
             newSelected = _data;
         }
 
-        if (newSelected !== undefined/* && !selectedSet*/)
+        if (newSelected !== undefined && !selectedSet)
         {
             selected = newSelected as Boolean;
-            //selectedSet = false;
+            selectedSet = false;
         }
         if (newLabel !== undefined && !labelSet)
         {
@@ -569,8 +574,40 @@ public class Button extends UIComponent implements 
IDataRenderer, IListItemRende
         */
        public function set selected(value:Boolean):void
        {
+               selectedSet = true;
                _selected = value;
        }
+
+
+       //----------------------------------
+       //  selectedField
+       //----------------------------------
+
+
+       private var _selectedField:String = null;
+
+       /**
+        *  The name of the field in the <code>data</code> property which 
specifies
+        *  the value of the Button control's <code>selected</code> property.
+        *  You can set this property when you use the Button control in an 
item renderer.
+        *  The default value is null, which means that the Button control does
+        *  not set its selected state based on a property in the 
<code>data</code> property.
+        *
+        *  @default null
+        *
+        *  @langversion 3.0
+        *  @playerversion Flash 9
+        *  @playerversion AIR 1.1
+        *  @productversion Royale 0.9.9
+        */
+       public function get selectedField():String
+       {
+               return _selectedField;
+       }
+       public function set selectedField(value:String):void
+       {
+               _selectedField = value;
+       }
        
        //----------------------------------
        //  labelPlacement
diff --git 
a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/CheckBox.as 
b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/CheckBox.as
index 1bd665d..ff70c50 100644
--- a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/CheckBox.as
+++ b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/CheckBox.as
@@ -173,7 +173,8 @@ public class CheckBox extends Button implements IStrand, 
ISelectable
         */
        override public function set selected(value:Boolean):void
        {
-               IToggleButtonModel(model).selected = value;
+               //this is strange, but the base class needs to have its private 
flag set also
+               IToggleButtonModel(model).selected = super.selected = value;
        }
 
        private function 
internalMouseHandler(event:org.apache.royale.events.MouseEvent) : void
@@ -242,7 +243,8 @@ public class CheckBox extends Button implements IStrand, 
ISelectable
 
        override public function set selected(value:Boolean):void
        {
-          (_icon.element as HTMLInputElement).checked = value;
+          //this is strange, but the base class needs to have its private flag 
set also
+          (_icon.element as HTMLInputElement).checked = super.selected = value;
        }
        
        //----------------------------------
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 108fa42..c308a25 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
@@ -19,7 +19,8 @@
 package mx.controls.beads
 {
 
-import mx.controls.AdvancedDataGrid;
+       import mx.controls.AdvancedDataGrid;
+       import mx.controls.listClasses.BaseListData;
 
        import org.apache.royale.collections.TreeData;
     import org.apache.royale.core.Bead;
@@ -69,19 +70,36 @@ import mx.controls.AdvancedDataGrid;
                {
             if (!dataProviderModel)
                 return;
-            
+                       _tempIR = ir;
             super.initializeIndexedItemRenderer(ir, data, index);
-            
-            var adgColumnList:AdvancedDataGridColumnList = _strand as 
AdvancedDataGridColumnList;
+                       _tempIR = null;
 
-            if (!adgColumnList.grid) return;
+        }
+
+
+               private var _tempIR:IIndexedItemRenderer;
+               /**
+                *
+                *
+                *  @royaleignorecoercion 
mx.controls.advancedDataGridClasses.AdvancedDataGridColumnList
+                *  @royaleignorecoercion mx.controls.AdvancedDataGrid
+                *  @royaleignorecoercion 
mx.controls.beads.models.DataGridColumnICollectionViewModel
+                *  @royaleignorecoercion XML
+                *
+                */
+               override protected function makeListData(data:Object, 
uid:String,
+                                                                               
                 rowNum:int):BaseListData
+               {
+                       var adgColumnList:AdvancedDataGridColumnList = _strand 
as AdvancedDataGridColumnList;
+
+                       if (!adgColumnList.grid) return null;
 
-            var adgColumnListModel:DataGridColumnICollectionViewModel = 
adgColumnList.model as DataGridColumnICollectionViewModel;
+                       var 
adgColumnListModel:DataGridColumnICollectionViewModel = adgColumnList.model as 
DataGridColumnICollectionViewModel;
                        var adg:AdvancedDataGrid = (adgColumnList.grid as 
AdvancedDataGrid);
                        var depth:int = adg.getDepth(data);
                        var isOpen:Boolean = adg.isItemOpen(data);
                        var hasChildren:Boolean = adg.hasChildren(data);
-            var firstColumn:Boolean =  adgColumnListModel.columnIndex == 0;
+                       var firstColumn:Boolean =  
adgColumnListModel.columnIndex == 0;
 
                        var dataField:String = 
adg.columns[adgColumnListModel.columnIndex].dataField;
                        var text:String = "";
@@ -94,17 +112,19 @@ import mx.controls.AdvancedDataGrid;
                        {
                        }
                        // Set the listData with the depth of this item
-                       var treeListData:AdvancedDataGridListData = new 
AdvancedDataGridListData(text, dataField, adgColumnListModel.columnIndex, "", 
(adgColumnList.grid as AdvancedDataGrid), index);
+                       var treeListData:AdvancedDataGridListData = new 
AdvancedDataGridListData(text, dataField, adgColumnListModel.columnIndex, uid, 
(adgColumnList.grid as AdvancedDataGrid), rowNum);
                        treeListData.depth = depth;
                        treeListData.open = isOpen;
                        treeListData.hasChildren = hasChildren;
-                       
-                       (ir as IListDataItemRenderer).listData = treeListData;
-            if (firstColumn && adg.groupLabelField)
-                (ir as ILabelFieldItemRenderer).labelField = 
adg.groupLabelField;
-        }
 
-        override protected function 
setupVisualsForItemRenderer(ir:IIndexedItemRenderer):void
+
+                       if (firstColumn && adg.groupLabelField)
+                               (_tempIR as ILabelFieldItemRenderer).labelField 
= adg.groupLabelField;
+
+                       return treeListData;
+               }
+
+        /*override protected function 
setupVisualsForItemRenderer(ir:IIndexedItemRenderer):void
         {
                        super.setupVisualsForItemRenderer(ir);
                        COMPILE::JS
@@ -115,7 +135,7 @@ import mx.controls.AdvancedDataGrid;
                                        (ir as 
UIComponent).element.style.position = 'relative';
                                }
                        }
-               }
+               }*/
                        
        }
 }
diff --git 
a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/beads/DataGridItemRendererInitializer.as
 
b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/beads/DataGridItemRendererInitializer.as
index 39314d2..74d65f9 100644
--- 
a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/beads/DataGridItemRendererInitializer.as
+++ 
b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/beads/DataGridItemRendererInitializer.as
@@ -25,10 +25,10 @@ package mx.controls.beads
        import mx.controls.dataGridClasses.DataGridColumn;
        import mx.controls.dataGridClasses.DataGridColumnList;
        import mx.controls.dataGridClasses.DataGridListData;
+       import mx.controls.listClasses.BaseListData;
        import mx.core.UIComponent;
 
        import org.apache.royale.core.IIndexedItemRenderer;
-       import org.apache.royale.core.IListDataItemRenderer;
     
        /**
         *  The DataGridItemRendererInitializer class initializes item renderers
@@ -53,25 +53,24 @@ package mx.controls.beads
                {
                }
                                
+
+
                /**
-                *  @private
-                *  @royaleignorecoercion 
org.apache.royale.core.HTMLElementWrapper
+                *
                 *
                 *  @royaleignorecoercion 
mx.controls.dataGridClasses.DataGridColumn
+                *  @royaleignorecoercion 
mx.controls.dataGridClasses.DataGridColumnList
+                *  @royaleignorecoercion 
mx.controls.beads.models.DataGridColumnICollectionViewModel
+                *
                 */
-               override public function 
initializeIndexedItemRenderer(ir:IIndexedItemRenderer, data:Object, 
index:int):void
-               {
-            if (!dataProviderModel)
-                return;
-            
-            super.initializeIndexedItemRenderer(ir, data, index);
-
-            var dgColumnList:DataGridColumnList = _strand as 
DataGridColumnList;
+               override protected function makeListData(data:Object, 
uid:String,
+                                                                               
                 rowNum:int):BaseListData
+               {       var dgColumnList:DataGridColumnList = _strand as 
DataGridColumnList;
+                       var dg:DataGrid = (dgColumnList.grid as DataGrid);
+                       if (data == null || !dgColumnList.grid) return null;
 
-            if (!dgColumnList.grid) return;
+                       var 
dgColumnListModel:DataGridColumnICollectionViewModel = dgColumnList.model as 
DataGridColumnICollectionViewModel;
 
-            var dgColumnListModel:DataGridColumnICollectionViewModel = 
dgColumnList.model as DataGridColumnICollectionViewModel;
-                       var dg:DataGrid = (dgColumnList.grid as DataGrid);
 
                        var dgColumn:DataGridColumn = 
dg.columns[dgColumnListModel.columnIndex] as DataGridColumn;
                        var text:String = "";
@@ -83,13 +82,10 @@ package mx.controls.beads
                        }*/
                        text = dgColumn.itemToLabel(data);
 
-                       // Set the listData with the depth of this item
-                       var listData:DataGridListData = new 
DataGridListData(text, dgColumn.dataField, dgColumnListModel.columnIndex, "", 
dg, index);
-
-                       (ir as IListDataItemRenderer).listData = listData;
-        }
+                       return new DataGridListData(text, dgColumn.dataField, 
dgColumnListModel.columnIndex, "", dg, rowNum);
+               }
 
-        override protected function 
setupVisualsForItemRenderer(ir:IIndexedItemRenderer):void
+        /*override protected function 
setupVisualsForItemRenderer(ir:IIndexedItemRenderer):void
         {
                        super.setupVisualsForItemRenderer(ir);
                        COMPILE::JS
@@ -100,7 +96,7 @@ package mx.controls.beads
                                        (ir as 
UIComponent).element.style.position = 'relative';
                                }
                        }
-               }
+               }*/
                        
        }
 }
diff --git 
a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/beads/ListItemRendererInitializer.as
 
b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/beads/ListItemRendererInitializer.as
index 17448eb..4142672 100644
--- 
a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/beads/ListItemRendererInitializer.as
+++ 
b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/beads/ListItemRendererInitializer.as
@@ -17,10 +17,17 @@
 //
 
////////////////////////////////////////////////////////////////////////////////
 package mx.controls.beads
-{      
-    
-    import org.apache.royale.core.Bead;
-    import org.apache.royale.core.IDataProviderModel;
+{
+
+       import mx.controls.listClasses.BaseListData;
+       import mx.controls.listClasses.IDropInListItemRenderer;
+       import mx.controls.listClasses.IListItemRenderer;
+       import mx.controls.listClasses.ListBase;
+       import mx.controls.listClasses.ListData;
+
+       import org.apache.royale.core.Bead;
+       import org.apache.royale.core.IBeadController;
+       import org.apache.royale.core.IDataProviderModel;
     import org.apache.royale.core.IIndexedItemRenderer;
     import org.apache.royale.core.IOwnerViewItemRenderer;
     import org.apache.royale.core.IItemRendererOwnerView;
@@ -36,7 +43,10 @@ package mx.controls.beads
     import mx.controls.treeClasses.TreeListData;
 
        import mx.core.UIComponent;
-    
+
+       import 
org.apache.royale.html.beads.controllers.ItemRendererMouseController;
+       import org.apache.royale.utils.loadBeadFromValuesManager;
+
        /**
         *  The TreeItemRendererInitializer class initializes item renderers
      *  in tree classes.
@@ -61,6 +71,11 @@ package mx.controls.beads
                }
                                
                private var ownerView:IItemRendererOwnerView;
+
+
+               protected function getDefaultController():IBeadController{
+                       return new ItemRendererMouseController();
+               }
                
                override public function set strand(value:IStrand):void
                {       
@@ -71,25 +86,62 @@ package mx.controls.beads
                /**
                 *  @private
                 *  @royaleignorecoercion 
org.apache.royale.core.HTMLElementWrapper
+                *
+                *  @royalaignorecoercion 
mx.controls.listClasses.IDropInListItemRenderer
                 */
                override public function 
initializeIndexedItemRenderer(ir:IIndexedItemRenderer, data:Object, 
index:int):void
                {
             if (!dataProviderModel)
                 return;
 
-                       if (ir is UIComponent) {
-                               COMPILE::JS{
-                                       //we are using a UIComponent as a 
renderer, but it is too late to use .isAbsolute = false
-                                       //so swap it out here:
-                                       ir.element.style.position = 'relative';
-                               }
+                       if (!loadBeadFromValuesManager(IBeadController, 
'iBeadController', ir)) {
+                               ir.addBead(getDefaultController());
                        }
 
             super.initializeIndexedItemRenderer(ir, data, index);
             
                        if (ir is IOwnerViewItemRenderer)
                                (ir as 
IOwnerViewItemRenderer).itemRendererOwnerView = ownerView;
+
+                       if (ir is IDropInListItemRenderer) {
+                               (ir as IDropInListItemRenderer).listData = 
makeListData(data,'', index);
+                       }
         }
+
+
+               /**
+                *
+                * @royaleignorecoercion mx.controls.listClasses.ListBase
+                */
+               protected function makeListData(data:Object, uid:String,
+                                                                               
rowNum:int):BaseListData
+               {
+                       var listBaseOwner:ListBase = _strand as ListBase;
+                       return new 
ListData(listBaseOwner.itemToLabel(data),null, labelField, uid, listBaseOwner, 
rowNum);
+               }
+
+
+               /**
+                *
+                * @royaleignorecoercion mx.core.UIComponent
+                */
+               override protected function 
setupVisualsForItemRenderer(ir:IIndexedItemRenderer):void{
+                       super.setupVisualsForItemRenderer(ir);
+                       adjustItemRendererForMX(ir);
+               }
+
+               protected function 
adjustItemRendererForMX(ir:IIndexedItemRenderer):void{
+                       COMPILE::JS
+                       {
+                               if (ir is UIComponent)
+                               {
+                                       (ir as UIComponent).isAbsolute = false;
+                                       //we are using a UIComponent as a 
renderer, but it is too late to rely on .isAbsolute = false
+                                       //so swap it out here:
+                                       (ir as 
UIComponent).element.style.position = 'relative';
+                               }
+                       }
+               }
         
        }
 }
diff --git 
a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/beads/TreeItemRendererInitializer.as
 
b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/beads/TreeItemRendererInitializer.as
index 6bda18f..5a2526d 100644
--- 
a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/beads/TreeItemRendererInitializer.as
+++ 
b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/beads/TreeItemRendererInitializer.as
@@ -17,23 +17,18 @@
 //
 
////////////////////////////////////////////////////////////////////////////////
 package mx.controls.beads
-{      
-    
+{
+
+       import mx.controls.listClasses.BaseListData;
+
        import org.apache.royale.collections.ITreeData;
-    import org.apache.royale.core.Bead;
-    import org.apache.royale.core.IDataProviderModel;
-    import org.apache.royale.core.IIndexedItemRenderer;
-    import org.apache.royale.core.IIndexedItemRendererInitializer;
-    import org.apache.royale.core.IItemRenderer;
-    import org.apache.royale.core.IListDataItemRenderer;
-    import org.apache.royale.core.IStrand;
-    import org.apache.royale.core.IUIBase;
-    import org.apache.royale.core.SimpleCSSStyles;
-    import org.apache.royale.core.UIBase;
     import mx.controls.treeClasses.TreeListData;
     import mx.controls.listClasses.ListBase;
-    
-       /**
+
+       import org.apache.royale.core.IBeadController;
+import org.apache.royale.core.IIndexedItemRenderer;
+
+/**
         *  The TreeItemRendererInitializer class initializes item renderers
      *  in tree classes.
         *  
@@ -55,33 +50,40 @@ package mx.controls.beads
                public function TreeItemRendererInitializer()
                {
                }
-                               
+
+
+               override protected function 
getDefaultController():IBeadController{
+                       return new TreeItemRendererMouseController();
+               }
+
                /**
-                *  @private
-                *  @royaleignorecoercion 
org.apache.royale.core.HTMLElementWrapper
+                *
+                *  @royaleignorecoercion 
org.apache.royale.collections.ITreeData
+                *
                 */
-               override public function 
initializeIndexedItemRenderer(ir:IIndexedItemRenderer, data:Object, 
index:int):void
+               override protected function makeListData(data:Object, 
uid:String,
+                                                                               
                 rowNum:int):BaseListData
                {
-            if (!dataProviderModel)
-                return;
-            
-            super.initializeItemRenderer(ir, data, index);
-            
-            var treeData:ITreeData = dataProviderModel.dataProvider as 
ITreeData;
-            var depth:int = treeData.getDepth(data);
-            var isOpen:Boolean = treeData.isOpen(data);
-            var hasChildren:Boolean = treeData.hasChildren(data);
-            
-            // Set the listData with the depth of this item
-            var treeListData:TreeListData = new TreeListData("", "", _strand 
as ListBase);
-            treeListData.depth = depth;
-            treeListData.isOpen = isOpen;
-            treeListData.hasChildren = hasChildren;
-           treeListData.item = data;
-            
-            (ir as IListDataItemRenderer).listData = treeListData;
-            
-        }
+                       var treeData:ITreeData = dataProviderModel.dataProvider 
as ITreeData;
+                       var depth:int = treeData.getDepth(data);
+                       var isOpen:Boolean = treeData.isOpen(data);
+                       var hasChildren:Boolean = treeData.hasChildren(data);
+
+                       // Set the listData with the depth of this item
+                       var treeListData:TreeListData = new TreeListData("", 
uid, _strand as ListBase);
+                       treeListData.depth = depth;
+                       treeListData.isOpen = isOpen;
+                       treeListData.hasChildren = hasChildren;
+                       treeListData.item = data;
+                       
+                       return treeListData;
+
+               }
+
+
+               override protected function 
adjustItemRendererForMX(ir:IIndexedItemRenderer):void{
+                       //JS: do nothing, we want to keep isAbsolute = true for 
this component, so avoid the setting for 'relative' in the super
+               }
         
        }
 }
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 f59a169..672f5e9 100644
--- a/frameworks/projects/MXRoyale/src/main/royale/mx/core/UIComponent.as
+++ b/frameworks/projects/MXRoyale/src/main/royale/mx/core/UIComponent.as
@@ -5804,21 +5804,6 @@ COMPILE::JS
     }
        [Inspectable(category="General")]
 
-       /*        
-     *  @langversion 3.0
-     *  @playerversion Flash 9
-     *  @playerversion AIR 1.1
-     *  @productversion Flex 3
-     */
-    public function get selectedField():Object
-    {
-        trace("selectedField not implemented");
-        return 0;
-    }
-    public function set selectedField(value:Object):void
-    {
-        trace("selectedField not implemented");
-    }
     
      private var _contentMouseX:Number;
      public function get contentMouseX():Number

Reply via email to