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 75e2ba4  Basic: Add SelectionDataItemRendererFactoryForCollectionView 
to handle ISelectionModel for components that uses selection and 
add/remove/update items at runtime.
75e2ba4 is described below

commit 75e2ba48417408f932049bf8acf0ef15ce3ada41
Author: Carlos Rovira <[email protected]>
AuthorDate: Fri Jun 12 13:37:11 2020 +0200

    Basic: Add SelectionDataItemRendererFactoryForCollectionView to handle 
ISelectionModel for components that uses selection and add/remove/update items 
at runtime.
---
 .../Basic/src/main/resources/basic-manifest.xml    |  1 +
 .../DataItemRendererFactoryForCollectionView.as    | 29 -------
 ...tionDataItemRendererFactoryForCollectionView.as | 92 ++++++++++++++++++++++
 .../projects/Jewel/src/main/resources/defaults.css |  8 +-
 .../Jewel/src/main/sass/components/_buttonbar.sass |  2 +-
 .../Jewel/src/main/sass/components/_list.sass      |  2 +-
 .../src/main/sass/components/_navigation.sass      |  2 +-
 .../Jewel/src/main/sass/components/_tabbar.sass    |  2 +-
 8 files changed, 101 insertions(+), 37 deletions(-)

diff --git a/frameworks/projects/Basic/src/main/resources/basic-manifest.xml 
b/frameworks/projects/Basic/src/main/resources/basic-manifest.xml
index a666835..3db2977 100644
--- a/frameworks/projects/Basic/src/main/resources/basic-manifest.xml
+++ b/frameworks/projects/Basic/src/main/resources/basic-manifest.xml
@@ -220,6 +220,7 @@
     <component id="DynamicUpdateItemRendererForArrayListData" 
class="org.apache.royale.html.beads.DynamicUpdateItemRendererForArrayListData"/>
     <component id="DataItemRendererFactoryForHierarchicalData" 
class="org.apache.royale.html.beads.DataItemRendererFactoryForHierarchicalData" 
/>
     <component id="DataItemRendererFactoryForCollectionView" 
class="org.apache.royale.html.beads.DataItemRendererFactoryForCollectionView" />
+    <component id="SelectionDataItemRendererFactoryForCollectionView" 
class="org.apache.royale.html.beads.SelectionDataItemRendererFactoryForCollectionView"
 />
     <component id="DynamicRemoveAllItemRendererForArrayListData" 
class="org.apache.royale.html.beads.DynamicRemoveAllItemRendererForArrayListData"
 />
     <component id="DynamicRemoveAllByNullItemRendererForArrayListData" 
class="org.apache.royale.html.beads.DynamicRemoveAllByNullItemRendererForArrayListData"
 />
     <component id="TextItemRendererFactoryForArrayData" 
class="org.apache.royale.html.beads.TextItemRendererFactoryForArrayData" />
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 5d67e74..d532595 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,14 +22,12 @@ 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;
        import org.apache.royale.events.IEventDispatcher;
        import org.apache.royale.html.beads.IListView;
        import org.apache.royale.utils.sendStrandEvent;
