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

Reply via email to