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/04 16:49:44 UTC

[royale-asjs] branch develop updated: jewel-prompt-beads: update all prompt beads to support changes at runtime and data binding

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 10359a1  jewel-prompt-beads: update all prompt beads to support changes at runtime and data binding
10359a1 is described below

commit 10359a18bfd1503692e3bc0bb50413ba4ce3c2f7
Author: Carlos Rovira <ca...@apache.org>
AuthorDate: Wed Mar 4 17:49:34 2020 +0100

    jewel-prompt-beads: update all prompt beads to support changes at runtime and data binding
---
 .../beads/controls/combobox/ComboBoxTextPrompt.as  | 53 +++++----------------
 .../controls/datefield/DateFieldTextPrompt.as      | 55 +++++-----------------
 .../dropdownlist/DropDownListTextPrompt.as         | 46 +++++-------------
 .../jewel/beads/controls/textinput/TextPrompt.as   | 50 ++++++++++++++------
 .../royale/jewel/beads/views/ComboBoxView.as       |  7 ++-
 5 files changed, 76 insertions(+), 135 deletions(-)

diff --git a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/controls/combobox/ComboBoxTextPrompt.as b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/controls/combobox/ComboBoxTextPrompt.as
index 2e7cc59..bb6cb94 100644
--- a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/controls/combobox/ComboBoxTextPrompt.as
+++ b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/controls/combobox/ComboBoxTextPrompt.as
@@ -22,9 +22,6 @@ package org.apache.royale.jewel.beads.controls.combobox
 	{
 		import flash.utils.setTimeout;
     }
-	import org.apache.royale.core.IStrand;
-	import org.apache.royale.events.Event;
-	import org.apache.royale.events.IEventDispatcher;
 	import org.apache.royale.jewel.beads.controls.combobox.IComboBoxView;
 	import org.apache.royale.jewel.beads.controls.textinput.TextPrompt;
 	
@@ -51,46 +48,20 @@ package org.apache.royale.jewel.beads.controls.combobox
 		public function ComboBoxTextPrompt()
 		{
 		}
-		
-		private var _strand:IStrand;
-		
-		/**
-		 *  @copy org.apache.royale.core.IBead#strand
-		 *  
-		 *  @langversion 3.0
-		 *  @playerversion Flash 10.2
-		 *  @playerversion AIR 2.6
-		 *  @productversion Royale 0.9.4
-		 *  @royaleignorecoercion org.apache.royale.events.IEventDispatcher
-		 */
-		override public function set strand(value:IStrand):void
-		{
-			_strand = value;
-			IEventDispatcher(_strand).addEventListener("beadsAdded", addPrompt);
-		}	
 
 		/**
-		 *  add prompt when beads are added and we can access the view to retrieve the textinput
-		 *   
-		 *  @langversion 3.0
-		 *  @playerversion Flash 10.2
-		 *  @playerversion AIR 2.6
-		 *  @productversion Royale 0.9.4
-		 *  @royaleignorecoercion org.apache.royale.events.IEventDispatcher
-		 *  @royaleignorecoercion org.apache.royale.jewel.beads.controls.combobox.IComboBoxView
-		 *  @royaleignorecoercion HTMLInputElement
-		 */
-		private function addPrompt(event:Event):void
-        {
-			IEventDispatcher(_strand).removeEventListener("beadsAdded", addPrompt);
-
-			var viewBead:IComboBoxView = _strand.getBeadByType(IComboBoxView) as IComboBoxView;
-			
-			COMPILE::JS
-			{
-				var e:HTMLInputElement = viewBead.textinput.element as HTMLInputElement;
-				e.placeholder = prompt;
-			}
+         *  @copy org.apache.royale.jewel.beads.controls.textinput.TextPrompt#updatePromptText()
+         *
+         *  @langversion 3.0
+         *  @playerversion Flash 10.2
+         *  @playerversion AIR 2.6
+         *  @productversion Royale 0.9.7
+         */
+		COMPILE::JS
+		override protected function updatePromptText():void
+		{
+			var e:HTMLInputElement = (host.view as IComboBoxView).textinput.element as HTMLInputElement;
+			e.placeholder = prompt;
 		}
 	}
 }
diff --git a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/controls/datefield/DateFieldTextPrompt.as b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/controls/datefield/DateFieldTextPrompt.as
index 82fb55b..d2c4212 100644
--- a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/controls/datefield/DateFieldTextPrompt.as
+++ b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/controls/datefield/DateFieldTextPrompt.as
@@ -22,11 +22,8 @@ package org.apache.royale.jewel.beads.controls.datefield
 	{
 		import flash.utils.setTimeout;
     }
-	import org.apache.royale.core.IStrand;
-	import org.apache.royale.events.Event;
-	import org.apache.royale.events.IEventDispatcher;
-	import org.apache.royale.jewel.beads.views.DateFieldView;
 	import org.apache.royale.jewel.beads.controls.textinput.TextPrompt;
