You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@royale.apache.org by ha...@apache.org on 2018/09/14 07:15:26 UTC

[royale-asjs] branch develop updated: Better fix for Menu

This is an automated email from the ASF dual-hosted git repository.

harbs 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 84fa0dc  Better fix for Menu
84fa0dc is described below

commit 84fa0dcf14f508acf99216a4982bd792e974c301
Author: Harbs <ha...@in-tools.com>
AuthorDate: Fri Sep 14 10:15:15 2018 +0300

    Better fix for Menu
---
 .../controllers/ItemRendererMouseController.as     | 33 ++++++++++++++++++++--
 .../beads/controllers/MenuBarMouseController.as    | 21 ++++++++++++++
 .../controllers/MenuSelectionMouseController.as    | 23 ++++++++++++++-
 3 files changed, 73 insertions(+), 4 deletions(-)

diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/controllers/ItemRendererMouseController.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/controllers/ItemRendererMouseController.as
index 6073264..db7fee9 100644
--- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/controllers/ItemRendererMouseController.as
+++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/controllers/ItemRendererMouseController.as
@@ -91,7 +91,8 @@ COMPILE::JS {
 				goog.events.listen(element, goog.events.EventType.MOUSEOVER, this.handleMouseOver);
 				goog.events.listen(element, goog.events.EventType.MOUSEOUT, this.handleMouseOut);
 				goog.events.listen(element, goog.events.EventType.MOUSEDOWN, this.handleMouseDown);
-				goog.events.listen(element, goog.events.EventType.CLICK, this.handleMouseUp);
+				goog.events.listen(element, goog.events.EventType.CLICK, this.handleMouseClick);
+                goog.events.listen(element, goog.events.EventType.MOUSEUP, this.handleMouseUp);
 			}
 		}
 		
@@ -172,6 +173,13 @@ COMPILE::JS {
 			{
 				target.down = true;
 				target.hovered = false;
+
+				var newEvent:ItemClickedEvent = new ItemClickedEvent("itemMouseDown");
+				newEvent.data = target.data;
+				newEvent.multipleSelection = event.shiftKey;
+				newEvent.index = target.index;
+
+				target.dispatchEvent(newEvent);
 			}
 		}
 		
@@ -200,7 +208,7 @@ COMPILE::JS {
 		 * @royaleemitcoercion org.apache.royale.core.ISelectableItemRenderer
 		 */
 		COMPILE::JS
-		protected function handleMouseUp(event:BrowserEvent):void
+		protected function handleMouseClick(event:BrowserEvent):void
 		{
 			var target:ISelectableItemRenderer = event.currentTarget as ISelectableItemRenderer;
 			if (target)
@@ -213,6 +221,25 @@ COMPILE::JS {
 				target.dispatchEvent(newEvent);
 			}
 		}
-	
+
+		/**
+		 * @private
+		 * @royaleemitcoercion org.apache.royale.core.ISelectableItemRenderer
+		 */
+		COMPILE::JS
+		protected function handleMouseUp(event:BrowserEvent):void
+		{
+			var target:ISelectableItemRenderer = event.currentTarget as ISelectableItemRenderer;
+			if (target)
+			{
+				var newEvent:ItemClickedEvent = new ItemClickedEvent("itemMouseUp");
+				newEvent.data = target.data;
+				newEvent.multipleSelection = event.shiftKey;
+				newEvent.index = target.index;
+
+				target.dispatchEvent(newEvent);
+			}
+		}
+
 	}
 }
diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/controllers/MenuBarMouseController.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/controllers/MenuBarMouseController.as
index a2f34b9..70e06b1 100644
--- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/controllers/MenuBarMouseController.as
+++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/controllers/MenuBarMouseController.as
@@ -26,6 +26,8 @@ package org.apache.royale.html.beads.controllers
 	import org.apache.royale.core.UIBase;
 	import org.apache.royale.events.Event;
 	import org.apache.royale.events.IEventDispatcher;
+	import org.apache.royale.events.ItemAddedEvent;
+	import org.apache.royale.events.ItemRemovedEvent;
 	import org.apache.royale.events.ItemClickedEvent;
 	import org.apache.royale.html.Menu;
 	import org.apache.royale.html.MenuBar;
@@ -72,6 +74,25 @@ package org.apache.royale.html.beads.controllers
 			_strand = value;
 			super.strand = value;
 		}
+        /**
+         * @royaleignorecoercion org.apache.royale.events.IEventDispatcher
+         */
+		override protected function handleItemAdded(event:ItemAddedEvent):void
+		{
+			IEventDispatcher(event.item).addEventListener("itemMouseDown", selectedHandler);
+			IEventDispatcher(event.item).addEventListener("itemRollOver", rolloverHandler);
+			IEventDispatcher(event.item).addEventListener("itemRollOut", rolloutHandler);
+		}
+		
+        /**
+         * @royaleignorecoercion org.apache.royale.events.IEventDispatcher
+         */
+		override protected function handleItemRemoved(event:ItemRemovedEvent):void
+		{
+			IEventDispatcher(event.item).removeEventListener("itemMouseDown", selectedHandler);
+			IEventDispatcher(event.item).removeEventListener("itemRollOver", rolloverHandler);
+			IEventDispatcher(event.item).removeEventListener("itemRollOut", rolloutHandler);
+		}
 		
 		/**
 		 * Called when an item in the MenuBar is selected; it produces an IMenu below
diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/controllers/MenuSelectionMouseController.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/controllers/MenuSelectionMouseController.as
index 6a09a52..61e933c 100644
--- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/controllers/MenuSelectionMouseController.as
+++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/controllers/MenuSelectionMouseController.as
@@ -25,6 +25,8 @@ package org.apache.royale.html.beads.controllers
 	import org.apache.royale.core.UIBase;
 	import org.apache.royale.events.Event;
 	import org.apache.royale.events.IEventDispatcher;
+	import org.apache.royale.events.ItemAddedEvent;
+	import org.apache.royale.events.ItemRemovedEvent;
 	import org.apache.royale.events.ItemClickedEvent;
 	import org.apache.royale.events.MouseEvent;
 	import org.apache.royale.html.beads.models.MenuModel;
@@ -84,6 +86,25 @@ package org.apache.royale.html.beads.controllers
 				window.addEventListener('mouseup', hideMenu_internal, false);
 			}
 		}
+        /**
+         * @royaleignorecoercion org.apache.royale.events.IEventDispatcher
+         */
+		override protected function handleItemAdded(event:ItemAddedEvent):void
+		{
+			IEventDispatcher(event.item).addEventListener("itemMouseUp", selectedHandler);
+			IEventDispatcher(event.item).addEventListener("itemRollOver", rolloverHandler);
+			IEventDispatcher(event.item).addEventListener("itemRollOut", rolloutHandler);
+		}
+		
+        /**
+         * @royaleignorecoercion org.apache.royale.events.IEventDispatcher
+         */
+		override protected function handleItemRemoved(event:ItemRemovedEvent):void
+		{
+			IEventDispatcher(event.item).removeEventListener("itemMouseUp", selectedHandler);
+			IEventDispatcher(event.item).removeEventListener("itemRollOver", rolloverHandler);
+			IEventDispatcher(event.item).removeEventListener("itemRollOut", rolloutHandler);
+		}
 		
 		/**
 		 * Listen for selections made on the component and translate them into change events.
@@ -218,7 +239,7 @@ package org.apache.royale.html.beads.controllers
 				target = target.parentNode as HTMLElement;
 			}
             
-			setTimeout(hideOpenMenus);
+			hideOpenMenus();
 		}
 	}
 }
\ No newline at end of file