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 823f0262a505c560d0ee48401eaf5b3c012e6c31 Author: Alex Harui <[email protected]> AuthorDate: Wed Jan 29 13:33:26 2020 -0800 rough pieces of the refactor. Still need to add 'has' checks --- ...ArrayData.as => DataItemRendererFactoryBase.as} | 110 ++++++----- .../beads/DataItemRendererFactoryForArrayData.as | 160 +++------------- .../beads/DataItemRendererFactoryForArrayList.as | 119 +----------- .../DataItemRendererFactoryForCollectionView.as | 148 +-------------- .../beads/DataItemRendererFactoryForColumnData.as | 82 +-------- .../DataItemRendererFactoryForHierarchicalData.as | 19 -- .../html/beads/ListItemRendererInitializer.as | 108 +++++++++++ ...ataItemRendererFactoryForSeriesArrayListData.as | 96 ++-------- .../beads/DataItemRendererFactoryForSeriesData.as | 203 +++++++++++++-------- .../{IItemRenderer.as => IIndexedItemRenderer.as} | 36 +--- ...derer.as => IIndexedItemRendererInitializer.as} | 48 ++--- .../royale/org/apache/royale/core/IItemRenderer.as | 12 -- .../royale/core/IItemRendererClassFactory.as | 8 +- ...ItemRenderer.as => IItemRendererInitializer.as} | 51 ++---- .../apache/royale/core/ItemRendererClassFactory.as | 11 +- ...actoryForICollectionViewAdvancedDataGridData.as | 19 -- ...ataItemRendererFactoryForICollectionViewData.as | 74 +++++--- .../DataItemRendererFactoryForIListData.as | 72 ++++---- ...rerFactoryForICollectionViewHierarchicalData.as | 34 +--- 19 files changed, 479 insertions(+), 931 deletions(-) diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DataItemRendererFactoryForArrayData.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DataItemRendererFactoryBase.as similarity index 71% copy from frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DataItemRendererFactoryForArrayData.as copy to frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DataItemRendererFactoryBase.as index d9e5141..2cfc0b4 100644 --- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DataItemRendererFactoryForArrayData.as +++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DataItemRendererFactoryBase.as @@ -34,7 +34,6 @@ package org.apache.royale.html.beads import org.apache.royale.events.Event; import org.apache.royale.events.EventDispatcher; import org.apache.royale.events.IEventDispatcher; - import org.apache.royale.events.ItemRendererEvent; import org.apache.royale.html.List; import org.apache.royale.html.beads.IListView; @@ -46,8 +45,6 @@ package org.apache.royale.html.beads import org.apache.royale.utils.sendEvent; import org.apache.royale.utils.sendStrandEvent; - [Event(name="itemRendererCreated",type="org.apache.royale.events.ItemRendererEvent")] - /** * The DataItemRendererFactoryForArrayData class reads an * array of data and creates an item renderer for every @@ -60,7 +57,7 @@ package org.apache.royale.html.beads * @playerversion AIR 2.6 * @productversion Royale 0.8 */ - public class DataItemRendererFactoryForArrayData extends EventDispatcher implements IBead, IDataProviderItemRendererMapper + public class DataItemRendererFactoryBase extends EventDispatcher implements IBead, IDataProviderItemRendererMapper { /** * Constructor. @@ -70,18 +67,15 @@ package org.apache.royale.html.beads * @playerversion AIR 2.6 * @productversion Royale 0.8 */ - public function DataItemRendererFactoryForArrayData(target:Object=null) + public function DataItemRendererFactoryBase(target:Object=null) { super(target); } protected var dataProviderModel:IDataProviderModel; - protected var dataFieldProvider:DataFieldProviderBead; + //protected var dataFieldProvider:DataFieldProviderBead; - protected var labelField:String; - protected var dataField:String; - - private var _strand:IStrand; + protected var _strand:IStrand; /** * @copy org.apache.royale.core.IBead#strand @@ -104,18 +98,19 @@ package org.apache.royale.html.beads * @royaleignorecoercion org.apache.royale.core.IItemRendererClassFactory * @royaleignorecoercion org.apache.royale.html.beads.DataFieldProviderBead */ - private function finishSetup(event:Event):void + protected function finishSetup(event:Event):void { dataProviderModel = _strand.getBeadByType(IDataProviderModel) as IDataProviderModel; dataProviderModel.addEventListener("dataProviderChanged", dataProviderChangeHandler); - labelField = dataProviderModel.labelField; + /* dataFieldProvider = _strand.getBeadByType(DataFieldProviderBead) as DataFieldProviderBead; if (dataFieldProvider) { dataField = dataFieldProvider.dataField; } - + */ + // if the host component inherits from DataContainerBase, the itemRendererClassFactory will // already have been loaded by DataContainerBase.addedToParent function. if(!_itemRendererFactory) @@ -152,9 +147,37 @@ package org.apache.royale.html.beads _itemRendererFactory = value; } + private var _itemRendererInitializer:IItemRendererInitializer; + + /** + * The org.apache.royale.core.IItemRendererInitializer used + * to initialize instances of item renderers. + * + * @langversion 3.0 + * @playerversion Flash 10.2 + * @playerversion AIR 2.6 + * @productversion Royale 0.8 + * @royaleignorecoercion org.apache.royale.core.IItemRendererInitializer + */ + public function get itemRendererInitializer():IItemRendererInitializer + { + if(!_itemRendererInitializer) + _itemRendererInitializer = loadBeadFromValuesManager(IItemRendererInitializer, "iItemRendererInitializer", _strand) as IItemRendererInitializer; + + return _itemRendererInitializer; + } + /** - * The org.apache.royale.core.IItemRendererOwnerView that will - * parent the item renderers. + * @private + */ + public function set itemRendererInitializer(value:IItemRendererInitializer):void + { + _itemRendererInitializer = value; + } + + /** + * This Factory deletes all renderers, and generates a renderer + * for every data provider item. * * @langversion 3.0 * @playerversion Flash 10.2 @@ -165,52 +188,51 @@ package org.apache.royale.html.beads * @royaleignorecoercion org.apache.royale.html.beads.IListView * @royaleignorecoercion org.apache.royale.core.IListPresentationModel * @royaleignorecoercion org.apache.royale.core.UIBase - * @royaleignorecoercion org.apache.royale.core.ISelectableItemRenderer + * @royaleignorecoercion org.apache.royale.core.IItemRenderer + * @royaleignorecoercion org.apache.royale.core.IIndexedItemRendererInitializer * @royaleignorecoercion org.apache.royale.html.supportClasses.DataItemRenderer * @royaleignorecoercion org.apache.royale.events.IEventDispatcher */ protected function dataProviderChangeHandler(event:Event):void { - var dp:Array = dataProviderModel.dataProvider as Array; + var dp:Object = dataProviderModel.dataProvider; if (!dp) return; - + var view:IListView = (_strand as IStrandWithModelView).view as IListView; var dataGroup:IItemRendererOwnerView = view.dataGroup; - dataGroup.removeAllItemRenderers(); - - var presentationModel:IListPresentationModel = _strand.getBeadByType(IListPresentationModel) as IListPresentationModel; - - var n:int = dp.length; + removeAllItemRenderers(); + + var n:int = dataProviderLength; for (var i:int = 0; i < n; i++) { - var ir:ISelectableItemRenderer = itemRendererFactory.createItemRenderer(dataGroup) as ISelectableItemRenderer; - var dataItemRenderer:DataItemRenderer = ir as DataItemRenderer; + var ir:IItemRenderer = itemRendererFactory.createItemRenderer() as IItemRenderer; + //var dataItemRenderer:DataItemRenderer = ir as DataItemRenderer; dataGroup.addItemRenderer(ir, false); - ir.index = i; - ir.labelField = labelField; - if (dataItemRenderer) - { - dataItemRenderer.dataField = dataField; - } - - if (presentationModel) { - var style:SimpleCSSStyles = new SimpleCSSStyles(); - style.marginBottom = presentationModel.separatorThickness; - UIBase(ir).style = style; - UIBase(ir).height = presentationModel.rowHeight; - UIBase(ir).percentWidth = 100; - } - ir.data = dp[i]; - - var newEvent:ItemRendererEvent = new ItemRendererEvent(ItemRendererEvent.CREATED); - newEvent.itemRenderer = ir; - sendEvent(this,newEvent); + var data:Object = getItemAt(i); + (itemRendererInitializer as IIndexedItemRendererInitializer).initializeIndexedItemRenderer(ir, data, view, index); + ir.data = data; } sendStrandEvent(_strand,"itemsCreated"); } + + protected function removeAllItemRenderers(dataGroup:IItemRendererOwnerView):void + { + dataGroup.removeAllItemRenderers(); + } + + protected function get dataProviderLength():int + { + return 0; + } + + override protected function getItemAt(i):Object + { + return null; + } + } } diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DataItemRendererFactoryForArrayData.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DataItemRendererFactoryForArrayData.as index d9e5141..2d8417d 100644 --- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DataItemRendererFactoryForArrayData.as +++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DataItemRendererFactoryForArrayData.as @@ -19,14 +19,17 @@ package org.apache.royale.html.beads { import org.apache.royale.core.IBead; + import org.apache.royale.core.IChild; import org.apache.royale.core.IDataProviderItemRendererMapper; + import org.apache.royale.core.IDataProviderModel; import org.apache.royale.core.IItemRendererClassFactory; import org.apache.royale.core.IItemRendererOwnerView; + import org.apache.royale.core.ILayoutHost; import org.apache.royale.core.IListPresentationModel; + import org.apache.royale.core.IParentIUIBase; import org.apache.royale.core.ISelectableItemRenderer; - import org.apache.royale.core.IDataProviderModel; import org.apache.royale.core.IStrand; - import org.apache.royale.core.IStrandWithModelView; + import org.apache.royale.core.IStrandWithModelView; import org.apache.royale.core.IUIBase; import org.apache.royale.core.SimpleCSSStyles; import org.apache.royale.core.UIBase; @@ -36,18 +39,12 @@ package org.apache.royale.html.beads import org.apache.royale.events.IEventDispatcher; import org.apache.royale.events.ItemRendererEvent; import org.apache.royale.html.List; - - import org.apache.royale.html.beads.IListView; - import org.apache.royale.core.IChild; - import org.apache.royale.core.ILayoutHost; - import org.apache.royale.core.IParentIUIBase; - import org.apache.royale.html.supportClasses.DataItemRenderer; + import org.apache.royale.html.beads.IListView; + import org.apache.royale.html.supportClasses.DataItemRenderer; import org.apache.royale.utils.loadBeadFromValuesManager; import org.apache.royale.utils.sendEvent; import org.apache.royale.utils.sendStrandEvent; - [Event(name="itemRendererCreated",type="org.apache.royale.events.ItemRendererEvent")] - /** * The DataItemRendererFactoryForArrayData class reads an * array of data and creates an item renderer for every @@ -74,84 +71,9 @@ package org.apache.royale.html.beads { super(target); } - - protected var dataProviderModel:IDataProviderModel; - protected var dataFieldProvider:DataFieldProviderBead; - - protected var labelField:String; - protected var dataField:String; - - private var _strand:IStrand; - - /** - * @copy org.apache.royale.core.IBead#strand - * - * @langversion 3.0 - * @playerversion Flash 10.2 - * @playerversion AIR 2.6 - * @productversion Royale 0.8 - * @royaleignorecoercion org.apache.royale.events.IEventDispatcher - */ - public function set strand(value:IStrand):void - { - _strand = value; - IEventDispatcher(value).addEventListener("initComplete",finishSetup); - } - - /** - * @private - * @royaleignorecoercion org.apache.royale.core.IDataProviderModel - * @royaleignorecoercion org.apache.royale.core.IItemRendererClassFactory - * @royaleignorecoercion org.apache.royale.html.beads.DataFieldProviderBead - */ - private function finishSetup(event:Event):void - { - dataProviderModel = _strand.getBeadByType(IDataProviderModel) as IDataProviderModel; - dataProviderModel.addEventListener("dataProviderChanged", dataProviderChangeHandler); - labelField = dataProviderModel.labelField; - - dataFieldProvider = _strand.getBeadByType(DataFieldProviderBead) as DataFieldProviderBead; - if (dataFieldProvider) - { - dataField = dataFieldProvider.dataField; - } - - // if the host component inherits from DataContainerBase, the itemRendererClassFactory will - // already have been loaded by DataContainerBase.addedToParent function. - if(!_itemRendererFactory) - _itemRendererFactory = loadBeadFromValuesManager(IItemRendererClassFactory, "iItemRendererClassFactory", _strand) as IItemRendererClassFactory; - - dataProviderChangeHandler(null); - } - - private var _itemRendererFactory:IItemRendererClassFactory; - - /** - * The org.apache.royale.core.IItemRendererClassFactory used - * to generate instances of item renderers. - * - * @langversion 3.0 - * @playerversion Flash 10.2 - * @playerversion AIR 2.6 - * @productversion Royale 0.8 - * @royaleignorecoercion org.apache.royale.core.IItemRendererClassFactory - */ - public function get itemRendererFactory():IItemRendererClassFactory - { - if(!_itemRendererFactory) - _itemRendererFactory = loadBeadFromValuesManager(IItemRendererClassFactory, "iItemRendererClassFactory", _strand) as IItemRendererClassFactory; - - return _itemRendererFactory; - } - - /** - * @private - */ - public function set itemRendererFactory(value:IItemRendererClassFactory):void - { - _itemRendererFactory = value; - } + private var dp:Array; + /** * The org.apache.royale.core.IItemRendererOwnerView that will * parent the item renderers. @@ -161,56 +83,22 @@ package org.apache.royale.html.beads * @playerversion AIR 2.6 * @productversion Royale 0.8 * @royaleignorecoercion Array - * @royaleignorecoercion org.apache.royale.core.IStrandWithModelView - * @royaleignorecoercion org.apache.royale.html.beads.IListView - * @royaleignorecoercion org.apache.royale.core.IListPresentationModel - * @royaleignorecoercion org.apache.royale.core.UIBase - * @royaleignorecoercion org.apache.royale.core.ISelectableItemRenderer - * @royaleignorecoercion org.apache.royale.html.supportClasses.DataItemRenderer - * @royaleignorecoercion org.apache.royale.events.IEventDispatcher */ - protected function dataProviderChangeHandler(event:Event):void + override protected function dataProviderChangeHandler(event:Event):void { - var dp:Array = dataProviderModel.dataProvider as Array; - if (!dp) - return; - - var view:IListView = (_strand as IStrandWithModelView).view as IListView; - var dataGroup:IItemRendererOwnerView = view.dataGroup; - - dataGroup.removeAllItemRenderers(); - - var presentationModel:IListPresentationModel = _strand.getBeadByType(IListPresentationModel) as IListPresentationModel; - - var n:int = dp.length; - for (var i:int = 0; i < n; i++) - { - var ir:ISelectableItemRenderer = itemRendererFactory.createItemRenderer(dataGroup) as ISelectableItemRenderer; - var dataItemRenderer:DataItemRenderer = ir as DataItemRenderer; - - dataGroup.addItemRenderer(ir, false); - ir.index = i; - ir.labelField = labelField; - if (dataItemRenderer) - { - dataItemRenderer.dataField = dataField; - } - - if (presentationModel) { - var style:SimpleCSSStyles = new SimpleCSSStyles(); - style.marginBottom = presentationModel.separatorThickness; - UIBase(ir).style = style; - UIBase(ir).height = presentationModel.rowHeight; - UIBase(ir).percentWidth = 100; - } - ir.data = dp[i]; - - var newEvent:ItemRendererEvent = new ItemRendererEvent(ItemRendererEvent.CREATED); - newEvent.itemRenderer = ir; - sendEvent(this,newEvent); - } - - sendStrandEvent(_strand,"itemsCreated"); - } + dp = dataProviderModel.dataProvider as Array; + + super.dataProviderChangeHandler(event); + } + + override protected function get dataProviderLength():int + { + return dp.length; + } + + override protected function getItemAt(i):Object + { + return dp[i]; + } } } diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DataItemRendererFactoryForArrayList.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DataItemRendererFactoryForArrayList.as index 5475487..4f64530 100644 --- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DataItemRendererFactoryForArrayList.as +++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DataItemRendererFactoryForArrayList.as @@ -41,8 +41,6 @@ package org.apache.royale.html.beads import org.apache.royale.utils.sendEvent; import org.apache.royale.utils.sendStrandEvent; - [Event(name="itemRendererCreated",type="org.apache.royale.events.ItemRendererEvent")] - /** * The DataItemRendererFactoryForArrayList class uses an ArrayList * and creates an item renderer for every @@ -55,7 +53,7 @@ package org.apache.royale.html.beads * @playerversion AIR 2.6 * @productversion Royale 0.0 */ - public class DataItemRendererFactoryForArrayList extends EventDispatcher implements IBead, IDataProviderItemRendererMapper + public class DataItemRendererFactoryForArrayList extends DataItemRendererFactoryBase { /** * Constructor. @@ -70,84 +68,6 @@ package org.apache.royale.html.beads super(target); } - protected var dataProviderModel:IDataProviderModel; - protected var dataFieldProvider:DataFieldProviderBead; - - protected var labelField:String; - protected var dataField:String; - - protected var _strand:IStrand; - - /** - * @copy org.apache.royale.core.IBead#strand - * - * @langversion 3.0 - * @playerversion Flash 10.2 - * @playerversion AIR 2.6 - * @productversion Royale 0.0 - */ - public function set strand(value:IStrand):void - { - _strand = value; - IEventDispatcher(_strand).addEventListener("initComplete", initComplete); - } - - protected function initComplete(event:Event):void - { - dataProviderModel = _strand.getBeadByType(IDataProviderModel) as IDataProviderModel; - dataProviderModel.addEventListener("dataProviderChanged", dataProviderChangeHandler); - labelField = dataProviderModel.labelField; - - dataFieldProvider = _strand.getBeadByType(DataFieldProviderBead) as DataFieldProviderBead; - if (dataFieldProvider) - { - dataField = dataFieldProvider.dataField; - } - - // if the host component inherits from DataContainerBase, the itemRendererClassFactory will - // already have been loaded by DataContainerBase.addedToParent function. - if(!_itemRendererFactory) - _itemRendererFactory = loadBeadFromValuesManager(IItemRendererClassFactory, "iItemRendererClassFactory", _strand) as IItemRendererClassFactory; - - dataProviderChangeHandler(null); - } - - private var _itemRendererFactory:IItemRendererClassFactory; - - /** - * The org.apache.royale.core.IItemRendererClassFactory used - * to generate instances of item renderers. - * - * @langversion 3.0 - * @playerversion Flash 10.2 - * @playerversion AIR 2.6 - * @productversion Royale 0.0 - */ - public function get itemRendererFactory():IItemRendererClassFactory - { - if(!_itemRendererFactory) - _itemRendererFactory = loadBeadFromValuesManager(IItemRendererClassFactory, "iItemRendererClassFactory", _strand) as IItemRendererClassFactory; - - return _itemRendererFactory; - } - - /** - * @private - */ - public function set itemRendererFactory(value:IItemRendererClassFactory):void - { - _itemRendererFactory = value; - } - - /** - * @private - */ - protected function setData(ir:ISelectableItemRenderer, data:Object, index:int):void - { - ir.data = data; - ir.index = index; - } - /** * @private * @royaleignorecoercion org.apache.royale.core.IStrandWithModelView @@ -159,42 +79,7 @@ package org.apache.royale.html.beads if (!dp) return; - var view:IListView = (_strand as IStrandWithModelView).view as IListView; - var dataGroup:IItemRendererOwnerView = view.dataGroup; - - dataGroup.removeAllItemRenderers(); - - var presentationModel:IListPresentationModel = _strand.getBeadByType(IListPresentationModel) as IListPresentationModel; - - var n:int = dp.length; - for (var i:int = 0; i < n; i++) - { - var ir:ISelectableItemRenderer = itemRendererFactory.createItemRenderer(dataGroup) as ISelectableItemRenderer; - var dataItemRenderer:DataItemRenderer = ir as DataItemRenderer; - - dataGroup.addItemRenderer(ir, false); - if (presentationModel) { - var style:SimpleCSSStyles = new SimpleCSSStyles(); - style.marginBottom = presentationModel.separatorThickness; - UIBase(ir).style = style; - UIBase(ir).height = presentationModel.rowHeight; - UIBase(ir).percentWidth = 100; - } - - ir.labelField = labelField; - if (dataItemRenderer) - { - dataItemRenderer.dataField = dataField; - } - - setData(ir, dp.getItemAt(i), i); - - var newEvent:ItemRendererEvent = new ItemRendererEvent(ItemRendererEvent.CREATED); - newEvent.itemRenderer = ir; - sendEvent(this,newEvent); - } - - sendStrandEvent(_strand,"itemsCreated"); + super.dataProviderChangeHandler(event); } } } diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DataItemRendererFactoryForCollectionView.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DataItemRendererFactoryForCollectionView.as index 34ec62b..92efa26 100644 --- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DataItemRendererFactoryForCollectionView.as +++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DataItemRendererFactoryForCollectionView.as @@ -44,112 +44,13 @@ package org.apache.royale.html.beads /** * This class creates itemRenderer instances from the data contained within an ICollectionView */ - public class DataItemRendererFactoryForCollectionView extends EventDispatcher implements IBead, IDataProviderItemRendererMapper + public class DataItemRendererFactoryForCollectionView extends DataItemRendererFactoryBase { public function DataItemRendererFactoryForCollectionView(target:Object = null) { super(target); } - protected var _strand:IStrand; - - /** - * @copy org.apache.royale.core.IBead#strand - * - * @langversion 3.0 - * @playerversion Flash 10.2 - * @playerversion AIR 2.6 - * @productversion Royale 0.8 - * @royaleignorecoercion org.apache.royale.events.IEventDispatcher - */ - public function set strand(value:IStrand):void - { - _strand = value; - IEventDispatcher(value).addEventListener("initComplete", initComplete); - } - - /** - * finish setup - * - * @langversion 3.0 - * @playerversion Flash 10.2 - * @playerversion AIR 2.6 - * @productversion Royale 0.8 - * @royaleignorecoercion org.apache.royale.events.IEventDispatcher - * @royaleignorecoercion org.apache.royale.html.beads.IListView - */ - protected function initComplete(event:Event):void - { - IEventDispatcher(_strand).removeEventListener("initComplete", initComplete); - - var listView:IListView = _strand.getBeadByType(IListView) as IListView; - dataGroup = listView.dataGroup; - - var model:IEventDispatcher = _strand.getBeadByType(IBeadModel) as IEventDispatcher; - model.addEventListener("dataProviderChanged", dataProviderChangeHandler); - - dataProviderChangeHandler(null); - } - - protected var _dataProviderModel:IDataProviderModel; - - /** - * The model holding the dataProvider. - * - * @langversion 3.0 - * @playerversion Flash 10.2 - * @playerversion AIR 2.6 - * @productversion Royale 0.9 - * @royaleignorecoercion org.apache.royale.core.IDataProviderModel - */ - public function get dataProviderModel():IDataProviderModel - { - if (_dataProviderModel == null && _strand != null) { - _dataProviderModel = _strand.getBeadByType(IBeadModel) as IDataProviderModel; - } - return _dataProviderModel; - } - - protected var labelField:String; - - private var _itemRendererFactory:IItemRendererClassFactory; - - /** - * The org.apache.royale.core.IItemRendererClassFactory used - * to generate instances of item renderers. - * - * @langversion 3.0 - * @playerversion Flash 10.2 - * @playerversion AIR 2.6 - * @productversion Royale 0.8 - * @royaleignorecoercion org.apache.royale.core.IItemRendererClassFactory - */ - public function get itemRendererFactory():IItemRendererClassFactory - { - if(!_itemRendererFactory) - _itemRendererFactory = loadBeadFromValuesManager(IItemRendererClassFactory, "iItemRendererClassFactory", _strand) as IItemRendererClassFactory; - - return _itemRendererFactory; - } - - /** - * @private - */ - public function set itemRendererFactory(value:IItemRendererClassFactory):void - { - _itemRendererFactory = value; - } - - /** - * The org.apache.royale.core.IItemRendererOwnerView that will - * parent the item renderers. - * - * @langversion 3.0 - * @playerversion Flash 10.2 - * @playerversion AIR 2.6 - * @productversion Royale 0.8 - */ - protected var dataGroup:IItemRendererOwnerView; /** * @private @@ -172,20 +73,7 @@ package org.apache.royale.html.beads dped.addEventListener(CollectionEvent.ITEM_REMOVED, itemRemovedHandler); dped.addEventListener(CollectionEvent.ITEM_UPDATED, itemUpdatedHandler); - dataGroup.removeAllItemRenderers(); - - var presentationModel:IListPresentationModel = _strand.getBeadByType(IListPresentationModel) as IListPresentationModel; - labelField = dataProviderModel.labelField; - - var n:int = dp.length; - for (var i:int = 0; i < n; i++) - { - var ir:ISelectableItemRenderer = itemRendererFactory.createItemRenderer(dataGroup) as ISelectableItemRenderer; - var item:Object = dp.getItemAt(i); - fillRenderer(i, item, ir, presentationModel); - } - - IEventDispatcher(_strand).dispatchEvent(new Event("itemsCreated")); + super.dataProviderChangeHandler(event); } /** @@ -281,37 +169,5 @@ package org.apache.royale.html.beads setData(ir, event.item, event.index); } - /** - * @private - * @royaleignorecoercion org.apache.royale.core.UIBase - */ - protected function fillRenderer(index:int, - item:Object, - itemRenderer:ISelectableItemRenderer, - presentationModel:IListPresentationModel):void - { - dataGroup.addItemRendererAt(itemRenderer, index); - - itemRenderer.labelField = labelField; - - if (presentationModel) { - var style:SimpleCSSStyles = new SimpleCSSStyles(); - style.marginBottom = presentationModel.separatorThickness; - UIBase(itemRenderer).style = style; - UIBase(itemRenderer).height = presentationModel.rowHeight; - UIBase(itemRenderer).percentWidth = 100; - } - - setData(itemRenderer, item, index); - } - - /** - * @private - */ - protected function setData(itemRenderer:ISelectableItemRenderer, data:Object, index:int):void - { - itemRenderer.index = index; - itemRenderer.data = data; - } } } \ No newline at end of file diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DataItemRendererFactoryForColumnData.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DataItemRendererFactoryForColumnData.as index b2eaafc..150f470 100644 --- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DataItemRendererFactoryForColumnData.as +++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DataItemRendererFactoryForColumnData.as @@ -44,7 +44,7 @@ package org.apache.royale.html.beads * @playerversion AIR 2.6 * @productversion Royale 0.0 */ - public class DataItemRendererFactoryForColumnData extends Bead implements IDataProviderItemRendererMapper + public class DataItemRendererFactoryForColumnData extends DataItemRendererFactoryBase { /** * constructor. @@ -60,70 +60,7 @@ package org.apache.royale.html.beads private var selectionModel:IDataGridModel; - /** - * @copy org.apache.royale.core.IBead#strand - * - * @langversion 3.0 - * @playerversion Flash 10.2 - * @playerversion AIR 2.6 - * @productversion Royale 0.0 - */ - override public function set strand(value:IStrand):void - { - _strand = value; - listenOnStrand("initComplete",finishSetup); - } - - /** - * @private - * @royaleignorecoercion org.apache.royale.core.IItemRendererClassFactory - */ - private function finishSetup(event:Event):void - { - selectionModel = _strand.getBeadByType(IDataGridModel) as IDataGridModel; - selectionModel.addEventListener("dataProviderChanged", dataProviderChangeHandler); - - // if the host component inherits from DataContainerBase, the itemRendererClassFactory will - // already have been loaded by DataContainerBase.addedToParent function. - if(!_itemRendererFactory) - _itemRendererFactory = loadBeadFromValuesManager(IItemRendererClassFactory, "iItemRendererClassFactory", _strand) as IItemRendererClassFactory; - - dataProviderChangeHandler(null); - } - - private var _itemRendererFactory:IItemRendererClassFactory; - - /** - * The factory used to create the itemRenderers. - * - * @langversion 3.0 - * @playerversion Flash 10.2 - * @playerversion AIR 2.6 - * @productversion Royale 0.0 - * @royaleignorecoercion org.apache.royale.core.IItemRendererClassFactory - */ - public function get itemRendererFactory():IItemRendererClassFactory - { - if(!_itemRendererFactory) - _itemRendererFactory = loadBeadFromValuesManager(IItemRendererClassFactory, "iItemRendererClassFactory", _strand) as IItemRendererClassFactory; - - return _itemRendererFactory - } - public function set itemRendererFactory(value:IItemRendererClassFactory):void - { - _itemRendererFactory = value; - } - - /** - * The dataGroup that is the pareent for the itemRenderers - * - * @langversion 3.0 - * @playerversion Flash 10.2 - * @playerversion AIR 2.6 - * @productversion Royale 0.0 - */ -// protected var dataGroup:IItemRendererOwnerView; - + /** * @private * @royaleignorecoercion org.apache.royale.html.beads.DataGridColumnView @@ -138,20 +75,7 @@ package org.apache.royale.html.beads var view:DataGridColumnView = _strand.getBeadByType(IBeadView) as DataGridColumnView; if (view == null) return; - var dataGroup:IItemRendererOwnerView = view.dataGroup; - dataGroup.removeAllItemRenderers(); - - var n:int = dp.length; - for (var i:int = 0; i < n; i++) - { - var tf:DataItemRenderer = itemRendererFactory.createItemRenderer(dataGroup) as DataItemRenderer; - dataGroup.addItemRenderer(tf, false); - tf.index = i; - tf.labelField = view.column.dataField; - tf.data = dp[i]; - } - - sendStrandEvent(_strand,"itemsCreated"); + super.dataProviderChangeHandler(event); } } } diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DataItemRendererFactoryForHierarchicalData.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DataItemRendererFactoryForHierarchicalData.as index 9146f39..1554964 100644 --- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DataItemRendererFactoryForHierarchicalData.as +++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DataItemRendererFactoryForHierarchicalData.as @@ -41,8 +41,6 @@ package org.apache.royale.html.beads import org.apache.royale.html.List; import org.apache.royale.html.supportClasses.TreeListData; - [Event(name="itemRendererCreated",type="org.apache.royale.events.ItemRendererEvent")] - /** * The DataItemRendererFactoryForHierarchicalData class reads a * HierarchicalData object and creates an item renderer for every @@ -70,23 +68,6 @@ package org.apache.royale.html.beads super(); } - private var _strand:IStrand; - - /** - * @copy org.apache.royale.core.IBead#strand - * - * @langversion 3.0 - * @playerversion Flash 10.2 - * @playerversion AIR 2.6 - * @productversion Royale 0.0 - */ - override public function set strand(value:IStrand):void - { - _strand = value; - - super.strand = value; - } - /** * Sets the itemRenderer's data with additional tree-related data. * diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/ListItemRendererInitializer.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/ListItemRendererInitializer.as new file mode 100644 index 0000000..5c8afe6 --- /dev/null +++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/ListItemRendererInitializer.as @@ -0,0 +1,108 @@ +//////////////////////////////////////////////////////////////////////////////// +// +// Licensed to the Apache Software Foundation (ASF) under one or more +// contributor license agreements. See the NOTICE file distributed with +// this work for additional information regarding copyright ownership. +// The ASF licenses this file to You under the Apache License, Version 2.0 +// (the "License"); you may not use this file except in compliance with +// the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +//////////////////////////////////////////////////////////////////////////////// +package org.apache.royale.html.beads +{ + import spark.components.IItemRendererOwner; + + 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.IStrand; + import org.apache.royale.core.IUIBase; + import org.apache.royale.core.UIBase; + + /** + * The ListItemRendererInitializer class initializes item renderers + * in list classes. + * + * @langversion 3.0 + * @playerversion Flash 10.2 + * @playerversion AIR 2.6 + * @productversion Royale 0.0 + */ + public class ListItemRendererInitializer extends Bead implements IIndexedItemRendererInitializer + { + /** + * constructor. + * + * @langversion 3.0 + * @playerversion Flash 10.2 + * @playerversion AIR 2.6 + * @productversion Royale 0.0 + */ + public function ListItemRendererInitializer() + { + } + + private var presentationModel:IListPresentationModel; + + /** + * @copy org.apache.royale.core.IBead#strand + * + * @langversion 3.0 + * @playerversion Flash 10.2 + * @playerversion AIR 2.6 + * @productversion Royale 0.0 + * @royaleignorecoercion HTMLInputElement + * @royaleignorecoercion org.apache.royale.core.UIBase; + */ + override public function set strand(value:IStrand):void + { + _strand = value; + var presentationModel:IListPresentationModel = _strand.getBeadByType(IListPresentationModel) as IListPresentationModel; + dataProviderModel = _strand.getBeadByType(IDataProviderModel) as IDataProviderModel; + dataProviderModel.addEventListener("dataProviderChanged", dataProviderChangeHandler); + labelField = dataProviderModel.labelField; + } + + /** + * @private + * @royaleignorecoercion org.apache.royale.core.HTMLElementWrapper + */ + public function initializeItemRenderer(ir:IIndexedItemRenderer, data:Object, ownerView:IItemRendererOwnerView, index:int):void + { + ir.labelField = labelField; + ir.itemRendererOwnerView = ownerView; + + setupVisualsForItemRenderer(ir); + } + + /** + * @private + * @royaleignorecoercion org.apache.royale.core.HTMLElementWrapper + */ + public function initializeIndexedItemRenderer(ir:IIndexedItemRenderer, data:Object, ownerView:IItemRendererOwnerView, index:int):void + { + ir.index = index; + initializeItemRenderer(ir, data, ownerView); + } + + protected function setupVisualsForItemRenderer(ir:IIndexedItemRenderer):void + { + var style:SimpleCSSStyles = new SimpleCSSStyles(); + style.marginBottom = presentationModel.separatorThickness; + UIBase(ir).style = style; + UIBase(ir).height = presentationModel.rowHeight; + UIBase(ir).percentWidth = 100; + } + + } +} diff --git a/frameworks/projects/Charts/src/main/royale/org/apache/royale/charts/beads/DataItemRendererFactoryForSeriesArrayListData.as b/frameworks/projects/Charts/src/main/royale/org/apache/royale/charts/beads/DataItemRendererFactoryForSeriesArrayListData.as index ee7a9bf..89d0bcd 100644 --- a/frameworks/projects/Charts/src/main/royale/org/apache/royale/charts/beads/DataItemRendererFactoryForSeriesArrayListData.as +++ b/frameworks/projects/Charts/src/main/royale/org/apache/royale/charts/beads/DataItemRendererFactoryForSeriesArrayListData.as @@ -41,7 +41,7 @@ package org.apache.royale.charts.beads * @playerversion AIR 2.6 * @productversion Royale 0.0 */ - public class DataItemRendererFactoryForSeriesArrayListData implements IBead, IDataProviderItemRendererMapper + public class DataItemRendererFactoryForSeriesArrayListData extends DataItemRendererFactoryForSeriesData { /** * constructor. @@ -53,47 +53,14 @@ package org.apache.royale.charts.beads */ public function DataItemRendererFactoryForSeriesArrayListData() { + factory = new ChartItemRendererFactory(this); + itemRendererClassFactory = factory; } - private var _strand:IStrand; - - /** - * @copy org.apache.royale.core.IBead#strand - * - * @langversion 3.0 - * @playerversion Flash 10.2 - * @playerversion AIR 2.6 - * @productversion Royale 0.0 - */ - public function set strand(value:IStrand):void - { - _strand = value; - IEventDispatcher(_strand).addEventListener("initComplete", initComplete); - } - public function get strand():IStrand - { - return _strand; - } - - private function initComplete(event:Event):void - { - var selectionModel:ISelectionModel = _strand.getBeadByType(ISelectionModel) as ISelectionModel; - selectionModel.addEventListener("dataProviderChanged", dataProviderChangeHandler); - - dataProviderChangeHandler(null); - } - - /** - * For series data, the 'global' itemRendererFactory is not used. Each series supplies - * its own itemRendererFactory. - */ - public function get itemRendererFactory():IItemRendererClassFactory - { - return null; - } - public function set itemRendererFactory(value:IItemRendererClassFactory):void - { - } + private var factory:IItemRendererClassFactory; + private var chart:IChart; + private var series:Array; + private var dp:ArrayList; /** * @private @@ -105,43 +72,16 @@ package org.apache.royale.charts.beads * @royaleignorecoercion org.apache.royale.charts.core.IChartSeries * @royaleemitcoercion org.apache.royale.collections.ArrayList */ - private function dataProviderChangeHandler(event:Event):void + override protected function dataProviderChangeHandler(event:Event):void { - var selectionModel:ISelectionModel = _strand.getBeadByType(ISelectionModel) as ISelectionModel; - var dp:ArrayList = selectionModel.dataProvider as ArrayList; - if (!dp) - return; - - var listView:IListView = _strand.getBeadByType(IListView) as IListView; - var dataGroup:IChartDataGroup = listView.dataGroup as IChartDataGroup; - dataGroup.removeAllItemRenderers(); - - var chart:IChart = _strand as IChart; - var series:Array = chart.series; - - for (var s:int=0; s < series.length; s++) - { - var n:int = dp.length; - var chartSeries:IChartSeries = series[s] as IChartSeries; - - for (var i:int = 0; i < n; i++) - { - if (chartSeries.itemRenderer) - { - var ir:IChartItemRenderer = chartSeries.itemRenderer.newInstance() as IChartItemRenderer; - dataGroup.addItemRenderer(ir, false); - ir.itemRendererOwnerView = dataGroup; - ir.index = i; - ir.data = dp.getItemAt(i) - ir.series = chartSeries; - } - } - - } - - IEventDispatcher(_strand).dispatchEvent(new Event("itemsCreated")); - //TODO (Harbs) I think layoutNeeded is always dispatched when itemsCreated is handled. - IEventDispatcher(_strand).dispatchEvent(new Event("layoutNeeded")); - } - } + dp = selectionModel.dataProvider as ArrayList; + super.dataProviderChangeHandler(event); + } + + override protected function getItemAt(index:int):Object + { + return dp.getItemAt(index); + } + } } + diff --git a/frameworks/projects/Charts/src/main/royale/org/apache/royale/charts/beads/DataItemRendererFactoryForSeriesData.as b/frameworks/projects/Charts/src/main/royale/org/apache/royale/charts/beads/DataItemRendererFactoryForSeriesData.as index 6eb4bc0..4bae6f0 100644 --- a/frameworks/projects/Charts/src/main/royale/org/apache/royale/charts/beads/DataItemRendererFactoryForSeriesData.as +++ b/frameworks/projects/Charts/src/main/royale/org/apache/royale/charts/beads/DataItemRendererFactoryForSeriesData.as @@ -40,7 +40,7 @@ package org.apache.royale.charts.beads * @playerversion AIR 2.6 * @productversion Royale 0.0 */ - public class DataItemRendererFactoryForSeriesData implements IBead, IDataProviderItemRendererMapper + public class DataItemRendererFactoryForSeriesData extends DataItemRendererFactoryBase { /** * constructor. @@ -52,81 +52,132 @@ package org.apache.royale.charts.beads */ public function DataItemRendererFactoryForSeriesData() { + factory = new ChartItemRendererFactory(this); + itemRendererClassFactory = factory; } - private var _strand:IStrand; - - /** - * @copy org.apache.royale.core.IBead#strand - * - * @langversion 3.0 - * @playerversion Flash 10.2 - * @playerversion AIR 2.6 - * @productversion Royale 0.0 - */ - public function set strand(value:IStrand):void - { - _strand = value; - var selectionModel:ISelectionModel = value.getBeadByType(ISelectionModel) as ISelectionModel; - selectionModel.addEventListener("dataProviderChanged", dataProviderChangeHandler); - - dataProviderChangeHandler(null); - } - public function get strand():IStrand - { - return _strand; - } - - /** - * For series data, the 'global' itemRendererFactory is not used. Each series supplies - * its own itemRendererFactory. - */ - public function get itemRendererFactory():IItemRendererClassFactory - { - return null; - } - public function set itemRendererFactory(value:IItemRendererClassFactory):void - { - } - - /** - * @private - */ - private function dataProviderChangeHandler(event:Event):void - { - var selectionModel:ISelectionModel = _strand.getBeadByType(ISelectionModel) as ISelectionModel; - var dp:Array = selectionModel.dataProvider as Array; - if (!dp) - return; - - var listView:IListView = _strand.getBeadByType(IListView) as IListView; - var dataGroup:IChartDataGroup = listView.dataGroup as IChartDataGroup; - dataGroup.removeAllItemRenderers(); - - var chart:IChart = _strand as IChart; - var series:Array = chart.series; - - for (var s:int=0; s < series.length; s++) - { - var n:int = dp.length; - var chartSeries:IChartSeries = series[s] as IChartSeries; - - for (var i:int = 0; i < n; i++) - { - if (chartSeries.itemRenderer) - { - var ir:IChartItemRenderer = chartSeries.itemRenderer.newInstance() as IChartItemRenderer; - dataGroup.addItemRenderer(ir, false); - ir.itemRendererOwnerView = dataGroup; - ir.index = i; - ir.data = dp[i]; - ir.series = chartSeries; - } - } - - } - - IEventDispatcher(_strand).dispatchEvent(new Event("itemsCreated")); - } - } + private var factory:IItemRendererClassFactory; + private var chart:IChart; + private var series:Array; + private var dp:Array; + + override public function set strand(value:IStrand):void + { + super.strand = value; + value.addBead(new ChartItemRendererInitializer(this)) + } + + public var chartSeries:IChartSeries; + + /** + * @private + * @royaleignorecoercion org.apache.royale.core.ISelectionModel + * @royaleignorecoercion org.apache.royale.html.beads.IListView + * @royaleignorecoercion org.apache.royale.events.IEventDispatcher + * @royaleignorecoercion org.apache.royale.charts.core.IChartDataGroup + * @royaleignorecoercion org.apache.royale.charts.core.IChartItemRenderer + * @royaleignorecoercion org.apache.royale.charts.core.IChartSeries + * @royaleemitcoercion org.apache.royale.collections.Array + */ + override protected function dataProviderChangeHandler(event:Event):void + { + dp = selectionModel.dataProvider as Array; + chart = _strand as IChart; + series = chart.series; + + var listView:IListView = _strand.getBeadByType(IListView) as IListView; + var dataGroup:IChartDataGroup = listView.dataGroup as IChartDataGroup; + + for (var s:int=0; s < series.length; s++) + { + var n:int = dp.length; + chartSeries = series[s] as IChartSeries; + if (chartSeries.itemRenderer) + super.dataProviderChangeHandler(event); + } + } + + override protected function removeAllItemRenderers():void + { + // do nothing. We don't want to remove the renderers + // between each series, we removed them all ourselves + // earlier. + } + + override protected function get dataProviderLength():int + { + return series.length; + } + + override protected function getItemAt(index:int):Object + { + return dp[index]; + } + } } + +import org.apache.royale.charts.beads.DataItemRendererFactoryForSeriesData; +import org.apache.royale.core.IDataProviderModel; +import org.apache.royale.core.UIBase; + +class ChartItemRendererFactory extends ItemRendererClassFactory +{ + private var owner:DataItemRendererFactoryForSeriesData; + + public function ChartItemRendererFactory(ref:DataItemRendererFactoryForSeriesData) + { + owner = ref; + createFunction = createChartSeriesRenderer; + } + + private function createChartSeriesRenderer():IItemRenderer + { + var ir:IChartItemRenderer = owner.chartSeries.itemRenderer.newInstance() as IChartItemRenderer; + return ir; + } +} + +class ChartItemRendererInitializer extends Bead implements IIndexedItemRendererInitializer +{ + private var owner:DataItemRendererFactoryForSeriesData; + + public function ChartItemRendererInitializer(ref:DataItemRendererFactoryForSeriesData) + { + owner = ref; + } + + /** + * @copy org.apache.royale.core.IBead#strand + * + * @langversion 3.0 + * @playerversion Flash 10.2 + * @playerversion AIR 2.6 + * @productversion Royale 0.0 + * @royaleignorecoercion HTMLInputElement + * @royaleignorecoercion org.apache.royale.core.UIBase; + */ + override public function set strand(value:IStrand):void + { + _strand = value; + } + + /** + * @private + * @royaleignorecoercion org.apache.royale.core.HTMLElementWrapper + */ + public function initializeItemRenderer(ir:IIndexedItemRenderer, data:Object, ownerView:IItemRendererOwnerView, index:int):void + { + ir.itemRendererOwnerView = ownerView; + } + + /** + * @private + * @royaleignorecoercion org.apache.royale.core.IChartItemRenderer + */ + public function initializeIndexedItemRenderer(ir:IIndexedItemRenderer, data:Object, ownerView:IItemRendererOwnerView, index:int):void + { + (ir as IChartItemRenderer).series = owner.chartSeries; + ir.index = index; + initializeItemRenderer(ir, data, ownerView); + } +} \ No newline at end of file diff --git a/frameworks/projects/Core/src/main/royale/org/apache/royale/core/IItemRenderer.as b/frameworks/projects/Core/src/main/royale/org/apache/royale/core/IIndexedItemRenderer.as similarity index 56% copy from frameworks/projects/Core/src/main/royale/org/apache/royale/core/IItemRenderer.as copy to frameworks/projects/Core/src/main/royale/org/apache/royale/core/IIndexedItemRenderer.as index 90fadee..ffa19fc 100644 --- a/frameworks/projects/Core/src/main/royale/org/apache/royale/core/IItemRenderer.as +++ b/frameworks/projects/Core/src/main/royale/org/apache/royale/core/IIndexedItemRenderer.as @@ -21,49 +21,25 @@ package org.apache.royale.core import org.apache.royale.events.IEventDispatcher; /** - * The IItemRenderer interface is the basic interface for item renderers. - * More complex item renderers may implements extensions of this interface. + * The IIndexedItemRenderer interface is the basic interface for item renderers + * that have an index property that indicates its index in the list of renderers. * * @langversion 3.0 * @playerversion Flash 10.2 * @playerversion AIR 2.6 * @productversion Royale 0.0 */ - public interface IItemRenderer extends IEventDispatcher, IChild + public interface IIndexedItemRenderer extends IItemRenderer { /** - * The data item to be displayed by the item renderer. + * The index of the item renderer. * * @langversion 3.0 * @playerversion Flash 10.2 * @playerversion AIR 2.6 * @productversion Royale 0.0 */ - function get data():Object; - function set data(value:Object):void; - - /** - * Additional data about the list structure that might be useful - * to itemRenderer implementations. - * - * @langversion 3.0 - * @playerversion Flash 10.2 - * @playerversion AIR 2.6 - * @productversion Royale 0.0 - */ - function get listData():Object; - function set listData(value:Object):void; - - /** - * The parent component of the itemRenderer instance. This is the container that houses - * all of the itemRenderers. - * - * @langversion 3.0 - * @playerversion Flash 10.2 - * @playerversion AIR 2.6 - * @productversion Royale 0.0 - */ - function get itemRendererOwnerView():Object; - function set itemRendererOwnerView(value:Object):void; + function get index():int; + function set index(value:int):void; } } diff --git a/frameworks/projects/Core/src/main/royale/org/apache/royale/core/IItemRenderer.as b/frameworks/projects/Core/src/main/royale/org/apache/royale/core/IIndexedItemRendererInitializer.as similarity index 54% copy from frameworks/projects/Core/src/main/royale/org/apache/royale/core/IItemRenderer.as copy to frameworks/projects/Core/src/main/royale/org/apache/royale/core/IIndexedItemRendererInitializer.as index 90fadee..0de54f3 100644 --- a/frameworks/projects/Core/src/main/royale/org/apache/royale/core/IItemRenderer.as +++ b/frameworks/projects/Core/src/main/royale/org/apache/royale/core/IIndexedItemRendererInitializer.as @@ -18,52 +18,36 @@ //////////////////////////////////////////////////////////////////////////////// package org.apache.royale.core { - import org.apache.royale.events.IEventDispatcher; + import org.apache.royale.core.IItemRendererOwnerView; /** - * The IItemRenderer interface is the basic interface for item renderers. - * More complex item renderers may implements extensions of this interface. - * + * The IItemRendererInitializer interface is the basic interface for beads + * that initialize properties on an IItemRenderer. Simple implementations + * only assign the data and itemRendererOwnerView property, but others will + * assign other properties if needed. + * * @langversion 3.0 * @playerversion Flash 10.2 * @playerversion AIR 2.6 * @productversion Royale 0.0 */ - public interface IItemRenderer extends IEventDispatcher, IChild + public interface IIndexedItemRendererInitializer extends IItemRendererInitializer { /** - * The data item to be displayed by the item renderer. + * This method is called to generate another instance of an item renderer. * - * @langversion 3.0 - * @playerversion Flash 10.2 - * @playerversion AIR 2.6 - * @productversion Royale 0.0 - */ - function get data():Object; - function set data(value:Object):void; - - /** - * Additional data about the list structure that might be useful - * to itemRenderer implementations. + * @param renderer The renderer + * @param data The data for the renderer + * @param ownerView the view of the component that owns the renderers + * @param index the index in the list of renderers + * + * @see org.apache.royale.core.IItemRenderer * * @langversion 3.0 * @playerversion Flash 10.2 * @playerversion AIR 2.6 * @productversion Royale 0.0 - */ - function get listData():Object; - function set listData(value:Object):void; - - /** - * The parent component of the itemRenderer instance. This is the container that houses - * all of the itemRenderers. - * - * @langversion 3.0 - * @playerversion Flash 10.2 - * @playerversion AIR 2.6 - * @productversion Royale 0.0 - */ - function get itemRendererOwnerView():Object; - function set itemRendererOwnerView(value:Object):void; + */ + function initializeIndexedItemRenderer(renderer:IIndexedItemRenderer, data:Object, ownerView:IItemRendererOwnerView, index:int):void; } } diff --git a/frameworks/projects/Core/src/main/royale/org/apache/royale/core/IItemRenderer.as b/frameworks/projects/Core/src/main/royale/org/apache/royale/core/IItemRenderer.as index 90fadee..c793b6c 100644 --- a/frameworks/projects/Core/src/main/royale/org/apache/royale/core/IItemRenderer.as +++ b/frameworks/projects/Core/src/main/royale/org/apache/royale/core/IItemRenderer.as @@ -43,18 +43,6 @@ package org.apache.royale.core function set data(value:Object):void; /** - * Additional data about the list structure that might be useful - * to itemRenderer implementations. - * - * @langversion 3.0 - * @playerversion Flash 10.2 - * @playerversion AIR 2.6 - * @productversion Royale 0.0 - */ - function get listData():Object; - function set listData(value:Object):void; - - /** * The parent component of the itemRenderer instance. This is the container that houses * all of the itemRenderers. * diff --git a/frameworks/projects/Core/src/main/royale/org/apache/royale/core/IItemRendererClassFactory.as b/frameworks/projects/Core/src/main/royale/org/apache/royale/core/IItemRendererClassFactory.as index 84918e8..7a59697 100644 --- a/frameworks/projects/Core/src/main/royale/org/apache/royale/core/IItemRendererClassFactory.as +++ b/frameworks/projects/Core/src/main/royale/org/apache/royale/core/IItemRendererClassFactory.as @@ -39,15 +39,11 @@ package org.apache.royale.core */ public interface IItemRendererClassFactory extends IBead { - // TODO: add additional parameters like the data item and index /** - * This method is called to generate another instance of an item renderer - * and attach it to the given parent. + * This method is called to generate another instance of an item renderer. * - * @param parent The parent of the item renderer. * @return The item renderer. * - * @see org.apache.royale.core.IItemRendererOwnerView * @see org.apache.royale.core.IItemRenderer * * @langversion 3.0 @@ -55,6 +51,6 @@ package org.apache.royale.core * @playerversion AIR 2.6 * @productversion Royale 0.0 */ - function createItemRenderer(parent:IItemRendererOwnerView):IItemRenderer; + function createItemRenderer():IItemRenderer; } } diff --git a/frameworks/projects/Core/src/main/royale/org/apache/royale/core/IItemRenderer.as b/frameworks/projects/Core/src/main/royale/org/apache/royale/core/IItemRendererInitializer.as similarity index 54% copy from frameworks/projects/Core/src/main/royale/org/apache/royale/core/IItemRenderer.as copy to frameworks/projects/Core/src/main/royale/org/apache/royale/core/IItemRendererInitializer.as index 90fadee..0c056d9 100644 --- a/frameworks/projects/Core/src/main/royale/org/apache/royale/core/IItemRenderer.as +++ b/frameworks/projects/Core/src/main/royale/org/apache/royale/core/IItemRendererInitializer.as @@ -18,52 +18,39 @@ //////////////////////////////////////////////////////////////////////////////// package org.apache.royale.core { - import org.apache.royale.events.IEventDispatcher; + import org.apache.royale.core.IItemRendererOwnerView; /** - * The IItemRenderer interface is the basic interface for item renderers. - * More complex item renderers may implements extensions of this interface. - * + * The IItemRendererInitializer interface is the basic interface for beads + * that initialize properties on an IItemRenderer. Simple implementations + * only assign the itemRendererOwnerView property, but others will + * assign other properties if needed. + * + * The implementations do not assign the data property. The Factory/Mapper + * will assign data as the last property, after parenting, in order to + * trigger any data-bindings once. + * * @langversion 3.0 * @playerversion Flash 10.2 * @playerversion AIR 2.6 * @productversion Royale 0.0 */ - public interface IItemRenderer extends IEventDispatcher, IChild + public interface IItemRendererInitializer extends IBead { /** - * The data item to be displayed by the item renderer. + * This method is called to generate another instance of an item renderer. * - * @langversion 3.0 - * @playerversion Flash 10.2 - * @playerversion AIR 2.6 - * @productversion Royale 0.0 - */ - function get data():Object; - function set data(value:Object):void; - - /** - * Additional data about the list structure that might be useful - * to itemRenderer implementations. + * @param renderer The renderer + * @param data The data for the renderer + * @param ownerView the view of the component that owns the renderers + * + * @see org.apache.royale.core.IItemRenderer * * @langversion 3.0 * @playerversion Flash 10.2 * @playerversion AIR 2.6 * @productversion Royale 0.0 - */ - function get listData():Object; - function set listData(value:Object):void; - - /** - * The parent component of the itemRenderer instance. This is the container that houses - * all of the itemRenderers. - * - * @langversion 3.0 - * @playerversion Flash 10.2 - * @playerversion AIR 2.6 - * @productversion Royale 0.0 - */ - function get itemRendererOwnerView():Object; - function set itemRendererOwnerView(value:Object):void; + */ + function initializeItemRenderer(renderer:IItemRenderer, data:Object, ownerView:IItemRendererOwnerView):void; } } diff --git a/frameworks/projects/Core/src/main/royale/org/apache/royale/core/ItemRendererClassFactory.as b/frameworks/projects/Core/src/main/royale/org/apache/royale/core/ItemRendererClassFactory.as index ac6133b..edfbd85 100644 --- a/frameworks/projects/Core/src/main/royale/org/apache/royale/core/ItemRendererClassFactory.as +++ b/frameworks/projects/Core/src/main/royale/org/apache/royale/core/ItemRendererClassFactory.as @@ -122,9 +122,9 @@ package org.apache.royale.core * @playerversion AIR 2.6 * @productversion Royale 0.0 */ - public function createItemRenderer(parent:IItemRendererOwnerView):IItemRenderer + public function createItemRenderer():IItemRenderer { - return createFunction(parent); + return createFunction(); } /** @@ -153,9 +153,9 @@ package org.apache.royale.core * @productversion Royale 0.0 * @royaleignorecoercion org.apache.royale.core.IParent */ - protected function createFromMXMLContent(parent:IItemRendererOwnerView):IItemRenderer + protected function createFromMXMLContent():IItemRenderer { - return MXMLDataInterpreter.generateMXMLArray(document, parent as IParent, MXMLDescriptor)[0]; + return MXMLDataInterpreter.generateMXMLArray(document, null, MXMLDescriptor)[0]; } /** @@ -179,10 +179,9 @@ package org.apache.royale.core * @playerversion AIR 2.6 * @productversion Royale 0.0 */ - public function createFromClass(parent:IItemRendererOwnerView):IItemRenderer + public function createFromClass():IItemRenderer { var renderer:IItemRenderer = itemRendererFactory.newInstance(); - renderer.itemRendererOwnerView = parent; return renderer; } diff --git a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/advancedDataGridClasses/DataItemRendererFactoryForICollectionViewAdvancedDataGridData.as b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/advancedDataGridClasses/DataItemRendererFactoryForICollectionViewAdvancedDataGridData.as index 08f99b8..fbbdf5f 100644 --- a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/advancedDataGridClasses/DataItemRendererFactoryForICollectionViewAdvancedDataGridData.as +++ b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/advancedDataGridClasses/DataItemRendererFactoryForICollectionViewAdvancedDataGridData.as @@ -53,8 +53,6 @@ package mx.controls.advancedDataGridClasses import org.apache.royale.html.supportClasses.DataItemRenderer; import org.apache.royale.html.supportClasses.TreeListData; - [Event(name="itemRendererCreated",type="org.apache.royale.events.ItemRendererEvent")] - /** * The DataItemRendererFactoryForHierarchicalData class reads a * HierarchicalData object and creates an item renderer for every @@ -82,23 +80,6 @@ package mx.controls.advancedDataGridClasses super(); } - private var _strand:IStrand; - - /** - * @copy org.apache.royale.core.IBead#strand - * - * @langversion 3.0 - * @playerversion Flash 10.2 - * @playerversion AIR 2.6 - * @productversion Royale 0.0 - */ - override public function set strand(value:IStrand):void - { - _strand = value; - - super.strand = value; - } - /** * @private * @royaleignorecoercion mx.collections.ICollectionView diff --git a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/listClasses/DataItemRendererFactoryForICollectionViewData.as b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/listClasses/DataItemRendererFactoryForICollectionViewData.as index e08ae4e..7e4cf4b 100644 --- a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/listClasses/DataItemRendererFactoryForICollectionViewData.as +++ b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/listClasses/DataItemRendererFactoryForICollectionViewData.as @@ -19,33 +19,31 @@ package mx.controls.listClasses { import mx.collections.ArrayCollection; - import mx.collections.ICollectionView; - import mx.collections.IViewCursor; + import mx.collections.ICollectionView; + import mx.collections.IViewCursor; + + import org.apache.royale.core.IBead; + import org.apache.royale.core.IBeadModel; + import org.apache.royale.core.IDataProviderItemRendererMapper; + import org.apache.royale.core.IDataProviderModel; + import org.apache.royale.core.IItemRendererClassFactory; + import org.apache.royale.core.IItemRendererOwnerView; + import org.apache.royale.core.IListPresentationModel; + import org.apache.royale.core.ISelectableItemRenderer; + 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 org.apache.royale.core.ValuesManager; + import org.apache.royale.events.CollectionEvent; + import org.apache.royale.events.Event; + import org.apache.royale.events.EventDispatcher; + import org.apache.royale.events.IEventDispatcher; + 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; - import org.apache.royale.core.IBead; - import org.apache.royale.core.IBeadModel; - import org.apache.royale.core.IDataProviderItemRendererMapper; - import org.apache.royale.core.IDataProviderModel; - import org.apache.royale.core.IItemRendererClassFactory; - import org.apache.royale.core.IItemRendererOwnerView; - import org.apache.royale.core.IListPresentationModel; - import org.apache.royale.core.ISelectableItemRenderer; - 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 org.apache.royale.core.ValuesManager; - import org.apache.royale.events.CollectionEvent; - import org.apache.royale.events.Event; - import org.apache.royale.events.EventDispatcher; - import org.apache.royale.events.IEventDispatcher; - 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")] - /** * The DataItemRendererFactoryForHierarchicalData class reads a * HierarchicalData object and creates an item renderer for every @@ -73,6 +71,8 @@ package mx.controls.listClasses super(); } + private var dp:ICollectionView; + /** * @private * @royaleignorecoercion org.apache.royale.core.IListPresentationModel @@ -83,7 +83,7 @@ package mx.controls.listClasses { if (!dataProviderModel) return; - var dp:ICollectionView = dataProviderModel.dataProvider as ICollectionView; + dp = dataProviderModel.dataProvider as ICollectionView; if (!dp) { // temporary until descriptor is used in MenuBarModel @@ -102,13 +102,14 @@ package mx.controls.listClasses dped.addEventListener(CollectionEvent.ITEM_REMOVED, itemRemovedHandler); dped.addEventListener(CollectionEvent.ITEM_UPDATED, itemUpdatedHandler); + super.dataProviderChangeHandler(event); + dataGroup.removeAllItemRenderers(); var presentationModel:IListPresentationModel = _strand.getBeadByType(IListPresentationModel) as IListPresentationModel; labelField = dataProviderModel.labelField; var n:int = dp.length; - var cursor:IViewCursor = dp.createCursor(); for (var i:int = 0; i < n; i++) { var ir:ISelectableItemRenderer = itemRendererFactory.createItemRenderer(dataGroup) as ISelectableItemRenderer; @@ -120,5 +121,22 @@ package mx.controls.listClasses IEventDispatcher(_strand).dispatchEvent(new Event("itemsCreated")); } + private var cursor:IViewCursor; + + + // assumes will be called in a loop, not random access + override protected function dataProviderLength():int + { + cursor = dp.createCursor(); + return dp.length; + } + + // assumes will be called in a loop, not random access + override protected function getItemAt(index:int):Object + { + var obj:Object = cursor.current; + cursor.moveNext(); + return obj; + } } } diff --git a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/listClasses/DataItemRendererFactoryForIListData.as b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/listClasses/DataItemRendererFactoryForIListData.as index f1d3286..b6409cc 100644 --- a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/listClasses/DataItemRendererFactoryForIListData.as +++ b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/listClasses/DataItemRendererFactoryForIListData.as @@ -19,32 +19,30 @@ package mx.controls.listClasses { import mx.collections.ArrayList; - import mx.collections.IList; + import mx.collections.IList; + + import org.apache.royale.core.IBead; + import org.apache.royale.core.IBeadModel; + import org.apache.royale.core.IDataProviderItemRendererMapper; + import org.apache.royale.core.IDataProviderModel; + import org.apache.royale.core.IItemRendererClassFactory; + import org.apache.royale.core.IItemRendererOwnerView; + import org.apache.royale.core.IListPresentationModel; + import org.apache.royale.core.ISelectableItemRenderer; + 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 org.apache.royale.core.ValuesManager; + import org.apache.royale.events.CollectionEvent; + import org.apache.royale.events.Event; + import org.apache.royale.events.EventDispatcher; + import org.apache.royale.events.IEventDispatcher; + 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; - import org.apache.royale.core.IBead; - import org.apache.royale.core.IBeadModel; - import org.apache.royale.core.IDataProviderItemRendererMapper; - import org.apache.royale.core.IDataProviderModel; - import org.apache.royale.core.IItemRendererClassFactory; - import org.apache.royale.core.IItemRendererOwnerView; - import org.apache.royale.core.IListPresentationModel; - import org.apache.royale.core.ISelectableItemRenderer; - 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 org.apache.royale.core.ValuesManager; - import org.apache.royale.events.CollectionEvent; - import org.apache.royale.events.Event; - import org.apache.royale.events.EventDispatcher; - import org.apache.royale.events.IEventDispatcher; - 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")] - /** * The DataItemRendererFactoryForHierarchicalData class reads a * HierarchicalData object and creates an item renderer for every @@ -101,20 +99,18 @@ package mx.controls.listClasses dped.addEventListener(CollectionEvent.ITEM_REMOVED, itemRemovedHandler); dped.addEventListener(CollectionEvent.ITEM_UPDATED, itemUpdatedHandler); - dataGroup.removeAllItemRenderers(); - - var presentationModel:IListPresentationModel = _strand.getBeadByType(IListPresentationModel) as IListPresentationModel; - labelField = dataProviderModel.labelField; - - var n:int = dp.length; - for (var i:int = 0; i < n; i++) - { - var ir:ISelectableItemRenderer = itemRendererFactory.createItemRenderer(dataGroup) as ISelectableItemRenderer; - var item:Object = dp.getItemAt(i); - fillRenderer(i, item, ir, presentationModel); - } + super.dataProviderChangeHandler(event); - IEventDispatcher(_strand).dispatchEvent(new Event("itemsCreated")); + } + + override protected function dataProviderLength():int + { + return dp.length; + } + + override protected function getItemAt(index:int):Object + { + return dp.getItemAt(index); } } 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 c6e172d..2d035e2 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 @@ -75,23 +75,6 @@ package mx.controls.treeClasses super(); } - private var _strand:IStrand; - - /** - * @copy org.apache.royale.core.IBead#strand - * - * @langversion 3.0 - * @playerversion Flash 10.2 - * @playerversion AIR 2.6 - * @productversion Royale 0.0 - */ - override public function set strand(value:IStrand):void - { - _strand = value; - - super.strand = value; - } - /** * @private * @royaleignorecoercion mx.collections.ICollectionView @@ -113,22 +96,7 @@ package mx.controls.treeClasses dped.addEventListener(CollectionEvent.ITEM_REMOVED, itemRemovedHandler); dped.addEventListener(CollectionEvent.ITEM_UPDATED, itemUpdatedHandler); - dataGroup.removeAllItemRenderers(); - - var presentationModel:IListPresentationModel = _strand.getBeadByType(IListPresentationModel) as IListPresentationModel; - labelField = dataProviderModel.labelField; - - var n:int = dp.length; - var cursor:IViewCursor = dp.createCursor(); - for (var i:int = 0; i < n; i++) - { - var ir:ISelectableItemRenderer = itemRendererFactory.createItemRenderer(dataGroup) as ISelectableItemRenderer; - var item:Object = cursor.current; - cursor.moveNext(); - fillRenderer(i, item, ir, presentationModel); - } - - IEventDispatcher(_strand).dispatchEvent(new Event("itemsCreated")); + super.dataProviderChangeHandler(event); }
