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

pent 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 2dd5941  Added simple pop-up Menu.
2dd5941 is described below

commit 2dd59416ce1d0c92d952a7d35cc7f4e6e88a2b2f
Author: Peter Ent <[email protected]>
AuthorDate: Wed Feb 21 13:34:23 2018 -0500

    Added simple pop-up Menu.
---
 .../Basic/src/main/resources/basic-manifest.xml    |   2 +
 .../projects/Basic/src/main/resources/defaults.css |  32 +++++
 .../projects/Basic/src/main/royale/BasicClasses.as |   6 +
 .../src/main/royale/org/apache/royale/html/Menu.as | 123 ++++++++++++++++++
 .../org/apache/royale/html/beads/MenuView.as       |  58 +++++++++
 .../controllers/ItemRendererMouseController.as     |   1 +
 .../controllers/MenuSelectionMouseController.as    | 131 +++++++++++++++++++
 .../apache/royale/html/beads/models/MenuModel.as   |  66 ++++++++++
 .../royale/html/supportClasses/MenuItemRenderer.as | 140 +++++++++++++++++++++
 9 files changed, 559 insertions(+)

diff --git a/frameworks/projects/Basic/src/main/resources/basic-manifest.xml 
b/frameworks/projects/Basic/src/main/resources/basic-manifest.xml
index 4d3fe78..e21c769 100644
--- a/frameworks/projects/Basic/src/main/resources/basic-manifest.xml
+++ b/frameworks/projects/Basic/src/main/resources/basic-manifest.xml
@@ -111,6 +111,7 @@
     <component id="TextButtonItemRenderer" 
class="org.apache.royale.html.supportClasses.TextButtonItemRenderer"/>
     <component id="DataFieldProviderBead" 
class="org.apache.royale.html.beads.DataFieldProviderBead"/>
     <component id="ButtonBarButtonItemRenderer" 
class="org.apache.royale.html.supportClasses.ButtonBarButtonItemRenderer"/>
+    <component id="MenuItemRenderer" 
class="org.apache.royale.html.supportClasses.MenuItemRenderer"/>
     <!--
      <component id="TextFieldItemRenderer" 
class="org.apache.royale.html.supportClasses.TextFieldItemRenderer"/>
      <component id="HScrollBar" 
class="org.apache.royale.html.supportClasses.HScrollBar"/>
@@ -135,6 +136,7 @@
     <component id="Spacer" class="org.apache.royale.html.Spacer" />
     <component id="HDividedContainerDivider" 
class="org.apache.royale.html.supportClasses.HDividedContainerDivider" />
     <component id="VDividedContainerDivider" 
class="org.apache.royale.html.supportClasses.VDividedContainerDivider" />
+    <component id="Menu" class="org.apache.royale.html.Menu" />
     <!--
      <component id="ImageAndTextButtonView" 
class="org.apache.royale.html.beads.ImageAndTextButtonView" />
      -->
diff --git a/frameworks/projects/Basic/src/main/resources/defaults.css 
b/frameworks/projects/Basic/src/main/resources/defaults.css
index bd53f52..c3f05d4 100644
--- a/frameworks/projects/Basic/src/main/resources/defaults.css
+++ b/frameworks/projects/Basic/src/main/resources/defaults.css
@@ -442,6 +442,23 @@ List
        background-color: #FFFFFF;
 }
 
+Menu {
+       IBeadModel: 
ClassReference("org.apache.royale.html.beads.models.MenuModel");
+       IBeadView:  ClassReference("org.apache.royale.html.beads.MenuView");    
+       IBeadController: 
ClassReference("org.apache.royale.html.beads.controllers.MenuSelectionMouseController");
       
+       IItemRenderer: 
ClassReference("org.apache.royale.html.supportClasses.MenuItemRenderer");       
 
+       background-color: white;
+       box-shadow: 2px 2px 5px gray;
+}
+
+MenuItemRenderer {
+       margin-top: 4px;
+       margin-left: 2px;
+       margin-bottom: 2px;
+       margin-right: 8px;
+       cursor: pointer;
+}
+
 Accordion
 {
        IBeadModel: 
ClassReference("org.apache.royale.html.beads.models.ArraySelectionModel");
@@ -626,6 +643,14 @@ TreeItemRenderer
        flex-grow: 1;
 }
 
+MenuItemRenderer
+{
+       IBeadController: 
ClassReference("org.apache.royale.html.beads.controllers.ItemRendererMouseController");
+       height: 24;
+       flex-shrink: 0;
+       flex-grow: 1;
+}
+
 TextInput
 {
        border: 1px solid #808080;
@@ -889,6 +914,13 @@ global
                IContentView: 
ClassReference("org.apache.royale.html.supportClasses.DataGroup");
        }
        