+	import org.apache.royale.jewel.beads.views.DateFieldView;
 	
 	/**
 	 *  The DateFieldTextPrompt class is a specialty bead that can be used with
@@ -51,46 +48,20 @@ package org.apache.royale.jewel.beads.controls.datefield
 		public function DateFieldTextPrompt()
 		{
 		}
-		
-		private var _strand:IStrand;
-		
-		/**
-		 *  @copy org.apache.royale.core.IBead#strand
-		 *  
-		 *  @langversion 3.0
-		 *  @playerversion Flash 10.2
-		 *  @playerversion AIR 2.6
-		 *  @productversion Royale 0.9.4
-		 *  @royaleignorecoercion org.apache.royale.events.IEventDispatcher
-		 */
-		override public function set strand(value:IStrand):void
-		{
-			_strand = value;
-			IEventDispatcher(_strand).addEventListener("beadsAdded", addPrompt);
-		}	
 
 		/**
-		 *  add prompt when beads are added and we can access the view to retrieve the textinput
-		 *   
-		 *  @langversion 3.0
-		 *  @playerversion Flash 10.2
-		 *  @playerversion AIR 2.6
-		 *  @productversion Royale 0.9.4
-		 *  @royaleignorecoercion org.apache.royale.events.IEventDispatcher
-		 *  @royaleignorecoercion org.apache.royale.jewel.beads.controls.combobox.IComboBoxView
-		 *  @royaleignorecoercion HTMLInputElement
-		 */
-		private function addPrompt(event:Event):void
-        {
-			IEventDispatcher(_strand).removeEventListener("beadsAdded", addPrompt);
-
-			var viewBead:DateFieldView = _strand.getBeadByType(DateFieldView) as DateFieldView;
-			
-			COMPILE::JS
-			{
-				var e:HTMLInputElement = viewBead.textInput.element as HTMLInputElement;
-				e.placeholder = prompt;
-			}
+         *  @copy org.apache.royale.jewel.beads.controls.textinput.TextPrompt#updatePromptText()
+         *
+         *  @langversion 3.0
+         *  @playerversion Flash 10.2
+         *  @playerversion AIR 2.6
+         *  @productversion Royale 0.9.7
+         */
+		COMPILE::JS
+		override protected function updatePromptText():void
+		{
+			var e:HTMLInputElement = (host.view as DateFieldView).textInput.element as HTMLInputElement;
+			e.placeholder = prompt;
 		}
 	}
 }
diff --git a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/controls/dropdownlist/DropDownListTextPrompt.as b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/controls/dropdownlist/DropDownListTextPrompt.as
index 8533278..e2b8cb3 100644
--- a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/controls/dropdownlist/DropDownListTextPrompt.as
+++ b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/controls/dropdownlist/DropDownListTextPrompt.as
@@ -18,9 +18,6 @@
 ////////////////////////////////////////////////////////////////////////////////
 package org.apache.royale.jewel.beads.controls.dropdownlist
 {
-	import org.apache.royale.core.IStrand;
-	import org.apache.royale.events.Event;
-	import org.apache.royale.events.IEventDispatcher;
 	import org.apache.royale.jewel.beads.controls.textinput.TextPrompt;
 	import org.apache.royale.jewel.beads.views.DropDownListView;
 	
@@ -46,40 +43,19 @@ package org.apache.royale.jewel.beads.controls.dropdownlist
 		public function DropDownListTextPrompt()
 		{
 		}
-		
-		private var _strand:IStrand;
-		
-		/**
-		 *  @copy org.apache.royale.core.IBead#strand
-		 *  
-		 *  @langversion 3.0
-		 *  @playerversion Flash 10.2
-		 *  @playerversion AIR 2.6
-		 *  @productversion Royale 0.9.4
-		 *  @royaleignorecoercion org.apache.royale.events.IEventDispatcher
-		 */
-		override public function set strand(value:IStrand):void
-		{
-			_strand = value;
-			IEventDispatcher(_strand).addEventListener("beadsAdded", addPrompt);
-		}	
 
 		/**
-		 *  add prompt when beads are added and we can access the view to retrieve the textinput
-		 *   
-		 *  @langversion 3.0
-		 *  @playerversion Flash 10.2
-		 *  @playerversion AIR 2.6
-		 *  @productversion Royale 0.9.4
-		 *  @royaleignorecoercion org.apache.royale.events.IEventDispatcher
-		 *  @royaleignorecoercion org.apache.royale.jewel.beads.controls.dropdownlist.DropDownListView
-		 */
-		private function addPrompt(event:Event):void
-        {
-			IEventDispatcher(_strand).removeEventListener("beadsAdded", addPrompt);
-
-			var viewBead:DropDownListView = _strand.getBeadByType(DropDownListView) as DropDownListView;
-			viewBead.prompt = prompt;
+         *  @copy org.apache.royale.jewel.beads.controls.textinput.TextPrompt#updatePromptText()
+         *
+         *  @langversion 3.0
+         *  @playerversion Flash 10.2
+         *  @playerversion AIR 2.6
+         *  @productversion Royale 0.9.7
+         */
+		COMPILE::JS
+		override protected function updatePromptText():void
+		{
+			(host.view as DropDownListView).prompt = prompt;
 		}
 	}
 }
