You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@royale.apache.org by yi...@apache.org on 2022/04/12 20:04:17 UTC

[royale-asjs] 01/02: Make sure mx MenuBar creates mx menus

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

yishayw pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/royale-asjs.git

commit c93d44871459cec254c8a4d9db5df2fb7fb56221
Author: Yishay Weiss <yi...@hotmail.com>
AuthorDate: Tue Apr 12 23:02:57 2022 +0300

    Make sure mx MenuBar creates mx menus
---
 .../CascadingMenuSelectionMouseController.as       |  7 ++-
 .../MXRoyale/src/main/resources/defaults.css       |  2 +-
 .../src/main/resources/mx-royale-manifest.xml      |  1 +
 .../MXRoyale/src/main/royale/mx/controls/Menu.as   | 21 ++------
 .../CascadingMenuSelectionMouseController.as       | 15 +++---
 .../beads/controllers/MenuBarMouseController.as    |  5 +-
 .../controls/menuClasses/CascadingMenuFactory.as   | 60 ++++++++++++++++++++++
 .../menuClasses/CascadingMenuItemRenderer.as       | 12 +----
 8 files changed, 86 insertions(+), 37 deletions(-)

diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/controllers/CascadingMenuSelectionMouseController.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/controllers/CascadingMenuSelectionMouseController.as
index e6d6f88073..b602c16908 100644
--- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/controllers/CascadingMenuSelectionMouseController.as
+++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/controllers/CascadingMenuSelectionMouseController.as
@@ -104,7 +104,7 @@ package org.apache.royale.html.beads.controllers
 					}
 				}
 				model.selectedItem = event.data;
-				menu.show(component, component.width, 0);
+				showSubMenu(menu, component);
 			}
 			else {
 				super.selectedHandler(event);
@@ -112,6 +112,11 @@ package org.apache.royale.html.beads.controllers
 			}
 		}
 
