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;
/**