FLEX-35268 - Fix Part 1: Adding element is working, but there is an issue when after recreation of alle item renderers tabs stopped working - it is probably related to FLEX-35269
- Add to MDL bead TabsItemRendererFactoryForArrayListData - responsible for creating item renderers for TabBar based on ArrayList - Create separate TabBar models for Array and ArrayList Project: http://git-wip-us.apache.org/repos/asf/flex-asjs/repo Commit: http://git-wip-us.apache.org/repos/asf/flex-asjs/commit/a352d431 Tree: http://git-wip-us.apache.org/repos/asf/flex-asjs/tree/a352d431 Diff: http://git-wip-us.apache.org/repos/asf/flex-asjs/diff/a352d431 Branch: refs/heads/feature/spriteflexjs-refactor Commit: a352d4314f0b01fe59353f6fb733cc019cf15295 Parents: 9bce67e Author: piotrz <[email protected]> Authored: Sat Feb 18 21:45:03 2017 +0100 Committer: piotrz <[email protected]> Committed: Sat Feb 18 21:45:03 2017 +0100 ---------------------------------------------------------------------- .../src/main/flex/MDLClasses.as | 4 +- .../TabsItemRendererFactoryForArrayListData.as | 181 +++++++++++++++++++ .../flex/mdl/beads/models/TabArrayListModel.as | 59 ++++++ .../flex/mdl/beads/models/TabArrayModel.as | 59 ++++++ .../apache/flex/mdl/beads/models/TabModel.as | 59 ------ 5 files changed, 302 insertions(+), 60 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/a352d431/frameworks/projects/MaterialDesignLite/src/main/flex/MDLClasses.as ---------------------------------------------------------------------- diff --git a/frameworks/projects/MaterialDesignLite/src/main/flex/MDLClasses.as b/frameworks/projects/MaterialDesignLite/src/main/flex/MDLClasses.as index 090f9d5..910e223 100644 --- a/frameworks/projects/MaterialDesignLite/src/main/flex/MDLClasses.as +++ b/frameworks/projects/MaterialDesignLite/src/main/flex/MDLClasses.as @@ -28,7 +28,9 @@ package internal class MDLClasses { import org.apache.flex.mdl.beads.TabsItemRendererFactoryForArrayData; TabsItemRendererFactoryForArrayData; - import org.apache.flex.mdl.beads.models.TabModel; TabModel; + import org.apache.flex.mdl.beads.TabsItemRendererFactoryForArrayListData; TabsItemRendererFactoryForArrayListData; + import org.apache.flex.mdl.beads.models.TabArrayModel; TabArrayModel; + import org.apache.flex.mdl.beads.models.TabArrayListModel; TabArrayListModel; import org.apache.flex.mdl.beads.models.ToastModel; ToastModel; import org.apache.flex.mdl.beads.models.SnackbarModel; SnackbarModel; import org.apache.flex.mdl.materialIcons.MaterialIconType; MaterialIconType; http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/a352d431/frameworks/projects/MaterialDesignLite/src/main/flex/org/apache/flex/mdl/beads/TabsItemRendererFactoryForArrayListData.as ---------------------------------------------------------------------- diff --git a/frameworks/projects/MaterialDesignLite/src/main/flex/org/apache/flex/mdl/beads/TabsItemRendererFactoryForArrayListData.as b/frameworks/projects/MaterialDesignLite/src/main/flex/org/apache/flex/mdl/beads/TabsItemRendererFactoryForArrayListData.as new file mode 100644 index 0000000..fb4131c --- /dev/null +++ b/frameworks/projects/MaterialDesignLite/src/main/flex/org/apache/flex/mdl/beads/TabsItemRendererFactoryForArrayListData.as @@ -0,0 +1,181 @@ +//////////////////////////////////////////////////////////////////////////////// +// +// 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.flex.mdl.beads +{ + import org.apache.flex.collections.IArrayList; + import org.apache.flex.core.IBead; + import org.apache.flex.core.IDataProviderItemRendererMapper; + import org.apache.flex.core.IItemRendererClassFactory; + import org.apache.flex.core.IItemRendererParent; + import org.apache.flex.core.IListPresentationModel; + import org.apache.flex.core.IStrand; + import org.apache.flex.core.SimpleCSSStyles; + import org.apache.flex.core.UIBase; + import org.apache.flex.core.ValuesManager; + import org.apache.flex.events.EventDispatcher; + import org.apache.flex.events.IEventDispatcher; + import org.apache.flex.events.ItemRendererEvent; + import org.apache.flex.html.beads.IListView; + import org.apache.flex.mdl.beads.models.ITabModel; + import org.apache.flex.mdl.supportClasses.ITabItemRenderer; + import org.apache.flex.events.Event; + + [Event(name="itemRendererCreated",type="org.apache.flex.events.ItemRendererEvent")] + + /** + * The TabsItemRendererFactoryForArrayListData class reads an + * array of data and creates an item renderer for every + * ITabItemRenderer in the array. + * + * @langversion 3.0 + * @playerversion Flash 10.2 + * @playerversion AIR 2.6 + * @productversion FlexJS 0.8 + */ + public class TabsItemRendererFactoryForArrayListData extends EventDispatcher implements IBead, IDataProviderItemRendererMapper + { + public function TabsItemRendererFactoryForArrayListData(target:Object = null) + { + super(target); + } + + protected var dataProviderModel:ITabModel; + + protected var labelField:String; + protected var tabsIdField:String; + + private var _strand:IStrand; + + /** + * @copy org.apache.flex.core.IBead#strand + * + * @langversion 3.0 + * @playerversion Flash 10.2 + * @playerversion AIR 2.6 + * @productversion FlexJS 0.8 + */ + public function set strand(value:IStrand):void + { + _strand = value; + IEventDispatcher(value).addEventListener("beadsAdded",finishSetup); + IEventDispatcher(value).addEventListener("initComplete",finishSetup); + } + + /** + * finish setup + * + * @langversion 3.0 + * @playerversion Flash 10.2 + * @playerversion AIR 2.6 + * @productversion FlexJS 0.8 + */ + private function finishSetup(event:Event):void + { + IEventDispatcher(_strand).removeEventListener("beadsAdded",finishSetup); + IEventDispatcher(_strand).removeEventListener("initComplete",finishSetup); + + dataProviderModel = _strand.getBeadByType(ITabModel) as ITabModel; + var listView:IListView = _strand.getBeadByType(IListView) as IListView; + dataGroup = listView.dataGroup; + dataProviderModel.addEventListener("dataProviderChanged", dataProviderChangeHandler); + + tabsIdField = dataProviderModel.tabIdField; + labelField = dataProviderModel.labelField; + + if (!itemRendererFactory) + { + _itemRendererFactory = new (ValuesManager.valuesImpl.getValue(_strand, "iItemRendererClassFactory")) as IItemRendererClassFactory; + _strand.addBead(_itemRendererFactory); + } + + dataProviderChangeHandler(null); + } + + private var _itemRendererFactory:IItemRendererClassFactory; + + /** + * The org.apache.flex.core.IItemRendererClassFactory used + * to generate instances of item renderers. + * + * @langversion 3.0 + * @playerversion Flash 10.2 + * @playerversion AIR 2.6 + * @productversion FlexJS 0.8 + */ + public function get itemRendererFactory():IItemRendererClassFactory + { + return _itemRendererFactory; + } + + /** + * @private + */ + public function set itemRendererFactory(value:IItemRendererClassFactory):void + { + _itemRendererFactory = value; + } + + /** + * The org.apache.flex.core.IItemRendererParent that will + * parent the item renderers. + * + * @langversion 3.0 + * @playerversion Flash 10.2 + * @playerversion AIR 2.6 + * @productversion FlexJS 0.8 + */ + protected var dataGroup:IItemRendererParent; + + protected function dataProviderChangeHandler(event:Event):void + { + var dp:IArrayList = dataProviderModel.dataProvider as IArrayList; + if (!dp) + return; + + dataGroup.removeAllElements(); + + var presentationModel:IListPresentationModel = _strand.getBeadByType(IListPresentationModel) as IListPresentationModel; + + var n:int = dp.length; + for (var i:int = 0; i < n; i++) + { + var ir:ITabItemRenderer = itemRendererFactory.createItemRenderer(dataGroup) as ITabItemRenderer; + dataGroup.addElement(ir); + ir.index = i; + ir.labelField = labelField; + ir.tabIdField = tabsIdField; + + 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.getItemAt(i); + + var newEvent:ItemRendererEvent = new ItemRendererEvent(ItemRendererEvent.CREATED); + newEvent.itemRenderer = ir; + dispatchEvent(newEvent); + } + + IEventDispatcher(_strand).dispatchEvent(new Event("itemsCreated")); + } + } +} http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/a352d431/frameworks/projects/MaterialDesignLite/src/main/flex/org/apache/flex/mdl/beads/models/TabArrayListModel.as ---------------------------------------------------------------------- diff --git a/frameworks/projects/MaterialDesignLite/src/main/flex/org/apache/flex/mdl/beads/models/TabArrayListModel.as b/frameworks/projects/MaterialDesignLite/src/main/flex/org/apache/flex/mdl/beads/models/TabArrayListModel.as new file mode 100644 index 0000000..4ceb4d1 --- /dev/null +++ b/frameworks/projects/MaterialDesignLite/src/main/flex/org/apache/flex/mdl/beads/models/TabArrayListModel.as @@ -0,0 +1,59 @@ +//////////////////////////////////////////////////////////////////////////////// +// +// 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.flex.mdl.beads.models +{ + import org.apache.flex.html.beads.models.ArrayListSelectionModel; + import org.apache.flex.events.Event; + /** + * The TabArrayListModel class defines the data associated with an org.apache.flex.mdl.Tabs + * component. + * + * @langversion 3.0 + * @playerversion Flash 10.2 + * @playerversion AIR 2.6 + * @productversion FlexJS 0.8 + */ + public class TabArrayListModel extends ArrayListSelectionModel implements ITabModel + { + public function TabArrayListModel() + { + super(); + } + + private var _tabIdField:String; + + /** + * @copy org.apache.flex.mdl.beads.models.ITabModel#tabIdField + * + * @langversion 3.0 + * @playerversion Flash 10.2 + * @playerversion AIR 2.6 + * @productversion FlexJS 0.8 + */ + public function get tabIdField():String + { + return _tabIdField; + } + + public function set tabIdField(value:String):void + { + _tabIdField = value; + } + } +} http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/a352d431/frameworks/projects/MaterialDesignLite/src/main/flex/org/apache/flex/mdl/beads/models/TabArrayModel.as ---------------------------------------------------------------------- diff --git a/frameworks/projects/MaterialDesignLite/src/main/flex/org/apache/flex/mdl/beads/models/TabArrayModel.as b/frameworks/projects/MaterialDesignLite/src/main/flex/org/apache/flex/mdl/beads/models/TabArrayModel.as new file mode 100644 index 0000000..30738a9 --- /dev/null +++ b/frameworks/projects/MaterialDesignLite/src/main/flex/org/apache/flex/mdl/beads/models/TabArrayModel.as @@ -0,0 +1,59 @@ +//////////////////////////////////////////////////////////////////////////////// +// +// 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.flex.mdl.beads.models +{ + import org.apache.flex.html.beads.models.ArraySelectionModel; + + /** + * The TabArrayModel class defines the data associated with an org.apache.flex.mdl.Tabs + * component. + * + * @langversion 3.0 + * @playerversion Flash 10.2 + * @playerversion AIR 2.6 + * @productversion FlexJS 0.8 + */ + public class TabArrayModel extends ArraySelectionModel implements ITabModel + { + public function TabArrayModel() + { + super(); + } + + private var _tabIdField:String; + + /** + * @copy org.apache.flex.mdl.beads.models.ITabModel#tabIdField + * + * @langversion 3.0 + * @playerversion Flash 10.2 + * @playerversion AIR 2.6 + * @productversion FlexJS 0.8 + */ + public function get tabIdField():String + { + return _tabIdField; + } + + public function set tabIdField(value:String):void + { + _tabIdField = value; + } + } +} http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/a352d431/frameworks/projects/MaterialDesignLite/src/main/flex/org/apache/flex/mdl/beads/models/TabModel.as ---------------------------------------------------------------------- diff --git a/frameworks/projects/MaterialDesignLite/src/main/flex/org/apache/flex/mdl/beads/models/TabModel.as b/frameworks/projects/MaterialDesignLite/src/main/flex/org/apache/flex/mdl/beads/models/TabModel.as deleted file mode 100644 index 097291a..0000000 --- a/frameworks/projects/MaterialDesignLite/src/main/flex/org/apache/flex/mdl/beads/models/TabModel.as +++ /dev/null @@ -1,59 +0,0 @@ -//////////////////////////////////////////////////////////////////////////////// -// -// 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.flex.mdl.beads.models -{ - import org.apache.flex.html.beads.models.ArraySelectionModel; - - /** - * The TabModel class defines the data associated with an org.apache.flex.mdl.Tabs - * component. - * - * @langversion 3.0 - * @playerversion Flash 10.2 - * @playerversion AIR 2.6 - * @productversion FlexJS 0.8 - */ - public class TabModel extends ArraySelectionModel implements ITabModel - { - public function TabModel() - { - super(); - } - - private var _tabIdField:String; - - /** - * @copy org.apache.flex.mdl.beads.models.ITabModel#tabIdField - * - * @langversion 3.0 - * @playerversion Flash 10.2 - * @playerversion AIR 2.6 - * @productversion FlexJS 0.8 - */ - public function get tabIdField():String - { - return _tabIdField; - } - - public function set tabIdField(value:String):void - { - _tabIdField = value; - } - } -}
