You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@royale.apache.org by gr...@apache.org on 2020/06/10 07:58:55 UTC

[royale-asjs] 03/03: Improved emulation of PopUpMenuButton. Support for 'explicit' label assignment as per Flex. Added support for certain dataProvider changes. Still more to do here, I think.

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 368c6fe91b6847c50c2331f8b4810a201eefcd5d
Author: greg-dove <gr...@gmail.com>
AuthorDate: Wed Jun 10 19:07:44 2020 +1200

    Improved emulation of PopUpMenuButton. Support for 'explicit' label assignment as per Flex. Added support for certain dataProvider changes. Still more to do here, I think.
---
 .../src/main/royale/mx/controls/PopUpMenuButton.as | 57 ++++++++++++++++++++--
 1 file changed, 53 insertions(+), 4 deletions(-)

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 4df49cc..59639a4 100644
--- a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/PopUpMenuButton.as
+++ b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/PopUpMenuButton.as
@@ -203,6 +203,43 @@ public class PopUpMenuButton extends PopUpButton
         
         //invalidateProperties();     
     }
+
+
+    //--------------------------------------------------------------------------
+    //  label
+    //--------------------------------------------------------------------------
+
+    /**
+     *  @private
+     *  Storage for the label property.
+     */
+    private var _label:String = "";
+    /**
+     *  @private
+     */
+    private var labelSet:Boolean = false;
+
+    [Inspectable(category="General", defaultValue="")]
+
+    /**
+     *  @private
+     */
+    override public function set label(value:String):void
+    {
+        // labelSet is different from labelChanged as it is never unset.
+        labelSet = true;
+        _label = value;
+        setLabel();
+    }
+
+    override public function get label():String{
+        if (labelSet) return _label
+        var val:String = super.label;
+        if (val) {
+            val = val.substr(0, val.lastIndexOf(downArrowString)).replace("&nbsp;"," ");
+        }
+        return val;
+    }
     
     //--------------------------------------------------------------------------
     //  labelField
@@ -307,7 +344,11 @@ public class PopUpMenuButton extends PopUpButton
             /*if (labelSet)
                 super.label = _label;
             else*/
-                super.label = popUpMenu.itemToLabel(event.item).replace(" ", "&nbsp;") + downArrowString;
+            //    super.label = popUpMenu.itemToLabel(event.item).replace(" ", "&nbsp;") + downArrowString;
+
+            var labelBase:String = labelSet ? _label || '' : popUpMenu.itemToLabel(event.item);
+            super.label = labelBase.replace(" ", "&nbsp;") + downArrowString
+
             //setSafeIcon(popUpMenu.itemToIcon(event.item));
             menuEvent.menu = popUpMenu;
             menuEvent.menu.selectedIndex = menuEvent.index = 
@@ -335,15 +376,23 @@ public class PopUpMenuButton extends PopUpButton
         
         if (dataProvider != null)
         {
-            getPopUp();
+            if (popUpMenu) popUpMenu.dataProvider = dataProvider;
+            else getPopUp();
             if ((popUpMenu.dataProvider as ICollectionView).length > 0)
             {
                 var cursor:IViewCursor = (popUpMenu.dataProvider as ICollectionView).createCursor();
                 var value:Object = cursor.current;
-                lbl = popUpMenu.itemToLabel(value).replace(" ", "&nbsp;") + lbl;
+                if (labelSet) lbl = _label ? _label + lbl : lbl;
+                else lbl = popUpMenu.itemToLabel(value) + lbl;
+            }
+        } else {
+            if (popUpMenu) {
+                close();
+                popUpMenu = null; //tbc
             }
+            if (labelSet) lbl = _label ? _label + lbl : lbl;
         }
-        label = lbl;
+        super.label = lbl.replace(" ", "&nbsp;");
     }
 
 	}