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;
}
}