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/01/14 18:59:58 UTC
[royale-asjs] branch develop updated: jewel-datagrid: adjustment of
DG to selectedIndex after item addition
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 56dbe7a jewel-datagrid: adjustment of DG to selectedIndex after item addition
56dbe7a is described below
commit 56dbe7a33e66f104a882654ce00c7a1074296725
Author: Carlos Rovira <ca...@apache.org>
AuthorDate: Tue Jan 14 19:59:45 2020 +0100
jewel-datagrid: adjustment of DG to selectedIndex after item addition
---
.../AddDataGridItemRendererForArrayListData.as | 86 ++++++++++++++++++++++
.../AddListItemRendererForArrayListData.as | 15 ++--
.../RemoveDataGridItemRendererForArrayListData.as | 8 +-
.../RemoveListItemRendererForArrayListData.as | 6 +-
4 files changed, 104 insertions(+), 11 deletions(-)
diff --git a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/itemRenderers/AddDataGridItemRendererForArrayListData.as b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/itemRenderers/AddDataGridItemRendererForArrayListData.as
index 2c9db13..6e09334 100644
--- a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/itemRenderers/AddDataGridItemRendererForArrayListData.as
+++ b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/itemRenderers/AddDataGridItemRendererForArrayListData.as
@@ -19,8 +19,12 @@
package org.apache.royale.jewel.beads.itemRenderers
{
import org.apache.royale.core.IBead;
+ import org.apache.royale.core.IDataProviderModel;
+ 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.IEventDispatcher;
import org.apache.royale.jewel.beads.views.DataGridView;
import org.apache.royale.jewel.supportClasses.datagrid.IDataGridColumnList;
@@ -61,6 +65,8 @@ package org.apache.royale.jewel.beads.itemRenderers
public function set strand(value:IStrand):void
{
_strand = value;
+ IEventDispatcher(value).addEventListener("initComplete", initComplete);
+
view = UIBase(_strand).view as DataGridView;
for (var i:int=0; i < view.columnLists.length; i++)
{
@@ -70,5 +76,85 @@ package org.apache.royale.jewel.beads.itemRenderers
addItemBead.setUp();
}
}
+
+ /**
+ * finish setup
+ *
+ * @langversion 3.0
+ * @playerversion Flash 10.2
+ * @playerversion AIR 2.6
+ * @productversion Royale 0.9.7
+ */
+ protected function initComplete(event:Event):void
+ {
+ IEventDispatcher(_strand).removeEventListener("initComplete", initComplete);
+
+ _dataProviderModel = _strand.getBeadByType(ISelectionModel) as ISelectionModel;
+ dataProviderModel.addEventListener("dataProviderChanged", dataProviderChangeHandler);
+
+ // invoke now in case "dataProviderChanged" has already been dispatched.
+ dataProviderChangeHandler(null);
+ }
+
+ private var dp:IEventDispatcher;
+ /**
+ * @private
+ */
+ protected function dataProviderChangeHandler(event:Event):void
+ {
+ if(dp)
+ {
+ dp.removeEventListener(CollectionEvent.ITEM_ADDED, handleItemAdded);
+ }
+ dp = dataProviderModel.dataProvider as IEventDispatcher;
+ if (!dp)
+ return;
+
+ // listen for individual items being added in the future.
+ dp.addEventListener(CollectionEvent.ITEM_ADDED, handleItemAdded);
+ }
+
+ /**
+ * Handles the itemAdded event by adding the item.
+ * Since the addition is done for each column list we need to adjust index
+ * at the end of all column additions
+ *
+ * @langversion 3.0
+ * @playerversion Flash 10.2
+ * @playerversion AIR 2.6
+ * @productversion Royale 0.9.7
+ * @royaleignorecoercion org.apache.royale.core.ISelectableItemRenderer
+ * @royaleignorecoercion org.apache.royale.events.IEventDispatcher
+ * @royaleignorecoercion org.apache.royale.core.ISelectionModel
+ */
+ protected function handleItemAdded(event:CollectionEvent):void
+ {
+ //adjust the model's selectedIndex, if applicable
+ if (event.index <= ISelectionModel(_dataProviderModel).selectedIndex) {
+ ISelectionModel(_dataProviderModel).selectedIndex = ISelectionModel(_dataProviderModel).selectedIndex + 1;
+ }
+
+ (_strand as IEventDispatcher).dispatchEvent(new Event("layoutNeeded"));
+ }
+
+ private var _dataProviderModel: IDataProviderModel;
+
+ /**
+ * The org.apache.royale.core.IDataProviderModel that contains the
+ * data source.
+ *
+ * @langversion 3.0
+ * @playerversion Flash 10.2
+ * @playerversion AIR 2.6
+ * @productversion Royale 0.9.7
+ * @royaleignorecoercion org.apache.royale.core.IDataProviderModel
+ */
+ public function get dataProviderModel(): IDataProviderModel
+ {
+ if (_dataProviderModel == null) {
+ _dataProviderModel = _strand.getBeadByType(IDataProviderModel) as IDataProviderModel;
+ }
+ return _dataProviderModel;
+ }
}
}
diff --git a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/itemRenderers/AddListItemRendererForArrayListData.as b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/itemRenderers/AddListItemRendererForArrayListData.as
index 8c402ea..d0d579a 100644
--- a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/itemRenderers/AddListItemRendererForArrayListData.as
+++ b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/itemRenderers/AddListItemRendererForArrayListData.as
@@ -31,6 +31,7 @@ package org.apache.royale.jewel.beads.itemRenderers
import org.apache.royale.events.Event;
import org.apache.royale.events.IEventDispatcher;
import org.apache.royale.html.beads.IListView;
+ import org.apache.royale.jewel.supportClasses.datagrid.IDataGridColumnList;
import org.apache.royale.jewel.supportClasses.list.IListPresentationModel;
import org.apache.royale.utils.loadBeadFromValuesManager;
@@ -149,12 +150,16 @@ package org.apache.royale.jewel.beads.itemRenderers
ir = itemRendererParent.getItemRendererAt(i) as ISelectableItemRenderer;
ir.index = i;
}
- //adjust the model's selectedIndex, if applicable
- if (event.index <= ISelectionModel(_dataProviderModel).selectedIndex) {
- ISelectionModel(_dataProviderModel).selectedIndex = ISelectionModel(_dataProviderModel).selectedIndex + 1;
- }
- (_strand as IEventDispatcher).dispatchEvent(new Event("layoutNeeded"));
+ if(!(_strand is IDataGridColumnList)) // only run this code on normal list (not not DataGrid column Lists)
+ {
+ //adjust the model's selectedIndex, if applicable
+ if (event.index <= ISelectionModel(_dataProviderModel).selectedIndex) {
+ ISelectionModel(_dataProviderModel).selectedIndex = ISelectionModel(_dataProviderModel).selectedIndex + 1;
+ }
+
+ (_strand as IEventDispatcher).dispatchEvent(new Event("layoutNeeded"));
+ }
}
private var _dataProviderModel: IDataProviderModel;
diff --git a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/itemRenderers/RemoveDataGridItemRendererForArrayListData.as b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/itemRenderers/RemoveDataGridItemRendererForArrayListData.as
index 42ff363..5597ce7 100644
--- a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/itemRenderers/RemoveDataGridItemRendererForArrayListData.as
+++ b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/itemRenderers/RemoveDataGridItemRendererForArrayListData.as
@@ -83,7 +83,7 @@ package org.apache.royale.jewel.beads.itemRenderers
* @langversion 3.0
* @playerversion Flash 10.2
* @playerversion AIR 2.6
- * @productversion Royale 0.9.4
+ * @productversion Royale 0.9.7
*/
protected function initComplete(event:Event):void
{
@@ -122,7 +122,7 @@ package org.apache.royale.jewel.beads.itemRenderers
* @langversion 3.0
* @playerversion Flash 10.2
* @playerversion AIR 2.6
- * @productversion Royale 0.9.4
+ * @productversion Royale 0.9.7
* @royaleignorecoercion org.apache.royale.core.ISelectableItemRenderer
* @royaleignorecoercion org.apache.royale.events.IEventDispatcher
* @royaleignorecoercion org.apache.royale.core.ISelectionModel
@@ -138,6 +138,8 @@ package org.apache.royale.jewel.beads.itemRenderers
{
ISelectionModel(_dataProviderModel).selectedIndex = -1;
}
+
+ (_strand as IEventDispatcher).dispatchEvent(new Event("layoutNeeded"));
}
private var _dataProviderModel: IDataProviderModel;
@@ -149,7 +151,7 @@ package org.apache.royale.jewel.beads.itemRenderers
* @langversion 3.0
* @playerversion Flash 10.2
* @playerversion AIR 2.6
- * @productversion Royale 0.9.4
+ * @productversion Royale 0.9.7
* @royaleignorecoercion org.apache.royale.core.IDataProviderModel
*/
public function get dataProviderModel(): IDataProviderModel
diff --git a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/itemRenderers/RemoveListItemRendererForArrayListData.as b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/itemRenderers/RemoveListItemRendererForArrayListData.as
index 42c6dc4..939b9bc 100644
--- a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/itemRenderers/RemoveListItemRendererForArrayListData.as
+++ b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/itemRenderers/RemoveListItemRendererForArrayListData.as
@@ -141,7 +141,7 @@ package org.apache.royale.jewel.beads.itemRenderers
ir.index = i;
}
- if(!_strand is IDataGridColumnList)
+ if(!(_strand is IDataGridColumnList)) // only run this code on normal list (not not DataGrid column Lists)
{
//adjust the model's selectedIndex, if applicable
if (event.index < ISelectionModel(_dataProviderModel).selectedIndex)
@@ -152,9 +152,9 @@ package org.apache.royale.jewel.beads.itemRenderers
{
ISelectionModel(_dataProviderModel).selectedIndex = -1;
}
+
+ (_strand as IEventDispatcher).dispatchEvent(new Event("layoutNeeded"));
}
-
- (_strand as IEventDispatcher).dispatchEvent(new Event("layoutNeeded"));
}
private var _dataProviderModel: IDataProviderModel;