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/08/26 16:29:48 UTC

[royale-asjs] branch develop updated: jewel-popup: content must wait for the popup to be prepareForPopUp to get right width/height values

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 d88b721  jewel-popup: content must wait for the popup to be prepareForPopUp to get right width/height values
d88b721 is described below

commit d88b721ee06569f2d04dd34d1157b6ed09c8e422
Author: Carlos Rovira <ca...@apache.org>
AuthorDate: Wed Aug 26 18:29:34 2020 +0200

    jewel-popup: content must wait for the popup to be prepareForPopUp to get right width/height values
---
 .../main/royale/org/apache/royale/jewel/PopUp.as   | 20 --------
 .../beads/controllers/PopUpMouseController.as      | 19 ++++++--
 .../apache/royale/jewel/beads/views/PopUpView.as   | 56 ++++++++++++++--------
 3 files changed, 52 insertions(+), 43 deletions(-)

diff --git a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/PopUp.as b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/PopUp.as
index f816478..78fc896 100644
--- a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/PopUp.as
+++ b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/PopUp.as
@@ -26,7 +26,6 @@ package org.apache.royale.jewel
 	import org.apache.royale.core.StyledUIBase;
 	import org.apache.royale.core.UIBase;
 	import org.apache.royale.events.Event;
-	import org.apache.royale.utils.loadBeadFromValuesManager;
 
 	/**
 	 * The openPopUp event is dispatched when the we want to open the popup
@@ -121,25 +120,6 @@ package org.apache.royale.jewel
 				_content.className="jewel popupcontent";
 			}
 		}
-		
-		/**
-		 *  The method called when added to a parent. The PopUp class uses
-		 *  this opportunity to install the content
-		 *  
-		 *  @langversion 3.0
-		 *  @playerversion Flash 10.2
-		 *  @playerversion AIR 2.6
-		 *  @productversion Royale 0.9.6
-		 */
-		override public function addedToParent():void
-		{
-			super.addedToParent();
-			
-			if(!_content)
-			{
-				content = loadBeadFromValuesManager(UIBase, "iPopUpContent", this) as UIBase;
-			}
-		}
 
 		/**
 		 * @royaleignorecoercion org.apache.royale.core.WrappedHTMLElement
diff --git a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/controllers/PopUpMouseController.as b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/controllers/PopUpMouseController.as
index 886960c..747617b 100644
--- a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/controllers/PopUpMouseController.as
+++ b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/controllers/PopUpMouseController.as
@@ -21,6 +21,7 @@ package org.apache.royale.jewel.beads.controllers
 	import org.apache.royale.core.IBeadController;
 	import org.apache.royale.core.IStrand;
 	import org.apache.royale.core.IUIBase;
+	import org.apache.royale.events.Event;
 	import org.apache.royale.events.IEventDispatcher;
 	import org.apache.royale.events.MouseEvent;
 	import org.apache.royale.jewel.PopUp;
@@ -69,30 +70,40 @@ package org.apache.royale.jewel.beads.controllers
 			viewBead = _strand.getBeadByType(PopUpView) as PopUpView;			
 			IEventDispatcher(_strand).addEventListener("openPopUp", openPopUpHandler);
 			IEventDispatcher(_strand).addEventListener("closePopUp", closePopUpHandler);
+			IEventDispatcher(_strand).addEventListener("showingPopUp", addContentListeners);
 		}
 		
 		/**
 		 * @private
 		 */
-		private function openPopUpHandler(event:MouseEvent):void
+		private function openPopUpHandler(event:Event):void
 		{
 			PopUp(_strand).open = true;
             viewBead.popUpVisible = true;
 			
 			if(!PopUp(_strand).modal)
 			{
-				IEventDispatcher(viewBead.content).addEventListener(MouseEvent.MOUSE_DOWN, handleControlMouseDown);
 				IUIBase(viewBead.popUp).addEventListener(MouseEvent.MOUSE_DOWN, closePopUpHandler);
 			}
-			viewBead.content.addEventListener("closePopUp", closePopUpHandler);
         }
