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/03/13 12:16:39 UTC

[royale-asjs] branch develop updated: jewel-dropdownlist: change mapper to basic one, and add its own render initializer

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 6efdb47  jewel-dropdownlist: change mapper to basic one, and add its own render initializer
6efdb47 is described below

commit 6efdb47863a9752dd97b33959e47adc70f71b39d
Author: Carlos Rovira <ca...@apache.org>
AuthorDate: Fri Mar 13 13:16:30 2020 +0100

    jewel-dropdownlist: change mapper to basic one, and add its own render initializer
---
 .../projects/Jewel/src/main/resources/defaults.css |  1 +
 .../projects/Jewel/src/main/royale/JewelClasses.as |  1 +
 ...DownListItemRendererFactoryForCollectionView.as | 67 ++++++++++++-------
 .../DropDownListItemRendererInitializer.as         | 76 ++++++++++++++++++++++
 .../src/main/sass/components/_dropdownlist.sass    |  4 +-
 5 files changed, 122 insertions(+), 27 deletions(-)

diff --git a/frameworks/projects/Jewel/src/main/resources/defaults.css b/frameworks/projects/Jewel/src/main/resources/defaults.css
index 0b80757..e05a0d2 100644
--- a/frameworks/projects/Jewel/src/main/resources/defaults.css
+++ b/frameworks/projects/Jewel/src/main/resources/defaults.css
@@ -844,6 +844,7 @@ j|DropDownList {
   IBeadModel: ClassReference("org.apache.royale.jewel.beads.models.DropDownListModel");
   IDataProviderItemRendererMapper: ClassReference("org.apache.royale.jewel.beads.itemRenderers.DropDownListItemRendererFactoryForCollectionView");
   IItemRendererClassFactory: ClassReference("org.apache.royale.core.ItemRendererClassFactory");
+  IItemRendererInitializer: ClassReference("org.apache.royale.jewel.beads.itemRenderers.DropDownListItemRendererInitializer");
   IItemRenderer: ClassReference("org.apache.royale.jewel.itemRenderers.DropDownListItemRenderer");
   IBeadController: ClassReference("org.apache.royale.jewel.beads.controllers.DropDownListController");
 }
diff --git a/frameworks/projects/Jewel/src/main/royale/JewelClasses.as b/frameworks/projects/Jewel/src/main/royale/JewelClasses.as
index f5fb7e2..09ea966 100644
--- a/frameworks/projects/Jewel/src/main/royale/JewelClasses.as
+++ b/frameworks/projects/Jewel/src/main/royale/JewelClasses.as
@@ -139,6 +139,7 @@ package
         import org.apache.royale.jewel.beads.itemRenderers.ButtonBarItemRendererInitializer; ButtonBarItemRendererInitializer;
         import org.apache.royale.jewel.beads.itemRenderers.TabBarItemRendererInitializer; TabBarItemRendererInitializer;
         import org.apache.royale.jewel.beads.itemRenderers.NavigationItemRendererInitializer; NavigationItemRendererInitializer;
+        import org.apache.royale.jewel.beads.itemRenderers.DropDownListItemRendererInitializer; DropDownListItemRendererInitializer;
 
     }
 }
