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