This is an automated email from the ASF dual-hosted git repository.

carlosrovira pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/royale-asjs.git


The following commit(s) were added to refs/heads/develop by this push:
     new cae0fe6  jewel-list: decouple mouse controller from key controller
cae0fe6 is described below

commit cae0fe6cbadcbb06de3a56b86808af211cfe0a9c
Author: Carlos Rovira <[email protected]>
AuthorDate: Fri Apr 24 18:21:50 2020 +0200

    jewel-list: decouple mouse controller from key controller
---
 ...MouseController.as => ListKeyDownController.as} | 70 +++++++++++-----------
 .../ListSingleSelectionMouseController.as          | 49 ---------------
 .../apache/royale/jewel/beads/views/ListView.as    |  3 +
 3 files changed, 37 insertions(+), 85 deletions(-)

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/ListKeyDownController.as
similarity index 69%
copy from 
frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/controllers/ListSingleSelectionMouseController.as
copy to 
frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/controllers/ListKeyDownController.as
index f6b273d..2ac03ff 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/ListKeyDownController.as
@@ -18,13 +18,13 @@
 
////////////////////////////////////////////////////////////////////////////////
 package org.apache.royale.jewel.beads.controllers
 {
+       import org.apache.royale.core.Bead;
+       import org.apache.royale.core.IBeadController;
        import org.apache.royale.core.IFocusable;
+       import org.apache.royale.core.ISelectionModel;
        import org.apache.royale.core.IStrand;
-       import org.apache.royale.events.Event;
-       import org.apache.royale.events.IEventDispatcher;
        import org.apache.royale.events.KeyboardEvent;
-       import 
org.apache.royale.html.beads.controllers.ListSingleSelectionMouseController;
-       import org.apache.royale.jewel.beads.models.IJewelSelectionModel;
+       import org.apache.royale.html.beads.IListView;
        import org.apache.royale.jewel.beads.views.IScrollToIndexView;
        import org.apache.royale.utils.sendEvent;
 
@@ -44,9 +44,9 @@ package org.apache.royale.jewel.beads.controllers
      *  @langversion 3.0
      *  @playerversion Flash 10.2
      *  @playerversion AIR 2.6
-     *  @productversion Royale 0.9.4
+     *  @productversion Royale 0.9.7
      */
-       public class ListSingleSelectionMouseController extends 
org.apache.royale.html.beads.controllers.ListSingleSelectionMouseController
+       public class ListKeyDownController extends Bead implements 
IBeadController
        {
         /**
          *  Constructor.
@@ -54,19 +54,39 @@ package org.apache.royale.jewel.beads.controllers
          *  @langversion 3.0
          *  @playerversion Flash 10.2
          *  @playerversion AIR 2.6
-         *  @productversion Royale 0.9.4
+         *  @productversion Royale 0.9.7
          */
-               public function ListSingleSelectionMouseController()
+               public function ListKeyDownController()
                {
                }
 
+               /**
+                *  The model.
+                *  
+                *  @langversion 3.0
+                *  @playerversion Flash 10.2
+                *  @playerversion AIR 2.6
+                *  @productversion Royale 0.9.7
+                */
+               protected var listModel:ISelectionModel;
+
+               /**
+                *  The view.
+                *  
+                *  @langversion 3.0
+                *  @playerversion Flash 10.2
+                *  @playerversion AIR 2.6
+                *  @productversion Royale 0.9.7
+                */
+               protected var listView:IListView;
+
         /**
          *  @copy org.apache.royale.core.IBead#strand
          *
          *  @langversion 3.0
          *  @playerversion Flash 10.2
          *  @playerversion AIR 2.6
-         *  @productversion Royale 0.9.4
+         *  @productversion Royale 0.9.7
          *  @royaleignorecoercion org.apache.royale.core.ISelectionModel
                 *  @royaleignorecoercion 
org.apache.royale.jewel.beads.models.IJewelSelectionModel
          *  @royaleignorecoercion org.apache.royale.events.IEventDispatcher
@@ -74,46 +94,24 @@ package org.apache.royale.jewel.beads.controllers
          */
                override public function set strand(value:IStrand):void
                {
-                       super.strand = value;
-
-            IEventDispatcher(_strand).addEventListener(KeyboardEvent.KEY_DOWN, 
keyEventHandler);
+                       _strand = value;
+                       listModel = value.getBeadByType(ISelectionModel) as 
ISelectionModel;
+                       listView = value.getBeadByType(IListView) as IListView;
 
-            //if the list is composed as part of another component, with a 
shared model (e.g. ComboBox) then it should not be the primary dispatcher
-                       if (listModel is IJewelSelectionModel && 
!(IJewelSelectionModel(listModel).hasDispatcher)) {
-                 IJewelSelectionModel(listModel).dispatcher = 
IEventDispatcher(value);
-                       }
-            else {
-                               
IEventDispatcher(listModel).addEventListener('rollOverIndexChanged', 
modelChangeHandler);
-                               
IEventDispatcher(listModel).addEventListener('selectionChanged', 
modelChangeHandler);
-                
IEventDispatcher(listModel).addEventListener('dataProviderChanged', 
modelChangeHandler);
-            }
+            listenOnStrand(KeyboardEvent.KEY_DOWN, keyEventHandler);
                }
 
         /**
-         * 
-         * @param event 
-         */
-        protected function modelChangeHandler(event:Event):void{
-            IEventDispatcher(_strand).dispatchEvent(new Event(event.type));
-        }
-
-        /**
                 * @private
                 */
                protected function keyEventHandler(event:KeyboardEvent):void
                {
-                       
                        // avoid Tab loose the normal behaviour, for navigation 
we don't want build int scrolling support in browsers
                        if(event.key === KeyboardEvent.KEYCODE__TAB)
                                return;
                        
                        event.preventDefault();
 
-                       // if(event.key === KeyboardEvent.KEYCODE__ENTER)
-                       // {
-                       //      return;
-                       // }
-
                        var index:int = listModel.selectedIndex;
 
                        if(event.key === KeyboardEvent.KEYCODE__UP || event.key 
=== KeyboardEvent.KEYCODE__LEFT)
@@ -130,7 +128,7 @@ package org.apache.royale.jewel.beads.controllers
                        {
                                listModel.selectedIndex = index;
                                listModel.selectedItem = 
listModel.dataProvider.getItemAt(index);
-                
+
                                var ir:IFocusable = 
listView.dataGroup.getItemRendererForIndex(index) as IFocusable;
                                ir.setFocus();
 
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 f6b273d..458be51 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
@@ -18,15 +18,11 @@
 
////////////////////////////////////////////////////////////////////////////////
 package org.apache.royale.jewel.beads.controllers
 {
-       import org.apache.royale.core.IFocusable;
        import org.apache.royale.core.IStrand;
        import org.apache.royale.events.Event;
        import org.apache.royale.events.IEventDispatcher;
-       import org.apache.royale.events.KeyboardEvent;
        import 
org.apache.royale.html.beads.controllers.ListSingleSelectionMouseController;
        import org.apache.royale.jewel.beads.models.IJewelSelectionModel;
-       import org.apache.royale.jewel.beads.views.IScrollToIndexView;
-       import org.apache.royale.utils.sendEvent;
 
     /**
      *  The Jewel ListSingleSelectionMouseController class is a controller for
@@ -76,8 +72,6 @@ package org.apache.royale.jewel.beads.controllers
                {
                        super.strand = value;
 
-            IEventDispatcher(_strand).addEventListener(KeyboardEvent.KEY_DOWN, 
keyEventHandler);
-
             //if the list is composed as part of another component, with a 
shared model (e.g. ComboBox) then it should not be the primary dispatcher
                        if (listModel is IJewelSelectionModel && 
!(IJewelSelectionModel(listModel).hasDispatcher)) {
                  IJewelSelectionModel(listModel).dispatcher = 
IEventDispatcher(value);
@@ -96,48 +90,5 @@ package org.apache.royale.jewel.beads.controllers
         protected function modelChangeHandler(event:Event):void{
             IEventDispatcher(_strand).dispatchEvent(new Event(event.type));
         }
-
-        /**
-                * @private
-                */
-               protected function keyEventHandler(event:KeyboardEvent):void
-               {
-                       
-                       // avoid Tab loose the normal behaviour, for navigation 
we don't want build int scrolling support in browsers
-                       if(event.key === KeyboardEvent.KEYCODE__TAB)
-                               return;
-                       
-                       event.preventDefault();
-
-                       // if(event.key === KeyboardEvent.KEYCODE__ENTER)
-                       // {
-                       //      return;
-                       // }
-
-                       var index:int = listModel.selectedIndex;
-
-                       if(event.key === KeyboardEvent.KEYCODE__UP || event.key 
=== KeyboardEvent.KEYCODE__LEFT)
-                       {
-                               if(index > 0)
-                                       index--;
-                       } 
-                       else if(event.key === KeyboardEvent.KEYCODE__DOWN || 
event.key === KeyboardEvent.KEYCODE__RIGHT)
-                       {
-                               index++;
-                       }
-
-                       if(index != listModel.selectedIndex)
-                       {
-                               listModel.selectedIndex = index;
-                               listModel.selectedItem = 
listModel.dataProvider.getItemAt(index);
-                
-                               var ir:IFocusable = 
listView.dataGroup.getItemRendererForIndex(index) as IFocusable;
-                               ir.setFocus();
-
-                (listView as IScrollToIndexView).scrollToIndex(index);
-                               
-                               sendEvent(listView.host, 'change');
-                       }
-               }
        }
 }
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 dc8dba5..88c1678 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
@@ -34,6 +34,7 @@ package org.apache.royale.jewel.beads.views
        import org.apache.royale.core.ISelectionModel;
        import org.apache.royale.events.Event;
        import org.apache.royale.html.beads.DataContainerView;
+       import org.apache.royale.jewel.beads.controllers.ListKeyDownController;
        import org.apache.royale.jewel.beads.models.ListPresentationModel;
        import 
org.apache.royale.jewel.supportClasses.list.IListPresentationModel;
        import org.apache.royale.utils.getSelectionRenderBead;
@@ -91,6 +92,8 @@ package org.apache.royale.jewel.beads.views
                        listModel.addEventListener("rollOverIndexChanged", 
rollOverIndexChangeHandler);
                        
                        super.handleInitComplete(event);
+
+                       _strand.addBead(new ListKeyDownController());
                }
 
                /**

Reply via email to