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 //----------------------------------