+		/**
+		 * @private
+		 */
+		public function addContentListeners(event:Event):void
+		{
+			if(!PopUp(_strand).modal)
+			{
+				IEventDispatcher(viewBead.content).addEventListener(MouseEvent.MOUSE_DOWN, handleControlMouseDown);
+			}
+			viewBead.content.addEventListener("closePopUp", closePopUpHandler);
+		}
 		
 		protected function handleControlMouseDown(event:MouseEvent):void
 		{
 			event.stopImmediatePropagation();
 		}
         
-		protected function closePopUpHandler(event:MouseEvent = null):void
+		protected function closePopUpHandler(event:Event = null):void
 		{
 			viewBead.content.removeEventListener("closePopUp", closePopUpHandler);
 			if(!PopUp(_strand).modal)
diff --git a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/views/PopUpView.as b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/views/PopUpView.as
index 6930cd2..b763711 100644
--- a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/views/PopUpView.as
+++ b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/views/PopUpView.as
@@ -30,6 +30,8 @@ package org.apache.royale.jewel.beads.views
     import org.apache.royale.jewel.PopUp;
     import org.apache.royale.jewel.supportClasses.popup.PopUpContent;
     import org.apache.royale.utils.UIUtils;
+    import org.apache.royale.utils.loadBeadFromValuesManager;
+    import org.apache.royale.utils.sendStrandEvent;
 
 	/**
 	 *  The PopUpView class is a bead for PopUp that creates the dialog
@@ -67,6 +69,10 @@ package org.apache.royale.jewel.beads.views
 		{
             return getHost().content;
 		}
+		public function set content(value:UIBase):void
+		{
+            getHost().content = value;
+		}
 		
 		/**
 		 * @royaleignorecoercion org.apache.royale.core.UIBase
@@ -125,7 +131,6 @@ package org.apache.royale.jewel.beads.views
 			// There might be a better way to resolve this problem, but this works for now...
 			if(_showingPopup)
 				return;
-
 			if (value != _popUpVisible)
 			{
 				_showingPopup = true;
@@ -134,40 +139,53 @@ package org.apache.royale.jewel.beads.views
 				{
 					//create the backdrop
 					_popUp = new PopUpContent();
-					_popUp.addElement(content as IChild);
-					UIUtils.addPopUp(_popUp, getHost());
-					// viewBead.popUp is StyledUIBase that fills 100% of browser window, then we display the "iPopUp content" inside
-					
-					// rq = requestAnimationFrame(prepareForPopUp); // not work in Chrome/Firefox, while works in Safari, IE11, setInterval/Timer as well doesn't work right in Firefox
-					setTimeout(prepareForPopUp,  300);
-					// COMPILE::JS
-					// {
-					// window.addEventListener('resize', autoResizeHandler, false);
-					// }
-
-					// autoResizeHandler();
+					showPopUp();
 				}
 				else
 				{
-					UIUtils.removePopUp(_popUp);
-					COMPILE::JS
-					{
-					document.body.classList.remove("viewport");
-					// window.removeEventListener('resize', autoResizeHandler, false);
-					}
+					hidePopUp();
 					_popUp = null;
 				}
 			}
 			_showingPopup = false;
 		}
 
+		private function showPopUp():void
+		{
+			UIUtils.addPopUp(_popUp, getHost());
+			// viewBead.popUp is StyledUIBase that fills 100% of browser window, then we display the "iPopUp content" inside
+			
+			// rq = requestAnimationFrame(prepareForPopUp); // not work in Chrome/Firefox, while works in Safari, IE11, setInterval/Timer as well doesn't work right in Firefox
+			setTimeout(prepareForPopUp,  300);		
+		}
+
+		private function hidePopUp():void
+		{
+			UIUtils.removePopUp(_popUp);
+			COMPILE::JS
+			{
+			document.body.classList.remove("viewport");
+			// window.removeEventListener('resize', autoResizeHandler, false);
+			}
+		}
+
 		// COMPILE::JS
 		// private var rq:int;
 
 		private function prepareForPopUp():void
         {
 			if(_popUp) {
+				if(!content)
+				{
+					content = loadBeadFromValuesManager(UIBase, "iPopUpContent", _strand) as UIBase;
+				}
+
+				// this internal event is used in PopUpMouseController to attach listeners to content
+				sendStrandEvent(_strand, "showingPopUp");
+				
+				_popUp.addElement(content as IChild);
 				_popUp.addClass("open");
+
 				COMPILE::JS
 				{
 				//avoid scroll in html