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 <[email protected]>
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;
 
         /**

Reply via email to