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].