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:23 UTC

[royale-asjs] branch bugfix/issue_353_double_dispatch_of_change_event_in_Jewel_List updated (4482280 -> 0d84260)

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

gregdove pushed a change to branch bugfix/issue_353_double_dispatch_of_change_event_in_Jewel_List
in repository https://gitbox.apache.org/repos/asf/royale-asjs.git.


    from 4482280  Cumulative updates to migrate to 'selectionChanged' for bindings Fixes a some issues with add/remove/update beads for dataprovider/item changes. Added extra test display to Tour de Jewel for this.
     new c7e9b69  Made the dispatcher more accessible from the model. Fixes a bug in ComboBox.
     new 0d84260  Using the IJewelSectionModel, additional component fields are now Bindable 'for free'. Added a (commented out) example in Tour de Jewel of one list bound to the dataProvider of another.

The 2 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 .../src/main/royale/ListPlayGround.mxml            |  2 ++
 .../royale/org/apache/royale/jewel/ComboBox.as     |  2 ++
 .../royale/org/apache/royale/jewel/DropDownList.as |  2 ++
 .../main/royale/org/apache/royale/jewel/List.as    |  3 +++
 .../ListSingleSelectionMouseController.as          |  9 +++++---
 .../jewel/beads/models/ArrayListSelectionModel.as  | 26 +++++++++++++---------
 .../jewel/beads/models/IJewelSelectionModel.as     |  2 ++
 7 files changed, 33 insertions(+), 13 deletions(-)


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

Posted by gr...@apache.org.
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;
     }
 }


[royale-asjs] 02/02: Using the IJewelSectionModel, additional component fields are now Bindable 'for free'. Added a (commented out) example in Tour de Jewel of one list bound to the dataProvider of another.

Posted by gr...@apache.org.
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 0d84260fc3dac1313c3ab698a19e36c35382810e
Author: greg-dove <gr...@gmail.com>
AuthorDate: Sat Dec 22 11:28:58 2018 +1300

    Using the IJewelSectionModel, additional component fields are now Bindable 'for free'.
    Added a (commented out) example in Tour de Jewel of one list bound to the dataProvider of another.
---
 examples/royale/TourDeJewel/src/main/royale/ListPlayGround.mxml        | 2 ++
 .../projects/Jewel/src/main/royale/org/apache/royale/jewel/ComboBox.as | 2 ++
 .../Jewel/src/main/royale/org/apache/royale/jewel/DropDownList.as      | 2 ++
 .../projects/Jewel/src/main/royale/org/apache/royale/jewel/List.as     | 3 +++
 4 files changed, 9 insertions(+)

diff --git a/examples/royale/TourDeJewel/src/main/royale/ListPlayGround.mxml b/examples/royale/TourDeJewel/src/main/royale/ListPlayGround.mxml
index 620b9a2..a31de07 100644
--- a/examples/royale/TourDeJewel/src/main/royale/ListPlayGround.mxml
+++ b/examples/royale/TourDeJewel/src/main/royale/ListPlayGround.mxml
@@ -174,6 +174,8 @@ limitations under the License.
 						<j:Label  html="{'Selected Index: ' + iconList.selectedIndex}"/>
 						<j:Label  html="Selected Item description:"/>
 						<j:Label  html="{describeIconItem(iconList.selectedItem)}"/>
+						<!-- example below for dataProvider binding -->
+						<!--<j:List labelField="label" dataProvider="{iconList.dataProvider}" selectedIndex="3" width="120" height="200" />-->
 					</j:VGroup>
 				</j:HGroup>
 			</j:Card>
diff --git a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/ComboBox.as b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/ComboBox.as
index faf4872..2137661 100644
--- a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/ComboBox.as
+++ b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/ComboBox.as
@@ -72,6 +72,7 @@ package org.apache.royale.jewel
             typeNames = "jewel combobox";
 		}
 
+        [Bindable("labelFieldChanged")]
 		/**
 		 *  The name of field within the data used for display. Each item of the
 		 *  data should have a property with this name.
@@ -94,6 +95,7 @@ package org.apache.royale.jewel
             IDataProviderModel(model).labelField = value;
 		}
 
+        [Bindable("dataProviderChanged")]
 		/**
 		 *  The data for display by the ComboBox.
 		 *
diff --git a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/DropDownList.as b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/DropDownList.as
index 951bafd..9dd709c 100644
--- a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/DropDownList.as
+++ b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/DropDownList.as
@@ -97,6 +97,7 @@ package org.apache.royale.jewel
             _dropDown = value;
         }
 
+        [Bindable("labelFieldChanged")]
         /**
 		 *  The name of field within the data used for display. Each item of the
 		 *  data should have a property with this name.
@@ -119,6 +120,7 @@ package org.apache.royale.jewel
             IDataProviderModel(model).labelField = value;
 		}
 
+        [Bindable("dataProviderChanged")]
         /**
 		 *  The data being display by the List.
 		 *
diff --git a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/List.as b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/List.as
index ad495e5..aa0e0d3 100644
--- a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/List.as
+++ b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/List.as
@@ -84,6 +84,7 @@ package org.apache.royale.jewel
             typeNames = "jewel list";
 		}
 
+        [Bindable("labelFieldChanged")]
 		/**
 		 *  The name of field within the data used for display. Each item of the
 		 *  data should have a property with this name.
@@ -106,6 +107,7 @@ package org.apache.royale.jewel
             IDataProviderModel(model).labelField = value;
 		}
 
+        [Bindable("dataProviderChanged")]
 		/**
 		 *  The data being display by the List.
 		 *
@@ -150,6 +152,7 @@ package org.apache.royale.jewel
 			ISelectionModel(model).selectedIndex = value;
 		}
 
+        [Bindable("rollOverIndexChanged")]
 		/**
 		 *  The index of the item currently below the pointer.
 		 *