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;