+       MenuItemRenderer
+       {
+               iBackgroundBead: 
ClassReference("org.apache.royale.html.beads.SolidBackgroundBead");
+               iBorderBead: 
ClassReference('org.apache.royale.html.beads.SingleLineBorderBead');
+               iBorderModel: 
ClassReference('org.apache.royale.html.beads.models.SingleLineBorderModel');
+       }
+       
        MultilineLabel
        {
                IBeadModel: 
ClassReference("org.apache.royale.html.beads.models.TextModel");
diff --git a/frameworks/projects/Basic/src/main/royale/BasicClasses.as 
b/frameworks/projects/Basic/src/main/royale/BasicClasses.as
index 80775ad..b282275 100644
--- a/frameworks/projects/Basic/src/main/royale/BasicClasses.as
+++ b/frameworks/projects/Basic/src/main/royale/BasicClasses.as
@@ -51,6 +51,10 @@ internal class BasicClasses
        import 
org.apache.royale.html.beads.controllers.HDividedContainerMouseController; 
HDividedContainerMouseController;
        import 
org.apache.royale.html.beads.controllers.VDividedContainerMouseController; 
VDividedContainerMouseController;
        
+       import org.apache.royale.html.Menu; Menu;
+       import org.apache.royale.html.beads.MenuView; MenuView;
+       import org.apache.royale.html.supportClasses.MenuItemRenderer; 
MenuItemRenderer;
+       
        
        COMPILE::SWF
        {
@@ -118,6 +122,7 @@ internal class BasicClasses
        import org.apache.royale.html.beads.models.ArrayListSelectionModel; 
ArrayListSelectionModel;
        import 
org.apache.royale.html.beads.models.SingleSelectionCollectionViewModel; 
SingleSelectionCollectionViewModel;
        import org.apache.royale.html.beads.models.TreeModel; TreeModel;
+       import org.apache.royale.html.beads.models.MenuModel; MenuModel;
     import org.apache.royale.html.beads.models.RangeModel; RangeModel;
     import org.apache.royale.html.beads.models.RangeModelExtended; 
RangeModelExtended;
        import org.apache.royale.html.beads.models.ComboBoxModel; ComboBoxModel;
@@ -149,6 +154,7 @@ internal class BasicClasses
     import 
org.apache.royale.html.beads.controllers.ItemRendererMouseController; 
ItemRendererMouseController;
     import 
org.apache.royale.html.beads.controllers.ListSingleSelectionMouseController; 
ListSingleSelectionMouseController;
        import 
org.apache.royale.html.beads.controllers.TreeSingleSelectionMouseController; 
TreeSingleSelectionMouseController;
+       import 
org.apache.royale.html.beads.controllers.MenuSelectionMouseController; 
MenuSelectionMouseController;
     import org.apache.royale.html.beads.controllers.HSliderMouseController; 
HSliderMouseController;
        import org.apache.royale.html.beads.controllers.VSliderMouseController; 
VSliderMouseController;
        COMPILE::SWF
diff --git 
a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/Menu.as 
b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/Menu.as
new file mode 100644
index 0000000..a0f5a36
--- /dev/null
+++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/Menu.as
@@ -0,0 +1,123 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  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 org.apache.royale.html
+{
+       import org.apache.royale.core.IUIBase;
+       import org.apache.royale.core.UIBase;
+       import org.apache.royale.events.Event;
+       import org.apache.royale.events.IEventDispatcher;
+       import org.apache.royale.geom.Point;
+       import org.apache.royale.html.beads.models.MenuModel;
+       import org.apache.royale.utils.PointUtils;
+       import org.apache.royale.utils.UIUtils;
+
+       /**
+        * The Menu class builds pop-up menus that are presented as a list, 
displayed
+        * at a specific location. The dataProvider should be an Array of 
either Strings
+        * or Objects; if Objects, set the Menu's labelField to identify the 
property in
+        * the Object to use for the labels in the Menu.
+        * 
+        * Use createMenu to create a Menu and add an event listener to be 
triggered when
+        * a menu item is selected.
+        * 
+        * var menu:Menu = Menu.createMenu(dataProvider);
+        * menu.addEventListener("itemSelected", handleSelection);
+        * 
+        * Present the menu using the show function:
+        * menu.show(component, xoffset, yoffset);
+        * 
+        * Pass a component to use a reference when calculating the position of 
the menu.
+        * Set an offset from the component's upper-left corner. If an item is 
selected
+        * the event listener will be called.
+        * 
+        * Note: submenus are not supported.
+        *
+        *  @langversion 3.0
+        *  @playerversion Flash 10.2
+        *  @playerversion AIR 2.6
+        *  @productversion Royale 0.9
+        */
+       public class Menu extends List
+       {
+               /**
+                * Constructor.
+                *
+                *  @langversion 3.0
+                *  @playerversion Flash 10.2
+                *  @playerversion AIR 2.6
+                *  @productversion Royale 0.9
+                */
+               public function Menu()
+               {
+                       typeNames = "Menu";
+                       super();
+               }
+               
+               /**
+                * Creates a new instance of the menu, attaching the data given 
as the dataProvider
+                * to the menu.
+                *
+                *  @langversion 3.0
+                *  @playerversion Flash 10.2
+                *  @playerversion AIR 2.6
+                *  @productversion Royale 0.9
+                */
+               public static function createMenu(dataProvider:Object):Menu
+               {
+                       var menu:Menu = new Menu();
+                       menu.dataProvider = dataProvider;
+                       return menu;
+               }
+               
+               /**
+                * Displays the menu at the given location which is an offset 
from the origin
+                * of the component supplied.
+                *
+                *  @langversion 3.0
+                *  @playerversion Flash 10.2
+                *  @playerversion AIR 2.6
+                *  @productversion Royale 0.9
+                */
+               public function show(component:IUIBase, xoffset:Number=0, 
yoffset:Number=0):void
+               {
+                       var host:UIBase = UIUtils.findPopUpHost(component) as 
UIBase;
+                       var orgPoint:Point = new Point(component.x+xoffset, 
component.y+yoffset);
+                       var popupPoint:Point = 
PointUtils.localToGlobal(orgPoint, component.parent);
+                       this.x = popupPoint.x;
+                       this.y = popupPoint.y;
+                       host.addElement(this);
+               }
+               
+               /**
+                * Hides the menu if displayed.
+                *
+                *  @langversion 3.0
+                *  @playerversion Flash 10.2
+                *  @playerversion AIR 2.6
+                *  @productversion Royale 0.9
+                */
+               public function hide():void
+               {                       
+                       if (this.parent != null) {
+                               this.dispatchEvent(new Event("menuWillHide"));
+                               this.parent.removeElement(this);
+                       }
+               }
+       }
+}
\ No newline at end of file
diff --git 
a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/MenuView.as
 
b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/MenuView.as
new file mode 100644
index 0000000..f0d3dc8
--- /dev/null
+++ 
b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/MenuView.as
@@ -0,0 +1,58 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  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 org.apache.royale.html.beads
+{
+       import org.apache.royale.core.IBeadView;
+       import org.apache.royale.core.IStrand;
+       
+       /**
+        * Supplies the view for a menu.
+        *
+        *  @langversion 3.0
+        *  @playerversion Flash 10.2
+        *  @playerversion AIR 2.6
+        *  @productversion Royale 0.9
+        */
+       public class MenuView extends ListView implements IBeadView
+       {
+               /**
+                * Constructor.
+                *
+                *  @langversion 3.0
+                *  @playerversion Flash 10.2
+                *  @playerversion AIR 2.6
+                *  @productversion Royale 0.9
+                */
+               public function MenuView()
+               {
+                       super();
+               }
+               
+               private var _strand:IStrand;
+               
+               /**
+                * @private
+                */
+               override public function set strand(value:IStrand):void
+               {
+                       _strand = value;
+                       super.strand = value;
+               }
+       }
+}
\ No newline at end of file
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 8f9ce2d..d17bd08 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
@@ -191,6 +191,7 @@ COMPILE::JS {
                COMPILE::JS
                protected function handleMouseUp(event:BrowserEvent):void
                {
+                       event.stopImmediatePropagation();
                        var target:ISelectableItemRenderer = 
event.currentTarget as ISelectableItemRenderer;
                        if (target)
                        {
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
new file mode 100644
index 0000000..46f6d4e
--- /dev/null
+++ 
b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/controllers/MenuSelectionMouseController.as
@@ -0,0 +1,131 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  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 org.apache.royale.html.beads.controllers
+{
+       import org.apache.royale.core.IStrand;
+       import org.apache.royale.core.IUIBase;
+       import org.apache.royale.events.Event;
+       import org.apache.royale.events.IEventDispatcher;
+       import org.apache.royale.events.ItemClickedEvent;
+       import org.apache.royale.events.MouseEvent;
+       import org.apache.royale.html.Menu;
+       import org.apache.royale.html.beads.models.MenuModel;
+       import org.apache.royale.utils.UIUtils;
+       
+       COMPILE::JS {
+               import org.apache.royale.events.BrowserEvent;
+       }
+
+       /**
+        * Listens for item selections on the component and translates them to 
external events. Also
+        * listens for events on the background and uses them to dismiss the 
menu.
+        *  
+        *  @langversion 3.0
+        *  @playerversion Flash 10.2
+        *  @playerversion AIR 2.6
+        *  @productversion Royale 0.9
+        */
+       public class MenuSelectionMouseController extends 
ListSingleSelectionMouseController
+       {
+               /**
+                * Constructor.
+                *
+                *  @langversion 3.0
+                *  @playerversion Flash 10.2
+                *  @playerversion AIR 2.6
+                *  @productversion Royale 0.9
+                */
+               public function MenuSelectionMouseController()
+               {
+                       super();
+               }
+               
+               private var _strand:IStrand;
+               
+               /**
+                *  @copy org.apache.royale.core.IBead#strand
+                *  
+                *  @langversion 3.0
+                *  @playerversion Flash 10.2
+                *  @playerversion AIR 2.6
+                *  @productversion Royale 0.9
+                */
+               override public function set strand(value:IStrand):void
+               {
+                       _strand = value;
+                       super.strand = value;
+                       
+                       (_strand as 
IEventDispatcher).addEventListener("menuWillHide", handleMenuWillHide);
+                       
+                       // detect an up event on the background as a way to 
dismiss this menu
+                       COMPILE::SWF {
+                               var host:IEventDispatcher = 
UIUtils.findPopUpHost(_strand as IUIBase) as IEventDispatcher;
+                               host.addEventListener(MouseEvent.MOUSE_UP, 
hideMenu_internal);
+                       }
+                       COMPILE::JS {
+                               window.addEventListener('mouseup', 
hideMenu_internal, false);
+                       }
+               }
+               
+               /**
+                * Listen for selections made on the component and translate 
them into change events.
+                *  
+                *  @langversion 3.0
+                *  @playerversion Flash 10.2
+                *  @playerversion AIR 2.6
+                *  @productversion Royale 0.9
+                */
+               override protected function 
selectedHandler(event:ItemClickedEvent):void
+               {                                               
+                       var menuModel:MenuModel = listModel as MenuModel;
+                       var node:Object = event.data;
+                       
+                       listModel.selectedItem = node;
+                       IEventDispatcher(_strand).dispatchEvent(new 
Event("change"));
+               }
+               
+               // Internal Event Handling
+               
+               COMPILE::SWF
+               private function handleMenuWillHide(event:Event):void
+               {
+                       var host:IEventDispatcher = 
UIUtils.findPopUpHost(_strand as IUIBase) as IEventDispatcher;
+                       host.removeEventListener(MouseEvent.MOUSE_UP, 
hideMenu_internal);
+               }
+               
+               COMPILE::JS
+               private function handleMenuWillHide(event:Event):void
+               {
+                       window.removeEventListener('mouseup', 
hideMenu_internal, false);
+               }
+               
+               COMPILE::SWF
+               private function hideMenu_internal(event:MouseEvent):void
+               {
+                       (_strand as Menu).hide();
+               }
+
+               COMPILE::JS
+               private function hideMenu_internal(event:BrowserEvent):void
+               {                       
+                       event.stopImmediatePropagation();
+                       (_strand as Menu).hide();
+               }
+       }
+}
\ No newline at end of file
diff --git 
a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/models/MenuModel.as
 
b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/models/MenuModel.as
new file mode 100644
index 0000000..0ea55af
--- /dev/null
+++ 
b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/models/MenuModel.as
@@ -0,0 +1,66 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  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 org.apache.royale.html.beads.models
+{
+       import org.apache.royale.events.Event;
+
+       /**
+        * The model used to support menus, it indicates which field in the 
data identifies sub-menus.
+        *
+        *  @langversion 3.0
+        *  @playerversion Flash 10.2
+        *  @playerversion AIR 2.6
+        *  @productversion Royale 0.9
+        */
+       public class MenuModel extends ArraySelectionModel
+       {
+               /**
+                * Constructor.
+                *
+                *  @langversion 3.0
+                *  @playerversion Flash 10.2
+                *  @playerversion AIR 2.6
+                *  @productversion Royale 0.9
+                */
+               public function MenuModel()
+               {
+                       super();
+               }
+               
+               private var _submenuField:String = "menu";
+               
+               /**
+                * The field in the data object that identifies sub-menus. The 
default is "menu".
+                *
+                *  @langversion 3.0
+                *  @playerversion Flash 10.2
+                *  @playerversion AIR 2.6
+                *  @productversion Royale 0.9
+                */
+               public function get submenuField():String
+               {
+                       return _submenuField;
+               }
+               public function set submenuField(value:String):void
+               {
+                       _submenuField = value;
+                       dispatchEvent(new Event("submenuFieldChanged"));
+               }
+       }
+}
\ No newline at end of file
diff --git 
a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/supportClasses/MenuItemRenderer.as
 
b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/supportClasses/MenuItemRenderer.as
new file mode 100644
index 0000000..3ab1c91
--- /dev/null
+++ 
b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/supportClasses/MenuItemRenderer.as
@@ -0,0 +1,140 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  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 org.apache.royale.html.supportClasses
+{
+       import org.apache.royale.core.ISelectableItemRenderer;
+       import org.apache.royale.html.Label;
+       import org.apache.royale.html.beads.ITextItemRenderer;
+
+       /**
+        * The MenuItemRenderer class is the default itemRenderer for Menus.
+        *
+        *  @langversion 3.0
+        *  @playerversion Flash 10.2
+        *  @playerversion AIR 2.6
+        *  @productversion Royale 0.9
+        */
+       public class MenuItemRenderer extends DataItemRenderer implements 
ITextItemRenderer
+       {
+               /**
+                * Constructor.
+                *
+                *  @langversion 3.0
+                *  @playerversion Flash 10.2
+                *  @playerversion AIR 2.6
+                *  @productversion Royale 0.9
+                */
+               public function MenuItemRenderer()
+               {
+                       typeNames = "MenuItemRenderer";
+                       super();
+               }
+               
+               /**
+                * A place to show the label
+                */
+               private var label:Label;
+               
+               /**
+                * A place to show the sub-menu indicator
+                */
+               private var submenuIndicator:Label;
+               private var showingIndicator:Boolean = false;
+               
+               override public function addedToParent():void
+               {
+                       super.addedToParent();
+                       
+                       label = new Label();
+                       label.typeNames = "MenuItemLabel";
+                       addElement(label);
+                       
+                       submenuIndicator = new Label();
+                       submenuIndicator.typeNames = "MenuItemSubmenuIndicator";
+                       submenuIndicator.text = "▶";
+               }
+               
+               /**
+                *  Sets the data value and uses the String version of the data 
for display.
+                *
+                *  @param Object data The object being displayed by the 
itemRenderer instance.
+                *
+                *  @langversion 3.0
+                *  @playerversion Flash 10.2
+                *  @playerversion AIR 2.6
+                *  @productversion Royale 0.9
+                */
+               override public function set data(value:Object):void
+               {
+                       super.data = value;
+                       var text:String;
+                       if (value is String) text = value as String;
+                       else if (labelField) text = String(value[labelField]);
+                       else if (dataField) text = String(value[dataField]);
+                       else text = String(value);
+                       
+                       label.text = text;
+                       
+                       if (labelField || dataField) {
+                               if (value.hasOwnProperty("children")) {
+                                       if (!showingIndicator) 
addElement(submenuIndicator);
+                                       showingIndicator = true;
+                               } else {
+                                       if (showingIndicator) 
removeElement(submenuIndicator);
+                                       showingIndicator = false;
+                               }
+                       }
+               }
+               
+               /**
+                * The label of the itemRenderer, if any.
+                *
+                *  @langversion 3.0
+                *  @playerversion Flash 10.2
+                *  @playerversion AIR 2.6
+                *  @productversion Royale 0.9
+                */
+               public function get text():String
+               {
+                       return label.text;
+               }
+               public function set text(value:String):void
+               {
+                       label.text = text;
+               }
+               
+               /**
+                * @private
+                */
+               override public function adjustSize():void
+               {
+                       var cy:Number = height/2;
+                       
+                       label.x = 0;
+                       label.y = cy - label.height/2;
+                       
+                       if (showingIndicator) {
+                               submenuIndicator.x = width - 
submenuIndicator.width;
+                               submenuIndicator.y = cy - 
submenuIndicator.height/2;
+                       }
+                       
+                       updateRenderer();
+               }
+       }
+}
\ No newline at end of file

-- 
To stop receiving notification emails like this one, please contact
[email protected].

Reply via email to