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

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

commit 1f73fb65c87c1be01853b50936d334de26a16bc3
Author: greg-dove <[email protected]>
AuthorDate: Thu Jun 11 20:32:41 2020 +1200

    Changes to support using UIComponent based renderers in a Menu, and fixes 
for PopUpMenuButton
---
 .../projects/MXRoyale/src/main/royale/mx/controls/Menu.as    |  3 +--
 .../MXRoyale/src/main/royale/mx/controls/PopUpMenuButton.as  | 11 +++++------
 .../royale/mx/controls/beads/ListItemRendererInitializer.as  | 12 +++++++++++-
 3 files changed, 17 insertions(+), 9 deletions(-)

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 0097265..530666a 100644
--- a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/Menu.as
+++ b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/Menu.as
@@ -588,7 +588,7 @@ package mx.controls
         *  @playerversion AIR 1.1
         *  @productversion Flex 3
         */
-       public class Menu extends UIComponent implements 
IFocusManagerContainer, IMenu
+       public class Menu extends UIComponent implements 
IFocusManagerContainer, IMenu, IItemRendererProvider
        {
                // include "../core/Version.as";
                
@@ -2848,7 +2848,6 @@ package mx.controls
             // were made; these are just defaults extracted from CSS.
             loadBeadFromValuesManager(IDataProviderItemRendererMapper, 
"iDataProviderItemRendererMapper", this);
             loadBeadFromValuesManager(IItemRendererClassFactory, 
"iItemRendererClassFactory", this);
-
                dispatchEvent(new Event("initComplete"));
                }
                
diff --git 
a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/PopUpMenuButton.as 
b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/PopUpMenuButton.as
index 6c4ef87..16cf76e 100644
--- 
a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/PopUpMenuButton.as
+++ 
b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/PopUpMenuButton.as
@@ -345,11 +345,8 @@ public class PopUpMenuButton extends PopUpButton
             var menuEvent:MenuEvent = new MenuEvent(MenuEvent.ITEM_CLICK);
             
             menuEvent.label = popUpMenu.itemToLabel(event.item);
-            /*if (labelSet)
-                super.label = _label;
-            else*/
-            //    super.label = popUpMenu.itemToLabel(event.item).replace(" ", 
"&nbsp;") + downArrowString;
 
+            var oldLabel:String = super.label;
             var labelBase:String = labelSet ? _label || '' : 
popUpMenu.itemToLabel(event.item);
             super.label = labelBase.replace(" ", "&nbsp;") + downArrowString
 
@@ -361,8 +358,9 @@ public class PopUpMenuButton extends PopUpButton
             /*itemRenderer = */menuEvent.itemRenderer = 
                 event.itemRenderer;
             dispatchEvent(menuEvent);
-            PopUpManager.removePopUp(popUp);
-            if (parent)
+            //@todo here could be possible need to check for 'closeOnActivity 
!= false' or via implementation in PopUpButton
+            close(); //instead of 'PopUpManager.removePopUp(popUp)' ensures 
the showing/not showing state in the base component is maintained
+            if (parent && oldLabel != super.label)
                 (parent as IEventDispatcher).dispatchEvent(new 
Event("layoutNeeded"));
         }
     }
@@ -391,6 +389,7 @@ public class PopUpMenuButton extends PopUpButton
             }
         } else {
             if (popUpMenu) {
+                popUpMenu.removeEventListener(MenuEvent.ITEM_CLICK, 
menuChangeHandler);
                 close();
                 popUpMenu = null; //tbc
             }
diff --git 
a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/beads/ListItemRendererInitializer.as
 
b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/beads/ListItemRendererInitializer.as
index 642e72c..17448eb 100644
--- 
a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/beads/ListItemRendererInitializer.as
+++ 
b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/beads/ListItemRendererInitializer.as
@@ -34,6 +34,8 @@ package mx.controls.beads
     import org.apache.royale.core.UIBase;
     import org.apache.royale.html.beads.ListItemRendererInitializer;
     import mx.controls.treeClasses.TreeListData;
+
+       import mx.core.UIComponent;
     
        /**
         *  The TreeItemRendererInitializer class initializes item renderers
@@ -74,7 +76,15 @@ package mx.controls.beads
                {
             if (!dataProviderModel)
                 return;
-            
+
+                       if (ir is UIComponent) {
+                               COMPILE::JS{
+                                       //we are using a UIComponent as a 
renderer, but it is too late to use .isAbsolute = false
+                                       //so swap it out here:
+                                       ir.element.style.position = 'relative';
+                               }
+                       }
+
             super.initializeIndexedItemRenderer(ir, data, index);
             
                        if (ir is IOwnerViewItemRenderer)

Reply via email to