Updates to DataGrid, incorporating ArrayList as its default type of data provider. Adding DataProviderChangeNotifier to facilitate picking up changes in the data model and reflecting them in the DataGrid.
Project: http://git-wip-us.apache.org/repos/asf/flex-asjs/repo Commit: http://git-wip-us.apache.org/repos/asf/flex-asjs/commit/c472807d Tree: http://git-wip-us.apache.org/repos/asf/flex-asjs/tree/c472807d Diff: http://git-wip-us.apache.org/repos/asf/flex-asjs/diff/c472807d Branch: refs/heads/master Commit: c472807d21102a398ccb7aed12dcd9d9e0287d57 Parents: cc526bd Author: Peter Ent <[email protected]> Authored: Wed Oct 7 15:56:58 2015 -0400 Committer: Peter Ent <[email protected]> Committed: Wed Oct 7 15:56:58 2015 -0400 ---------------------------------------------------------------------- frameworks/projects/HTML/as/defaults.css | 19 +- .../projects/HTML/asjs/src/HTMLASJSClasses.as | 3 + .../asjs/src/org/apache/flex/html/DataGrid.as | 20 ++ .../org/apache/flex/html/beads/DataGridView.as | 38 ++- .../DataItemRendererFactoryForArrayList.as | 171 +++++++++++++ .../html/beads/DataProviderChangeNotifier.as | 154 ++++++++++++ .../beads/models/ArrayListSelectionModel.as | 242 +++++++++++++++++++ .../flex/html/beads/models/DataGridModel.as | 7 +- frameworks/projects/HTML/basic-manifest.xml | 1 + .../projects/HTML/compile-asjs-config.xml | 1 + frameworks/projects/HTML/compile-config.xml | 1 + .../ListSingleSelectionMouseController.js | 4 +- 12 files changed, 631 insertions(+), 30 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/c472807d/frameworks/projects/HTML/as/defaults.css ---------------------------------------------------------------------- diff --git a/frameworks/projects/HTML/as/defaults.css b/frameworks/projects/HTML/as/defaults.css index f3c15b9..1a61438 100644 --- a/frameworks/projects/HTML/as/defaults.css +++ b/frameworks/projects/HTML/as/defaults.css @@ -113,8 +113,25 @@ DataGrid border-width: 1px; } +.DataGridColumn { + IBeadModel: ClassReference("org.apache.flex.html.beads.models.DataGridModel"); + IBeadView: ClassReference("org.apache.flex.html.beads.ListView"); + IBeadController: ClassReference("org.apache.flex.html.beads.controllers.ListSingleSelectionMouseController"); + IBeadLayout: ClassReference("org.apache.flex.html.beads.layouts.VerticalLayout"); + IContentView: ClassReference("org.apache.flex.html.supportClasses.DataGroup"); + IDataProviderItemRendererMapper: ClassReference("org.apache.flex.html.beads.DataItemRendererFactoryForArrayList"); + IItemRendererClassFactory: ClassReference("org.apache.flex.core.ItemRendererClassFactory"); + IItemRenderer: ClassReference("org.apache.flex.html.supportClasses.StringItemRenderer"); + IViewport: ClassReference("org.apache.flex.html.supportClasses.Viewport"); + IViewportModel: ClassReference("org.apache.flex.html.beads.models.ViewportModel"); + border-style: none; + background-color: #FFFFFF; +} + .DataGridListArea { - background-color: #999999; + background-color: #AAAAAA; + border-style: solid; + border-color: #333333; } DateChooser { http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/c472807d/frameworks/projects/HTML/asjs/src/HTMLASJSClasses.as ---------------------------------------------------------------------- diff --git a/frameworks/projects/HTML/asjs/src/HTMLASJSClasses.as b/frameworks/projects/HTML/asjs/src/HTMLASJSClasses.as index 73547db..99a837b 100644 --- a/frameworks/projects/HTML/asjs/src/HTMLASJSClasses.as +++ b/frameworks/projects/HTML/asjs/src/HTMLASJSClasses.as @@ -29,9 +29,12 @@ internal class HTMLASJSClasses { import org.apache.flex.html.beads.DataGridColumnView; DataGridColumnView; import org.apache.flex.html.beads.DataGridView; DataGridView; + import org.apache.flex.html.beads.DataProviderChangeNotifier; DataProviderChangeNotifier; + import org.apache.flex.html.beads.DataItemRendererFactoryForArrayList; DataItemRendererFactoryForArrayList; import org.apache.flex.html.beads.DateChooserView; DateChooserView; import org.apache.flex.html.beads.DateFieldView; DateFieldView; import org.apache.flex.html.beads.layouts.FlexibleFirstChildHorizontalLayout; FlexibleFirstChildHorizontalLayout; + import org.apache.flex.html.beads.models.ArrayListSelectionModel; ArrayListSelectionModel; import org.apache.flex.html.beads.models.DataGridModel; DataGridModel; import org.apache.flex.html.beads.models.DateChooserModel; DateChooserModel; import org.apache.flex.html.beads.models.DataGridPresentationModel; DataGridPresentationModel; http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/c472807d/frameworks/projects/HTML/asjs/src/org/apache/flex/html/DataGrid.as ---------------------------------------------------------------------- diff --git a/frameworks/projects/HTML/asjs/src/org/apache/flex/html/DataGrid.as b/frameworks/projects/HTML/asjs/src/org/apache/flex/html/DataGrid.as index 4aa38d2..8cba078 100644 --- a/frameworks/projects/HTML/asjs/src/org/apache/flex/html/DataGrid.as +++ b/frameworks/projects/HTML/asjs/src/org/apache/flex/html/DataGrid.as @@ -140,5 +140,25 @@ package org.apache.flex.html { presentationModel.rowHeight = value; } + + /** + * @private + * The DataGrid needs to know whenever its size is being changed so the columns can be + * be aligned properly, so the noEvent value must always be false. + */ + override public function setWidth(value:Number, noEvent:Boolean=false):void + { + super.setWidth(value,false); + } + + /** + * @private + * The DataGrid needs to know whenever its size is being changed so the columns can be + * be aligned properly, so the noEvent value must always be false. + */ + override public function setHeight(value:Number, noEvent:Boolean=false):void + { + super.setHeight(value,false); + } } } http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/c472807d/frameworks/projects/HTML/asjs/src/org/apache/flex/html/beads/DataGridView.as ---------------------------------------------------------------------- diff --git a/frameworks/projects/HTML/asjs/src/org/apache/flex/html/beads/DataGridView.as b/frameworks/projects/HTML/asjs/src/org/apache/flex/html/beads/DataGridView.as index 150294c..43c410f 100644 --- a/frameworks/projects/HTML/asjs/src/org/apache/flex/html/beads/DataGridView.as +++ b/frameworks/projects/HTML/asjs/src/org/apache/flex/html/beads/DataGridView.as @@ -18,6 +18,7 @@ //////////////////////////////////////////////////////////////////////////////// package org.apache.flex.html.beads { + import org.apache.flex.core.IBead; import org.apache.flex.core.IBeadModel; import org.apache.flex.core.IBeadView; import org.apache.flex.core.IDataGridModel; @@ -25,8 +26,8 @@ package org.apache.flex.html.beads import org.apache.flex.core.ISelectionModel; import org.apache.flex.core.IStrand; import org.apache.flex.core.IUIBase; - import org.apache.flex.core.SimpleCSSStyles; import org.apache.flex.core.UIBase; + import org.apache.flex.core.ValuesManager; import org.apache.flex.events.Event; import org.apache.flex.events.IEventDispatcher; import org.apache.flex.html.ButtonBar; @@ -90,6 +91,8 @@ package org.apache.flex.html.beads _strand = value; var host:UIBase = value as UIBase; + host.addEventListener("widthChanged", handleSizeChanges); + host.addEventListener("heightChanged", handleSizeChanges); _header = new ButtonBar(); _header.id = "dataGridHeader"; @@ -102,13 +105,6 @@ package org.apache.flex.html.beads _listArea.className = "DataGridListArea"; _listArea.addBead(scrollPort); - // place a border around the list area - var style:SimpleCSSStyles = new SimpleCSSStyles(); - style.borderWidth = 1; - style.borderColor = 0x333333; - style.borderStyle = "solid"; - _listArea.style = style; - finishSetup(null); } @@ -180,13 +176,21 @@ package org.apache.flex.html.beads _listArea.width = host.width; _listArea.height = host.height - _header.height; - if (_lists != null) { + var sharedModel:IDataGridModel = _strand.getBeadByType(IBeadModel) as IDataGridModel; + + if (_lists != null && _lists.length > 0) { var xpos:Number = 0; + var listWidth:Number = host.width / _lists.length; for (var i:int=0; i < _lists.length; i++) { var list:List = _lists[i] as List; list.x = xpos; list.y = 0; + var dataGridColumn:DataGridColumn = sharedModel.columns[i] as DataGridColumn; + var colWidth:Number = dataGridColumn.columnWidth; + if (!isNaN(colWidth)) list.width = colWidth - 1; + else list.width = listWidth - 1; + xpos += list.width + 1; } } @@ -274,19 +278,13 @@ package org.apache.flex.html.beads _lists = new Array(); - for (var i:int=0; i < sharedModel.columns.length; i++) { - - var listModel:ISelectionModel = new ArraySelectionModel(); - listModel.dataProvider = sharedModel.dataProvider; - + for (var i:int=0; i < sharedModel.columns.length; i++) { var dataGridColumn:DataGridColumn = sharedModel.columns[i] as DataGridColumn; var list:List = new List(); list.id = "dataGridColumn"+String(i); list.className = "DataGridColumn"; - list.addBead(listModel); - list.addBead(new Viewport()); // do not want lists to scroll independently - list.addBead(new VerticalLayout()); + list.addBead(sharedModel); list.itemRenderer = dataGridColumn.itemRenderer; list.labelField = dataGridColumn.dataField; list.addEventListener('change',handleColumnListChange); @@ -294,12 +292,6 @@ package org.apache.flex.html.beads list.addEventListener('rollout',handleColumnListRollOut); list.addBead(presentationModel); - // do not want lists to have their own sizes - var style:SimpleCSSStyles = new SimpleCSSStyles(); - style.borderWidth = 0; - style.backgroundColor = 0xFFFFFF; - list.style = style; - var colWidth:Number = dataGridColumn.columnWidth; if (!isNaN(colWidth)) list.width = colWidth - 1; else list.width = listWidth - 1; http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/c472807d/frameworks/projects/HTML/asjs/src/org/apache/flex/html/beads/DataItemRendererFactoryForArrayList.as ---------------------------------------------------------------------- diff --git a/frameworks/projects/HTML/asjs/src/org/apache/flex/html/beads/DataItemRendererFactoryForArrayList.as b/frameworks/projects/HTML/asjs/src/org/apache/flex/html/beads/DataItemRendererFactoryForArrayList.as new file mode 100644 index 0000000..f2c4ae7 --- /dev/null +++ b/frameworks/projects/HTML/asjs/src/org/apache/flex/html/beads/DataItemRendererFactoryForArrayList.as @@ -0,0 +1,171 @@ +//////////////////////////////////////////////////////////////////////////////// +// +// 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.html.beads +{ + import org.apache.flex.collections.ArrayList; + 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.ISelectableItemRenderer; + import org.apache.flex.core.ISelectionModel; + import org.apache.flex.core.IStrand; + import org.apache.flex.core.IUIBase; + import org.apache.flex.core.SimpleCSSStyles; + import org.apache.flex.core.UIBase; + import org.apache.flex.core.ValuesManager; + import org.apache.flex.events.Event; + import org.apache.flex.events.IEventDispatcher; + import org.apache.flex.html.List; + + /** + * The DataItemRendererFactoryForArrayList class uses an ArrayList + * and creates an item renderer for every + * item in the collection. Other implementations of + * IDataProviderItemRendererMapper map different data + * structures or manage a virtual set of renderers. + * + * @langversion 3.0 + * @playerversion Flash 10.2 + * @playerversion AIR 2.6 + * @productversion FlexJS 0.0 + */ + public class DataItemRendererFactoryForArrayList implements IBead, IDataProviderItemRendererMapper + { + /** + * Constructor. + * + * @langversion 3.0 + * @playerversion Flash 10.2 + * @playerversion AIR 2.6 + * @productversion FlexJS 0.0 + */ + public function DataItemRendererFactoryForArrayList() + { + } + + private var selectionModel:ISelectionModel; + + private var labelField: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.0 + */ + public function set strand(value:IStrand):void + { + _strand = value; + IEventDispatcher(_strand).addEventListener("beadsAdded", finishSetup); + IEventDispatcher(_strand).addEventListener("initComplete", finishSetup); + } + + private function finishSetup(event:Event):void + { + selectionModel = _strand.getBeadByType(ISelectionModel) as ISelectionModel; + var listView:IListView = _strand.getBeadByType(IListView) as IListView; + dataGroup = listView.dataGroup; + selectionModel.addEventListener("dataProviderChanged", dataProviderChangeHandler); + + labelField = (listView.host as List).labelField; + + if (!itemRendererFactory) + { + _itemRendererFactory = _strand.getBeadByType(IItemRendererClassFactory) as IItemRendererClassFactory; + if (_itemRendererFactory == null) { + _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.0 + */ + 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.0 + */ + protected var dataGroup:IItemRendererParent; + + private function dataProviderChangeHandler(event:Event):void + { + var dp:ArrayList = selectionModel.dataProvider as ArrayList; + if (!dp) + return; + + dataGroup.removeAllElements(); + + var listView:IListView = _strand.getBeadByType(IListView) as IListView; + 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; + ir.index = i; + ir.labelField = labelField; + if (presentationModel) { + var style:SimpleCSSStyles = new SimpleCSSStyles(); + style.marginBottom = presentationModel.separatorThickness; + UIBase(ir).style = style; + UIBase(ir).height = presentationModel.rowHeight; + } + dataGroup.addElement(ir); + ir.data = dp.getItemAt(i); + } + + IEventDispatcher(_strand).dispatchEvent(new Event("itemsCreated")); + } + } +} http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/c472807d/frameworks/projects/HTML/asjs/src/org/apache/flex/html/beads/DataProviderChangeNotifier.as ---------------------------------------------------------------------- diff --git a/frameworks/projects/HTML/asjs/src/org/apache/flex/html/beads/DataProviderChangeNotifier.as b/frameworks/projects/HTML/asjs/src/org/apache/flex/html/beads/DataProviderChangeNotifier.as new file mode 100644 index 0000000..8905fb9 --- /dev/null +++ b/frameworks/projects/HTML/asjs/src/org/apache/flex/html/beads/DataProviderChangeNotifier.as @@ -0,0 +1,154 @@ +//////////////////////////////////////////////////////////////////////////////// +// +// 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.html.beads +{ + import org.apache.flex.core.IBead; + import org.apache.flex.core.IDocument; + import org.apache.flex.core.ISelectionModel; + import org.apache.flex.core.IStrand; + import org.apache.flex.events.Event; + import org.apache.flex.collections.ArrayList; + + /** + * The DataProviderChangeNotifier notifies listeners when a selection model's + * ArrayList dataProvider has changed. + * + * @langversion 3.0 + * @playerversion Flash 10.2 + * @playerversion AIR 2.6 + * @productversion FlexJS 0.0 + */ + public class DataProviderChangeNotifier implements IBead, IDocument + { + /** + * constructor. + * + * @langversion 3.0 + * @playerversion Flash 10.2 + * @playerversion AIR 2.6 + * @productversion FlexJS 0.0 + */ + public function DataProviderChangeNotifier() + { + } + + protected var _dataProvider:ArrayList; + + 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.0 + */ + public function set strand(value:IStrand):void + { + _strand = value; + + if (_dataProvider == null) { + var object:Object = document[sourceID]; + _dataProvider = object[propertyName] as ArrayList; + } + + _dataProvider.addEventListener("itemAdded", handleItemAdded); + _dataProvider.addEventListener("itemRemoved", handleItemRemoved); + _dataProvider.addEventListener("itemUpdated", handleItemUpdated); + + } + + protected var document:Object; + + /** + * @private + */ + public function setDocument(document:Object, id:String = null):void + { + this.document = document; + } + + private var _sourceID:String; + + /** + * The ID of the object holding the ArrayList, usually a model. + * + * @langversion 3.0 + * @playerversion Flash 10.2 + * @playerversion AIR 2.6 + * @productversion FlexJS 0.0 + */ + public function get sourceID():String + { + return _sourceID; + } + public function set sourceID(value:String):void + { + _sourceID = value; + } + + private var _propertyName:String; + + /** + * The property in the sourceID that is the ArrayList. + * + * @langversion 3.0 + * @playerversion Flash 10.2 + * @playerversion AIR 2.6 + * @productversion FlexJS 0.0 + */ + public function get propertyName():String + { + return _propertyName; + } + + public function set propertyName(value:String):void + { + _propertyName = value; + } + + /** + * @private + */ + private function handleItemAdded(event:Event):void + { + var selectionModel:ISelectionModel = _strand.getBeadByType(ISelectionModel) as ISelectionModel; + selectionModel.dispatchEvent(new Event("dataProviderChanged")); + } + + /** + * @private + */ + private function handleItemRemoved(event:Event):void + { + var selectionModel:ISelectionModel = _strand.getBeadByType(ISelectionModel) as ISelectionModel; + selectionModel.dispatchEvent(new Event("dataProviderChanged")); + } + + /** + * @private + */ + private function handleItemUpdated(event:Event):void + { + var selectionModel:ISelectionModel = _strand.getBeadByType(ISelectionModel) as ISelectionModel; + selectionModel.dispatchEvent(new Event("dataProviderChanged")); + } + } +} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/c472807d/frameworks/projects/HTML/asjs/src/org/apache/flex/html/beads/models/ArrayListSelectionModel.as ---------------------------------------------------------------------- diff --git a/frameworks/projects/HTML/asjs/src/org/apache/flex/html/beads/models/ArrayListSelectionModel.as b/frameworks/projects/HTML/asjs/src/org/apache/flex/html/beads/models/ArrayListSelectionModel.as new file mode 100644 index 0000000..920e967 --- /dev/null +++ b/frameworks/projects/HTML/asjs/src/org/apache/flex/html/beads/models/ArrayListSelectionModel.as @@ -0,0 +1,242 @@ +//////////////////////////////////////////////////////////////////////////////// +// +// 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.html.beads.models +{ + import org.apache.flex.collections.ArrayList; + import org.apache.flex.core.IRollOverModel; + import org.apache.flex.core.ISelectionModel; + import org.apache.flex.core.IStrand; + import org.apache.flex.events.Event; + import org.apache.flex.events.EventDispatcher; + + /** + * The ArrayListSelectionModel class is a selection model for + * a dataProvider that is an ArrayList. It assumes that items + * can be fetched from the dataProvider using dataProvider.getItemAt(index). + * + * @langversion 3.0 + * @playerversion Flash 10.2 + * @playerversion AIR 2.6 + * @productversion FlexJS 0.0 + */ + public class ArrayListSelectionModel extends EventDispatcher implements ISelectionModel, IRollOverModel + { + /** + * Constructor. + * + * @langversion 3.0 + * @playerversion Flash 10.2 + * @playerversion AIR 2.6 + * @productversion FlexJS 0.0 + */ + public function ArrayListSelectionModel() + { + } + + 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.0 + */ + public function set strand(value:IStrand):void + { + _strand = value; + } + + private var _dataProvider:ArrayList; + + /** + * @copy org.apache.flex.core.ISelectionModel#dataProvider + * + * @langversion 3.0 + * @playerversion Flash 10.2 + * @playerversion AIR 2.6 + * @productversion FlexJS 0.0 + */ + public function get dataProvider():Object + { + return _dataProvider; + } + + /** + * @private + */ + public function set dataProvider(value:Object):void + { + if (value === _dataProvider) return; + + _dataProvider = value as ArrayList; + if (_selectedIndex != -1) + _selectedItem = (_dataProvider == null || _selectedIndex >= _dataProvider.length) ? null : + _dataProvider.getItemAt(_selectedIndex); + dispatchEvent(new Event("dataProviderChanged")); + } + + private var _selectedIndex:int = -1; + private var _rollOverIndex:int = -1; + private var _labelField:String = null; + + /** + * @copy org.apache.flex.core.ISelectionModel#labelField + * + * @langversion 3.0 + * @playerversion Flash 10.2 + * @playerversion AIR 2.6 + * @productversion FlexJS 0.0 + */ + public function get labelField():String + { + return _labelField; + } + + /** + * @private + */ + public function set labelField(value:String):void + { + if (value != _labelField) { + _labelField = value; + dispatchEvent(new Event("labelFieldChanged")); + } + } + + /** + * @copy org.apache.flex.core.ISelectionModel#selectedIndex + * + * @langversion 3.0 + * @playerversion Flash 10.2 + * @playerversion AIR 2.6 + * @productversion FlexJS 0.0 + */ + public function get selectedIndex():int + { + return _selectedIndex; + } + + /** + * @private + */ + public function set selectedIndex(value:int):void + { + if (value === _selectedIndex) return; + + _selectedIndex = value; + _selectedItem = (value == -1 || _dataProvider == null) ? null : (value < _dataProvider.length) ? _dataProvider.getItemAt(value) : null; + dispatchEvent(new Event("selectedIndexChanged")); + } + + /** + * @copy org.apache.flex.core.IRollOverModel#rollOverIndex + * + * @langversion 3.0 + * @playerversion Flash 10.2 + * @playerversion AIR 2.6 + * @productversion FlexJS 0.0 + */ + public function get rollOverIndex():int + { + return _rollOverIndex; + } + + /** + * @private + */ + public function set rollOverIndex(value:int):void + { + _rollOverIndex = value; + dispatchEvent(new Event("rollOverIndexChanged")); + } + + private var _selectedItem:Object; + + /** + * @copy org.apache.flex.core.ISelectionModel#selectedItem + * + * @langversion 3.0 + * @playerversion Flash 10.2 + * @playerversion AIR 2.6 + * @productversion FlexJS 0.0 + */ + public function get selectedItem():Object + { + return _selectedItem; + } + + /** + * @private + */ + public function set selectedItem(value:Object):void + { + if (value === _selectedItem) return; + + _selectedItem = value; + var n:int = _dataProvider.length; + for (var i:int = 0; i < n; i++) + { + if (_dataProvider.getItemAt(i) == value) + { + _selectedIndex = i; + break; + } + } + dispatchEvent(new Event("selectedItemChanged")); + dispatchEvent(new Event("selectedIndexChanged")); + } + + private var _selectedString:String; + + /** + * An alternative to selectedItem for strongly typing the + * the selectedItem if the Array is an Array of Strings. + * + * @langversion 3.0 + * @playerversion Flash 10.2 + * @playerversion AIR 2.6 + * @productversion FlexJS 0.0 + */ + public function get selectedString():String + { + return String(_selectedItem); + } + + /** + * @private + */ + public function set selectedString(value:String):void + { + _selectedString = value; + var n:int = _dataProvider.length; + for (var i:int = 0; i < n; i++) + { + if (String(_dataProvider.getItemAt(i)) == value) + { + _selectedIndex = i; + break; + } + } + dispatchEvent(new Event("selectedItemChanged")); + dispatchEvent(new Event("selectedIndexChanged")); + } + } +} http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/c472807d/frameworks/projects/HTML/asjs/src/org/apache/flex/html/beads/models/DataGridModel.as ---------------------------------------------------------------------- diff --git a/frameworks/projects/HTML/asjs/src/org/apache/flex/html/beads/models/DataGridModel.as b/frameworks/projects/HTML/asjs/src/org/apache/flex/html/beads/models/DataGridModel.as index f50b36a..531edac 100644 --- a/frameworks/projects/HTML/asjs/src/org/apache/flex/html/beads/models/DataGridModel.as +++ b/frameworks/projects/HTML/asjs/src/org/apache/flex/html/beads/models/DataGridModel.as @@ -22,16 +22,15 @@ package org.apache.flex.html.beads.models import org.apache.flex.events.Event; /** - * The DataGridModel class bead extends org.apache.flex.html.beads.modelsArraySelectionModel - * and adds the array of org.apache.flex.html.supportClasses.DataGridColumns used to define - * each of the column in the DataGrid. + * The DataGridModel class bead extends org.apache.flex.html.beads.models.ArrayListSelectionModel + * to facilitate using an ArrayList as the dataProvider for the DataGrid. * * @langversion 3.0 * @playerversion Flash 10.2 * @playerversion AIR 2.6 * @productversion FlexJS 0.0 */ - public class DataGridModel extends ArraySelectionModel implements IDataGridModel + public class DataGridModel extends ArrayListSelectionModel implements IDataGridModel { /** * constructor. http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/c472807d/frameworks/projects/HTML/basic-manifest.xml ---------------------------------------------------------------------- diff --git a/frameworks/projects/HTML/basic-manifest.xml b/frameworks/projects/HTML/basic-manifest.xml index 71a4049..921c67b 100644 --- a/frameworks/projects/HTML/basic-manifest.xml +++ b/frameworks/projects/HTML/basic-manifest.xml @@ -80,6 +80,7 @@ <component id="ScrollingViewport" class="org.apache.flex.html.supportClasses.ScrollingViewport" /> <component id="DataGrid" class="org.apache.flex.html.DataGrid"/> + <component id="DataProviderChangeNotifier" class="org.apache.flex.html.beads.DataProviderChangeNotifier"/> <component id="DataGridColumn" class="org.apache.flex.html.supportClasses.DataGridColumn"/> <component id="DateChooser" class="org.apache.flex.html.DateChooser"/> http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/c472807d/frameworks/projects/HTML/compile-asjs-config.xml ---------------------------------------------------------------------- diff --git a/frameworks/projects/HTML/compile-asjs-config.xml b/frameworks/projects/HTML/compile-asjs-config.xml index c0379f3..eec0d6d 100644 --- a/frameworks/projects/HTML/compile-asjs-config.xml +++ b/frameworks/projects/HTML/compile-asjs-config.xml @@ -49,6 +49,7 @@ <path-element>../../libs/Binding.swc</path-element> <path-element>../../libs/Core.swc</path-element> <path-element>../../libs/Graphics.swc</path-element> + <path-element>../../libs/Collections.swc</path-element> <path-element>../../libs/HTML.swc</path-element> </library-path> http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/c472807d/frameworks/projects/HTML/compile-config.xml ---------------------------------------------------------------------- diff --git a/frameworks/projects/HTML/compile-config.xml b/frameworks/projects/HTML/compile-config.xml index 8d7bfd5..cceec8a 100644 --- a/frameworks/projects/HTML/compile-config.xml +++ b/frameworks/projects/HTML/compile-config.xml @@ -26,6 +26,7 @@ <path-element>../../libs/Binding.swc</path-element> <path-element>../../libs/Core.swc</path-element> <path-element>../../libs/Graphics.swc</path-element> + <path-element>../../libs/Collections.swc</path-element> </external-library-path> <mxml> http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/c472807d/frameworks/projects/HTML/js/src/org/apache/flex/html/beads/controllers/ListSingleSelectionMouseController.js ---------------------------------------------------------------------- diff --git a/frameworks/projects/HTML/js/src/org/apache/flex/html/beads/controllers/ListSingleSelectionMouseController.js b/frameworks/projects/HTML/js/src/org/apache/flex/html/beads/controllers/ListSingleSelectionMouseController.js index aca36cc..282e8fd 100644 --- a/frameworks/projects/HTML/js/src/org/apache/flex/html/beads/controllers/ListSingleSelectionMouseController.js +++ b/frameworks/projects/HTML/js/src/org/apache/flex/html/beads/controllers/ListSingleSelectionMouseController.js @@ -16,8 +16,8 @@ goog.provide('org.apache.flex.html.beads.controllers.ListSingleSelectionMouseCon goog.require('org.apache.flex.core.IBeadController'); goog.require('org.apache.flex.core.ISelectableItemRenderer'); +goog.require('org.apache.flex.core.ISelectionModel'); goog.require('org.apache.flex.html.beads.ListView'); -goog.require('org.apache.flex.html.beads.models.ArraySelectionModel'); goog.require('org.apache.flex.utils.Language'); @@ -49,7 +49,7 @@ Object.defineProperties(org.apache.flex.html.beads.controllers.ListSingleSelecti this.strand_ = value; this.model = value.getBeadByType( - org.apache.flex.html.beads.models.ArraySelectionModel); + org.apache.flex.core.ISelectionModel); this.listView = value.getBeadByType( org.apache.flex.html.beads.ListView);