+		protected function showSubMenu(menu:IMenu, component:IUIBase):void
+		{
+			menu.show(component, component.width, 0);
+		}
+
 		protected function getParentMenuBar():IEventDispatcher
 		{
 			return (_strand as IMenu).parentMenuBar;
diff --git a/frameworks/projects/MXRoyale/src/main/resources/defaults.css b/frameworks/projects/MXRoyale/src/main/resources/defaults.css
index 4f87d079b3..e458bd2258 100644
--- a/frameworks/projects/MXRoyale/src/main/resources/defaults.css
+++ b/frameworks/projects/MXRoyale/src/main/resources/defaults.css
@@ -361,7 +361,7 @@ MenuBar {
 	IContentView: ClassReference("org.apache.royale.html.supportClasses.DataGroup");
 	IItemRenderer: ClassReference("mx.controls.menuClasses.MenuBarItemRenderer");			
 	IBeadController: ClassReference("mx.controls.beads.controllers.MenuBarMouseController");
-	IMenuFactory: ClassReference("org.apache.royale.html.beads.CascadingMenuFactory");
+	IMenuFactory: ClassReference("mx.controls.menuClasses.CascadingMenuFactory");
 	IDataProviderItemRendererMapper: ClassReference("mx.controls.listClasses.DataItemRendererFactoryForICollectionViewData");
 	IItemRendererClassFactory: ClassReference("org.apache.royale.core.ItemRendererClassFactory");
 	IItemRendererInitializer: ClassReference("org.apache.royale.html.beads.IndexedItemRendererInitializer");
diff --git a/frameworks/projects/MXRoyale/src/main/resources/mx-royale-manifest.xml b/frameworks/projects/MXRoyale/src/main/resources/mx-royale-manifest.xml
index 4cd28862fa..6d34800b56 100644
--- a/frameworks/projects/MXRoyale/src/main/resources/mx-royale-manifest.xml
+++ b/frameworks/projects/MXRoyale/src/main/resources/mx-royale-manifest.xml
@@ -238,5 +238,6 @@
     <component id="HTML" class="mx.controls.HTML"/>
     <component id="HeaderRendererFactoryForArrayData" class="mx.controls.dataGridClasses.HeaderRendererFactoryForArrayData"/>
     <component id="DataGridHeaderRenderer" class="mx.controls.dataGridClasses.DataGridHeaderRenderer"/>
+    <component id="CascadingMenuFactory" class="mx.controls.menuClasses.CascadingMenuFactory"/>
 
 </componentPackage>
diff --git a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/Menu.as b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/Menu.as
index aedc81c5c3..60a52efee2 100644
--- a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/Menu.as
+++ b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/Menu.as
@@ -36,7 +36,6 @@ package mx.controls
 	import org.apache.royale.core.IDataProviderItemRendererMapper;
 	import org.apache.royale.core.IItemRendererClassFactory;
 	import org.apache.royale.core.IItemRendererProvider;
-	import org.apache.royale.html.beads.models.CascadingMenuModel;
 	import org.apache.royale.html.beads.models.MenuModel;
 	import org.apache.royale.utils.loadBeadFromValuesManager;
 	
@@ -99,8 +98,7 @@ package mx.controls
 	import org.apache.royale.core.ILayoutView;
 	import org.apache.royale.core.IHasLabelField;
 	import org.apache.royale.html.util.getModelByType;
-	import org.apache.royale.core.IPopUpHostParent;
-	import org.apache.royale.core.IPopUpHost;
+	import org.apache.royale.core.ICascadingMenuModel;
 	
 	use namespace mx_internal;
 	
@@ -595,7 +593,7 @@ package mx.controls
 	 *  @playerversion AIR 1.1
 	 *  @productversion Flex 3
 	 */
-	public class Menu extends UIComponent implements IFocusManagerContainer, IMenu, IItemRendererProvider, ILayoutParent, ILayoutView, IHasLabelField, IPopUpHostParent
+	public class Menu extends UIComponent implements IFocusManagerContainer, IMenu, IItemRendererProvider, ILayoutParent, ILayoutView, IHasLabelField
 	{
 		// include "../core/Version.as";
 		
@@ -2983,12 +2981,12 @@ package mx.controls
 		 */
 		public function get submenuField():String
 		{
-			return (model as CascadingMenuModel).submenuField;
+			return (model as ICascadingMenuModel).submenuField;
 		}
 		
 		public function set submenuField(value:String):void
 		{
-			(model as CascadingMenuModel).submenuField = value;
+			(model as ICascadingMenuModel).submenuField = value;
 		}
 		
 		//labelFunction,iconField,iconFunction was in mx.controls.listClasses.ListBase in Flex because menu was extending list and then listBase,but in Royale Menu is direct extending UIComponent so i added that functions in Menu Class
@@ -3133,17 +3131,6 @@ package mx.controls
 
 			dispatchEvent(new Event("iconFunctionChanged"));
 		    }
-
-		    private var _popUpHost:IPopUpHost;
-		    public function get popUpHost():IPopUpHost
-		    {
-			    return _popUpHost;
-		    }
-
-		    public function set popUpHost(value:IPopUpHost):void
-		    {
-			    _popUpHost = value;
-		    }
 		        
 	}
 	
diff --git a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/beads/controllers/CascadingMenuSelectionMouseController.as b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/beads/controllers/CascadingMenuSelectionMouseController.as
index 7dfecfd8af..e8f63577d6 100644
--- a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/beads/controllers/CascadingMenuSelectionMouseController.as
+++ b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/beads/controllers/CascadingMenuSelectionMouseController.as
@@ -31,11 +31,11 @@ package mx.controls.beads.controllers
 	import org.apache.royale.core.UIBase;
 	import org.apache.royale.events.IEventDispatcher;
 	import mx.supportClasses.IFoldable;
-	import mx.controls.Menu;
-	import org.apache.royale.core.IPopUpHost;
 	import org.apache.royale.core.IStrand;
 	import org.apache.royale.core.IUIBase;
 	import org.apache.royale.html.beads.models.MenuModel;
+	import org.apache.royale.utils.PointUtils;
+	import org.apache.royale.geom.Point;
 
 /**
  *  The CascadingMenuSelectionMouseController is the default controller for emulation cascading menu
@@ -79,10 +79,6 @@ package mx.controls.beads.controllers
 
 		override protected function selectedHandler(event:ItemClickedEvent):void
 		{
-			if (_strand is Menu && event.target is IPopUpHost)
-			{
-				(_strand as Menu).popUpHost = event.target as IPopUpHost;
-			}
 			super.selectedHandler(event);
 			if (event.target is IFoldable && (event.target as IFoldable).canUnfold)
 			{
@@ -157,6 +153,13 @@ package mx.controls.beads.controllers
 			addClickOutHandler(event.target);
 		}
 
+		override protected function showSubMenu(menu:IMenu, component:IUIBase):void
+		{
+			var p:Point = PointUtils.localToGlobal(new Point(0, 0), component);
+			menu.show(component, p.x + component.width, p.y);
+		}
+
+
 	}
 
 }
diff --git a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/beads/controllers/MenuBarMouseController.as b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/beads/controllers/MenuBarMouseController.as
index 4ed5305c0d..4efd8ef916 100644
--- a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/beads/controllers/MenuBarMouseController.as
+++ b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/beads/controllers/MenuBarMouseController.as
@@ -26,6 +26,8 @@ package mx.controls.beads.controllers
     import org.apache.royale.core.IStrandWithPresentationModel;
     import org.apache.royale.core.IUIBase;
     import org.apache.royale.html.beads.controllers.MenuBarMouseController;
+    import org.apache.royale.geom.Point;
+    import org.apache.royale.utils.PointUtils;
 	
     /**
      *  MenuBar Mouse Controller
@@ -66,7 +68,8 @@ package mx.controls.beads.controllers
          */
 		override protected function showMenu(menu:IMenu, component:IUIBase):void
 		{
-            super.showMenu(menu, component);
+            var p:Point = PointUtils.localToGlobal(new Point(0, component.height), component);
+            menu.show(component, p.x, p.y);
             var swpm:IStrandWithPresentationModel = menu as IStrandWithPresentationModel;
             if (swpm)
             {
diff --git a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/menuClasses/CascadingMenuFactory.as b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/menuClasses/CascadingMenuFactory.as
new file mode 100644
index 0000000000..3ee50d4aba
--- /dev/null
+++ b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/menuClasses/CascadingMenuFactory.as
@@ -0,0 +1,60 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  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 mx.controls.menuClasses
+{
+	import org.apache.royale.core.IFactory;
+	import org.apache.royale.core.Bead;
+	import mx.controls.Menu;
+	
+	/**
+	 * This bead class generates instances of the CascadingMenu for use with MenuBar.
+	 *  
+	 *  @langversion 3.0
+	 *  @playerversion Flash 10.2
+	 *  @playerversion AIR 2.6
+	 *  @productversion Royale 0.9.10
+	 */
+	public class CascadingMenuFactory extends Bead implements IFactory
+	{
+		/**
+		 * Constructor.
+		 *  
+		 *  @langversion 3.0
+		 *  @playerversion Flash 10.2
+		 *  @playerversion AIR 2.6
+		 *  @productversion Royale 0.9.10
+		 */
+		public function CascadingMenuFactory()
+		{
+		}
+		
+		/**
+		 * Returns a new instance of CascadingMenu.
+		 *  
+		 *  @langversion 3.0
+		 *  @playerversion Flash 10.2
+		 *  @playerversion AIR 2.6
+		 *  @productversion Royale 0.9.10
+		 */
+		public function newInstance():*
+		{
+			return new Menu();
+		}
+	}
+}
\ No newline at end of file
diff --git a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/menuClasses/CascadingMenuItemRenderer.as b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/menuClasses/CascadingMenuItemRenderer.as
index 40d0417841..20d5972d2f 100644
--- a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/menuClasses/CascadingMenuItemRenderer.as
+++ b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/menuClasses/CascadingMenuItemRenderer.as
@@ -39,7 +39,7 @@ package mx.controls.menuClasses
 	 *  @productversion Flex 3
 	 */
 
-	public class CascadingMenuItemRenderer extends org.apache.royale.html.supportClasses.CascadingMenuItemRenderer implements IFoldable, IPopUpHost, IPopUpHostParent
+	public class CascadingMenuItemRenderer extends org.apache.royale.html.supportClasses.CascadingMenuItemRenderer implements IFoldable
 	{
 		public function CascadingMenuItemRenderer()
 		{
@@ -130,16 +130,6 @@ package mx.controls.menuClasses
 		{
 			return getHasMenu();
 		}
-
-		public function get popUpParent():IPopUpHostParent
-		{
-			return this;
-		}
-
-		public function get popUpHost():IPopUpHost
-		{
-			return this;
-		}
 	}
 
 }