You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@royale.apache.org by ca...@apache.org on 2020/07/29 07:27:14 UTC
[royale-asjs] branch develop updated: jewel-table: make
tablearrayselectionmodel more near to arrayselection model implementation
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 f7a8b0a jewel-table: make tablearrayselectionmodel more near to arrayselection model implementation
f7a8b0a is described below
commit f7a8b0a8dc0ad19ccc3cae2ba521e9e22541bc9a
Author: Carlos Rovira <ca...@apache.org>
AuthorDate: Wed Jul 29 09:26:56 2020 +0200
jewel-table: make tablearrayselectionmodel more near to arrayselection model implementation
---
.../TableCellSelectionMouseController.as | 20 +++++
.../beads/models/TableArrayListSelectionModel.as | 88 +++++++++++++++++++---
2 files changed, 98 insertions(+), 10 deletions(-)
diff --git a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/controllers/TableCellSelectionMouseController.as b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/controllers/TableCellSelectionMouseController.as
index b6711ae..1ebc4d3 100644
--- a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/controllers/TableCellSelectionMouseController.as
+++ b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/controllers/TableCellSelectionMouseController.as
@@ -32,6 +32,7 @@ package org.apache.royale.jewel.beads.controllers
import org.apache.royale.events.ItemRemovedEvent;
import org.apache.royale.html.beads.ITableView;
import org.apache.royale.html.supportClasses.StyledDataItemRenderer;
+ import org.apache.royale.jewel.beads.models.IJewelSelectionModel;
/**
* The TableCellSelectionMouseController class is a controller for
@@ -108,11 +109,30 @@ package org.apache.royale.jewel.beads.controllers
public function set strand(value:IStrand):void
{
_strand = value;
+
model = value.getBeadByType(ITableModel) as ITableModel;
view = value.getBeadByType(IBeadView) as ITableView;
IEventDispatcher(_strand).addEventListener("itemAdded", handleItemAdded);
IEventDispatcher(_strand).addEventListener("itemRemoved", handleItemRemoved);
+
+ //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 (model is IJewelSelectionModel && !(IJewelSelectionModel(model).hasDispatcher)) {
+ IJewelSelectionModel(model).dispatcher = IEventDispatcher(value);
+ }
+ else {
+ IEventDispatcher(model).addEventListener('rollOverIndexChanged', modelChangeHandler);
+ IEventDispatcher(model).addEventListener('selectionChanged', modelChangeHandler);
+ IEventDispatcher(model).addEventListener('dataProviderChanged', modelChangeHandler);
+ }
}
+
+ /**
+ *
+ * @param event
+ */
+ protected function modelChangeHandler(event:Event):void{
+ IEventDispatcher(_strand).dispatchEvent(new Event(event.type));
+ }
/**
* @royaleignorecoercion org.apache.royale.events.IEventDispatcher
diff --git a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/models/TableArrayListSelectionModel.as b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/models/TableArrayListSelectionModel.as
index 482d995..30908b8 100644
--- a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/models/TableArrayListSelectionModel.as
+++ b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/models/TableArrayListSelectionModel.as
@@ -18,12 +18,15 @@
////////////////////////////////////////////////////////////////////////////////
package org.apache.royale.jewel.beads.models
{
+ COMPILE::SWF{
+ import flash.events.Event;
+ }
import org.apache.royale.collections.IArrayList;
import org.apache.royale.core.IRollOverModel;
- import org.apache.royale.core.ISelectionModel;
import org.apache.royale.core.IStrand;
import org.apache.royale.events.Event;
import org.apache.royale.events.EventDispatcher;
+ import org.apache.royale.events.IEventDispatcher;
/**
* The ArrayListSelectionModel class is a selection model for
@@ -35,7 +38,7 @@ package org.apache.royale.jewel.beads.models
* @playerversion AIR 2.6
* @productversion Royale 0.9.4
*/
- public class TableArrayListSelectionModel extends EventDispatcher implements ISelectionModel, IRollOverModel
+ public class TableArrayListSelectionModel implements IJewelSelectionModel, IRollOverModel
{
/**
* Constructor.
@@ -49,6 +52,71 @@ package org.apache.royale.jewel.beads.models
{
}
+ //IJewelSelectionModel
+ private var _dispatcher: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{
+ 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{
+ dispatcher.removeEventListener(type, handler, opt_capture, opt_handlerScope);
+ }
+
+ COMPILE::JS
+ public function dispatchEvent(event:Object):Boolean{
+ return dispatcher.dispatchEvent(event);
+ }
+
+
+
+ //IEventDispatcher SWF
+ COMPILE::SWF
+ public function addEventListener(type:String, listener:Function, useCapture:Boolean = false, priority:int = 0, useWeakReference:Boolean = false):void {
+ dispatcher.addEventListener(type, listener, useCapture, priority, useWeakReference);
+ }
+ COMPILE::SWF
+ public function removeEventListener(type:String, listener:Function, useCapture:Boolean = false):void{
+ dispatcher.removeEventListener(type, listener, useCapture);
+ }
+
+ COMPILE::SWF
+ public function dispatchEvent(event:flash.events.Event):Boolean{
+ return dispatcher.dispatchEvent(event);
+ }
+
+ COMPILE::SWF
+ public function willTrigger(type:String):Boolean{
+ return dispatcher.willTrigger(type);
+ }
+
+ //IEventDispatcher (shared)
+ public function hasEventListener(type:String):Boolean{
+ return dispatcher.hasEventListener(type);
+ }
+
+ /**
+ * @private
+ */
+ protected function dispatchChange(eventName:String):void{
+ dispatchEvent(new org.apache.royale.events.Event(eventName));
+ }
+
private var _strand:IStrand;
/**
@@ -93,7 +161,7 @@ package org.apache.royale.jewel.beads.models
_selectedItem = _selectedIndex == -1 ? null : _dataProvider.getItemAt(_selectedIndex);
- dispatchEvent(new Event("dataProviderChanged"));
+ dispatchChange("dataProviderChanged");
}
private var _selectedIndex:int = -1;
@@ -120,7 +188,7 @@ package org.apache.royale.jewel.beads.models
{
if (value != _labelField) {
_labelField = value;
- dispatchEvent(new Event("labelFieldChanged"));
+ dispatchChange("labelFieldChanged");
}
}
@@ -146,7 +214,7 @@ package org.apache.royale.jewel.beads.models
_selectedIndex = value;
_selectedItem = (value == -1 || _dataProvider == null) ? null : (value < _dataProvider.length) ? _dataProvider.getItemAt(value) : null;
- dispatchEvent(new Event("selectedIndexChanged"));
+ dispatchChange("selectedIndexChanged");
}
/**
@@ -169,7 +237,7 @@ package org.apache.royale.jewel.beads.models
{
if (value != _rollOverIndex) {
_rollOverIndex = value;
- dispatchEvent(new Event("rollOverIndexChanged"));
+ dispatchChange("rollOverIndexChanged");
}
}
@@ -205,8 +273,8 @@ package org.apache.royale.jewel.beads.models
break;
}
}
- dispatchEvent(new Event("selectedItemChanged"));
- dispatchEvent(new Event("selectedIndexChanged"));
+ dispatchChange("selectedItemChanged");
+ dispatchChange("selectedIndexChanged");
}
private var _selectedString:String;
@@ -240,8 +308,8 @@ package org.apache.royale.jewel.beads.models
break;
}
}
- dispatchEvent(new Event("selectedItemChanged"));
- dispatchEvent(new Event("selectedIndexChanged"));
+ dispatchChange("selectedItemChanged");
+ dispatchChange("selectedIndexChanged");
}
}
}