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(" ", " ") + downArrowString; + var oldLabel:String = super.label; var labelBase:String = labelSet ? _label || '' : popUpMenu.itemToLabel(event.item); super.label = labelBase.replace(" ", " ") + 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)
