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