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>
 

Reply via email to