diff --git a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/controls/textinput/TextPrompt.as b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/controls/textinput/TextPrompt.as
index 3c92894..41fb366 100644
--- a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/controls/textinput/TextPrompt.as
+++ b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/controls/textinput/TextPrompt.as
@@ -21,6 +21,7 @@ package org.apache.royale.jewel.beads.controls.textinput
 	COMPILE::SWF
 	{
 		import flash.text.TextFieldType;
+
 		import org.apache.royale.core.CSSTextField;
 	}
 	
@@ -28,7 +29,6 @@ package org.apache.royale.jewel.beads.controls.textinput
 	import org.apache.royale.core.IStrand;
 	import org.apache.royale.core.UIBase;
 	import org.apache.royale.events.Event;
-	import org.apache.royale.events.IEventDispatcher;
 	
 	/**
 	 *  The TextPrompt class is a specialty bead that can be used with
@@ -55,7 +55,6 @@ package org.apache.royale.jewel.beads.controls.textinput
 		}
 		
 		private var _prompt:String;
-		
 		/**
 		 *  The string to use as the placeholder prompt.
 		 *
@@ -64,16 +63,25 @@ package org.apache.royale.jewel.beads.controls.textinput
 		 *  @playerversion AIR 2.6
 		 *  @productversion Royale 0.9.4
 		 */
+		[Bindable("promptChanged")]
 		public function get prompt():String
 		{
 			return _prompt;
 		}
 		public function set prompt(value:String):void
 		{
-			_prompt = value;
+			if(value != _prompt)
+			{
+				_prompt = value;
+				if(host)
+				{
+					updatePromptText();
+					host.dispatchEvent(new Event("promptChanged"));
+				}	
+			}
 		}
 		
-		private var _strand:IStrand;
+		protected var host:UIBase;
 		
 		/**
 		 *  @copy org.apache.royale.core.IBead#strand
@@ -87,12 +95,12 @@ package org.apache.royale.jewel.beads.controls.textinput
 		 */
 		public function set strand(value:IStrand):void
 		{
-			_strand = value;
+			host = value as UIBase;
 			
 			COMPILE::SWF
 			{
 				// listen for changes in text to hide or show the prompt
-				var model:Object = UIBase(_strand).model;
+				var model:Object = host.model;
 				if (!model.hasOwnProperty("text")) {
 					throw new Error("Model requires a text property when used with TextPrompt");
 				}
@@ -113,11 +121,24 @@ package org.apache.royale.jewel.beads.controls.textinput
 			}
 			COMPILE::JS
 			{
-				var host:UIBase = value as UIBase;
-				var e:HTMLInputElement = host.element as HTMLInputElement;
-				e.placeholder = prompt;
+				updatePromptText();
 			}
 		}
+
+		/**
+         *  Update the internal element placeholder with the prompt property
+         *
+         *  @langversion 3.0
+         *  @playerversion Flash 10.2
+         *  @playerversion AIR 2.6
+         *  @productversion Royale 0.9.7
+         */
+		COMPILE::JS
+		protected function updatePromptText():void
+		{
+			var e:HTMLInputElement = host.element as HTMLInputElement;
+			e.placeholder = prompt;
+		}
 		
 		COMPILE::SWF
 		private var promptField:CSSTextField
@@ -133,21 +154,20 @@ package org.apache.royale.jewel.beads.controls.textinput
 		{	
 			// see what the model currently has to determine if the prompt should be
 			// displayed or not.
-			var model:Object = UIBase(_strand).model;
+			var model:Object = host.model;
 			
 			if (model.text != null && model.text.length > 0 ) {
-				if (promptAdded) UIBase(_strand).removeChild(promptField);
+				if (promptAdded) host.removeChild(promptField);
 				promptAdded = false;
 			}
 			else {
-				if (!promptAdded) UIBase(_strand).addChild(promptField);
+				if (!promptAdded) host.addChild(promptField);
 				promptField.text = prompt;
 				promptAdded = true;
                 promptField.x = 2;
                 promptField.y = 2;
-                promptField.width = UIBase(_strand).width-5;
-                promptField.height = UIBase(_strand).height-4;
-
+                promptField.width = host.width-5;
+                promptField.height = host.height-4;
 			}
 		}
 	}
diff --git a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/views/ComboBoxView.as b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/views/ComboBoxView.as
index c547abb..7881abc 100644
--- a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/views/ComboBoxView.as
+++ b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/views/ComboBoxView.as
@@ -152,8 +152,11 @@ package org.apache.royale.jewel.beads.views
 				//this avoids the need to redispatch new event clones at the component level in the controller
                 IJewelSelectionModel(model).dispatcher = IEventDispatcher(value);
 			}
-			model.addEventListener("selectionChanged", handleItemChange);
-			model.addEventListener("dataProviderChanged", itemChangeAction);
+			if(model)
+			{
+				model.addEventListener("selectionChanged", handleItemChange);
+				model.addEventListener("dataProviderChanged", itemChangeAction);
+			}
 
 			listenOnStrand("sizeChanged", handleSizeChange);
 		}