This is an automated email from the ASF dual-hosted git repository. aharui pushed a commit to branch develop in repository https://gitbox.apache.org/repos/asf/royale-asjs.git
commit daa2ee13ed04838f6e984601b08e4e3849fe1bd5 Author: Alex Harui <[email protected]> AuthorDate: Wed Feb 19 17:33:35 2020 -0800 refactor to propagate events so we don't have to send an event from the factory --- .../TodoListSingleSelectionMouseController.as | 59 ++++++++++++++++++++++ .../sample/todo/renderers/TodoItemRenderer.mxml | 12 +++-- .../royale/sample/todo/views/TodoListView.mxml | 24 +++++---- 3 files changed, 83 insertions(+), 12 deletions(-) diff --git a/examples/royale/TodoListSampleApp/src/main/royale/sample/todo/controllers/TodoListSingleSelectionMouseController.as b/examples/royale/TodoListSampleApp/src/main/royale/sample/todo/controllers/TodoListSingleSelectionMouseController.as new file mode 100644 index 0000000..13ba83e --- /dev/null +++ b/examples/royale/TodoListSampleApp/src/main/royale/sample/todo/controllers/TodoListSingleSelectionMouseController.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 sample.todo.controllers { + import org.apache.royale.html.beads.controllers.ListSingleSelectionMouseController; + import org.apache.royale.core.IItemRenderer; + import org.apache.royale.events.Event; + import org.apache.royale.events.IEventDispatcher; + import org.apache.royale.events.ItemAddedEvent; + import org.apache.royale.events.ItemRemovedEvent; + import org.apache.royale.events.ItemClickedEvent; + import org.apache.royale.events.ItemRendererEvent; + + public class TodoListSingleSelectionMouseController extends ListSingleSelectionMouseController { + + /** + * @royaleignorecoercion org.apache.royale.events.IEventDispatcher + */ + override protected function handleItemAdded(event:ItemAddedEvent):void + { + super.handleItemAdded(event); + IEventDispatcher(event.item).addEventListener("checkChanged", propagateHandler); + IEventDispatcher(event.item).addEventListener("removeRequest", propagateHandler); + } + + /** + * @royaleignorecoercion org.apache.royale.events.IEventDispatcher + */ + override protected function handleItemRemoved(event:ItemRemovedEvent):void + { + super.handleItemRemoved(event); + IEventDispatcher(event.item).removeEventListener("checkChanged", propagateHandler); + IEventDispatcher(event.item).removeEventListener("removeRequest", propagateHandler); + } + + protected function propagateHandler(event:ItemClickedEvent):void + { + var e:ItemRendererEvent = new ItemRendererEvent(event.type); + e.itemRenderer = event.target as IItemRenderer; + listView.host.dispatchEvent(e); + } + + } +} diff --git a/examples/royale/TodoListSampleApp/src/main/royale/sample/todo/renderers/TodoItemRenderer.mxml b/examples/royale/TodoListSampleApp/src/main/royale/sample/todo/renderers/TodoItemRenderer.mxml index 7c4817f..35a65c1 100644 --- a/examples/royale/TodoListSampleApp/src/main/royale/sample/todo/renderers/TodoItemRenderer.mxml +++ b/examples/royale/TodoListSampleApp/src/main/royale/sample/todo/renderers/TodoItemRenderer.mxml @@ -25,7 +25,7 @@ limitations under the License. <fx:Script> <![CDATA[ - import org.apache.royale.events.Event; + import org.apache.royale.events.ItemClickedEvent; import org.apache.royale.events.MouseEvent; import sample.todo.vo.ToDoVO; @@ -37,12 +37,18 @@ limitations under the License. private function checkBoxChange():void { - dispatchEvent(new org.apache.royale.events.Event("checkChanged")); + var e:ItemClickedEvent = new org.apache.royale.events.ItemClickedEvent("checkChanged"); + e.index = index; + e.data = data; + dispatchEvent(e); } private function removeClick():void { - dispatchEvent(new org.apache.royale.events.Event("removeRequest")); + var e:ItemClickedEvent = new org.apache.royale.events.ItemClickedEvent("removeRequest"); + e.index = index; + e.data = data; + dispatchEvent(e); } ]]> </fx:Script> diff --git a/examples/royale/TodoListSampleApp/src/main/royale/sample/todo/views/TodoListView.mxml b/examples/royale/TodoListSampleApp/src/main/royale/sample/todo/views/TodoListView.mxml index 701b330..92ebab0 100644 --- a/examples/royale/TodoListSampleApp/src/main/royale/sample/todo/views/TodoListView.mxml +++ b/examples/royale/TodoListSampleApp/src/main/royale/sample/todo/views/TodoListView.mxml @@ -21,7 +21,8 @@ limitations under the License. xmlns:js="library://ns.apache.org/royale/basic" xmlns:svg="library://ns.apache.org/royale/svg" initComplete="setup()" - xmlns:renderers="sample.todo.renderers.*"> + xmlns:renderers="sample.todo.renderers.*" + xmlns:controllers="sample.todo.controllers.*"> <fx:Style> @namespace basic "library://ns.apache.org/royale/basic"; @@ -48,6 +49,11 @@ limitations under the License. .StatusText { flex-grow: 1; } + + .todoList { + IBeadController: ClassReference("sample.todo.controllers.TodoListSingleSelectionMouseController"); + } + </fx:Style> <fx:Script> @@ -66,6 +72,8 @@ limitations under the License. // showActive() change the model which results in this event being // dispatched. (applicationModel as TodoListModel).addEventListener("todoListChanged", updateStatus); + todoList.addEventListener("checkChanged",itemChecked); + todoList.addEventListener("removeRequest",itemRemove); updateStatus(null); } @@ -120,16 +128,14 @@ limitations under the License. */ private function handleRendererCreated(event:ItemRendererEvent):void { var renderer:IEventDispatcher = event.itemRenderer as IEventDispatcher; - renderer.addEventListener("checkChanged",itemChecked); - renderer.addEventListener("removeRequest",itemRemove); } /** * When an item is checked, form new event and dispatch to controller. */ - private function itemChecked(event:Event):void + private function itemChecked(event:ItemRendererEvent):void { - var renderer:TodoItemRenderer = event.target as TodoItemRenderer; + var renderer:TodoItemRenderer = event.itemRenderer as TodoItemRenderer; var newEvent:TodoListEvent = new TodoListEvent(TodoListEvent.ITEM_CHECKED); newEvent.item = renderer.data; @@ -139,9 +145,9 @@ limitations under the License. /** * When an item is removed, form a new event and dispatch to the controller. */ - private function itemRemove(event:Event):void + private function itemRemove(event:ItemRendererEvent):void { - var renderer:TodoItemRenderer = event.target as TodoItemRenderer; + var renderer:TodoItemRenderer = event.itemRenderer as TodoItemRenderer; var newEvent:TodoListEvent = new TodoListEvent(TodoListEvent.ITEM_REMOVE_REQUEST); newEvent.item = renderer.data; @@ -165,12 +171,12 @@ limitations under the License. <js:TextButton text="Enter" click="logTodo()" width="15%" /> </js:HContainer> - <js:List id="todoList" + <js:List id="todoList" className="todoList" itemRenderer="sample.todo.renderers.TodoItemRenderer" dataProvider="{TodoListModel(applicationModel).todos}" width="100%" height="400"> <js:beads> - <js:DataItemRendererFactoryForArrayData itemRendererCreated="handleRendererCreated(event)" /> + <js:DataItemRendererFactoryForArrayData /> </js:beads> </js:List>
