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/09/21 15:25:13 UTC

[royale-asjs] branch develop updated: jewel-arrayselectionmodel: add "sortChangeHandler" to allow sorting while maintain current selection and scroll. Discuss with others about this solution

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 6fb65ac  jewel-arrayselectionmodel: add "sortChangeHandler" to allow sorting while maintain current selection and scroll. Discuss with others about this solution
6fb65ac is described below

commit 6fb65ac4e54c6e0333741ef60097286bde6d6948
Author: Carlos Rovira <ca...@apache.org>
AuthorDate: Mon Sep 21 17:25:02 2020 +0200

    jewel-arrayselectionmodel: add "sortChangeHandler" to allow sorting while maintain current selection and scroll. Discuss with others about this solution
---
 .../jewel/beads/controls/datagrid/DataGridSort.as  |  7 +----
 .../jewel/beads/models/ArrayListSelectionModel.as  | 30 ++++++++++++++++++++--
 .../royale/jewel/beads/views/DataGridView.as       | 21 +++++++++++++++
 3 files changed, 50 insertions(+), 8 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 f0c9db0..b871439 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
@@ -98,13 +98,8 @@ package org.apache.royale.jewel.beads.controls.datagrid
 				// force redraw of column headers
 				collection.refresh();
 				
-				// This way we can't refresh the columns since the dataProvider is the same
-				// dg.model.dispatchEvent(new Event("dataProviderChanged"));
-				
+				dg.model.dispatchEvent(new Event("sortChanged"));
 				header.model.dispatchEvent(new Event("dataProviderChanged"));
-
-				dg.dataProvider = null;
-				dg.dataProvider = collection;
 			}
 		}
 	}
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 6e3dbc8..d9d2355 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
@@ -158,9 +158,22 @@ package org.apache.royale.jewel.beads.models
 		{
             if (value == _dataProvider) return;
 
+            const oldIndex:int = _selectedIndex;
+            var itemChanged:Boolean = setDataProvider(value);
+
+            dispatchChange("dataProviderChanged");
+			if (itemChanged || oldIndex != _selectedIndex) {
+                dispatchChange("selectionChanged");
+			}
+        }
+
+        /**
+         *  @private
+         */
+		public function setDataProvider(value:Object):Boolean
+		{
             _dataProvider = value as IArrayList;
             var itemChanged:Boolean;
-            const oldIndex:int = _selectedIndex;
             if (_dataProvider) {
                 if (_selectedItem) {
                     _selectedIndex = _dataProvider.getItemIndex(_selectedItem);
@@ -185,11 +198,24 @@ package org.apache.royale.jewel.beads.models
                 _selectedIndex = -1;
             }
 
+            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;
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 fee95e8..7dc9141 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
@@ -47,6 +47,7 @@ package org.apache.royale.jewel.beads.views
 	import org.apache.royale.utils.IEmphasis;
 	import org.apache.royale.utils.loadBeadFromValuesManager;
 	import org.apache.royale.utils.observeElementSize;
+	import org.apache.royale.core.IStrandWithModel;
     
     /**
      *  The DataGridView class is the visual bead for the org.apache.royale.jewel.DataGrid.
@@ -94,6 +95,7 @@ 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);
@@ -357,6 +359,25 @@ package org.apache.royale.jewel.beads.views
             }
         }
 
+        /**
+         * @private
+         * @royaleignorecoercion org.apache.royale.core.IDataGridModel
+         * @royaleignorecoercion org.apache.royale.jewel.supportClasses.datagrid.IDataGridColumnList
+         */
+        protected function handleSortChanged(event:Event):void
+        {
+            for (var i:int=0; i < columnLists.length; i++)
+            {
+                var list:IDataGridColumnList = columnLists[i] as IDataGridColumnList;
+                IStrandWithModel(list).model.sortChangedHandler(dp);
+            }
+            host.dispatchEvent(new Event("layoutNeeded"));
+
+            COMPILE::JS{
+                synchHScroll(null);
+            }
+        }
+
         private var layout:IBeadLayout;
 
         /**