You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@royale.apache.org by gr...@apache.org on 2018/12/21 22:29:24 UTC

[royale-asjs] 01/02: Made the dispatcher more accessible from the model. Fixes a bug in ComboBox.

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://gitbox.apache.org/repos/asf/royale-asjs.git

commit c7e9b6993fc5f4ebfa4c80e6e26f62ffbcffc44e
Author: greg-dove <gr...@gmail.com>
AuthorDate: Sat Dec 22 09:00:35 2018 +1300

    Made the dispatcher more accessible from the model. Fixes a bug in ComboBox.
---
 .../ListSingleSelectionMouseController.as          |  9 +++++---
 .../jewel/beads/models/ArrayListSelectionModel.as  | 26 +++++++++++++---------
 .../jewel/beads/models/IJewelSelectionModel.as     |  2 ++
 3 files changed, 24 insertions(+), 13 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/ListSingleSelectionMouseController.as
index 604b55e..08c426d 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,7 +30,7 @@ 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;
+	import org.apache.royale.jewel.beads.models.IJewelSelectionModel;
 
 /**
      *  The ListSingleSelectionMouseController class is a controller for
@@ -101,6 +101,7 @@ import org.apache.royale.jewel.beads.models.IJewelSelectionModel;
          *  @playerversion AIR 2.6
          *  @productversion Royale 0.9.4
          *  @royaleignorecoercion org.apache.royale.core.ISelectionModel
+		 *  @royaleignorecoercion org.apache.royale.jewel.beads.models.IJewelSelectionModel
          *  @royaleignorecoercion org.apache.royale.events.IEventDispatcher
          *  @royaleignorecoercion org.apache.royale.core.IListView
          */
@@ -111,8 +112,10 @@ import org.apache.royale.jewel.beads.models.IJewelSelectionModel;
 			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);
+
+            //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('selectionChanged', modelChangeHandler);
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 74c10b3..45c247a 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
@@ -56,27 +56,33 @@ package org.apache.royale.jewel.beads.models
 
 		//IJewelSelectionModel
 		private var _dispatcher:IEventDispatcher;
-        private function getDispatcher():IEventDispatcher {
-			if (!_dispatcher) _dispatcher = new EventDispatcher(this) as IEventDispatcher;
+        public function get dispatcher():IEventDispatcher {
+			if (!_dispatcher) {
+				_dispatcher = new EventDispatcher(this) as IEventDispatcher;
+            }
 			return _dispatcher;
 		}
         public function set dispatcher(value:IEventDispatcher):void{
 			_dispatcher = value;
 		}
 
+		public function get hasDispatcher():Boolean{
+			return !!_dispatcher;
+		}
+
 		//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);
+            dispatcher.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);
+            dispatcher.removeEventListener(type, handler, opt_capture, opt_handlerScope);
 		}
 
 		COMPILE::JS
 		public function dispatchEvent(event:Object):Boolean{
-			return getDispatcher().dispatchEvent(event);
+			return dispatcher.dispatchEvent(event);
 		}
 
 
@@ -84,26 +90,26 @@ package org.apache.royale.jewel.beads.models
         //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);
+            dispatcher.addEventListener(type, listener, useCapture, priority, useWeakReference);
 		}
 		COMPILE::SWF
 		public function removeEventListener(type:String, listener:Function, useCapture:Boolean = false):void{
-			getDispatcher().removeEventListener(type, listener, useCapture);
+            dispatcher.removeEventListener(type, listener, useCapture);
 		}
 
 		COMPILE::SWF
 		public function dispatchEvent(event:flash.events.Event):Boolean{
-			return getDispatcher().dispatchEvent(event);
+			return dispatcher.dispatchEvent(event);
 		}
 
         COMPILE::SWF
         public function willTrigger(type:String):Boolean{
-            return getDispatcher().willTrigger(type);
+            return dispatcher.willTrigger(type);
         }
 
 		//IEventDispatcher (shared)
         public function hasEventListener(type:String):Boolean{
-            return getDispatcher().hasEventListener(type);
+            return dispatcher.hasEventListener(type);
         }
 
         /**
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 9a0cadd..4a8b6d8 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
@@ -32,6 +32,8 @@ package org.apache.royale.jewel.beads.models
      */
     public interface IJewelSelectionModel extends ISelectionModel
     {
+        function get dispatcher():IEventDispatcher;
         function set dispatcher(value:IEventDispatcher):void;
+        function get hasDispatcher():Boolean;
     }
 }