diff --git a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/itemRenderers/DropDownListItemRendererFactoryForCollectionView.as b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/itemRenderers/DropDownListItemRendererFactoryForCollectionView.as
index f6b7b55..26c1205 100644
--- a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/itemRenderers/DropDownListItemRendererFactoryForCollectionView.as
+++ b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/itemRenderers/DropDownListItemRendererFactoryForCollectionView.as
@@ -20,8 +20,14 @@ package org.apache.royale.jewel.beads.itemRenderers
 {
 	import org.apache.royale.collections.ICollectionView;
 	import org.apache.royale.core.IIndexedItemRenderer;
+	import org.apache.royale.core.IIndexedItemRendererInitializer;
+	import org.apache.royale.core.IItemRendererOwnerView;
+	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.DataItemRendererFactoryForCollectionView;
+	import org.apache.royale.html.beads.IListView;
 	import org.apache.royale.jewel.beads.models.IDropDownListModel;
 	import org.apache.royale.jewel.itemRenderers.DropDownListItemRenderer;
 	import org.apache.royale.jewel.supportClasses.list.IListPresentationModel;
@@ -47,37 +53,49 @@ package org.apache.royale.jewel.beads.itemRenderers
 		{
 			if (!dataProviderModel)
 				return;
-			var dp:ICollectionView = dataProviderModel.dataProvider as ICollectionView;
+
+			var view:IListView = (_strand as IStrandWithModelView).view as IListView;
+			var dataGroup:IItemRendererOwnerView = view.dataGroup;
+			
+			removeAllItemRenderers(dataGroup);
+
+			dp = dataProviderModel.dataProvider;
 			if (!dp)
 				return;
 			
-			dataGroup.removeAllItemRenderers();
-			
-			var presentationModel:IListPresentationModel = _strand.getBeadByType(IListPresentationModel) as IListPresentationModel;
-			labelField = dataProviderModel.labelField;
-			
-			var ir:IIndexedItemRenderer;
-			var item:Object;
-			
-			var model:IDropDownListModel = _strand.getBeadByType(IDropDownListModel) as IDropDownListModel;
-			var offset:int = model.offset;
-
-			if(offset == 1)
-			{
+			var offset:int = (dataProviderModel as IDropDownListModel).offset;
+			if(offset == 1) {
 				promptRender = itemRendererFactory.createItemRenderer() as IIndexedItemRenderer;
-				item = DropDownListItemRenderer.OPTION_DISABLED;
-				fillRenderer(0, item, promptRender, presentationModel);
+				data = DropDownListItemRenderer.OPTION_DISABLED;
+				(itemRendererInitializer as IIndexedItemRendererInitializer).initializeIndexedItemRenderer(promptRender, data, 0);
+				promptRender.data = data;				
+				dataGroup.addItemRenderer(promptRender, false);
 			}
-
-			var n:int = dp.length;
+			
+			var n:int = dataProviderLength; 
 			for (var i:int = 0; i < n; i++)
-			{
-				ir = itemRendererFactory.createItemRenderer() as IIndexedItemRenderer;
-				item = dp.getItemAt(i);
-				fillRenderer(i + offset, item, ir, presentationModel);
+			{				
+				var ir:IIndexedItemRenderer = itemRendererFactory.createItemRenderer() as IIndexedItemRenderer;
+
+				var data:Object = getItemAt(i);
+				(itemRendererInitializer as IIndexedItemRendererInitializer).initializeIndexedItemRenderer(ir, data, i + offset);
+				ir.data = data;				
+				dataGroup.addItemRenderer(ir, false);
 			}
 			
-			IEventDispatcher(_strand).dispatchEvent(new Event("itemsCreated"));
+			dispatchItemCreatedEvent();
+			
+			if(dped)
+			{
+				dped.removeEventListener(CollectionEvent.ITEM_ADDED, itemAddedHandler);
+				dped.removeEventListener(CollectionEvent.ITEM_REMOVED, itemRemovedHandler);
+				dped.removeEventListener(CollectionEvent.ITEM_UPDATED, itemUpdatedHandler);
+			}
+			// listen for individual items being added in the future.
+			dped = dp as IEventDispatcher;
+			dped.addEventListener(CollectionEvent.ITEM_ADDED, itemAddedHandler);
+			dped.addEventListener(CollectionEvent.ITEM_REMOVED, itemRemovedHandler);
+			dped.addEventListener(CollectionEvent.ITEM_UPDATED, itemUpdatedHandler);
 		}
 
 		public var promptRender:IIndexedItemRenderer;
@@ -89,7 +107,8 @@ package org.apache.royale.jewel.beads.itemRenderers
 		{
 			if(promptRender)
 			{
-				setData(promptRender, DropDownListItemRenderer.OPTION_DISABLED, 0);
+				promptRender.index = 0;
+				promptRender.data = DropDownListItemRenderer.OPTION_DISABLED;
 			}
 		}
 	}
diff --git a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/itemRenderers/DropDownListItemRendererInitializer.as b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/itemRenderers/DropDownListItemRendererInitializer.as
new file mode 100644
index 0000000..c7ab275
--- /dev/null
+++ b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/itemRenderers/DropDownListItemRendererInitializer.as
@@ -0,0 +1,76 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  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.jewel.beads.itemRenderers
+{	
+	import org.apache.royale.core.IIndexedItemRenderer;
+	import org.apache.royale.core.IIndexedItemRendererInitializer;
+	import org.apache.royale.core.IItemRendererOwnerView;
+	import org.apache.royale.core.IStrand;
+	import org.apache.royale.core.IStrandWithModelView;
+	import org.apache.royale.html.beads.IndexedItemRendererInitializer;
+	import org.apache.royale.jewel.itemRenderers.DropDownListItemRenderer;
+
+	/**
+	 *  The DropDownListItemRendererInitializer class initializes item renderers
+     *  in DropDownList classes.
+	 *  
+	 *  @langversion 3.0
+	 *  @playerversion Flash 10.2
+	 *  @playerversion AIR 2.6
+	 *  @productversion Royale 0.9.7
+	 */
+	public class DropDownListItemRendererInitializer extends IndexedItemRendererInitializer implements IIndexedItemRendererInitializer
+	{
+		/**
+		 *  constructor.
+		 *
+		 *  @langversion 3.0
+		 *  @playerversion Flash 10.2
+		 *  @playerversion AIR 2.6
+		 *  @productversion Royale 0.9.7
+		 */
+		public function DropDownListItemRendererInitializer()
+		{
+		}
+
+        protected var ownerView:IItemRendererOwnerView;
+        
+		/**
+		 *  @copy org.apache.royale.core.IBead#strand
+		 *  
+		 *  @langversion 3.0
+		 *  @playerversion Flash 10.2
+		 *  @playerversion AIR 2.6
+		 *  @productversion Royale 0.9.7
+		 *  @royaleignorecoercion HTMLInputElement
+		 *  @royaleignorecoercion org.apache.royale.core.UIBase;
+		 */
+		override public function set strand(value:IStrand):void
+		{	
+			super.strand = value;
+            ownerView = (value as IStrandWithModelView).view as IItemRendererOwnerView;
+		}
+		
+        override protected function setupVisualsForItemRenderer(ir:IIndexedItemRenderer):void
+        {
+            if (ir is DropDownListItemRenderer && ownerView)
+                (ir as DropDownListItemRenderer).itemRendererOwnerView = ownerView;
+		}
+	}
+}
diff --git a/frameworks/projects/Jewel/src/main/sass/components/_dropdownlist.sass b/frameworks/projects/Jewel/src/main/sass/components/_dropdownlist.sass
index 9eeabb3..449538a 100644
--- a/frameworks/projects/Jewel/src/main/sass/components/_dropdownlist.sass
+++ b/frameworks/projects/Jewel/src/main/sass/components/_dropdownlist.sass
@@ -44,15 +44,13 @@ $dropdownlist-button-yoffset: calc(50% - #{$dropdownlist-button-size/2})
 
 j|DropDownList
     IBeadView: ClassReference("org.apache.royale.jewel.beads.views.DropDownListView")
-    // IBeadModel: ClassReference("org.apache.royale.jewel.beads.models.ArrayListSelectionModel")
     IBeadModel: ClassReference("org.apache.royale.jewel.beads.models.DropDownListModel")
     IDataProviderItemRendererMapper: ClassReference("org.apache.royale.jewel.beads.itemRenderers.DropDownListItemRendererFactoryForCollectionView")
     IItemRendererClassFactory: ClassReference("org.apache.royale.core.ItemRendererClassFactory")
+    IItemRendererInitializer: ClassReference("org.apache.royale.jewel.beads.itemRenderers.DropDownListItemRendererInitializer")
     IItemRenderer: ClassReference("org.apache.royale.jewel.itemRenderers.DropDownListItemRenderer")
     IBeadController: ClassReference("org.apache.royale.jewel.beads.controllers.DropDownListController")
 
-    // IDataProviderItemRendererMapper: ClassReference("org.apache.royale.html.beads.DataItemRendererFactoryForArrayData")
-
 @media -royale-swf	
     j|DropDownList
         IBeadModel: ClassReference("org.apache.royale.jewel.beads.models.ArrayListSelectionModel")