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/04/08 12:49:45 UTC

[royale-asjs] branch develop updated: DataItemRendererFactoryForCollectionView: fix selectedIndex when adding, removing or update items at runtime

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 7621791  DataItemRendererFactoryForCollectionView: fix selectedIndex when adding, removing or update items at runtime
7621791 is described below

commit 762179106893df044db43a2e6d72555ca57ee5b4
Author: Carlos Rovira <ca...@apache.org>
AuthorDate: Wed Apr 8 14:49:41 2020 +0200

    DataItemRendererFactoryForCollectionView: fix selectedIndex when adding, removing or update items at runtime
---
 .../DataItemRendererFactoryForCollectionView.as    | 27 +++++++++++++++++++++-
 1 file changed, 26 insertions(+), 1 deletion(-)

diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DataItemRendererFactoryForCollectionView.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DataItemRendererFactoryForCollectionView.as
index 4adf50c..4bbdf07 100644
--- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DataItemRendererFactoryForCollectionView.as
+++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DataItemRendererFactoryForCollectionView.as
@@ -22,6 +22,7 @@ package org.apache.royale.html.beads
 	import org.apache.royale.core.IIndexedItemRenderer;
 	import org.apache.royale.core.IIndexedItemRendererInitializer;
 	import org.apache.royale.core.IItemRendererOwnerView;
+	import org.apache.royale.core.ISelectionModel;
 	import org.apache.royale.core.IStrandWithModelView;
 	import org.apache.royale.events.CollectionEvent;
 	import org.apache.royale.events.Event;
@@ -111,6 +112,13 @@ package org.apache.royale.html.beads
 				//var ubase:UIItemRendererBase = ir as UIItemRendererBase;
 				//if (ubase) ubase.updateRenderer()
 			}
+
+			//adjust the model's selectedIndex, if applicable
+			if (event.index <= ISelectionModel(dataProviderModel).selectedIndex) {
+				ISelectionModel(dataProviderModel).selectedIndex = ISelectionModel(dataProviderModel).selectedIndex + 1;
+			}
+
+			
 			sendStrandEvent(_strand,"itemsCreated");
 			sendStrandEvent(_strand,"layoutNeeded");
 		}
@@ -149,6 +157,17 @@ package org.apache.royale.html.beads
 				//var ubase:UIItemRendererBase = ir as UIItemRendererBase;
 				//if (ubase) ubase.updateRenderer()
 			}
+
+			//adjust the model's selectedIndex, if applicable
+			if (event.index < ISelectionModel(dataProviderModel).selectedIndex)
+			{
+				ISelectionModel(dataProviderModel).selectedIndex = ISelectionModel(dataProviderModel).selectedIndex - 1;
+			} 
+			else if (event.index == ISelectionModel(dataProviderModel).selectedIndex)
+			{
+				ISelectionModel(dataProviderModel).selectedIndex = -1;
+			}
+
 			sendStrandEvent(_strand,"layoutNeeded");
 		}
 		
@@ -174,7 +193,13 @@ package org.apache.royale.html.beads
 
 			var data:Object = event.item;
 			(itemRendererInitializer as IIndexedItemRendererInitializer).initializeIndexedItemRenderer(ir, data, event.index);
-			ir.data = data;				
+			ir.data = data;
+
+			if (event.index == ISelectionModel(dataProviderModel).selectedIndex) {
+				//manually trigger a selection change, even if there was actually none.
+				//This causes selection-based bindings to work
+                IEventDispatcher(dataProviderModel).dispatchEvent(new Event('selectedIndexChanged'));
+            }			
 		}
 
 		override protected function get dataProviderLength():int