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/12/21 21:11:06 UTC

[royale-asjs] branch develop updated: jewel-arrayselectionmodel: fix update from collection and refactor to use refresh() (a.k.a COLLECTION_CHANGE) in DataGridSort. Removed "sortChanged" event. Added setDataProvider__NoCheck() to IJewelSelectionModel/ArrayListSelectionModel

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 8835228  jewel-arrayselectionmodel: fix update from collection and refactor to use refresh() (a.k.a COLLECTION_CHANGE) in DataGridSort. Removed "sortChanged" event. Added setDataProvider__NoCheck() to IJewelSelectionModel/ArrayListSelectionModel
8835228 is described below

commit 8835228669680482358f8a7c6e40813748862da7
Author: Carlos Rovira <ca...@apache.org>
AuthorDate: Mon Dec 21 22:10:56 2020 +0100

    jewel-arrayselectionmodel: fix update from collection and refactor to use refresh() (a.k.a COLLECTION_CHANGE) in DataGridSort. Removed "sortChanged" event. Added setDataProvider__NoCheck() to IJewelSelectionModel/ArrayListSelectionModel
---
 .../jewel/beads/controls/datagrid/DataGridSort.as  | 34 +++++++++++++++------
 .../jewel/beads/models/ArrayListSelectionModel.as  | 27 +++++++----------
 .../jewel/beads/models/IJewelSelectionModel.as     |  2 ++
 .../royale/jewel/beads/views/DataGridView.as       | 35 ++++++++++++----------
 4 files changed, 58 insertions(+), 40 deletions(-)

diff --git a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/controls/datagrid/DataGridSort.as b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/controls/datagrid/DataGridSort.as
index 1a688f5..1e349ee 100644
--- a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/controls/datagrid/DataGridSort.as
+++ b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/controls/datagrid/DataGridSort.as
@@ -21,13 +21,15 @@ package org.apache.royale.jewel.beads.controls.datagrid
 	import org.apache.royale.collections.IArrayListView;
 	import org.apache.royale.collections.Sort;
 	import org.apache.royale.collections.SortField;
-	import org.apache.royale.core.IBead;
 	import org.apache.royale.core.IDataGrid;
 	import org.apache.royale.core.IDataGridHeader;
+	import org.apache.royale.core.ISelectionModel;
 	import org.apache.royale.core.IStrand;
 	import org.apache.royale.core.UIBase;
+	import org.apache.royale.events.CollectionEvent;
 	import org.apache.royale.events.Event;
 	import org.apache.royale.events.MouseEvent;
+	import org.apache.royale.html.beads.EasyDataProviderChangeNotifier;
 	import org.apache.royale.jewel.beads.views.DataGridView;
 	import org.apache.royale.jewel.supportClasses.datagrid.IDataGridColumn;
 
@@ -42,7 +44,7 @@ package org.apache.royale.jewel.beads.controls.datagrid
 	 *  @playerversion AIR 2.6
 	 *  @productversion Royale 0.9.8
 	 */
