Looks reasonable. Can you explain why ArrayListSelectionModel should not extend EventDispatcher and encapsulate one instead? Isn't encapsulation more code to run?
-Alex On 12/20/18, 10:26 PM, "[email protected]" <[email protected]> wrote: This is an automated email from the ASF dual-hosted git repository. gregdove pushed a commit to branch bugfix/issue_353_double_dispatch_of_change_event_in_Jewel_List in repository https://na01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgitbox.apache.org%2Frepos%2Fasf%2Froyale-asjs.git&data=02%7C01%7Caharui%40adobe.com%7C370c0ff112d44449df1008d6670d4dbc%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C636809704172598828&sdata=yS2TSlXOrmQ6Ojy26CuosGhumh48T5z97ZZFqqXuzFY%3D&reserved=0 commit 448228023f841dd838a94ba3fee2db1c629bf964 Author: greg-dove <[email protected]> AuthorDate: Fri Dec 21 19:25:43 2018 +1300 Cumulative updates to migrate to 'selectionChanged' for bindings Fixes a some issues with add/remove/update beads for dataprovider/item changes. Added extra test display to Tour de Jewel for this. --- .../src/main/royale/ListPlayGround.mxml | 9 ++ .../royale/org/apache/royale/jewel/ComboBox.as | 9 +- .../royale/org/apache/royale/jewel/DropDownList.as | 8 +- .../main/royale/org/apache/royale/jewel/List.as | 9 +- .../jewel/beads/controllers/ComboBoxController.as | 20 +++- .../beads/controllers/DropDownListController.as | 43 ++++--- .../ListSingleSelectionMouseController.as | 42 ++++--- .../beads/controls/DispatchChangeOnStartup.as | 41 ++----- .../jewel/beads/controls/combobox/SearchFilter.as | 6 +- .../AddListItemRendererForArrayListData.as | 18 ++- .../RemoveListItemRendererForArrayListData.as | 23 ++-- .../UpdateListItemRendererForArrayListData.as | 21 ++-- .../jewel/beads/models/ArrayListSelectionModel.as | 127 +++++++++++++++------ .../royale/jewel/beads/models/ComboBoxModel.as | 30 ++--- .../jewel/beads/models/IDropDownListModel.as | 1 - .../jewel/beads/models/IJewelSelectionModel.as | 3 +- .../royale/jewel/beads/views/ComboBoxView.as | 14 ++- .../royale/jewel/beads/views/DropDownListView.as | 2 +- .../apache/royale/jewel/beads/views/ListView.as | 6 +- 19 files changed, 271 insertions(+), 161 deletions(-) diff --git a/examples/royale/TourDeJewel/src/main/royale/ListPlayGround.mxml b/examples/royale/TourDeJewel/src/main/royale/ListPlayGround.mxml index baad8a6..620b9a2 100644 --- a/examples/royale/TourDeJewel/src/main/royale/ListPlayGround.mxml +++ b/examples/royale/TourDeJewel/src/main/royale/ListPlayGround.mxml @@ -109,6 +109,12 @@ limitations under the License. } return intro + evaluated; } + + public function describeIconItem(iconObject:Object):String{ + const iconVO:IconListVO = iconObject as IconListVO; + if (!iconVO) return '[Nothing Selected]'; + return 'label:\'' + iconVO.label + '\', icon:\'' + iconVO.icon + '\''; + } ]]> </fx:Script> @@ -165,6 +171,9 @@ limitations under the License. <j:Button text="Remove first item" click="removeItemAt()"/> <j:Button text="Update first item" click="updateFirstItem()"/> <j:Button text="Remove all data" click="removeAllData()"/> + <j:Label html="{'Selected Index: ' + iconList.selectedIndex}"/> + <j:Label html="Selected Item description:"/> + <j:Label html="{describeIconItem(iconList.selectedItem)}"/> </j:VGroup> </j:HGroup> </j:Card> diff --git a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/ComboBox.as b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/ComboBox.as index a479008..faf4872 100644 --- a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/ComboBox.as +++ b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/ComboBox.as @@ -19,14 +19,10 @@ package org.apache.royale.jewel { import org.apache.royale.core.StyledUIBase; - import org.apache.royale.core.IComboBoxModel; import org.apache.royale.core.ISelectionModel; import org.apache.royale.core.IDataProviderModel; import org.apache.royale.core.IListPresentationModel; - import org.apache.royale.jewel.beads.models.IJewelSelectionModel; import org.apache.royale.jewel.beads.models.ListPresentationModel; - import org.apache.royale.events.IEventDispatcher; - import org.apache.royale.events.Event; //-------------------------------------- // Events @@ -119,7 +115,7 @@ package org.apache.royale.jewel IDataProviderModel(model).dataProvider = value; } - [Bindable("change")] + [Bindable("selectionChanged")] /** * The index of the currently selected item. Changing this item changes * the selectedItem value. @@ -142,7 +138,7 @@ package org.apache.royale.jewel ISelectionModel(model).selectedIndex = value; } - [Bindable("change")] + [Bindable("selectionChanged")] /** * The item currently selected. Changing this value also * changes the selectedIndex property. @@ -180,5 +176,6 @@ package org.apache.royale.jewel } return presModel; } + } } diff --git a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/DropDownList.as b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/DropDownList.as index 7d2b171..951bafd 100644 --- a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/DropDownList.as +++ b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/DropDownList.as @@ -179,7 +179,7 @@ package org.apache.royale.jewel // } // } - [Bindable("change")] + [Bindable("selectionChanged")] /** * The index of the currently selected item. Changing this value * also changes the selectedItem property. @@ -216,7 +216,7 @@ package org.apache.royale.jewel } } - [Bindable("change")] + [Bindable("selectionChanged")] /** * The item currently selected. Changing this value also * changes the selectedIndex property. @@ -297,13 +297,9 @@ package org.apache.royale.jewel var ddModel:IDropDownListModel = model as IDropDownListModel; if (ddModel) { index -= ddModel.offset; - ddModel.setProcessingInteractiveChange(true); } model.selectedIndex = index; - - if (ddModel) - ddModel.setProcessingInteractiveChange(false); } } } diff --git a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/List.as b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/List.as index 14fb311..ad495e5 100644 --- a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/List.as +++ b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/List.as @@ -24,9 +24,6 @@ package org.apache.royale.jewel import org.apache.royale.core.IDataProviderModel; import org.apache.royale.core.IListPresentationModel; import org.apache.royale.jewel.beads.models.ListPresentationModel; - import org.apache.royale.jewel.beads.models.IJewelSelectionModel; - import org.apache.royale.events.IEventDispatcher; - import org.apache.royale.events.Event; COMPILE::JS { @@ -140,7 +137,7 @@ package org.apache.royale.jewel * @productversion Royale 0.9.4 * @royaleignorecoercion org.apache.royale.core.ISelectionModel */ - [Bindable("change")] + [Bindable("selectionChanged")] public function get selectedIndex():int { return ISelectionModel(model).selectedIndex; @@ -201,7 +198,7 @@ package org.apache.royale.jewel * @productversion Royale 0.9.4 * @royaleignorecoercion org.apache.royale.core.ISelectionModel */ - [Bindable("change")] + [Bindable("selectionChanged")] public function get selectedItem():Object { return ISelectionModel(model).selectedItem; @@ -232,5 +229,7 @@ package org.apache.royale.jewel } return presModel; } + + } } diff --git a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/controllers/ComboBoxController.as b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/controllers/ComboBoxController.as index cf187c3..b1fe20d 100644 --- a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/controllers/ComboBoxController.as +++ b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/controllers/ComboBoxController.as @@ -18,7 +18,9 @@ //////////////////////////////////////////////////////////////////////////////// package org.apache.royale.jewel.beads.controllers { - COMPILE::SWF +import org.apache.royale.jewel.beads.models.IJewelSelectionModel; + +COMPILE::SWF { import flash.utils.setTimeout; } @@ -83,6 +85,13 @@ package org.apache.royale.jewel.beads.controllers } else { IEventDispatcher(_strand).addEventListener("viewChanged", finishSetup); } + if (model is IJewelSelectionModel) { + IJewelSelectionModel(model).dispatcher = IEventDispatcher(value); + } + else { + IEventDispatcher(model).addEventListener('dataProviderChanged', modelChangeHandler); + IEventDispatcher(model).addEventListener('selectionChanged', modelChangeHandler); + } } /** @@ -124,6 +133,11 @@ package org.apache.royale.jewel.beads.controllers list = (popup.view as ComboBoxPopUpView).list; list.addEventListener(MouseEvent.MOUSE_DOWN, handleControlMouseDown); list.addEventListener(Event.CHANGE, changeHandler); + if (model is IJewelSelectionModel) { + //don't let the pop-up's list take over as primary dispatcher + //it needs to stay with the ComboBox (for selection bindings to work) + IJewelSelectionModel(model).dispatcher = IEventDispatcher(_strand); + } } private var popup:ComboBoxPopUp; @@ -180,5 +194,9 @@ package org.apache.royale.jewel.beads.controllers IEventDispatcher(_strand).dispatchEvent(new Event(Event.CHANGE)); } + + protected function modelChangeHandler(event:Event):void{ + IEventDispatcher(_strand).dispatchEvent(new Event(event.type)); + } } } diff --git a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/controllers/DropDownListController.as b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/controllers/DropDownListController.as index 62d4896..1bddf92 100644 --- a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/controllers/DropDownListController.as +++ b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/controllers/DropDownListController.as @@ -20,7 +20,7 @@ package org.apache.royale.jewel.beads.controllers { // import flash.display.DisplayObject; // import flash.geom.Point; - + import org.apache.royale.core.IBeadController; import org.apache.royale.core.IStrand; import org.apache.royale.events.Event; @@ -29,7 +29,8 @@ package org.apache.royale.jewel.beads.controllers import org.apache.royale.events.ItemClickedEvent; import org.apache.royale.events.ItemRemovedEvent; import org.apache.royale.jewel.beads.models.DropDownListModel; - import org.apache.royale.jewel.beads.views.DropDownListView; +import org.apache.royale.jewel.beads.models.IJewelSelectionModel; +import org.apache.royale.jewel.beads.views.DropDownListView; /** * The DropDownListController class is the controller for @@ -39,7 +40,7 @@ package org.apache.royale.jewel.beads.controllers * This controller watches for the click event and displays the * dropdown/popup, and watches the dropdown/popup for change events * and updates the selection model accordingly. - * + * * @langversion 3.0 * @playerversion Flash 10.2 * @playerversion AIR 2.6 @@ -49,7 +50,7 @@ package org.apache.royale.jewel.beads.controllers { /** * Constructor. - * + * * @langversion 3.0 * @playerversion Flash 10.2 * @playerversion AIR 2.6 @@ -58,10 +59,10 @@ package org.apache.royale.jewel.beads.controllers public function DropDownListController() { } - + /** * The model. - * + * * @langversion 3.0 * @playerversion Flash 10.2 * @playerversion AIR 2.6 @@ -71,7 +72,7 @@ package org.apache.royale.jewel.beads.controllers /** * The view. - * + * * @langversion 3.0 * @playerversion Flash 10.2 * @playerversion AIR 2.6 @@ -82,11 +83,12 @@ package org.apache.royale.jewel.beads.controllers 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.9.4 + * @royaleignorecoercion org.apache.royale.events.IEventDispatcher */ public function set strand(value:IStrand):void { @@ -94,7 +96,14 @@ package org.apache.royale.jewel.beads.controllers model = value.getBeadByType(DropDownListModel) as DropDownListModel; IEventDispatcher(_strand).addEventListener("itemAdded", handleItemAdded); IEventDispatcher(_strand).addEventListener("itemRemoved", handleItemRemoved); - //IEventDispatcher(value).addEventListener(org.apache.royale.events.MouseEvent.CLICK, clickHandler); + if (model is IJewelSelectionModel) { + IJewelSelectionModel(model).dispatcher = IEventDispatcher(value); + } + else { + IEventDispatcher(model).addEventListener('selectionChanged', modelChangeHandler); + IEventDispatcher(model).addEventListener('dataProviderChanged', modelChangeHandler); + } + } /** @@ -104,7 +113,7 @@ package org.apache.royale.jewel.beads.controllers { IEventDispatcher(event.item).addEventListener("itemClicked", selectedHandler); } - + /** * @royaleignorecoercion org.apache.royale.events.IEventDispatcher */ @@ -119,7 +128,11 @@ package org.apache.royale.jewel.beads.controllers model.selectedItem = event.data; view.host.dispatchEvent(new Event(Event.CHANGE)); } - + + protected function modelChangeHandler(event:Event):void{ + IEventDispatcher(_strand).dispatchEvent(new Event(event.type)); + } + // private function clickHandler(event:org.apache.royale.events.MouseEvent):void // { // var viewBead:IDropDownListView = _strand.getBeadByType(IDropDownListView) as IDropDownListView; @@ -137,16 +150,16 @@ package org.apache.royale.jewel.beads.controllers // IEventDispatcher(viewBead.popUp).addEventListener(Event.CHANGE, changeHandler); // IUIBase(_strand).topMostEventDispatcher.addEventListener(org.apache.royale.events.MouseEvent.CLICK, dismissHandler); // } - + // private function dismissHandler(event:org.apache.royale.events.MouseEvent):void // { // if (event.target == _strand) return; - + // IUIBase(_strand).topMostEventDispatcher.removeEventListener(org.apache.royale.events.MouseEvent.CLICK, dismissHandler); // var viewBead:IDropDownListView = _strand.getBeadByType(IDropDownListView) as IDropDownListView; // viewBead.popUpVisible = false; // } - + // private function changeHandler(event:Event):void // { // var viewBead:IDropDownListView = _strand.getBeadByType(IDropDownListView) as IDropDownListView; @@ -156,6 +169,6 @@ package org.apache.royale.jewel.beads.controllers // selectionModel.selectedIndex = popUpModel.selectedIndex; // IEventDispatcher(_strand).dispatchEvent(new Event(Event.CHANGE)); // } - + } } diff --git a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/controllers/ListSingleSelectionMouseController.as b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/controllers/ListSingleSelectionMouseController.as index c19ce5f..604b55e 100644 --- a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/controllers/ListSingleSelectionMouseController.as +++ b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/controllers/ListSingleSelectionMouseController.as @@ -30,8 +30,9 @@ package org.apache.royale.jewel.beads.controllers import org.apache.royale.events.ItemClickedEvent; import org.apache.royale.events.ItemRemovedEvent; import org.apache.royale.html.beads.IListView; +import org.apache.royale.jewel.beads.models.IJewelSelectionModel; - /** +/** * The ListSingleSelectionMouseController class is a controller for * org.apache.royale.jewel.List. Controllers * watch for events from the interactive portions of a View and @@ -40,7 +41,7 @@ package org.apache.royale.jewel.beads.controllers * and updates an ISelectionModel (which only supports single * selection). Other controller/model pairs would support * various kinds of multiple selection. - * + * * @langversion 3.0 * @playerversion Flash 10.2 * @playerversion AIR 2.6 @@ -50,7 +51,7 @@ package org.apache.royale.jewel.beads.controllers { /** * Constructor. - * + * * @langversion 3.0 * @playerversion Flash 10.2 * @playerversion AIR 2.6 @@ -59,10 +60,10 @@ package org.apache.royale.jewel.beads.controllers public function ListSingleSelectionMouseController() { } - + /** * The model. - * + * * @langversion 3.0 * @playerversion Flash 10.2 * @playerversion AIR 2.6 @@ -72,7 +73,7 @@ package org.apache.royale.jewel.beads.controllers /** * The view. - * + * * @langversion 3.0 * @playerversion Flash 10.2 * @playerversion AIR 2.6 @@ -82,7 +83,7 @@ package org.apache.royale.jewel.beads.controllers /** * The parent of the item renderers. - * + * * @langversion 3.0 * @playerversion Flash 10.2 * @playerversion AIR 2.6 @@ -91,10 +92,10 @@ package org.apache.royale.jewel.beads.controllers protected var dataGroup:IItemRendererParent; private var _strand:IStrand; - + /** * @copy org.apache.royale.core.IBead#strand - * + * * @langversion 3.0 * @playerversion Flash 10.2 * @playerversion AIR 2.6 @@ -110,8 +111,15 @@ package org.apache.royale.jewel.beads.controllers listView = value.getBeadByType(IListView) as IListView; IEventDispatcher(_strand).addEventListener("itemAdded", handleItemAdded); IEventDispatcher(_strand).addEventListener("itemRemoved", handleItemRemoved); + if (listModel is IJewelSelectionModel) { + IJewelSelectionModel(listModel).dispatcher = IEventDispatcher(value); + } + else { + IEventDispatcher(listModel).addEventListener('selectionChanged', modelChangeHandler); + IEventDispatcher(listModel).addEventListener('dataProviderChanged', modelChangeHandler); + } } - + /** * @royaleignorecoercion org.apache.royale.events.IEventDispatcher */ @@ -121,7 +129,7 @@ package org.apache.royale.jewel.beads.controllers IEventDispatcher(event.item).addEventListener("itemRollOver", rolloverHandler); IEventDispatcher(event.item).addEventListener("itemRollOut", rolloutHandler); } - + /** * @royaleignorecoercion org.apache.royale.events.IEventDispatcher */ @@ -131,14 +139,18 @@ package org.apache.royale.jewel.beads.controllers IEventDispatcher(event.item).removeEventListener("itemRollOver", rolloverHandler); IEventDispatcher(event.item).removeEventListener("itemRollOut", rolloutHandler); } - + protected function selectedHandler(event:ItemClickedEvent):void { listModel.selectedIndex = event.index; listModel.selectedItem = event.data; listView.host.dispatchEvent(new Event(Event.CHANGE)); } - + + protected function modelChangeHandler(event:Event):void{ + IEventDispatcher(_strand).dispatchEvent(new Event(event.type)); + } + /** * @royaleemitcoercion org.apache.royale.core.ISelectableItemRenderer * @royaleignorecoercion org.apache.royale.core.IRollOverModel @@ -150,7 +162,7 @@ package org.apache.royale.jewel.beads.controllers IRollOverModel(listModel).rollOverIndex = renderer.index; } } - + /** * @royaleemitcoercion org.apache.royale.core.ISelectableItemRenderer * @royaleignorecoercion org.apache.royale.core.IRollOverModel @@ -164,6 +176,6 @@ package org.apache.royale.jewel.beads.controllers IRollOverModel(listModel).rollOverIndex = -1; } } - + } } diff --git a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/controls/DispatchChangeOnStartup.as b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/controls/DispatchChangeOnStartup.as index cf6ef81..94529e4 100644 --- a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/controls/DispatchChangeOnStartup.as +++ b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/controls/DispatchChangeOnStartup.as @@ -22,11 +22,11 @@ package org.apache.royale.jewel.beads.controls import org.apache.royale.core.IStrand; import org.apache.royale.events.IEventDispatcher; import org.apache.royale.events.Event; - import org.apache.royale.jewel.beads.models.IJewelSelectionModel; + import org.apache.royale.core.ISelectionModel; /** * The DispatchChangeOnStartup bead class is a specialty bead that can be used - * with components that implements IJewelSelectionModel and uses dataProvider + * with components that implements ISelectionModel and uses dataProvider * to dispatch a CHANGE event when the component is initialized * * @langversion 3.0 @@ -63,12 +63,12 @@ package org.apache.royale.jewel.beads.controls public function set strand(value:IStrand):void { _strand = value; - IEventDispatcher(_strand).addEventListener('beadsAdded', onBeadsAdded); + IEventDispatcher(_strand).addEventListener('beadsAdded', listenToModel); } - /** - * adjust the way the model behaves for dispatching change events + * listen for the startup selectionChanged Event that occurs when dataprovider is assigned + * and there is a preselected index, fire a change event * * @langversion 3.0 * @playerversion Flash 10.2 @@ -76,37 +76,20 @@ package org.apache.royale.jewel.beads.controls * @productversion Royale 0.9.4 * @royaleignorecoercion org.apache.royale.events.IEventDispatcher */ - private function onBeadsAdded(event:Event):void + private function listenToModel(event:Event):void { - IEventDispatcher(_strand).removeEventListener('beadsAdded', onBeadsAdded); - const model:IJewelSelectionModel = _strand.getBeadByType(IJewelSelectionModel) as IJewelSelectionModel; + IEventDispatcher(_strand).removeEventListener('beadsAdded', listenToModel); + const model:ISelectionModel = _strand.getBeadByType(ISelectionModel) as ISelectionModel; if (model) { - IEventDispatcher(model).addEventListener('dataProviderChanged', onChange); - IEventDispatcher(model).addEventListener('selectedItemChanged', onChange); - IEventDispatcher(model).addEventListener('selectedIndexChanged', onChange); - } else { - //for now - throw new Error('DispatchChangeOnStartup bead is not yet compatible with the component it is being applied to'); + IEventDispatcher(model).addEventListener('selectionChanged', onChange); } } - private var _sawDataProviderChange:Boolean; private function onChange(event:Event):void{ - if (event.type == 'dataProviderChanged') { - _sawDataProviderChange = true; - return; - } - //event here is normal change event - if (!_sawDataProviderChange) { - //wait for a change event after dataProviderChange? needs review, maybe not - return; - } - const model:IJewelSelectionModel = _strand.getBeadByType(IJewelSelectionModel) as IJewelSelectionModel; - IEventDispatcher(model).removeEventListener('dataProviderChanged', onChange); - IEventDispatcher(model).removeEventListener('selectedItemChanged', onChange); - IEventDispatcher(model).removeEventListener('selectedIndexChanged', onChange); + const model:ISelectionModel = _strand.getBeadByType(ISelectionModel) as ISelectionModel; + IEventDispatcher(model).removeEventListener('selectionChanged', onChange); + IEventDispatcher(_strand).dispatchEvent(new Event('change')); - IEventDispatcher(_strand).dispatchEvent(new Event("change")); } } } diff --git a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/controls/combobox/SearchFilter.as b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/controls/combobox/SearchFilter.as index dbf444c..7ac6b59 100644 --- a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/controls/combobox/SearchFilter.as +++ b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/controls/combobox/SearchFilter.as @@ -115,7 +115,7 @@ package org.apache.royale.jewel.beads.controls.combobox { const inputBase:TextInputBase = event.target as TextInputBase; //keyup can include other things like tab navigation - IComboBoxView + if (!inputBase) { //if (popUpVisible) event.target.parent.view.popUpVisible = false; return; @@ -153,10 +153,10 @@ package org.apache.royale.jewel.beads.controls.combobox ir.visible = false; } } - if (count == 1) { + /* if (count == 1) { //select lastActive if there is only one that matches? - } + }*/ } } diff --git a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/itemRenderers/AddListItemRendererForArrayListData.as b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/itemRenderers/AddListItemRendererForArrayListData.as index 36311b8..498cf62 100644 --- a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/itemRenderers/AddListItemRendererForArrayListData.as +++ b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/itemRenderers/AddListItemRendererForArrayListData.as @@ -75,7 +75,7 @@ package org.apache.royale.jewel.beads.itemRenderers _strand = value; IEventDispatcher(value).addEventListener("initComplete", initComplete); } - + /** * finish setup * @@ -87,16 +87,16 @@ package org.apache.royale.jewel.beads.itemRenderers protected function initComplete(event:Event):void { IEventDispatcher(_strand).removeEventListener("initComplete", initComplete); - + _dataProviderModel = _strand.getBeadByType(ISelectionModel) as ISelectionModel; labelField = _dataProviderModel.labelField; - dataProviderModel.addEventListener("dataProviderChanged", dataProviderChangeHandler); + dataProviderModel.addEventListener("dataProviderChanged", dataProviderChangeHandler); // invoke now in case "dataProviderChanged" has already been dispatched. dataProviderChangeHandler(null); } - + private var dp:IEventDispatcher; /** * @private @@ -110,7 +110,7 @@ package org.apache.royale.jewel.beads.itemRenderers dp = dataProviderModel.dataProvider as IEventDispatcher; if (!dp) return; - + // listen for individual items being added in the future. dp.addEventListener(CollectionEvent.ITEM_ADDED, handleItemAdded); } @@ -124,6 +124,7 @@ package org.apache.royale.jewel.beads.itemRenderers * @productversion Royale 0.9.4 * @royaleignorecoercion org.apache.royale.core.ISelectableItemRenderer * @royaleignorecoercion org.apache.royale.events.IEventDispatcher + * @royaleignorecoercion org.apache.royale.core.ISelectionModel */ protected function handleItemAdded(event:CollectionEvent):void { @@ -131,7 +132,8 @@ package org.apache.royale.jewel.beads.itemRenderers var ir:ISelectableItemRenderer = itemRendererFactory.createItemRenderer(itemRendererParent) as ISelectableItemRenderer; fillRenderer(event.index, event.item, ir, presentationModel); - + + // update the index values in the itemRenderers to correspond to their shifted positions. var n:int = itemRendererParent.numItemRenderers; for (var i:int = event.index; i < n; i++) @@ -139,6 +141,10 @@ package org.apache.royale.jewel.beads.itemRenderers ir = itemRendererParent.getItemRendererAt(i) as ISelectableItemRenderer; ir.index = i; } + //adjust the model's selectedIndex, if applicable + if (event.index <= ISelectionModel(_dataProviderModel).selectedIndex) { + ISelectionModel(_dataProviderModel).selectedIndex = ISelectionModel(_dataProviderModel).selectedIndex + 1; + } (_strand as IEventDispatcher).dispatchEvent(new Event("layoutNeeded")); } diff --git a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/itemRenderers/RemoveListItemRendererForArrayListData.as b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/itemRenderers/RemoveListItemRendererForArrayListData.as index d591553..eec8ea5 100644 --- a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/itemRenderers/RemoveListItemRendererForArrayListData.as +++ b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/itemRenderers/RemoveListItemRendererForArrayListData.as @@ -32,7 +32,7 @@ package org.apache.royale.jewel.beads.itemRenderers import org.apache.royale.html.beads.IListView; /** - * Handles the removal of an itemRenderer in a List component once the corresponding + * Handles the removal of an itemRenderer in a List component once the corresponding * datum has been removed from the IDataProviderModel. * * @langversion 3.0 @@ -69,7 +69,7 @@ package org.apache.royale.jewel.beads.itemRenderers _strand = value; IEventDispatcher(value).addEventListener("initComplete", initComplete); } - + /** * finish setup * @@ -81,14 +81,14 @@ package org.apache.royale.jewel.beads.itemRenderers protected function initComplete(event:Event):void { IEventDispatcher(_strand).removeEventListener("initComplete", initComplete); - + _dataProviderModel = _strand.getBeadByType(ISelectionModel) as ISelectionModel; - dataProviderModel.addEventListener("dataProviderChanged", dataProviderChangeHandler); - + dataProviderModel.addEventListener("dataProviderChanged", dataProviderChangeHandler); + // invoke now in case "dataProviderChanged" has already been dispatched. dataProviderChangeHandler(null); } - + private var dp:IEventDispatcher; /** * @private @@ -102,7 +102,7 @@ package org.apache.royale.jewel.beads.itemRenderers dp = dataProviderModel.dataProvider as IEventDispatcher; if (!dp) return; - + // listen for individual items being removed in the future. dp.addEventListener(CollectionEvent.ITEM_REMOVED, handleItemRemoved); } @@ -116,12 +116,13 @@ package org.apache.royale.jewel.beads.itemRenderers * @productversion Royale 0.9.4 * @royaleignorecoercion org.apache.royale.core.ISelectableItemRenderer * @royaleignorecoercion org.apache.royale.events.IEventDispatcher + * @royaleignorecoercion org.apache.royale.core.ISelectionModel */ protected function handleItemRemoved(event:CollectionEvent):void { var ir:ISelectableItemRenderer = itemRendererParent.getItemRendererAt(event.index) as ISelectableItemRenderer; itemRendererParent.removeItemRenderer(ir); - + // adjust the itemRenderers' index to adjust for the shift var n:int = itemRendererParent.numItemRenderers; for (var i:int = event.index; i < n; i++) @@ -129,6 +130,12 @@ package org.apache.royale.jewel.beads.itemRenderers ir = itemRendererParent.getItemRendererAt(i) as ISelectableItemRenderer; ir.index = i; } + //adjust the model's selectedIndex, if applicable + if (event.index < ISelectionModel(_dataProviderModel).selectedIndex) { + ISelectionModel(_dataProviderModel).selectedIndex = ISelectionModel(_dataProviderModel).selectedIndex - 1; + } else if (event.index == ISelectionModel(_dataProviderModel).selectedIndex) { + ISelectionModel(_dataProviderModel).selectedIndex = -1; + } (_strand as IEventDispatcher).dispatchEvent(new Event("layoutNeeded")); } diff --git a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/itemRenderers/UpdateListItemRendererForArrayListData.as b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/itemRenderers/UpdateListItemRendererForArrayListData.as index 245eea4..2f511dd 100644 --- a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/itemRenderers/UpdateListItemRendererForArrayListData.as +++ b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/itemRenderers/UpdateListItemRendererForArrayListData.as @@ -31,7 +31,7 @@ package org.apache.royale.jewel.beads.itemRenderers import org.apache.royale.html.beads.IListView; /** - * Handles the update of an itemRenderer in a List component once the corresponding + * Handles the update of an itemRenderer in a List component once the corresponding * datum has been updated from the IDataProviderModel. * * @langversion 3.0 @@ -71,7 +71,7 @@ package org.apache.royale.jewel.beads.itemRenderers _strand = value; IEventDispatcher(value).addEventListener("initComplete", initComplete); } - + /** * finish setup * @@ -84,16 +84,16 @@ package org.apache.royale.jewel.beads.itemRenderers protected function initComplete(event:Event):void { IEventDispatcher(_strand).removeEventListener("initComplete", initComplete); - + _dataProviderModel = _strand.getBeadByType(ISelectionModel) as ISelectionModel; labelField = _dataProviderModel.labelField; - dataProviderModel.addEventListener("dataProviderChanged", dataProviderChangeHandler); + dataProviderModel.addEventListener("dataProviderChanged", dataProviderChangeHandler); // invoke now in case "dataProviderChanged" has already been dispatched. dataProviderChangeHandler(null); } - + private var dp:IEventDispatcher; /** * @private @@ -108,7 +108,7 @@ package org.apache.royale.jewel.beads.itemRenderers dp = dataProviderModel.dataProvider as IEventDispatcher; if (!dp) return; - + // listen for individual items being updated in the future. dp.addEventListener(CollectionEvent.ITEM_UPDATED, handleItemUpdated); } @@ -121,13 +121,20 @@ package org.apache.royale.jewel.beads.itemRenderers * @playerversion AIR 2.6 * @productversion Royale 0.9.4 * @royaleignorecoercion org.apache.royale.events.IEventDispatcher + * @royaleignorecoercion org.apache.royale.core.ISelectionModel */ protected function handleItemUpdated(event:CollectionEvent):void { var ir:ISelectableItemRenderer = itemRendererParent.getItemRendererAt(event.index) as ISelectableItemRenderer; - + setData(ir, event.item, event.index); + if (event.index == ISelectionModel(_dataProviderModel).selectedIndex) { + //manually trigger a selection change, even if there was actually none. + //This causes selection-based bindings to work + IEventDispatcher(_dataProviderModel).dispatchEvent(new Event('selectionChanged')); + } + (_strand as IEventDispatcher).dispatchEvent(new Event("layoutNeeded")); } diff --git a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/models/ArrayListSelectionModel.as b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/models/ArrayListSelectionModel.as index 3da08ee..74c10b3 100644 --- a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/models/ArrayListSelectionModel.as +++ b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/models/ArrayListSelectionModel.as @@ -20,10 +20,15 @@ package org.apache.royale.jewel.beads.models { import org.apache.royale.collections.IArrayList; import org.apache.royale.core.IRollOverModel; - import org.apache.royale.core.ISelectionModel; import org.apache.royale.core.IStrand; import org.apache.royale.events.Event; import org.apache.royale.events.EventDispatcher; + import org.apache.royale.events.IEventDispatcher; + import org.apache.royale.jewel.beads.models.IJewelSelectionModel; + + COMPILE::SWF{ + import flash.events.Event; + } /** * The ArrayListSelectionModel class is a selection model for @@ -35,7 +40,7 @@ package org.apache.royale.jewel.beads.models * @playerversion AIR 2.6 * @productversion Royale 0.9.4 */ - public class ArrayListSelectionModel extends EventDispatcher implements IJewelSelectionModel, IRollOverModel + public class ArrayListSelectionModel implements IJewelSelectionModel, IRollOverModel { /** * Constructor. @@ -49,10 +54,65 @@ package org.apache.royale.jewel.beads.models { } - private var _dispatchChangeOnDataChange:Boolean; - public function set dispatchChangeOnDataProviderChange(value:Boolean):void{ - _dispatchChangeOnDataChange = value; + //IJewelSelectionModel + private var _dispatcher:IEventDispatcher; + private function getDispatcher():IEventDispatcher { + if (!_dispatcher) _dispatcher = new EventDispatcher(this) as IEventDispatcher; + return _dispatcher; + } + public function set dispatcher(value:IEventDispatcher):void{ + _dispatcher = value; + } + + //IEventDispatcher JS + COMPILE::JS + public function addEventListener(type:String, handler:Function, opt_capture:Boolean = false, opt_handlerScope:Object = null):void{ + getDispatcher().addEventListener(type, handler, opt_capture, opt_handlerScope); } + COMPILE::JS + public function removeEventListener(type:String, handler:Function, opt_capture:Boolean = false, opt_handlerScope:Object = null):void{ + getDispatcher().removeEventListener(type, handler, opt_capture, opt_handlerScope); + } + + COMPILE::JS + public function dispatchEvent(event:Object):Boolean{ + return getDispatcher().dispatchEvent(event); + } + + + + //IEventDispatcher SWF + COMPILE::SWF + public function addEventListener(type:String, listener:Function, useCapture:Boolean = false, priority:int = 0, useWeakReference:Boolean = false):void { + getDispatcher().addEventListener(type, listener, useCapture, priority, useWeakReference); + } + COMPILE::SWF + public function removeEventListener(type:String, listener:Function, useCapture:Boolean = false):void{ + getDispatcher().removeEventListener(type, listener, useCapture); + } + + COMPILE::SWF + public function dispatchEvent(event:flash.events.Event):Boolean{ + return getDispatcher().dispatchEvent(event); + } + + COMPILE::SWF + public function willTrigger(type:String):Boolean{ + return getDispatcher().willTrigger(type); + } + + //IEventDispatcher (shared) + public function hasEventListener(type:String):Boolean{ + return getDispatcher().hasEventListener(type); + } + + /** + * @private + */ + protected function dispatchChange(eventName:String):void{ + dispatchEvent(new org.apache.royale.events.Event(eventName)); + } + private var _strand:IStrand; @@ -69,17 +129,9 @@ package org.apache.royale.jewel.beads.models _strand = value; } - private var _processingInteractiveChange:Boolean = false; - public function setProcessingInteractiveChange(value:Boolean):void{ - _processingInteractiveChange = value; - } - protected function get processingInteractiveChange():Boolean{ - return _processingInteractiveChange; - } private var _dataProvider:IArrayList; - [Bindable("dataProviderChanged")] /** * @copy org.apache.royale.core.ISelectionModel#dataProvider * @@ -127,11 +179,10 @@ package org.apache.royale.jewel.beads.models _selectedIndex = -1; } - dispatchEvent(new Event("dataProviderChanged")); - if (itemChanged) - dispatchEvent(new Event("selectedItemChanged")); - if (oldIndex != _selectedIndex) - dispatchEvent(new Event("selectedIndexChanged")); + dispatchChange("dataProviderChanged"); + if (itemChanged || oldIndex != _selectedIndex) { + dispatchChange("selectionChanged"); + } } private var _selectedIndex:int = -1; @@ -158,7 +209,7 @@ package org.apache.royale.jewel.beads.models { if (value != _labelField) { _labelField = value; - dispatchEvent(new Event("labelFieldChanged")); + dispatchChange("labelFieldChanged"); } } @@ -186,7 +237,6 @@ package org.apache.royale.jewel.beads.models } if (value == _selectedIndex) return; - const oldItem:Object = _selectedItem; _selectedIndex = value < _dataProvider.length ? value : _dataProvider.length - 1; if (_selectedIndex != -1) { _selectedItem = _dataProvider.getItemAt(_selectedIndex); @@ -194,9 +244,7 @@ package org.apache.royale.jewel.beads.models _selectedItem = null; } - if ( oldItem != _selectedItem) - dispatchEvent(new Event("selectedItemChanged")); - dispatchEvent(new Event("selectedIndexChanged")); + dispatchChange("selectionChanged"); } /** @@ -219,7 +267,7 @@ package org.apache.royale.jewel.beads.models { if (value != _rollOverIndex) { _rollOverIndex = value; - dispatchEvent(new Event("rollOverIndexChanged")); + dispatchChange("rollOverIndexChanged"); } } @@ -243,22 +291,26 @@ package org.apache.royale.jewel.beads.models */ public function set selectedItem(value:Object):void { - if (value == _selectedItem) return; - _selectedItem = value; - if (_dataProvider) { - const indexChanged:Boolean = _selectedIndex != (_selectedIndex = _dataProvider.getItemIndex(value)); - - dispatchEvent(new Event("selectedItemChanged")); - if (indexChanged) - dispatchEvent(new Event("selectedIndexChanged")); - } + if (value == _selectedItem) { + if (_dataProvider) { + if (_selectedIndex != (_selectedIndex = _dataProvider.getItemIndex(value))) { + dispatchChange("selectionChanged"); + } + } + } else { + _selectedItem = value; + if (_dataProvider) { + _selectedIndex = _dataProvider.getItemIndex(value); + dispatchChange("selectionChanged"); + } + } } private var _selectedString:String; /** * An alternative to selectedItem for strongly typing the - * the selectedItem if the Array is an Array of Strings. + * the selectedItem if the dataProvider is an ArrayList of Strings. * * @langversion 3.0 * @playerversion Flash 10.2 @@ -277,6 +329,7 @@ package org.apache.royale.jewel.beads.models { _selectedString = value; var n:int = _dataProvider.length; + var oldIndex:int = _selectedIndex; for (var i:int = 0; i < n; i++) { if (String(_dataProvider.getItemAt(i)) == value) @@ -285,8 +338,10 @@ package org.apache.royale.jewel.beads.models break; } } - dispatchEvent(new Event("selectedItemChanged")); - dispatchEvent(new Event("selectedIndexChanged")); + if (_selectedIndex != oldIndex) { + dispatchChange("selectionChanged"); + } + } } } diff --git a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/models/ComboBoxModel.as b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/models/ComboBoxModel.as index 9d3f097..11757f0 100644 --- a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/models/ComboBoxModel.as +++ b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/models/ComboBoxModel.as @@ -22,11 +22,11 @@ package org.apache.royale.jewel.beads.models import org.apache.royale.core.IBead; import org.apache.royale.core.IComboBoxModel; import org.apache.royale.events.Event; - + /** - * The ComboBoxModel class bead extends org.apache.royale.jewel.beads.models.ArrayListSelectionModel + * The ComboBoxModel class bead extends org.apache.royale.jewel.beads.models.ArrayListSelectionModel * and adds the text being displayed by the org.apache.royale.jewel.ComboBox's input field. - * + * * @langversion 3.0 * @playerversion Flash 10.2 * @playerversion AIR 2.6 @@ -36,7 +36,7 @@ package org.apache.royale.jewel.beads.models { /** * constructor. - * + * * @langversion 3.0 * @playerversion Flash 10.2 * @playerversion AIR 2.6 @@ -47,12 +47,12 @@ package org.apache.royale.jewel.beads.models } private var _text:String; - + /** * The string to display in the org.apache.royale.html.ComboBox input field. - * + * * @copy org.apache.royale.core.IComboBoxModel#text - * + * * @langversion 3.0 * @playerversion Flash 10.2 * @playerversion AIR 2.6 @@ -62,23 +62,23 @@ package org.apache.royale.jewel.beads.models { return _text; } - + public function set text(value:String):void { if (value != _text) { _text = value; - dispatchEvent(new Event("textChange")); + dispatchChange("textChange"); } } - + private var _html:String; - + /** * The HTML string to display in the org.apache.royale.html.ComboBox input field. - * + * * @copy org.apache.royale.core.IComboBoxModel#html - * + * * @langversion 3.0 * @playerversion Flash 10.2 * @playerversion AIR 2.6 @@ -88,13 +88,13 @@ package org.apache.royale.jewel.beads.models { return _html; } - + public function set html(value:String):void { if (value != _html) { _html = value; - dispatchEvent(new Event("htmlChange")); + dispatchChange("htmlChange"); } } } diff --git a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/models/IDropDownListModel.as b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/models/IDropDownListModel.as index 43c75b3..eec3c8d 100644 --- a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/models/IDropDownListModel.as +++ b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/models/IDropDownListModel.as @@ -30,6 +30,5 @@ package org.apache.royale.jewel.beads.models { function get offset():int; - function setProcessingInteractiveChange(value:Boolean):void; } } diff --git a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/models/IJewelSelectionModel.as b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/models/IJewelSelectionModel.as index 62903df..9a0cadd 100644 --- a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/models/IJewelSelectionModel.as +++ b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/models/IJewelSelectionModel.as @@ -20,6 +20,7 @@ package org.apache.royale.jewel.beads.models { import org.apache.royale.core.ISelectionModel; + import org.apache.royale.events.IEventDispatcher /** * The IJewelSelectionModel interface is a simple extension to core ISelectionModel @@ -31,6 +32,6 @@ package org.apache.royale.jewel.beads.models */ public interface IJewelSelectionModel extends ISelectionModel { - function set dispatchChangeOnDataProviderChange(value:Boolean):void + function set dispatcher(value:IEventDispatcher):void; } } diff --git a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/views/ComboBoxView.as b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/views/ComboBoxView.as index cb029ea..b54e12b 100644 --- a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/views/ComboBoxView.as +++ b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/views/ComboBoxView.as @@ -18,7 +18,9 @@ //////////////////////////////////////////////////////////////////////////////// package org.apache.royale.jewel.beads.views { - COMPILE::SWF +import org.apache.royale.jewel.beads.models.IJewelSelectionModel; + +COMPILE::SWF { import flash.utils.setTimeout; } @@ -138,8 +140,14 @@ package org.apache.royale.jewel.beads.views host.addElement(_button); model = _strand.getBeadByType(IComboBoxModel) as IComboBoxModel; - model.addEventListener("selectedIndexChanged", handleItemChange); - model.addEventListener("selectedItemChanged", handleItemChange); + + if (model is IJewelSelectionModel) { + //do this here as well as in the controller, + //to cover possible variation in the order of bead instantiation + //this avoids the need to redispatch new event clones at the component level in the controller + IJewelSelectionModel(model).dispatcher = IEventDispatcher(value); + } + model.addEventListener("selectionChanged", handleItemChange); model.addEventListener("dataProviderChanged", itemChangeAction); IEventDispatcher(_strand).addEventListener("sizeChanged", handleSizeChange); diff --git a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/views/DropDownListView.as b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/views/DropDownListView.as index 36cd549..a43aba0 100644 --- a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/views/DropDownListView.as +++ b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/views/DropDownListView.as @@ -101,7 +101,7 @@ COMPILE::JS override protected function handleInitComplete(event:Event):void { model = _strand.getBeadByType(ISelectionModel) as ISelectionModel; - model.addEventListener("selectedIndexChanged", selectionChangeHandler); + model.addEventListener("selectionChanged", selectionChangeHandler); super.handleInitComplete(event); } diff --git a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/views/ListView.as b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/views/ListView.as index 3f6ab5d..e64912d 100644 --- a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/views/ListView.as +++ b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/views/ListView.as @@ -89,7 +89,7 @@ package org.apache.royale.jewel.beads.views override protected function handleInitComplete(event:Event):void { listModel = _strand.getBeadByType(ISelectionModel) as ISelectionModel; - listModel.addEventListener("selectedIndexChanged", selectionChangeHandler); + listModel.addEventListener("selectionChanged", selectionChangeHandler); listModel.addEventListener("rollOverIndexChanged", rollOverIndexChangeHandler); IEventDispatcher(_strand).addEventListener("itemsCreated", itemsCreatedHandler); @@ -187,7 +187,7 @@ package org.apache.royale.jewel.beads.views super.handleInitComplete(event); listModel = _strand.getBeadByType(ISelectionModel) as ISelectionModel; - listModel.addEventListener("selectedIndexChanged", selectionChangeHandler); + listModel.addEventListener("selectionChanged", selectionChangeHandler); listModel.addEventListener("rollOverIndexChanged", rollOverIndexChangeHandler); } @@ -220,7 +220,7 @@ package org.apache.royale.jewel.beads.views ir = dataGroup.getItemRendererAt(IRollOverModel(listModel).rollOverIndex) as ISelectableItemRenderer; if(ir) ir.hovered = true; - + lastRollOverIndex = IRollOverModel(listModel).rollOverIndex; } }
