This is an automated email from the ASF dual-hosted git repository. aharui pushed a commit to branch develop in repository https://gitbox.apache.org/repos/asf/royale-asjs.git
commit ea9279bb16da91dec0c16019044af2b7ec77387a Author: Alex Harui <[email protected]> AuthorDate: Tue Feb 18 23:39:27 2020 -0800 mxtests pass --- .../royale/org/apache/royale/html/DataContainer.as | 9 +- .../MXRoyale/src/main/resources/defaults.css | 2 + .../MXRoyale/src/main/royale/MXRoyaleClasses.as | 1 + .../main/royale/mx/collections/ICollectionView.as | 1 - .../MXRoyale/src/main/royale/mx/controls/Button.as | 6 +- .../controls/beads/ListItemRendererInitializer.as | 2 +- .../controls/beads/models/ListPresentationModel.as | 47 +++++++++ ...ataItemRendererFactoryForICollectionViewData.as | 108 ++++++++++++++++++++- .../royale/mx/controls/listClasses/ListBase.as | 1 + 9 files changed, 168 insertions(+), 9 deletions(-) diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/DataContainer.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/DataContainer.as index d3dae3d..be71a3a 100644 --- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/DataContainer.as +++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/DataContainer.as @@ -35,6 +35,7 @@ package org.apache.royale.html import org.apache.royale.core.IDataProviderModel; import org.apache.royale.core.UIBase; import org.apache.royale.core.ValuesManager; + import org.apache.royale.utils.loadBeadFromValuesManager; COMPILE::JS { import org.apache.royale.core.WrappedHTMLElement; @@ -146,8 +147,12 @@ package org.apache.royale.html { var presModel:IListPresentationModel = getBeadByType(IListPresentationModel) as IListPresentationModel; if (presModel == null) { - presModel = new ListPresentationModel(); - addBead(presModel); + presModel = loadBeadFromValuesManager(IListPresentationModel, "iListPresentationModel", this) as IListPresentationModel; + if (presModel == null) + { + presModel = new ListPresentationModel(); + addBead(presModel); + } } return presModel; } diff --git a/frameworks/projects/MXRoyale/src/main/resources/defaults.css b/frameworks/projects/MXRoyale/src/main/resources/defaults.css index b0f4e39..3f18c00 100644 --- a/frameworks/projects/MXRoyale/src/main/resources/defaults.css +++ b/frameworks/projects/MXRoyale/src/main/resources/defaults.css @@ -59,12 +59,14 @@ Basic|CascadingMenu IDataProviderItemRendererMapper: ClassReference("mx.controls.listClasses.DataItemRendererFactoryForICollectionViewData"); IBeadController: ClassReference("mx.controls.beads.controllers.CascadingMenuSelectionMouseController"); IMenu: ClassReference("mx.controls.menuClasses.CascadingMenuWithOnScreenCheck"); + IListPresentationModel: ClassReference("mx.controls.beads.models.ListPresentationModel"); } Basic|ComboBoxList { IDataProviderItemRendererMapper: ClassReference("mx.controls.listClasses.DataItemRendererFactoryForICollectionViewData"); IBeadModel: ClassReference("mx.controls.beads.models.SingleSelectionICollectionViewModel"); + IListPresentationModel: ClassReference("mx.controls.beads.models.ListPresentationModel"); } Basic|DataGridColumnList { diff --git a/frameworks/projects/MXRoyale/src/main/royale/MXRoyaleClasses.as b/frameworks/projects/MXRoyale/src/main/royale/MXRoyaleClasses.as index cd54e79..b2de5ae 100644 --- a/frameworks/projects/MXRoyale/src/main/royale/MXRoyaleClasses.as +++ b/frameworks/projects/MXRoyale/src/main/royale/MXRoyaleClasses.as @@ -257,6 +257,7 @@ internal class MXRoyaleClasses import mx.controls.beads.models.DataGridColumnICollectionViewModel; DataGridColumnICollectionViewModel; import mx.controls.beads.models.DataGridICollectionViewModel; DataGridICollectionViewModel; import mx.controls.beads.models.DataGridPresentationModel; DataGridPresentationModel; + import mx.controls.beads.models.ListPresentationModel; ListPresentationModel; import mx.controls.beads.models.SingleSelectionIListModel; SingleSelectionIListModel; import mx.controls.buttonBarClasses.TextButtonDataGridColumnItemRenderer; TextButtonDataGridColumnItemRenderer; diff --git a/frameworks/projects/MXRoyale/src/main/royale/mx/collections/ICollectionView.as b/frameworks/projects/MXRoyale/src/main/royale/mx/collections/ICollectionView.as index d9ea7e0..33e4b94 100644 --- a/frameworks/projects/MXRoyale/src/main/royale/mx/collections/ICollectionView.as +++ b/frameworks/projects/MXRoyale/src/main/royale/mx/collections/ICollectionView.as @@ -21,7 +21,6 @@ package mx.collections { import mx.events.CollectionEvent; -import org.apache.royale.collections.ICollectionView; import org.apache.royale.events.IEventDispatcher; /** 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 311b077..fc3ea48 100644 --- a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/Button.as +++ b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/Button.as @@ -479,7 +479,7 @@ public class Button extends UIComponent implements IDataRenderer, IListItemRende * @private * Storage for the listData property. */ - private var _listData:BaseListData; + private var _listData:Object; [Bindable("dataChange")] [Inspectable(environment="none")] @@ -504,7 +504,7 @@ public class Button extends UIComponent implements IDataRenderer, IListItemRende * @playerversion AIR 1.1 * @productversion Flex 3 */ - public function get listData():BaseListData + public function get listData():Object { return _listData; } @@ -512,7 +512,7 @@ public class Button extends UIComponent implements IDataRenderer, IListItemRende /** * @private */ - public function set listData(value:BaseListData):void + public function set listData(value:Object):void { _listData = value; } 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 439ce92..642e72c 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 @@ -75,7 +75,7 @@ package mx.controls.beads if (!dataProviderModel) return; - super.initializeItemRenderer(ir, data, index); + super.initializeIndexedItemRenderer(ir, data, index); if (ir is IOwnerViewItemRenderer) (ir as IOwnerViewItemRenderer).itemRendererOwnerView = ownerView; diff --git a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/beads/models/ListPresentationModel.as b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/beads/models/ListPresentationModel.as new file mode 100644 index 0000000..6dfaa74 --- /dev/null +++ b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/beads/models/ListPresentationModel.as @@ -0,0 +1,47 @@ +//////////////////////////////////////////////////////////////////////////////// +// +// 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 mx.controls.beads.models +{ + import org.apache.royale.html.beads.models.ListPresentationModel; + + /** + * DataGrid Presentation Model + * + * @langversion 3.0 + * @playerversion Flash 10.2 + * @playerversion AIR 2.6 + * @productversion Royale 0.0 + */ + public class ListPresentationModel extends org.apache.royale.html.beads.models.ListPresentationModel + { + /** + * Constructor. + * + * @langversion 3.0 + * @playerversion Flash 10.2 + * @playerversion AIR 2.6 + * @productversion Royale 0.0 + */ + public function ListPresentationModel() + { + super(); + rowHeight = 22; + } + } +} 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 ee6d141..7ecf118 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 @@ -30,7 +30,9 @@ package mx.controls.listClasses import org.apache.royale.core.IItemRendererOwnerView; import org.apache.royale.core.IListPresentationModel; import org.apache.royale.core.IIndexedItemRenderer; + import org.apache.royale.core.IIndexedItemRendererInitializer; import org.apache.royale.core.IStrand; + import org.apache.royale.core.IStrandWithModelView; import org.apache.royale.core.IUIBase; import org.apache.royale.core.SimpleCSSStyles; import org.apache.royale.core.UIBase; @@ -41,7 +43,8 @@ package mx.controls.listClasses 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.beads.IListView; + import org.apache.royale.html.beads.DataItemRendererFactoryBase; import org.apache.royale.html.supportClasses.TreeListData; /** @@ -56,7 +59,7 @@ package mx.controls.listClasses * @playerversion AIR 2.6 * @productversion Royale 0.0 */ - public class DataItemRendererFactoryForICollectionViewData extends DataItemRendererFactoryForCollectionView + public class DataItemRendererFactoryForICollectionViewData extends DataItemRendererFactoryBase { /** * Constructor. @@ -122,5 +125,106 @@ package mx.controls.listClasses cursor.moveNext(); return obj; } + + /** + * @private + * @royaleignorecoercion org.apache.royale.collections.ICollectionView + * @royaleignorecoercion org.apache.royale.core.IListPresentationModel + * @royaleignorecoercion org.apache.royale.core.IIndexedItemRenderer + * @royaleignorecoercion org.apache.royale.events.IEventDispatcher + */ + protected function itemAddedHandler(event:CollectionEvent):void + { + if (!dataProviderModel) + return; + dp = dataProviderModel.dataProvider as ICollectionView; + if (!dp) + return; + + var view:IListView = (_strand as IStrandWithModelView).view as IListView; + var dataGroup:IItemRendererOwnerView = view.dataGroup; + + var ir:IIndexedItemRenderer = itemRendererFactory.createItemRenderer() as IIndexedItemRenderer; + dataGroup.addItemRendererAt(ir, event.index); + + var data:Object = event.item; + (itemRendererInitializer as IIndexedItemRendererInitializer).initializeIndexedItemRenderer(ir, data, event.index); + ir.data = data; + + // update the index values in the itemRenderers to correspond to their shifted positions. + var n:int = dataGroup.numItemRenderers; + for (var i:int = event.index; i < n; i++) + { + ir = dataGroup.getItemRendererAt(i) as IIndexedItemRenderer; + ir.index = i; + + // could let the IR know its index has been changed (eg, it might change its + // UI based on the index). Instead (PAYG), allow another bead to detect + // this event and do this as not every IR will need to be updated. + //var ubase:UIItemRendererBase = ir as UIItemRendererBase; + //if (ubase) ubase.updateRenderer() + } + + (_strand as IEventDispatcher).dispatchEvent(new Event("itemsCreated")); + (_strand as IEventDispatcher).dispatchEvent(new Event("layoutNeeded")); + } + + protected function itemRemovedHandler(event:CollectionEvent):void + { + if (!dataProviderModel) + return; + dp = dataProviderModel.dataProvider as ICollectionView; + if (!dp) + return; + + var view:IListView = (_strand as IStrandWithModelView).view as IListView; + var dataGroup:IItemRendererOwnerView = view.dataGroup; + + var ir:IIndexedItemRenderer = dataGroup.getItemRendererAt(event.index) as IIndexedItemRenderer; + if (!ir) return; // may have already been cleaned up, possibly when a tree node closes + dataGroup.removeItemRenderer(ir); + + // adjust the itemRenderers' index to adjust for the shift + var n:int = dataGroup.numItemRenderers; + for (var i:int = event.index; i < n; i++) + { + ir = dataGroup.getItemRendererAt(i) as IIndexedItemRenderer; + ir.index = i; + + // could let the IR know its index has been changed (eg, it might change its + // UI based on the index). Instead (PAYG), allow another bead to detect + // this event and do this as not every IR will need to be updated. + //var ubase:UIItemRendererBase = ir as UIItemRendererBase; + //if (ubase) ubase.updateRenderer() + } + + (_strand as IEventDispatcher).dispatchEvent(new Event("layoutNeeded")); + } + + /** + * @private + * @royaleignorecoercion org.apache.royale.collections.ICollectionView + * @royaleignorecoercion org.apache.royale.core.IIndexedItemRenderer + */ + protected function itemUpdatedHandler(event:CollectionEvent):void + { + if (!dataProviderModel) + return; + dp = dataProviderModel.dataProvider as ICollectionView; + if (!dp) + return; + + var view:IListView = (_strand as IStrandWithModelView).view as IListView; + var dataGroup:IItemRendererOwnerView = view.dataGroup; + + // update the given renderer with (possibly) new information so it can change its + // appearence or whatever. + var ir:IIndexedItemRenderer = dataGroup.getItemRendererAt(event.index) as IIndexedItemRenderer; + + var data:Object = event.item; + (itemRendererInitializer as IIndexedItemRendererInitializer).initializeIndexedItemRenderer(ir, data, event.index); + ir.data = data; + } + } } diff --git a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/listClasses/ListBase.as b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/listClasses/ListBase.as index 13fa268..ef9b9b0 100644 --- a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/listClasses/ListBase.as +++ b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/listClasses/ListBase.as @@ -733,6 +733,7 @@ use namespace mx_internal; public function ListBase() { super(); + rowHeight = 22; //match Flex? } private var _DCinitialized:Boolean = true;