-	public class DataGridSort implements IBead
+	public class DataGridSort extends EasyDataProviderChangeNotifier
 	{
 		public function DataGridSort()
 		{
@@ -51,7 +53,7 @@ package org.apache.royale.jewel.beads.controls.datagrid
 		
         private var dg:IDataGrid;
         private var header:IDataGridHeader;
-
+		private var dgView:DataGridView;
 		private var descending:Boolean;
         
 		/**                         	
@@ -62,10 +64,12 @@ package org.apache.royale.jewel.beads.controls.datagrid
 		 *  @playerversion AIR 2.6
 		 *  @productversion Royale 0.9.8
 		 */
-		public function set strand(value:IStrand):void
+		override public function set strand(value:IStrand):void
 		{
+			super.strand = value;
+
             dg = value as IDataGrid;
-			var dgView:DataGridView = (dg as UIBase).view as DataGridView;
+			dgView = (dg as UIBase).view as DataGridView;
 			header = dgView.header;
 			header.addEventListener(MouseEvent.CLICK, mouseClickHandler, false);
 		}
@@ -96,11 +100,23 @@ package org.apache.royale.jewel.beads.controls.datagrid
 				sort.fields = [ sortField ];
 				collection.sort = sort;
 
-				// force redraw of column headers
 				collection.refresh();
-				
-				dg.model.dispatchEvent(new Event("sortChanged"));
-				header.model.dispatchEvent(new Event("dataProviderChanged"));
+				// header.model.dispatchEvent(new Event("dataProviderChanged"));
+			}
+		}
+
+		/**
+		 * 	@royaleignorecoercion org.apache.royale.core.ISelectionModel
+		 */
+		override protected function handleDataProviderChanges(event:Event):void
+		{
+			if(event.type == CollectionEvent.COLLECTION_CHANGED)
+			{
+				var selectionModel:ISelectionModel = _strand.getBeadByType(ISelectionModel) as ISelectionModel;
+				selectionModel.dispatchEvent(event.cloneEvent() as Event);
+			} else
+			{
+				super.handleDataProviderChanges(event);
 			}
 		}
 	}
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 136b534..51e8404 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
@@ -166,6 +166,17 @@ package org.apache.royale.jewel.beads.models
                 dispatchChange("selectionChanged");
 			}
         }
+		
+        public function setDataProvider__NoCheck(value:Object):void
+		{
+            const oldIndex:int = _selectedIndex;
+            var itemChanged:Boolean = setDataProvider(value);
+
+            dispatchChange("dataProviderChanged");
+			if (itemChanged || oldIndex != _selectedIndex) {
+                dispatchChange("selectionChanged");
+			}
+        }
 
         /**
          *  @private
@@ -201,22 +212,6 @@ package org.apache.royale.jewel.beads.models
             return itemChanged;
 		}
 
-        /**
-         *  @private
-         */
-        [Bindable("sortChanged")]
-		public function sortChangedHandler(value:Object):void
-		{
-            const oldIndex:int = _selectedIndex;
-            var itemChanged:Boolean = setDataProvider(value);
-
-            dispatchChange("dataProviderChanged");
-			if (itemChanged || oldIndex != _selectedIndex) {
-                dispatchChange("selectionChanged");
-			}
-            dispatchChange("shortChanged");
-        }
-
 		protected var _selectedIndex:int = -1;
 		private var _rollOverIndex:int = -1;
 		private var _labelField:String = null;
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 cb62093..5729c6b 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
@@ -38,5 +38,7 @@ package org.apache.royale.jewel.beads.models
         
         function get isItemClicked():Boolean;
         function set isItemClicked(value:Boolean):void;
+
+        function setDataProvider__NoCheck(value:Object):void
     }
 }
diff --git a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/views/DataGridView.as b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/views/DataGridView.as
index 1dee93e..1591ec4 100644
--- a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/views/DataGridView.as
+++ b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/views/DataGridView.as
@@ -31,9 +31,9 @@ package org.apache.royale.jewel.beads.views
 	import org.apache.royale.core.IItemRendererProvider;
 	import org.apache.royale.core.IParent;
 	import org.apache.royale.core.IStrand;
-	import org.apache.royale.core.IStrandWithModel;
 	import org.apache.royale.core.IUIBase;
 	import org.apache.royale.core.StyledUIBase;
+	import org.apache.royale.core.UIBase;
 	import org.apache.royale.core.ValuesManager;
 	import org.apache.royale.events.CollectionEvent;
 	import org.apache.royale.events.Event;
@@ -42,6 +42,7 @@ package org.apache.royale.jewel.beads.views
 	import org.apache.royale.html.beads.IDataGridView;
 	import org.apache.royale.html.beads.LabelFunction;
 	import org.apache.royale.jewel.beads.models.DataGridColumnListPresentationModel;