- 
        
        /**
         * This class creates itemRenderer instances from the data contained 
within an ICollectionView
@@ -112,13 +110,6 @@ package org.apache.royale.html.beads
                                //var ubase:UIItemRendererBase = ir as 
UIItemRendererBase;
                                //if (ubase) ubase.updateRenderer()
                        }
-
-                       //adjust the model's selectedIndex, if applicable
-                       if(dataProviderModel is ISelectionModel) {
-                               if (event.index <= 
ISelectionModel(dataProviderModel).selectedIndex) {
-                                       
ISelectionModel(dataProviderModel).selectedIndex = 
ISelectionModel(dataProviderModel).selectedIndex + 1;
-                               }
-                       }
                        
                        sendStrandEvent(_strand,"itemsCreated");
                        sendStrandEvent(_strand,"layoutNeeded");
@@ -159,18 +150,6 @@ package org.apache.royale.html.beads
                                //if (ubase) ubase.updateRenderer()
                        }
 
-                       //adjust the model's selectedIndex, if applicable
-                       if(dataProviderModel is ISelectionModel) {
-                               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");
                }
                
@@ -197,14 +176,6 @@ package org.apache.royale.html.beads
                        var data:Object = event.item;
                        (itemRendererInitializer as 
IIndexedItemRendererInitializer).initializeIndexedItemRenderer(ir, data, 
event.index);
                        ir.data = data;
-
-                       if(dataProviderModel is ISelectionModel) {
-                               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
diff --git 
a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/SelectionDataItemRendererFactoryForCollectionView.as
 
b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/SelectionDataItemRendererFactoryForCollectionView.as
new file mode 100644
index 0000000..a7595c8
--- /dev/null
+++ 
b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/SelectionDataItemRendererFactoryForCollectionView.as
@@ -0,0 +1,92 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  Licensed to the Apache Software Foundation (ASF) under one or more
+//  contributor license agreements.  See the NOTICE file distributed with
+//  this work for additional information regarding copyright ownership.
+//  The ASF licenses this file to You under the Apache License, Version 2.0
+//  (the "License"); you may not use this file except in compliance with
+//  the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+//  Unless required by applicable law or agreed to in writing, software
+//  distributed under the License is distributed on an "AS IS" BASIS,
+//  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//  See the License for the specific language governing permissions and
+//  limitations under the License.
+//
+////////////////////////////////////////////////////////////////////////////////
+package org.apache.royale.html.beads
+{
+       import org.apache.royale.core.ISelectionModel;
+       import org.apache.royale.events.CollectionEvent;
+       import org.apache.royale.events.Event;
+       import org.apache.royale.events.IEventDispatcher;
+ 
+       
+       /**
+        * This class is an extension of 
DataItemRendererFactoryForCollectionView for components using ISelectionModel
+        * that will need special handling of selected index for items added, 
removed or updated at runtime from the dataprovider.
+        */
+       public class SelectionDataItemRendererFactoryForCollectionView extends 
DataItemRendererFactoryForCollectionView
+       {
+               public function 
SelectionDataItemRendererFactoryForCollectionView(target:Object = null)
+               {
+                       super(target);
+               }
+               
+               /**
+                * @private
+                * @royaleignorecoercion org.apache.royale.core.ISelectionModel
+                */
+               override protected function 
itemAddedHandler(event:CollectionEvent):void
+               {
+                       super.itemAddedHandler(event);
+
+                       //adjust the model's selectedIndex, if applicable
+                       if(dataProviderModel is ISelectionModel) {
+                               if (event.index <= 
ISelectionModel(dataProviderModel).selectedIndex) {
+                                       
ISelectionModel(dataProviderModel).selectedIndex = 
ISelectionModel(dataProviderModel).selectedIndex + 1;
+                               }
+                       }
+               }
+               
+               /**
+                * @private
+                * @royaleignorecoercion org.apache.royale.core.ISelectionModel
+                */
+               override protected function 
itemRemovedHandler(event:CollectionEvent):void
+               {
+                       super.itemRemovedHandler(event);
+
+                       //adjust the model's selectedIndex, if applicable
+                       if(dataProviderModel is ISelectionModel) {
+                               if (event.index < 
ISelectionModel(dataProviderModel).selectedIndex)
+                               {
+                                       
ISelectionModel(dataProviderModel).selectedIndex = 
ISelectionModel(dataProviderModel).selectedIndex - 1;
+                               } 
+                               else if (event.index == 
ISelectionModel(dataProviderModel).selectedIndex)
+                               {
+                                       
ISelectionModel(dataProviderModel).selectedIndex = -1;
+                               }
+                       }
+               }
+               
+               /**
+                * @private
+                * @royaleignorecoercion org.apache.royale.core.ISelectionModel
+                */
+               override protected function 
itemUpdatedHandler(event:CollectionEvent):void
+               {
+                       super.itemUpdatedHandler(event);
+
+                       if(dataProviderModel is ISelectionModel) {
+                               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'));
+                               }
+                       }
+               }
+       }
+}
\ No newline at end of file
diff --git a/frameworks/projects/Jewel/src/main/resources/defaults.css 
b/frameworks/projects/Jewel/src/main/resources/defaults.css
index 47e46d1..9b88fb8 100644
--- a/frameworks/projects/Jewel/src/main/resources/defaults.css
+++ b/frameworks/projects/Jewel/src/main/resources/defaults.css
@@ -292,7 +292,7 @@ j|ButtonBar {
   IBeadView: 
ClassReference("org.apache.royale.jewel.beads.views.ButtonBarView");
   IBeadController: 
ClassReference("org.apache.royale.jewel.beads.controllers.ListSingleSelectionMouseController");
   IBeadLayout: 
ClassReference("org.apache.royale.jewel.beads.layouts.ButtonBarLayout");
-  IDataProviderItemRendererMapper: 
ClassReference("org.apache.royale.html.beads.DataItemRendererFactoryForCollectionView");
+  IDataProviderItemRendererMapper: 
ClassReference("org.apache.royale.html.beads.SelectionDataItemRendererFactoryForCollectionView");
   IItemRendererClassFactory: 
ClassReference("org.apache.royale.core.ItemRendererClassFactory");
   IItemRenderer: 
ClassReference("org.apache.royale.jewel.itemRenderers.ButtonBarItemRenderer");
   IItemRendererInitializer: 
ClassReference("org.apache.royale.jewel.beads.itemRenderers.ButtonBarItemRendererInitializer");
@@ -3263,7 +3263,7 @@ j|List {
   IViewport: 
ClassReference("org.apache.royale.jewel.supportClasses.scrollbar.ScrollingViewport");
   IViewportModel: 
ClassReference("org.apache.royale.html.beads.models.ViewportModel");
   IBeadModel: 
ClassReference("org.apache.royale.jewel.beads.models.ArrayListSelectionModel");
-  IDataProviderItemRendererMapper: 
ClassReference("org.apache.royale.html.beads.DataItemRendererFactoryForCollectionView");
+  IDataProviderItemRendererMapper: 
ClassReference("org.apache.royale.html.beads.SelectionDataItemRendererFactoryForCollectionView");
 }
 
 @media -royale-swf {
@@ -3289,7 +3289,7 @@ j|Navigation {
   IViewport: 
ClassReference("org.apache.royale.jewel.supportClasses.scrollbar.ScrollingViewport");
   IViewportModel: 
ClassReference("org.apache.royale.html.beads.models.ViewportModel");
   IBeadModel: 
ClassReference("org.apache.royale.jewel.beads.models.ArrayListSelectionModel");
-  IDataProviderItemRendererMapper: 
ClassReference("org.apache.royale.html.beads.DataItemRendererFactoryForCollectionView");
+  IDataProviderItemRendererMapper: 
ClassReference("org.apache.royale.html.beads.SelectionDataItemRendererFactoryForCollectionView");
 }
 
 j|NavigationLinkItemRenderer {
@@ -3704,7 +3704,7 @@ j|TabBar {
   IViewport: ClassReference("org.apache.royale.jewel.supportClasses.Viewport");
   IViewportModel: 
ClassReference("org.apache.royale.html.beads.models.ViewportModel");
   IBeadModel: 
ClassReference("org.apache.royale.jewel.beads.models.ArrayListSelectionModel");
-  IDataProviderItemRendererMapper: 
ClassReference("org.apache.royale.html.beads.DataItemRendererFactoryForCollectionView");
+  IDataProviderItemRendererMapper: 
ClassReference("org.apache.royale.html.beads.SelectionDataItemRendererFactoryForCollectionView");
 }
 
 .jewel.tabbarbutton {
diff --git a/frameworks/projects/Jewel/src/main/sass/components/_buttonbar.sass 
b/frameworks/projects/Jewel/src/main/sass/components/_buttonbar.sass
index 55c30de..64ff363 100644
--- a/frameworks/projects/Jewel/src/main/sass/components/_buttonbar.sass
+++ b/frameworks/projects/Jewel/src/main/sass/components/_buttonbar.sass
@@ -39,7 +39,7 @@ j|ButtonBar
     IBeadView:  
ClassReference("org.apache.royale.jewel.beads.views.ButtonBarView")             
       
     IBeadController: 
ClassReference("org.apache.royale.jewel.beads.controllers.ListSingleSelectionMouseController")
     IBeadLayout: 
ClassReference("org.apache.royale.jewel.beads.layouts.ButtonBarLayout")
-    IDataProviderItemRendererMapper: 
ClassReference("org.apache.royale.html.beads.DataItemRendererFactoryForCollectionView")
+    IDataProviderItemRendererMapper: 
ClassReference("org.apache.royale.html.beads.SelectionDataItemRendererFactoryForCollectionView")
     IItemRendererClassFactory: 
ClassReference("org.apache.royale.core.ItemRendererClassFactory")
     IItemRenderer: 
ClassReference("org.apache.royale.jewel.itemRenderers.ButtonBarItemRenderer")
     IItemRendererInitializer: 
ClassReference("org.apache.royale.jewel.beads.itemRenderers.ButtonBarItemRendererInitializer")
diff --git a/frameworks/projects/Jewel/src/main/sass/components/_list.sass 
b/frameworks/projects/Jewel/src/main/sass/components/_list.sass
index e6aae70..f92b744 100644
--- a/frameworks/projects/Jewel/src/main/sass/components/_list.sass
+++ b/frameworks/projects/Jewel/src/main/sass/components/_list.sass
@@ -50,7 +50,7 @@ j|List
     IViewport: 
ClassReference("org.apache.royale.jewel.supportClasses.scrollbar.ScrollingViewport")
     IViewportModel: 
ClassReference("org.apache.royale.html.beads.models.ViewportModel")
     IBeadModel: 
ClassReference("org.apache.royale.jewel.beads.models.ArrayListSelectionModel")
-    IDataProviderItemRendererMapper: 
ClassReference("org.apache.royale.html.beads.DataItemRendererFactoryForCollectionView")
+    IDataProviderItemRendererMapper: 
ClassReference("org.apache.royale.html.beads.SelectionDataItemRendererFactoryForCollectionView")
     //IBeadModel: 
ClassReference("org.apache.royale.html.beads.models.ArraySelectionModel")
     //IDataProviderItemRendererMapper: 
ClassReference("org.apache.royale.html.beads.DataItemRendererFactoryForArrayData")
 
diff --git 
a/frameworks/projects/Jewel/src/main/sass/components/_navigation.sass 
b/frameworks/projects/Jewel/src/main/sass/components/_navigation.sass
index 33256e3..a31d9e2 100644
--- a/frameworks/projects/Jewel/src/main/sass/components/_navigation.sass
+++ b/frameworks/projects/Jewel/src/main/sass/components/_navigation.sass
@@ -36,7 +36,7 @@ j|Navigation
     IViewport: 
ClassReference("org.apache.royale.jewel.supportClasses.scrollbar.ScrollingViewport")
     IViewportModel: 
ClassReference("org.apache.royale.html.beads.models.ViewportModel")
     IBeadModel: 
ClassReference("org.apache.royale.jewel.beads.models.ArrayListSelectionModel")
-    IDataProviderItemRendererMapper: 
ClassReference("org.apache.royale.html.beads.DataItemRendererFactoryForCollectionView")
+    IDataProviderItemRendererMapper: 
ClassReference("org.apache.royale.html.beads.SelectionDataItemRendererFactoryForCollectionView")
 
 
 // Jewel NavigationLinkItemRenderer
diff --git a/frameworks/projects/Jewel/src/main/sass/components/_tabbar.sass 
b/frameworks/projects/Jewel/src/main/sass/components/_tabbar.sass
index 05c3479..6805e11 100644
--- a/frameworks/projects/Jewel/src/main/sass/components/_tabbar.sass
+++ b/frameworks/projects/Jewel/src/main/sass/components/_tabbar.sass
@@ -58,7 +58,7 @@ j|TabBar
     IViewport: 
ClassReference("org.apache.royale.jewel.supportClasses.Viewport")
     IViewportModel: 
ClassReference("org.apache.royale.html.beads.models.ViewportModel")
     IBeadModel: 
ClassReference("org.apache.royale.jewel.beads.models.ArrayListSelectionModel")
-    IDataProviderItemRendererMapper: 
ClassReference("org.apache.royale.html.beads.DataItemRendererFactoryForCollectionView")
+    IDataProviderItemRendererMapper: 
ClassReference("org.apache.royale.html.beads.SelectionDataItemRendererFactoryForCollectionView")
 
 // Jewel TabBarButtonItemRenderer
 $tabbarbutton-margin: 0 !default

Reply via email to