+	import org.apache.royale.jewel.beads.models.IJewelSelectionModel;
 	import org.apache.royale.jewel.supportClasses.datagrid.IDataGridColumn;
 	import org.apache.royale.jewel.supportClasses.datagrid.IDataGridColumnList;
 	import org.apache.royale.jewel.supportClasses.datagrid.IDataGridPresentationModel;
@@ -95,7 +96,6 @@ package org.apache.royale.jewel.beads.views
             // see if there is a presentation model already in place. if not, add one.
             sharedModel = _dg.model as IDataGridModel;
             IEventDispatcher(sharedModel).addEventListener("dataProviderChanged", handleDataProviderChanged);
-            IEventDispatcher(sharedModel).addEventListener("sortChanged", handleSortChanged);
             IEventDispatcher(sharedModel).addEventListener("selectedIndexChanged", handleSelectedIndexChanged);
 
             listenOnStrand("initComplete", initCompleteHandler);
@@ -338,16 +338,20 @@ package org.apache.royale.jewel.beads.views
             if(dp)
 			{
 				dp.removeEventListener(CollectionEvent.ITEM_ADDED, handleItemAddedAndRemoved);
+				dp.removeEventListener(CollectionEvent.ITEM_UPDATED, handleItemAddedAndRemoved);
 				dp.removeEventListener(CollectionEvent.ITEM_REMOVED, handleItemAddedAndRemoved);
 				dp.removeEventListener(CollectionEvent.ALL_ITEMS_REMOVED, handleItemAddedAndRemoved);
+				dp.removeEventListener(CollectionEvent.COLLECTION_CHANGED, handleCollectionChanged);
 			}
 			dp = sharedModel.dataProvider as IEventDispatcher;
 			if (dp)
             {
 			    // listen for individual items being added in the future.
 			    dp.addEventListener(CollectionEvent.ITEM_ADDED, handleItemAddedAndRemoved);
+			    dp.addEventListener(CollectionEvent.ITEM_UPDATED, handleItemAddedAndRemoved);
 				dp.addEventListener(CollectionEvent.ITEM_REMOVED, handleItemAddedAndRemoved);
 				dp.addEventListener(CollectionEvent.ALL_ITEMS_REMOVED, handleItemAddedAndRemoved);
+				dp.addEventListener(CollectionEvent.COLLECTION_CHANGED, handleCollectionChanged);
             }
 
             for (var i:int=0; i < columnLists.length; i++)
@@ -367,27 +371,28 @@ package org.apache.royale.jewel.beads.views
             }
         }
 
+        private var layout:IBeadLayout;
+
         /**
-         * @private
-         * @royaleignorecoercion org.apache.royale.core.IDataGridModel
-         * @royaleignorecoercion org.apache.royale.jewel.supportClasses.datagrid.IDataGridColumnList
-         */
-        protected function handleSortChanged(event:Event):void
-        {
+		 *  Handles the itemAdded event by adding the item.
+		 *
+		 *  @langversion 3.0
+		 *  @playerversion Flash 10.2
+		 *  @playerversion AIR 2.6
+		 *  @productversion Royale 0.9.7
+		 *  @royaleignorecoercion org.apache.royale.jewel.supportClasses.datagrid.IDataGridColumnList
+		 */
+		protected function handleCollectionChanged(event:CollectionEvent):void
+		{
             for (var i:int=0; i < columnLists.length; i++)
             {
                 var list:IDataGridColumnList = columnLists[i] as IDataGridColumnList;
-                IStrandWithModel(list).model.sortChangedHandler(dp);
+                ((list as UIBase).model as IJewelSelectionModel).setDataProvider__NoCheck(dp);
             }
-            host.dispatchEvent(new Event("layoutNeeded"));
 
-            COMPILE::JS{
-                synchHScroll(null);
-            }
+            host.dispatchEvent(new Event("layoutNeeded"));
         }
 
-        private var layout:IBeadLayout;
-
         /**
 		 *  Handles the itemAdded event by adding the item.
 		 *