You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@royale.apache.org by ah...@apache.org on 2018/07/21 06:28:08 UTC

[royale-asjs] branch feature/MXRoyale updated (fbd96bc -> cc768bc)

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

aharui pushed a change to branch feature/MXRoyale
in repository https://gitbox.apache.org/repos/asf/royale-asjs.git.


    from fbd96bc  Revert Changes in ISystemManager.as
     new a8caeb2  abstract how Panel creates its content area so it can be re-used in emulation (and have fewer class dependencies)
     new b08fc9c  make numelements a getter for consistency
     new 1401943  use popuphost correctly
     new d6cc464  allow subclassing of MenuBarController by emulation components
     new fc257bb  also needed to change to getter
     new 76874a2  another change to getter
     new 7178d8e  Panel and MenuBar are starting to work
     new 08d8ed3  MenuBar in mustella is almost working
     new b934b9e  properly remove popups.  The parent may have abstracted the children set
     new fb06c4e  try to override menu height
     new 6485adc  Menu working in SWF
     new 3e21407  modify test because no hover/scrubbing and can't override item height
     new 5dbbbea  add MenuBar test to JS
     new 9d768b1  fix menu dismissal
     new 95aad91  fix bubbling in JS renderers.  Maybe this should be a bead
     new a9f3e6f  mouse events bubble
     new cc768bc  fix mouse events in mustella

The 17 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 build.xml                                          |   1 +
 .../projects/Basic/src/main/resources/defaults.css |   2 +
 .../royale/org/apache/royale/core/ContainerBase.as |   2 +-
 .../royale/core/ContainerBaseStrandChildren.as     |   2 +-
 .../apache/royale/core/ListBaseStrandChildren.as   |   2 +-
 .../src/main/royale/org/apache/royale/html/Menu.as |   8 +-
 .../main/royale/org/apache/royale/html/Panel.as    |  37 +++-
 .../org/apache/royale/html/beads/PanelView.as      |  33 ++-
 .../controllers/ItemRendererMouseController.as     |   1 -
 .../beads/controllers/MenuBarMouseController.as    |  10 +-
 .../controllers/MenuSelectionMouseController.as    |  17 +-
 .../html/supportClasses/MenuBarItemRenderer.as     |   4 +
 .../royale/html/supportClasses/MenuItemRenderer.as |   4 +
 .../royale/html/supportClasses/PanelLayoutProxy.as | 108 ++++++++--
 .../core/IContainerBaseStrandChildrenHost.as       |   2 +-
 .../MXRoyale/src/main/resources/defaults.css       |  84 +++++++-
 .../src/main/resources/mx-royale-manifest.xml      |   1 +
 .../MXRoyale/src/main/royale/MXRoyaleClasses.as    |   4 +
 .../src/main/royale/mx/containers/Panel.as         | 118 ++++++-----
 .../main/royale/mx/containers/beads/PanelView.as   |  88 ++++++++
 .../beads/models/PanelModel.as}                    |  53 ++---
 .../src/main/royale/mx/controls/MenuBar.as         | 230 +++++++++------------
 .../beads/controllers/MenuBarMouseController.as}   |  47 +++--
 .../mx/controls/beads/models/MenuBarModel.as}      |  53 ++---
 .../royale/mx/controls/listClasses/ListBase.as     |   2 +-
 .../MXRoyale/src/main/royale/mx/core/Container.as  |   2 +-
 .../src/main/royale/mx/events/MenuEvent.as         |   6 +-
 .../java/marmotinni/DispatchMouseClickEvent.java   |   4 +-
 .../main/java/marmotinni/DispatchMouseEvent.java   |   4 +-
 .../tests/mxtests/basicTests/BasicTests-config.xml |   2 +
 mustella/tests/mxtests/basicTests/BasicTests.mxml  |   4 +
 .../basicTests/halo/scripts/MenuBarTestScript.mxml |  28 ++-
 .../basicTests/halo/scripts/MenuTestScript.mxml    |  27 ++-
 .../basicTests/halo/views/MenuBarTests.mxml        |   4 +-
 .../mxtests/basicTests/halo/views/MenuTests.mxml   |   4 +-
 35 files changed, 659 insertions(+), 339 deletions(-)
 create mode 100644 frameworks/projects/MXRoyale/src/main/royale/mx/containers/beads/PanelView.as
 copy frameworks/projects/MXRoyale/src/main/royale/mx/{controls/ProgressBarDirection.as => containers/beads/models/PanelModel.as} (64%)
 copy frameworks/projects/{Core/src/main/royale/org/apache/royale/events/ValueEvent.as => MXRoyale/src/main/royale/mx/controls/beads/controllers/MenuBarMouseController.as} (59%)
 copy frameworks/projects/{Basic/src/main/royale/org/apache/royale/html/beads/models/ImageAndTextModel.as => MXRoyale/src/main/royale/mx/controls/beads/models/MenuBarModel.as} (63%)


[royale-asjs] 07/17: Panel and MenuBar are starting to work

Posted by ah...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit 7178d8e2c2e117f4e2393c1e62d4d9c31717406c
Author: Alex Harui <ah...@apache.org>
AuthorDate: Tue Jul 17 16:39:50 2018 -0700

    Panel and MenuBar are starting to work
---
 .../MXRoyale/src/main/resources/defaults.css       |  77 +++++++-
 .../src/main/resources/mx-royale-manifest.xml      |   1 +
 .../MXRoyale/src/main/royale/MXRoyaleClasses.as    |   4 +
 .../src/main/royale/mx/containers/Panel.as         | 118 ++++++-----
 .../main/royale/mx/containers/beads/PanelView.as   |  88 +++++++++
 .../mx/containers/beads/models/PanelModel.as       |  66 +++++++
 .../src/main/royale/mx/controls/MenuBar.as         | 218 +++++++++------------
 .../beads/controllers/MenuBarMouseController.as    |  64 ++++++
 .../mx/controls/beads/models/MenuBarModel.as       |  77 ++++++++
 9 files changed, 532 insertions(+), 181 deletions(-)

diff --git a/frameworks/projects/MXRoyale/src/main/resources/defaults.css b/frameworks/projects/MXRoyale/src/main/resources/defaults.css
index 1cd1ae3..6965420 100644
--- a/frameworks/projects/MXRoyale/src/main/resources/defaults.css
+++ b/frameworks/projects/MXRoyale/src/main/resources/defaults.css
@@ -118,6 +118,68 @@ List
 	IViewportModel: ClassReference("org.apache.royale.html.beads.models.ViewportModel");
 }
 
+MenuBar {
+	IBeadModel: ClassReference("mx.controls.beads.models.MenuBarModel");
+	IBeadView:  ClassReference("org.apache.royale.html.beads.ListView");			
+	IBeadLayout: ClassReference("org.apache.royale.html.beads.layouts.HorizontalLayout");
+	IContentView: ClassReference("org.apache.royale.html.supportClasses.DataGroup");
+	IItemRenderer: ClassReference("org.apache.royale.html.supportClasses.MenuBarItemRenderer");			
+	IBeadController: ClassReference("mx.controls.beads.controllers.MenuBarMouseController");
+	IMenuFactory: ClassReference("org.apache.royale.html.beads.MenuFactory");
+	IDataProviderItemRendererMapper: ClassReference("org.apache.royale.html.beads.DataItemRendererFactoryForArrayData");
+	IItemRendererClassFactory: ClassReference("org.apache.royale.core.ItemRendererClassFactory");
+	IViewport: ClassReference("org.apache.royale.html.supportClasses.Viewport");
+	IViewportModel: ClassReference("org.apache.royale.html.beads.models.ViewportModel");
+	height: 30px;
+	line-height: 30px;
+	vertical-align: middle;
+	border-bottom: 1px solid #222222;
+}
+
+/*
+MenuBarItemRenderer {
+	margin-left: 5px;
+	margin-right: 15px;
+	cursor: pointer;
+}
+
+Menu {
+	IBeadModel: ClassReference("org.apache.royale.html.beads.models.CascadingMenuModel");
+	IBeadController: ClassReference("org.apache.royale.html.beads.controllers.CascadingMenuSelectionMouseController");
+	IItemRenderer: ClassReference("org.apache.royale.html.supportClasses.CascadingMenuItemRenderer");
+	position: absolute;
+	background-color: white;
+	border-width: 1px;
+	border-style: solid;
+	border-color: #222222;
+	box-shadow: 2px 2px 5px gray;
+}
+
+MenuItemRenderer {
+	margin-top: 4px;
+	margin-left: 2px;
+	margin-bottom: 2px;
+	margin-right: 8px;
+	cursor: pointer;
+}
+
+MenuItemRenderer
+{
+	IBeadController: ClassReference("org.apache.royale.html.beads.controllers.ItemRendererMouseController");
+	height: 24;
+	flex-shrink: 0;
+	flex-grow: 1;
+}
+
+MenuBarItemRenderer
+{
+	IBeadController: ClassReference("org.apache.royale.html.beads.controllers.ItemRendererMouseController");
+	height: 24;
+	flex-shrink: 0;
+	flex-grow: 1;
+}
+*/
+
 NumericStepper
 {
 	IBeadModel: ClassReference("org.apache.royale.html.beads.models.RangeModel");
@@ -126,10 +188,10 @@ NumericStepper
 
 Panel
 {
-	IBeadModel: ClassReference("org.apache.royale.html.beads.models.PanelModel");
-	IBeadView: ClassReference("org.apache.royale.html.beads.PanelView");
+	IBeadModel: ClassReference("mx.containers.beads.models.PanelModel");
+	IBeadView: ClassReference("mx.containers.beads.PanelView");
 	IPanelLayout: ClassReference("org.apache.royale.html.beads.layouts.VerticalFlexLayout");
-	
+	IPanelContentArea: ClassReference("mx.core.Container");	
 	background-color: #FFFFFF;
 	border: 1px solid #333333
 }
@@ -196,6 +258,15 @@ Panel .TitleBar
 		font-family: Arial;
 	}
 	
+	/*
+	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');
+	}
+	*/
+	
 	NumericStepper
 	{
 		iBorderBead: ClassReference('org.apache.royale.html.beads.SingleLineBorderBead');
diff --git a/frameworks/projects/MXRoyale/src/main/resources/mx-royale-manifest.xml b/frameworks/projects/MXRoyale/src/main/resources/mx-royale-manifest.xml
index 1bdd05f..b343314 100644
--- a/frameworks/projects/MXRoyale/src/main/resources/mx-royale-manifest.xml
+++ b/frameworks/projects/MXRoyale/src/main/resources/mx-royale-manifest.xml
@@ -142,5 +142,6 @@
 	<component id="Alert" class="mx.controls.Alert" />
 	<component id="ToolBar" class="mx.controls.richTextEditorClasses.ToolBar"/>
 	<component id="AdvancedDataGrid" class="mx.controls.AdvancedDataGrid" />
+    <component id="MenuBarMouseController" class="mx.controls.beads.controllers.MenuBarMouseController" />
 
 </componentPackage>
diff --git a/frameworks/projects/MXRoyale/src/main/royale/MXRoyaleClasses.as b/frameworks/projects/MXRoyale/src/main/royale/MXRoyaleClasses.as
index 09a2b75..bd0370c 100644
--- a/frameworks/projects/MXRoyale/src/main/royale/MXRoyaleClasses.as
+++ b/frameworks/projects/MXRoyale/src/main/royale/MXRoyaleClasses.as
@@ -147,6 +147,10 @@ internal class MXRoyaleClasses
     import mx.controls.beads.NumericStepperView; NumericStepperView;
     import mx.controls.beads.DateFieldView; DateFieldView;
     import mx.controls.dateFieldClasses.DateFieldDateChooser; DateFieldDateChooser;
+    import mx.controls.beads.controllers.MenuBarMouseController;
+    
+    import mx.containers.beads.PanelView; PanelView;
+    import mx.containers.beads.models.PanelModel; PanelModel;
 }
 
 }
diff --git a/frameworks/projects/MXRoyale/src/main/royale/mx/containers/Panel.as b/frameworks/projects/MXRoyale/src/main/royale/mx/containers/Panel.as
index aa3f601..e927e84 100644
--- a/frameworks/projects/MXRoyale/src/main/royale/mx/containers/Panel.as
+++ b/frameworks/projects/MXRoyale/src/main/royale/mx/containers/Panel.as
@@ -59,12 +59,11 @@ import mx.styles.StyleProxy;
 use namespace mx_internal;
 */
     
+import mx.containers.beads.PanelView;
+import mx.containers.beads.models.PanelModel;
 import mx.core.Container;
-import mx.core.ContainerLayout;
-import mx.containers.beads.BoxLayout;
-import mx.containers.beads.CanvasLayout;
-import org.apache.royale.core.IPanelModel;
-import org.apache.royale.core.LayoutBase;
+import org.apache.royale.core.IChild;
+import org.apache.royale.events.Event;
 
 //--------------------------------------
 //  Styles
@@ -523,10 +522,6 @@ public class Panel extends Container
     public function Panel()
     {
         super();
-
-
-        layoutObject = new BoxLayout();
-        addBead(layoutObject);
     }
     
     //--------------------------------------------------------------------------
@@ -535,11 +530,6 @@ public class Panel extends Container
     //
     //--------------------------------------------------------------------------
 
-    /**
-     *  @private
-     */
-    private var layoutObject:LayoutBase;
-
     //--------------------------------------------------------------------------
     //
     //  Overridden properties
@@ -558,12 +548,6 @@ public class Panel extends Container
     //  layout
     //----------------------------------
 
-    /**
-     *  @private
-     *  Storage for the layout property.
-     */
-    private var _layout:String = ContainerLayout.VERTICAL;
-
     [Bindable("layoutChanged")]
     [Inspectable(category="General", enumeration="vertical,horizontal,absolute", defaultValue="vertical")]
 
@@ -587,7 +571,7 @@ public class Panel extends Container
      */
     public function get layout():String
     {
-        return _layout;
+        return (model as PanelModel).layout;
     }
 
     /**
@@ -595,32 +579,7 @@ public class Panel extends Container
      */
     public function set layout(value:String):void
     {
-        if (_layout != value)
-        {
-            _layout = value;
-
-            if (layoutObject)
-                // Set target to null for cleanup.
-                removeBead(layoutObject);
-
-            if (_layout == ContainerLayout.ABSOLUTE)
-                layoutObject = new CanvasLayout();
-            else
-            {
-                layoutObject = new BoxLayout();
-
-                if (_layout == ContainerLayout.VERTICAL)
-                    BoxLayout(layoutObject).direction
-                        = BoxDirection.VERTICAL;
-                else
-                    BoxLayout(layoutObject).direction
-                        = BoxDirection.HORIZONTAL;
-            }
-
-            if (layoutObject)
-                addBead(layoutObject);
-
-        }
+        (model as PanelModel).layout = value;
     }
 
 
@@ -658,7 +617,7 @@ public class Panel extends Container
      */
     public function get title():String
     {
-        return IPanelModel(model).title;
+        return PanelModel(model).title;
     }
 
     /**
@@ -666,9 +625,70 @@ public class Panel extends Container
      */
     public function set title(value:String):void
     {
-        IPanelModel(model).title = value;
+        PanelModel(model).title = value;
+    }
+    
+    /**
+     * @private
+     * @royaleignorecoercion org.apache.royale.html.beads.PanelView
+     */
+    override public function addElement(c:IChild, dispatchEvent:Boolean = true):void
+    {
+        var panelView:PanelView = view as PanelView;
+        panelView.contentArea.addElement(c, dispatchEvent);
+        panelView.contentArea.dispatchEvent(new Event("layoutNeeded"));
+    }
+    
+    /**
+     * @private
+     * @royaleignorecoercion org.apache.royale.html.beads.PanelView
+     */
+    override public function addElementAt(c:IChild, index:int, dispatchEvent:Boolean = true):void
+    {
+        var panelView:PanelView = view as PanelView;
+        panelView.contentArea.addElementAt(c, index, dispatchEvent);
+        panelView.contentArea.dispatchEvent(new Event("layoutNeeded"));
     }
     
+    /**
+     * @private
+     * @royaleignorecoercion org.apache.royale.html.beads.PanelView
+     */
+    override public function getElementIndex(c:IChild):int
+    {
+        var panelView:PanelView = view as PanelView;
+        return panelView.contentArea.getElementIndex(c);
+    }
+    
+    /**
+     * @private
+     * @royaleignorecoercion org.apache.royale.html.beads.PanelView
+     */
+    override public function removeElement(c:IChild, dispatchEvent:Boolean = true):void
+    {
+        var panelView:PanelView = view as PanelView;
+        panelView.contentArea.removeElement(c, dispatchEvent);
+    }
+    
+    /**
+     * @private
+     * @royaleignorecoercion org.apache.royale.html.beads.PanelView
+     */
+    override public function get numElements():int
+    {
+        var panelView:PanelView = view as PanelView;
+        return panelView.contentArea.numElements;
+    }
+    
+    /**
+     * @private
+     * @royaleignorecoercion org.apache.royale.html.beads.PanelView
+     */
+    override public function getElementAt(index:int):IChild
+    {
+        var panelView:PanelView = view as PanelView;
+        return panelView.contentArea.getElementAt(index);
+    }
 
 }
 
diff --git a/frameworks/projects/MXRoyale/src/main/royale/mx/containers/beads/PanelView.as b/frameworks/projects/MXRoyale/src/main/royale/mx/containers/beads/PanelView.as
new file mode 100644
index 0000000..cf379ef
--- /dev/null
+++ b/frameworks/projects/MXRoyale/src/main/royale/mx/containers/beads/PanelView.as
@@ -0,0 +1,88 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  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 mx.containers.beads
+{
+
+import mx.core.ContainerLayout;
+import mx.containers.BoxDirection;
+import mx.containers.beads.BoxLayout;
+import mx.containers.beads.CanvasLayout;
+import mx.containers.beads.models.PanelModel;
+
+import org.apache.royale.html.beads.PanelView;
+import org.apache.royale.core.IBead;
+import org.apache.royale.core.IStrand;
+import org.apache.royale.core.UIBase;
+
+/**
+ *  @private
+ *  The PanelView for emulation.
+ */
+public class PanelView extends org.apache.royale.html.beads.PanelView
+{
+	//--------------------------------------------------------------------------
+	//
+	//  Constructor
+	//
+	//--------------------------------------------------------------------------
+
+	/**
+	 *  Constructor.
+	 *  
+	 *  @langversion 3.0
+	 *  @playerversion Flash 9
+	 *  @playerversion AIR 1.1
+	 *  @productversion Flex 3
+	 */
+	public function PanelView()
+	{
+		super();
+	}
+
+    /**
+     * @royaleignorecoercion org.apache.royale.core.UIBase; 
+     * @royaleignorecoercion mx.containers.beads.models.PanelModel; 
+     */
+    override public function set strand(value:IStrand):void
+    {
+        super.strand = value;
+        var model:PanelModel = (value as UIBase).model as PanelModel;
+        var _layout:String = model.layout;
+        var layoutObject:IBead;
+        if (_layout == ContainerLayout.ABSOLUTE)
+            layoutObject = new CanvasLayout();
+        else
+        {
+            layoutObject = new BoxLayout();
+            
+            if (_layout == ContainerLayout.VERTICAL)
+                BoxLayout(layoutObject).direction
+                    = BoxDirection.VERTICAL;
+            else
+                BoxLayout(layoutObject).direction
+                    = BoxDirection.HORIZONTAL;
+        }
+            
+        if (layoutObject)
+            contentArea.addBead(layoutObject);            
+    }
+}
+
+}
diff --git a/frameworks/projects/MXRoyale/src/main/royale/mx/containers/beads/models/PanelModel.as b/frameworks/projects/MXRoyale/src/main/royale/mx/containers/beads/models/PanelModel.as
new file mode 100644
index 0000000..0e6fb89
--- /dev/null
+++ b/frameworks/projects/MXRoyale/src/main/royale/mx/containers/beads/models/PanelModel.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 mx.containers.beads.models
+{
+
+import org.apache.royale.html.beads.models.PanelModel;
+import mx.core.ContainerLayout;
+
+/**
+ *  @private
+ *  The PanelModel for emulation.
+ */
+public class PanelModel extends org.apache.royale.html.beads.models.PanelModel
+{
+	//--------------------------------------------------------------------------
+	//
+	//  Constructor
+	//
+	//--------------------------------------------------------------------------
+
+	/**
+	 *  Constructor.
+	 *  
+	 *  @langversion 3.0
+	 *  @playerversion Flash 9
+	 *  @playerversion AIR 1.1
+	 *  @productversion Flex 3
+	 */
+	public function PanelModel()
+	{
+		super();
+	}
+
+
+    private var _layout:String = ContainerLayout.VERTICAL;
+    
+	public function get layout():String
+    {
+        return _layout;
+    }
+    
+    public function set layout(value:String):void
+    {
+        _layout = value;
+    }
+
+}
+
+}
diff --git a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/MenuBar.as b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/MenuBar.as
index 9760de8..105353d 100644
--- a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/MenuBar.as
+++ b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/MenuBar.as
@@ -30,42 +30,28 @@ import flash.geom.Point;
 import flash.geom.Rectangle;
 import flash.ui.Keyboard;
 import flash.xml.XMLNode; */
-import org.apache.royale.events.Event;
-
-
-/* import mx.collections.ArrayCollection;
-import mx.collections.IViewCursor;
-import mx.collections.XMLListCollection;
-import mx.collections.errors.ItemPendingError;
-import mx.containers.ApplicationControlBar;
-import mx.controls.menuClasses.IMenuBarItemRenderer;
-import mx.controls.menuClasses.IMenuDataDescriptor;
-import mx.controls.menuClasses.MenuBarItem;
-import mx.controls.treeClasses.DefaultDataDescriptor;
-import mx.core.ClassFactory; 
-import mx.core.EventPriority;
-import mx.core.IFactory;
-import mx.core.IFlexDisplayObject;
-import mx.core.LayoutDirection;
-import mx.core.UIComponentGlobals;
-import mx.events.FlexEvent;
-import mx.events.InterManagerRequest;
-import mx.events.MenuEvent;
-import mx.managers.ISystemManager;
-import mx.managers.PopUpManager;
-import mx.styles.CSSStyleDeclaration;
- */
-
+import mx.collections.ICollectionView;
 import mx.core.IUIComponent;
 import mx.core.UIComponent;
-import mx.styles.ISimpleStyleClient;
-import mx.styles.StyleProxy;
-import mx.collections.ICollectionView;
-import mx.managers.IFocusManagerComponent;
-
+import mx.core.mx_internal;
 import mx.events.CollectionEvent;
 import mx.events.CollectionEventKind;
-import mx.core.mx_internal;
+import mx.managers.IFocusManagerComponent;
+import mx.styles.ISimpleStyleClient;
+import mx.styles.StyleProxy;
+import mx.controls.beads.models.MenuBarModel;
+
+import org.apache.royale.core.IBeadLayout;
+import org.apache.royale.core.IContainer;
+import org.apache.royale.core.IDataProviderItemRendererMapper;
+import org.apache.royale.core.IItemRendererClassFactory;
+import org.apache.royale.core.ILayoutHost;
+import org.apache.royale.core.ILayoutParent;
+import org.apache.royale.core.IParent;
+import org.apache.royale.core.UIBase;
+import org.apache.royale.core.ValuesManager;
+import org.apache.royale.events.Event;
+import org.apache.royale.utils.loadBeadFromValuesManager;
 
 use namespace mx_internal;
 
@@ -406,7 +392,7 @@ include "../styles/metadata/TextStyles.as"
  *  @productversion Royale 0.9.3
  *  @royalesuppresspublicvarwarning
  */
-public class MenuBar extends UIComponent implements IFocusManagerComponent
+public class MenuBar extends UIComponent implements IFocusManagerComponent, IContainer, ILayoutParent
 {
     //include "../core/Version.as";
 
@@ -456,6 +442,28 @@ public class MenuBar extends UIComponent implements IFocusManagerComponent
 		
     }
 
+    /**
+     * @copy org.apache.royale.core.IContentViewHost#strandChildren
+     *  
+     *  @langversion 3.0
+     *  @playerversion Flash 10.2
+     *  @playerversion AIR 2.6
+     *  @productversion Royale 0.8
+     */
+    public function get strandChildren():IParent
+    {
+        return this;
+    }
+    
+    /**
+     *  @private
+     */
+    public function childrenAdded():void
+    {
+        dispatchEvent(new Event("childrenAdded"));
+    }
+    
+    
     //--------------------------------------------------------------------------
     //
     //  Variables
@@ -675,11 +683,7 @@ public class MenuBar extends UIComponent implements IFocusManagerComponent
      */
     public function get dataProvider():Object
     {
-        if (_rootModel)
-        {   
-            return _rootModel;
-        }
-        else return null;
+        return (model as MenuBarModel).dataProvider;
     }
 
     /**
@@ -687,62 +691,7 @@ public class MenuBar extends UIComponent implements IFocusManagerComponent
      */
     public function set dataProvider(value:Object):void
     {
-        /* if (_rootModel)
-        {
-            _rootModel.removeEventListener(CollectionEvent.COLLECTION_CHANGE, 
-                                           collectionChangeHandler);
-        }
-                            
-        // handle strings and xml
-        if (typeof(value)=="string")
-            value = new XML(value);
-        else if (value is XMLNode)
-            value = new XML(XMLNode(value).toString());
-        else if (value is XMLList)
-            value = new XMLListCollection(value as XMLList);
-        
-        if (value is XML)
-        {
-            _hasRoot = true;
-            var xl:XMLList = new XMLList();
-            xl += value;
-            _rootModel = new XMLListCollection(xl);
-        }
-        //if already a collection dont make new one
-        else if (value is ICollectionView)
-        {
-            _rootModel = ICollectionView(value);
-            if (_rootModel.length == 1)
-                _hasRoot = true;
-        }
-        else if (value is Array)
-        {
-            _rootModel = new ArrayCollection(value as Array);
-        }
-        //all other types get wrapped in an ArrayCollection
-        else if (value is Object)
-        {
-            _hasRoot = true;
-            // convert to an array containing this one item
-            var tmp:Array = [];
-            tmp.push(value);
-            _rootModel = new ArrayCollection(tmp);
-        }
-        else
-        {
-            _rootModel = new ArrayCollection();
-        }
-        //add listeners as weak references
-        _rootModel.addEventListener(CollectionEvent.COLLECTION_CHANGE,
-                                    collectionChangeHandler, false, 0, true);
-        //flag for processing in commitProps
-        dataProviderChanged = true;
-        invalidateProperties();
-        
-        var event:CollectionEvent = new CollectionEvent(CollectionEvent.COLLECTION_CHANGE);
-        event.kind = CollectionEventKind.RESET;
-        collectionChangeHandler(event);
-        dispatchEvent(event); */
+        (model as MenuBarModel).dataProvider = value;
     }
 
     //----------------------------------
@@ -978,7 +927,15 @@ public class MenuBar extends UIComponent implements IFocusManagerComponent
      *  @playerversion AIR 1.1
      *  @productversion Royale 0.9.3
      */
-    //public var menuBarItems:Array = [];
+    public function get menuBarItems():Array
+    {
+        var arr:Array = [];
+        var itemHolder:UIBase = getChildAt(0) as UIBase;
+        var n:int = itemHolder.numElements;
+        for (var i:int = 0; i < n; i++)
+            arr.push(itemHolder.getElementAt(i));
+        return arr;
+    }
 
     //----------------------------------
     //  menuBarItemStyleFilters
@@ -1023,22 +980,13 @@ public class MenuBar extends UIComponent implements IFocusManagerComponent
      *  @playerversion AIR 1.1
      *  @productversion Royale 0.9.3
      */
-    //public var menus:Array = [];
+    public var menus:Array;
 
     //----------------------------------
     //  selectedIndex
     //----------------------------------
 
     /**
-     *  @private
-     *  The index of the currently open menu item, or -1 if none is open.
-     */
-    /* private var openMenuIndex:int = -1;
-    
-    [Bindable("valueCommit")]
-    [Inspectable(category="General", defaultValue="-1")]
-	*/
-    /**
      *  The index in the MenuBar control of the currently open Menu 
      *  or the last opened Menu if none are currently open.    
      *  
@@ -1049,19 +997,18 @@ public class MenuBar extends UIComponent implements IFocusManagerComponent
      *  @playerversion AIR 1.1
      *  @productversion Royale 0.9.3
      */
-    /* public function get selectedIndex():int
+    public function get selectedIndex():int
     {
-        return openMenuIndex;
-    } */
+        return (model as MenuBarModel).selectedIndex;
+    }
     
     /**
      *  @private
      */
-    /* public function set selectedIndex(value:int):void
+    public function set selectedIndex(value:int):void
     {
-        openMenuIndex = value;
-        dispatchEvent(new FlexEvent(FlexEvent.VALUE_COMMIT));
-    } */
+        (model as MenuBarModel).selectedIndex = value;
+    }
 
     //----------------------------------
     //  showRoot
@@ -1069,12 +1016,6 @@ public class MenuBar extends UIComponent implements IFocusManagerComponent
 
     /**
      *  @private
-     *  Storage variable for showRoot flag.
-     */
-    /* mx_internal var _showRoot:Boolean = true;
- */
-    /**
-     *  @private
      */
     /* mx_internal var showRootChanged:Boolean = false;
     
@@ -1099,23 +1040,18 @@ public class MenuBar extends UIComponent implements IFocusManagerComponent
      *  @playerversion AIR 1.1
      *  @productversion Royale 0.9.3
      */
-    /* public function get showRoot():Boolean
+    public function get showRoot():Boolean
     {
-        return _showRoot;
-    } */
+        return (model as MenuBarModel).showRoot;
+    }
 
     /**
      *  @private
      */
-   /*  public function set showRoot(value:Boolean):void
+    public function set showRoot(value:Boolean):void
     {
-        if (_showRoot != value)
-        {
-            showRootChanged = true;
-            _showRoot = value;
-            invalidateProperties();
-        }
-    } */
+        (model as MenuBarModel).showRoot = value;
+    }
     
     //------------------------------------------------------------------------
     //
@@ -2211,6 +2147,30 @@ public class MenuBar extends UIComponent implements IFocusManagerComponent
         }
     } */
 
+   /**
+    * @private
+    */
+   override public function addedToParent():void
+   {
+       super.addedToParent();
+       
+       // Load the layout bead if it hasn't already been loaded.
+       loadBeadFromValuesManager(IBeadLayout, "iBeadLayout", this);
+       
+       // Even though super.addedToParent dispatched "beadsAdded", DataContainer still needs its data mapper
+       // and item factory beads. These beads are added after super.addedToParent is called in case substitutions
+       // were made; these are just defaults extracted from CSS.
+       loadBeadFromValuesManager(IDataProviderItemRendererMapper, "iDataProviderItemRendererMapper", this);
+       loadBeadFromValuesManager(IItemRendererClassFactory, "iItemRendererClassFactory", this);
+       
+       dispatchEvent(new Event("initComplete"));
+   }
+
+   public function getLayoutHost():ILayoutHost
+   {
+       return view as ILayoutHost;
+   }
+
 }
 
 }
diff --git a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/beads/controllers/MenuBarMouseController.as b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/beads/controllers/MenuBarMouseController.as
new file mode 100644
index 0000000..3bc3597
--- /dev/null
+++ b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/beads/controllers/MenuBarMouseController.as
@@ -0,0 +1,64 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  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 mx.controls.beads.controllers
+{
+    import mx.controls.MenuBar;
+    
+    import org.apache.royale.core.IMenu;
+    import org.apache.royale.core.IUIBase;
+    import org.apache.royale.html.beads.controllers.MenuBarMouseController;
+	
+    /**
+     *  MenuBar Mouse Controller
+     *  
+     *  @langversion 3.0
+     *  @playerversion Flash 10.2
+     *  @playerversion AIR 2.6
+     *  @productversion Royale 0.0
+     */
+	public class MenuBarMouseController extends org.apache.royale.html.beads.controllers.MenuBarMouseController
+	{
+        /**
+         *  Constructor.
+         *  
+         *  @langversion 3.0
+         *  @playerversion Flash 10.2
+         *  @playerversion AIR 2.6
+         *  @productversion Royale 0.0
+         */
+		public function MenuBarMouseController()
+		{
+		}
+		
+		
+        /**
+         *  track menus for testing
+         *  
+         *  @langversion 3.0
+         *  @playerversion Flash 10.2
+         *  @playerversion AIR 2.6
+         *  @productversion Royale 0.0
+         */
+		override protected function showMenu(menu:IMenu, component:IUIBase):void
+		{
+            super.showMenu(menu, component);
+            (_strand as MenuBar).menus = [ menu ];
+		}
+	}
+}
diff --git a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/beads/models/MenuBarModel.as b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/beads/models/MenuBarModel.as
new file mode 100644
index 0000000..4403a7e
--- /dev/null
+++ b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/beads/models/MenuBarModel.as
@@ -0,0 +1,77 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  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 mx.controls.beads.models
+{
+    import mx.controls.MenuBar;
+    
+    import org.apache.royale.core.IMenu;
+    import org.apache.royale.core.IUIBase;
+    import org.apache.royale.html.beads.models.MenuBarModel;
+	
+    /**
+     *  MenuBar Mouse Controller
+     *  
+     *  @langversion 3.0
+     *  @playerversion Flash 10.2
+     *  @playerversion AIR 2.6
+     *  @productversion Royale 0.0
+     */
+	public class MenuBarModel extends org.apache.royale.html.beads.models.MenuBarModel
+	{
+        /**
+         *  Constructor.
+         *  
+         *  @langversion 3.0
+         *  @playerversion Flash 10.2
+         *  @playerversion AIR 2.6
+         *  @productversion Royale 0.0
+         */
+		public function MenuBarModel()
+		{
+            labelField = "label";
+		}
+		
+        private var _showRoot:Boolean;
+		
+        /**
+         *  showRoot
+         *  
+         *  @langversion 3.0
+         *  @playerversion Flash 10.2
+         *  @playerversion AIR 2.6
+         *  @productversion Royale 0.0
+         */
+		public function get showRoot():Boolean
+		{
+            return _showRoot;
+		}
+        public function set showRoot(value:Boolean):void
+        {
+            _showRoot = value;
+        }
+        
+        override public function get dataProvider():Object
+        {
+            if (!showRoot)
+                return super.dataProvider.children; // TODO: needs to use descriptor
+            
+            return super.dataProvider;
+        }
+	}
+}


[royale-asjs] 04/17: allow subclassing of MenuBarController by emulation components

Posted by ah...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit d6cc46463fbeb8b7e74e80d36f0ed8c844972da5
Author: Alex Harui <ah...@apache.org>
AuthorDate: Tue Jul 17 16:36:29 2018 -0700

    allow subclassing of MenuBarController by emulation components
---
 .../royale/html/beads/controllers/MenuBarMouseController.as    | 10 +++++++---
 1 file changed, 7 insertions(+), 3 deletions(-)

diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/controllers/MenuBarMouseController.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/controllers/MenuBarMouseController.as
index 50bf3c3..a2f34b9 100644
--- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/controllers/MenuBarMouseController.as
+++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/controllers/MenuBarMouseController.as
@@ -57,7 +57,7 @@ package org.apache.royale.html.beads.controllers
 			super();
 		}
 		
-		private var _strand:IStrand;
+		protected var _strand:IStrand;
 		
 		/**
 		 * @copy org.apache.royale.core.IBead#strand
@@ -89,9 +89,8 @@ package org.apache.royale.html.beads.controllers
 			host.dispatchEvent(new Event("hideMenus"));
 			
 			var component:IUIBase = event.target as IUIBase;
-			var mbar:MenuBar = _strand as MenuBar;
 			
-			var menuFactory:IFactory = loadBeadFromValuesManager(IFactory, "iMenuFactory", mbar) as IFactory;
+			var menuFactory:IFactory = loadBeadFromValuesManager(IFactory, "iMenuFactory", _strand) as IFactory;
 			var menu:IMenu = menuFactory.newInstance() as IMenu;
 			
 			var model:MenuBarModel = _strand.getBeadByType(IBeadModel) as MenuBarModel;
@@ -100,6 +99,11 @@ package org.apache.royale.html.beads.controllers
 			menu.labelField = model.labelField;
 			menu.submenuField = model.submenuField;
 			menu.parentMenuBar = _strand as IEventDispatcher;
+            showMenu(menu, component);
+        }
+        
+        protected function showMenu(menu:IMenu, component:IUIBase):void
+        {
 			menu.show(component, 0, component.height);
 		}
 	}


[royale-asjs] 13/17: add MenuBar test to JS

Posted by ah...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit 5dbbbeaf8a24b55f5eb86b4cf13022c3976a2350
Author: Alex Harui <ah...@apache.org>
AuthorDate: Fri Jul 20 23:24:47 2018 -0700

    add MenuBar test to JS
---
 build.xml | 1 +
 1 file changed, 1 insertion(+)

diff --git a/build.xml b/build.xml
index 3d432f3..3a50aa4 100644
--- a/build.xml
+++ b/build.xml
@@ -1602,6 +1602,7 @@ limitations under the License.
             <arg value="script=${basedir}/mustella/tests/mxtests/basicTests/halo/scripts/ListAndDataGridTestScript.mxml" />
             <arg value="script=${basedir}/mustella/tests/mxtests/basicTests/halo/scripts/NumericStepperTestScript.mxml" />
             <arg value="script=${basedir}/mustella/tests/mxtests/basicTests/halo/scripts/DateFieldTestScript.mxml" />
+            <arg value="script=${basedir}/mustella/tests/mxtests/basicTests/halo/scripts/MenuBarTestScript.mxml" />
             <arg value="script=${basedir}/mustella/tests/mxtests/basicTests/spark/scripts/ButtonTestScript.mxml" />
             <arg value="showSteps=true" />
             <arg value="showScripts=true" />


[royale-asjs] 12/17: modify test because no hover/scrubbing and can't override item height

Posted by ah...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit 3e214073661f00194743efb035ddd072f1c54a17
Author: Alex Harui <ah...@apache.org>
AuthorDate: Wed Jul 18 15:12:53 2018 -0700

    modify test because no hover/scrubbing and can't override item height
---
 .../basicTests/halo/scripts/MenuBarTestScript.mxml | 23 ++++++++++++++++++----
 1 file changed, 19 insertions(+), 4 deletions(-)

diff --git a/mustella/tests/mxtests/basicTests/halo/scripts/MenuBarTestScript.mxml b/mustella/tests/mxtests/basicTests/halo/scripts/MenuBarTestScript.mxml
index 1b57a1c..8e13fed 100644
--- a/mustella/tests/mxtests/basicTests/halo/scripts/MenuBarTestScript.mxml
+++ b/mustella/tests/mxtests/basicTests/halo/scripts/MenuBarTestScript.mxml
@@ -59,15 +59,15 @@
 -->				<AssertPropertyValue target="haloMenuBarTests.testMenuBar.menus.0" propertyName="visible" value="true" />
 			</body>
 		</TestCase>
+        <!-- these two test cases presume next menu will appear when hovering over another menubar item
 		<TestCase testID="MenuBarTest2">
 			<body>
 				<DispatchMouseEvent target="haloMenuBarTests.testMenuBar.menuBarItems.0" type="mouseOut" localX="10" localY="10" />
 				<DispatchMouseEvent target="haloMenuBarTests.testMenuBar.menuBarItems.1" type="mouseOver" localX="10" localY="10" />
-<!--
                 <AssertEvent target="haloMenuBarTests.testMenuBar" eventName="menuHide" eventClass="mx.events::MenuEvent" />
 				<AssertEvent target="haloMenuBarTests.testMenuBar" eventName="menuShow" eventClass="mx.events::MenuEvent" />
 				<AssertEvent target="haloMenuBarTests.testMenuBar.menus.1.mx_internal:popupTween" eventName="tweenEnd" eventClass="mx.events::TweenEvent" />
--->				<AssertPropertyValue target="haloMenuBarTests.testMenuBar.menus.1" propertyName="visible" value="true" />
+				<AssertPropertyValue target="haloMenuBarTests.testMenuBar.menus.1" propertyName="visible" value="true" />
 				<AssertPropertyValue target="haloMenuBarTests.testMenuBar.menus.0" propertyName="visible" value="false" />
 			</body>
 		</TestCase>
@@ -76,13 +76,28 @@
 				<DispatchMouseEvent target="haloMenuBarTests.testMenuBar.menus.1" type="mouseOver" localX="20" localY="30" />
 				<DispatchMouseEvent target="haloMenuBarTests.testMenuBar.menus.1" type="mouseDown" localX="20" localY="30" />
 				<DispatchMouseEvent target="haloMenuBarTests.testMenuBar.menus.1" type="mouseUp" localX="20" localY="30" />
-<!--
                 <AssertEvent target="haloMenuBarTests.testMenuBar" eventName="itemClick" eventClass="mx.events::MenuEvent" />
 				<AssertEventPropertyValue propertyName="label" value="Paste" />
 				<AssertEvent target="haloMenuBarTests.testMenuBar" eventName="menuHide" eventClass="mx.events::MenuEvent" />
--->				<AssertPropertyValue target="haloMenuBarTests.testMenuLabel" propertyName="text" value="Paste" />
+				<AssertPropertyValue target="haloMenuBarTests.testMenuLabel" propertyName="text" value="Paste" />
 				<AssertPropertyValue target="haloMenuBarTests.testMenuBar.menus.1" propertyName="visible" value="false" />
 			</body>
 		</TestCase>
+        For now, just see if we can click on a menu.  Not sure if we need to support the hover behavior -->
+        <TestCase testID="MenuBarTest2">
+            <body>
+                <DispatchMouseEvent target="haloMenuBarTests.testMenuBar.menuBarItems.1" type="mouseOver" localX="10" localY="10" />
+                <DispatchMouseClickEvent target="haloMenuBarTests.testMenuBar.menuBarItems.1" localX="10" localY="10" />
+                <!-- unable to override menuitem height right now -->
+                <DispatchMouseEvent target="haloMenuBarTests.testMenuBar.menus.0" type="mouseOver" localX="20" localY="40" />
+                <DispatchMouseEvent target="haloMenuBarTests.testMenuBar.menus.0" type="mouseDown" localX="20" localY="40" />
+                <DispatchMouseEvent target="haloMenuBarTests.testMenuBar.menus.0" type="mouseUp" localX="20" localY="40" />
+                <AssertPropertyValue target="haloMenuBarTests.testMenuLabel" propertyName="text" value="Paste" />
+                <!-- visible isn't changed when menus pulled off the display list
+                <AssertPropertyValue target="haloMenuBarTests.testMenuBar.menus.0" propertyName="visible" value="false" />
+                -->
+            </body>
+        </TestCase>
+        
 	</testCases>
 </UnitTester>


[royale-asjs] 03/17: use popuphost correctly

Posted by ah...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit 14019432aef60cce480d5500145e3083e76ba7da
Author: Alex Harui <ah...@apache.org>
AuthorDate: Tue Jul 17 16:35:21 2018 -0700

    use popuphost correctly
---
 .../projects/Basic/src/main/royale/org/apache/royale/html/Menu.as | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

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
index 7681737..61fea69 100644
--- 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
@@ -20,7 +20,7 @@ package org.apache.royale.html
 {
 	import org.apache.royale.core.IMenu;
 	import org.apache.royale.core.IUIBase;
-	import org.apache.royale.core.UIBase;
+	import org.apache.royale.core.IParent;
 	import org.apache.royale.events.Event;
 	import org.apache.royale.events.IEventDispatcher;
 	import org.apache.royale.geom.Point;
@@ -148,7 +148,7 @@ package org.apache.royale.html
 		 */
 		public function show(component:IUIBase, xoffset:Number=0, yoffset:Number=0):void
 		{
-			var host:UIBase = UIUtils.findPopUpHost(component) as UIBase;
+			var host:IParent = UIUtils.findPopUpHost(component).popUpParent as IParent;
 			var orgPoint:Point = new Point(component.x+xoffset, component.y+yoffset);
 			var popupPoint:Point = PointUtils.localToGlobal(orgPoint, component.parent);
 			this.x = popupPoint.x;
@@ -167,8 +167,8 @@ package org.apache.royale.html
 		public function hide():void
 		{		
 			// dispatch the "hideMenus" event to trigger any exposed menu to be hidden.
-			var host:UIBase = UIUtils.findPopUpHost(this) as UIBase;
-			host.dispatchEvent(new Event("hideMenus"));
+			var host:IParent = UIUtils.findPopUpHost(this).popUpParent as IParent;
+			(host as IEventDispatcher).dispatchEvent(new Event("hideMenus"));
 		}
 	}
 }
\ No newline at end of file


[royale-asjs] 10/17: try to override menu height

Posted by ah...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit fb06c4efa1e80b5f8e50a8cfb280a1196c1bf24b
Author: Alex Harui <ah...@apache.org>
AuthorDate: Wed Jul 18 15:11:25 2018 -0700

    try to override menu height
---
 frameworks/projects/MXRoyale/src/main/resources/defaults.css | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)

diff --git a/frameworks/projects/MXRoyale/src/main/resources/defaults.css b/frameworks/projects/MXRoyale/src/main/resources/defaults.css
index 6965420..1e189c4 100644
--- a/frameworks/projects/MXRoyale/src/main/resources/defaults.css
+++ b/frameworks/projects/MXRoyale/src/main/resources/defaults.css
@@ -16,7 +16,7 @@
 *  limitations under the License.
 *
 */
-
+@namespace Basic "library://ns.apache.org/royale/basic";
 @namespace "library://ns.apache.org/royale/mx";
 
 .royale *, . royale *:before, . royale *:after {
@@ -35,6 +35,11 @@ global {
  * -------------------------------------------------------
  */
 
+Basic|MenuItemRenderer
+{
+	height: 16px;
+	margin-top: 4px;
+}
 
 Button
 {


[royale-asjs] 06/17: another change to getter

Posted by ah...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit 76874a24eaea1404f80bb8953ceb7324a1af65a9
Author: Alex Harui <ah...@apache.org>
AuthorDate: Tue Jul 17 16:38:06 2018 -0700

    another change to getter
---
 .../MXRoyale/src/main/royale/mx/controls/listClasses/ListBase.as        | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/listClasses/ListBase.as b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/listClasses/ListBase.as
index 97cb73f..5811cd8 100644
--- a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/listClasses/ListBase.as
+++ b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/listClasses/ListBase.as
@@ -709,7 +709,7 @@ use namespace mx_internal;
          * @suppress {undefinedNames}
          * Support strandChildren.
          */
-        public function $numElements():int
+        public function get $numElements():int
         {
             return super.numElements;
         }


[royale-asjs] 09/17: properly remove popups. The parent may have abstracted the children set

Posted by ah...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit b934b9e32dc313185ca554c1a571d87f6856f5a4
Author: Alex Harui <ah...@apache.org>
AuthorDate: Wed Jul 18 15:10:55 2018 -0700

    properly remove popups.  The parent may have abstracted the children set
---
 .../royale/html/beads/controllers/MenuSelectionMouseController.as     | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

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
index 280ac0b..93cd4b3 100644
--- 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
@@ -19,6 +19,7 @@
 package org.apache.royale.html.beads.controllers
 {
 	import org.apache.royale.core.IMenu;
+    import org.apache.royale.core.IPopUpHost;
 	import org.apache.royale.core.IStrand;
 	import org.apache.royale.core.IUIBase;
 	import org.apache.royale.core.UIBase;
@@ -136,7 +137,8 @@ package org.apache.royale.html.beads.controllers
 				if (menu.parent != null) {
 					var controller:MenuSelectionMouseController = menu.getBeadByType(MenuSelectionMouseController) as MenuSelectionMouseController;
 					controller.removeClickOutHandler(menu);
-					menu.parent.removeElement(menu);
+                    var host:IPopUpHost = UIUtils.findPopUpHost(_strand as IUIBase);
+					host.popUpParent.removeElement(menu);
 				}
 			}
 			MenuModel.clearMenuList();


[royale-asjs] 11/17: Menu working in SWF

Posted by ah...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit 6485adc4f50f408d6f4447c2cfd81f6f92ead2ab
Author: Alex Harui <ah...@apache.org>
AuthorDate: Wed Jul 18 15:12:28 2018 -0700

    Menu working in SWF
---
 .../projects/MXRoyale/src/main/royale/mx/controls/MenuBar.as | 12 +++++++++++-
 .../mx/controls/beads/controllers/MenuBarMouseController.as  |  9 +++++++++
 .../src/main/royale/mx/controls/beads/models/MenuBarModel.as |  1 +
 .../projects/MXRoyale/src/main/royale/mx/events/MenuEvent.as |  6 ++++--
 4 files changed, 25 insertions(+), 3 deletions(-)

diff --git a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/MenuBar.as b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/MenuBar.as
index 105353d..619d710 100644
--- a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/MenuBar.as
+++ b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/MenuBar.as
@@ -36,6 +36,7 @@ import mx.core.UIComponent;
 import mx.core.mx_internal;
 import mx.events.CollectionEvent;
 import mx.events.CollectionEventKind;
+import mx.events.MenuEvent;
 import mx.managers.IFocusManagerComponent;
 import mx.styles.ISimpleStyleClient;
 import mx.styles.StyleProxy;
@@ -439,9 +440,17 @@ public class MenuBar extends UIComponent implements IFocusManagerComponent, ICon
        /*  menuBarItemRenderer = new ClassFactory(MenuBarItem);
         tabChildren = false; */
 		
-		
+		addEventListener("change", changeHandler);
     }
 
+    protected function changeHandler(event:Event):void
+    {
+        var item:Object = (model as MenuBarModel).selectedItem;
+        var menuEvent:MenuEvent = new MenuEvent("itemClick");
+        menuEvent.item = item;
+        dispatchEvent(menuEvent);
+    }
+    
     /**
      * @copy org.apache.royale.core.IContentViewHost#strandChildren
      *  
@@ -2170,6 +2179,7 @@ public class MenuBar extends UIComponent implements IFocusManagerComponent, ICon
    {
        return view as ILayoutHost;
    }
+   
 
 }
 
diff --git a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/beads/controllers/MenuBarMouseController.as b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/beads/controllers/MenuBarMouseController.as
index 3bc3597..2859020 100644
--- a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/beads/controllers/MenuBarMouseController.as
+++ b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/beads/controllers/MenuBarMouseController.as
@@ -20,7 +20,9 @@ package mx.controls.beads.controllers
 {
     import mx.controls.MenuBar;
     
+    import org.apache.royale.core.IListPresentationModel;
     import org.apache.royale.core.IMenu;
+    import org.apache.royale.core.IStrandWithPresentationModel;
     import org.apache.royale.core.IUIBase;
     import org.apache.royale.html.beads.controllers.MenuBarMouseController;
 	
@@ -58,6 +60,13 @@ package mx.controls.beads.controllers
 		override protected function showMenu(menu:IMenu, component:IUIBase):void
 		{
             super.showMenu(menu, component);
+            var swpm:IStrandWithPresentationModel = menu as IStrandWithPresentationModel;
+            if (swpm)
+            {
+                var lpm:IListPresentationModel = swpm.presentationModel as IListPresentationModel;
+                if (lpm)
+                    lpm.rowHeight = 20;
+            }
             (_strand as MenuBar).menus = [ menu ];
 		}
 	}
diff --git a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/beads/models/MenuBarModel.as b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/beads/models/MenuBarModel.as
index 4403a7e..4df5cad 100644
--- a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/beads/models/MenuBarModel.as
+++ b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/beads/models/MenuBarModel.as
@@ -45,6 +45,7 @@ package mx.controls.beads.models
 		public function MenuBarModel()
 		{
             labelField = "label";
+            submenuField = "children";
 		}
 		
         private var _showRoot:Boolean;
diff --git a/frameworks/projects/MXRoyale/src/main/royale/mx/events/MenuEvent.as b/frameworks/projects/MXRoyale/src/main/royale/mx/events/MenuEvent.as
index a96bd0a..a0a1042 100644
--- a/frameworks/projects/MXRoyale/src/main/royale/mx/events/MenuEvent.as
+++ b/frameworks/projects/MXRoyale/src/main/royale/mx/events/MenuEvent.as
@@ -19,9 +19,10 @@
 
 package mx.events
 {
-import org.apache.royale.events.Event;
 import mx.controls.MenuBar;
 
+import org.apache.royale.events.Event;
+
 /*
 import flash.events.Event;
 import mx.controls.Menu;
@@ -378,7 +379,8 @@ public class MenuEvent extends ListEvent
      *  @playerversion AIR 1.1
      *  @productversion Royale 0.9.3
      */
-	 public function MenuEvent()
+	public function MenuEvent(type:String, bubbles:Boolean = false, 
+                              cancelable:Boolean = false, item:Object = null)
 	{
 		super(type, bubbles, cancelable);
 		/*


[royale-asjs] 08/17: MenuBar in mustella is almost working

Posted by ah...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit 08d8ed330a0a669fe363340d7b9cd45a0f118abf
Author: Alex Harui <ah...@apache.org>
AuthorDate: Tue Jul 17 16:40:14 2018 -0700

    MenuBar in mustella is almost working
---
 .../tests/mxtests/basicTests/BasicTests-config.xml |  2 ++
 mustella/tests/mxtests/basicTests/BasicTests.mxml  |  4 ++++
 .../basicTests/halo/scripts/MenuBarTestScript.mxml | 17 ++++++++------
 .../basicTests/halo/scripts/MenuTestScript.mxml    | 27 +++++++++++++---------
 .../basicTests/halo/views/MenuBarTests.mxml        |  4 ++--
 .../mxtests/basicTests/halo/views/MenuTests.mxml   |  4 ++--
 6 files changed, 36 insertions(+), 22 deletions(-)

diff --git a/mustella/tests/mxtests/basicTests/BasicTests-config.xml b/mustella/tests/mxtests/basicTests/BasicTests-config.xml
index 666857a..d09b495 100644
--- a/mustella/tests/mxtests/basicTests/BasicTests-config.xml
+++ b/mustella/tests/mxtests/basicTests/BasicTests-config.xml
@@ -36,7 +36,9 @@
         <symbol>halo.scripts.DateFieldTestScript</symbol>
         <!--
         <symbol>halo.scripts.MenuTestScript</symbol>
+         -->
         <symbol>halo.scripts.MenuBarTestScript</symbol>
+        <!--
         <symbol>halo.scripts.FocusManagerTestScript</symbol>
         <symbol>halo.scripts.TreeTestScript</symbol>
         <symbol>halo.scripts.ImageTestScript</symbol>
diff --git a/mustella/tests/mxtests/basicTests/BasicTests.mxml b/mustella/tests/mxtests/basicTests/BasicTests.mxml
index f5f015a..ec5ac1f 100644
--- a/mustella/tests/mxtests/basicTests/BasicTests.mxml
+++ b/mustella/tests/mxtests/basicTests/BasicTests.mxml
@@ -50,7 +50,9 @@ preloader="BasicTestsPreloader"
         <mx:State name="haloDateFieldTest" />
         <!--
         <mx:State name="haloMenuTest" />
+        -->
         <mx:State name="haloMenuBarTest" />
+        <!--
         <mx:State name="haloFocusManagerTest" />
         <mx:State name="haloTreeTest" />
         <mx:State name="haloImageTest" />
@@ -128,7 +130,9 @@ preloader="BasicTestsPreloader"
     <haloviews:DateFieldTests id="haloDateFieldTests" includeIn="haloDateFieldTest" />    
     <!--
     <haloviews:MenuTests id="haloMenuTests" includeIn="haloMenuTest" />    
+    -->
     <haloviews:MenuBarTests id="haloMenuBarTests" includeIn="haloMenuBarTest" />    
+    <!--
     <haloviews:FocusManagerTests id="haloFocusManagerTests" includeIn="haloFocusManagerTest" />    
     <haloviews:TreeTests id="haloTreeTests" includeIn="haloTreeTest" />    
     <haloviews:ImageTests id="haloImageTests" includeIn="haloImageTest" />    
diff --git a/mustella/tests/mxtests/basicTests/halo/scripts/MenuBarTestScript.mxml b/mustella/tests/mxtests/basicTests/halo/scripts/MenuBarTestScript.mxml
index 227f710..1b57a1c 100644
--- a/mustella/tests/mxtests/basicTests/halo/scripts/MenuBarTestScript.mxml
+++ b/mustella/tests/mxtests/basicTests/halo/scripts/MenuBarTestScript.mxml
@@ -22,7 +22,7 @@
 	<!-- this set of lines form a template that must be in each unit test -->
 	<mx:Script>
 	<![CDATA[
-	public static function init(o:DisplayObject):void
+	public static function init(o:Object):void
 	{
 	}
 	]]>
@@ -53,19 +53,21 @@
 			<body>
 				<DispatchMouseEvent target="haloMenuBarTests.testMenuBar.menuBarItems.0" type="mouseOver" localX="10" localY="10" />
 				<DispatchMouseClickEvent target="haloMenuBarTests.testMenuBar.menuBarItems.0" localX="10" localY="10" />
-				<AssertEvent target="haloMenuBarTests.testMenuBar" eventName="menuShow" eventClass="mx.events::MenuEvent" />
+<!--
+                <AssertEvent target="haloMenuBarTests.testMenuBar" eventName="menuShow" eventClass="mx.events::MenuEvent" />
 				<AssertEvent target="haloMenuBarTests.testMenuBar.menus.0.mx_internal:popupTween" eventName="tweenEnd" eventClass="mx.events::TweenEvent" />
-				<AssertPropertyValue target="haloMenuBarTests.testMenuBar.menus.0" propertyName="visible" value="true" />
+-->				<AssertPropertyValue target="haloMenuBarTests.testMenuBar.menus.0" propertyName="visible" value="true" />
 			</body>
 		</TestCase>
 		<TestCase testID="MenuBarTest2">
 			<body>
 				<DispatchMouseEvent target="haloMenuBarTests.testMenuBar.menuBarItems.0" type="mouseOut" localX="10" localY="10" />
 				<DispatchMouseEvent target="haloMenuBarTests.testMenuBar.menuBarItems.1" type="mouseOver" localX="10" localY="10" />
-				<AssertEvent target="haloMenuBarTests.testMenuBar" eventName="menuHide" eventClass="mx.events::MenuEvent" />
+<!--
+                <AssertEvent target="haloMenuBarTests.testMenuBar" eventName="menuHide" eventClass="mx.events::MenuEvent" />
 				<AssertEvent target="haloMenuBarTests.testMenuBar" eventName="menuShow" eventClass="mx.events::MenuEvent" />
 				<AssertEvent target="haloMenuBarTests.testMenuBar.menus.1.mx_internal:popupTween" eventName="tweenEnd" eventClass="mx.events::TweenEvent" />
-				<AssertPropertyValue target="haloMenuBarTests.testMenuBar.menus.1" propertyName="visible" value="true" />
+-->				<AssertPropertyValue target="haloMenuBarTests.testMenuBar.menus.1" propertyName="visible" value="true" />
 				<AssertPropertyValue target="haloMenuBarTests.testMenuBar.menus.0" propertyName="visible" value="false" />
 			</body>
 		</TestCase>
@@ -74,10 +76,11 @@
 				<DispatchMouseEvent target="haloMenuBarTests.testMenuBar.menus.1" type="mouseOver" localX="20" localY="30" />
 				<DispatchMouseEvent target="haloMenuBarTests.testMenuBar.menus.1" type="mouseDown" localX="20" localY="30" />
 				<DispatchMouseEvent target="haloMenuBarTests.testMenuBar.menus.1" type="mouseUp" localX="20" localY="30" />
-				<AssertEvent target="haloMenuBarTests.testMenuBar" eventName="itemClick" eventClass="mx.events::MenuEvent" />
+<!--
+                <AssertEvent target="haloMenuBarTests.testMenuBar" eventName="itemClick" eventClass="mx.events::MenuEvent" />
 				<AssertEventPropertyValue propertyName="label" value="Paste" />
 				<AssertEvent target="haloMenuBarTests.testMenuBar" eventName="menuHide" eventClass="mx.events::MenuEvent" />
-				<AssertPropertyValue target="haloMenuBarTests.testMenuLabel" propertyName="text" value="Paste" />
+-->				<AssertPropertyValue target="haloMenuBarTests.testMenuLabel" propertyName="text" value="Paste" />
 				<AssertPropertyValue target="haloMenuBarTests.testMenuBar.menus.1" propertyName="visible" value="false" />
 			</body>
 		</TestCase>
diff --git a/mustella/tests/mxtests/basicTests/halo/scripts/MenuTestScript.mxml b/mustella/tests/mxtests/basicTests/halo/scripts/MenuTestScript.mxml
index 52b0d75..9b9a534 100644
--- a/mustella/tests/mxtests/basicTests/halo/scripts/MenuTestScript.mxml
+++ b/mustella/tests/mxtests/basicTests/halo/scripts/MenuTestScript.mxml
@@ -22,7 +22,7 @@
 	<!-- this set of lines form a template that must be in each unit test -->
 	<mx:Script>
 	<![CDATA[
-	public static function init(o:DisplayObject):void
+	public static function init(o:Object):void
 	{
 	}
 	]]>
@@ -53,26 +53,30 @@
 			<body>
 				<DispatchMouseEvent target="haloMenuTests.testMenuButton" type="mouseOver" localX="10" localY="10" />
 				<DispatchMouseClickEvent target="haloMenuTests.testMenuButton" localX="10" localY="10" />
-				<AssertEvent target="haloMenuTests.testMenu.mx_internal:popupTween" eventName="tweenEnd" eventClass="mx.events::TweenEvent" />
-				<AssertPropertyValue target="haloMenuTests.testMenu" propertyName="visible" value="true" />
+<!--
+                <AssertEvent target="haloMenuTests.testMenu.mx_internal:popupTween" eventName="tweenEnd" eventClass="mx.events::TweenEvent" />
+-->				<AssertPropertyValue target="haloMenuTests.testMenu" propertyName="visible" value="true" />
 			</body>
 		</TestCase>
 		<TestCase testID="MenuTest2">
 			<body>
 				<DispatchMouseEvent target="haloMenuTests.testMenu" type="mouseOver" localX="20" localY="10" />
-				<AssertEvent target="haloMenuTests.testMenu" eventName="menuShow" eventClass="mx.events::MenuEvent" />
+<!--
+                <AssertEvent target="haloMenuTests.testMenu" eventName="menuShow" eventClass="mx.events::MenuEvent" />
 				<AssertEvent target="haloMenuTests.testMenu.mx_internal:subMenus.0.mx_internal:popupTween" eventName="tweenEnd" eventClass="mx.events::TweenEvent" />
-				<AssertPropertyValue target="haloMenuTests.testMenu.mx_internal:subMenus.0" propertyName="visible" value="true" />
+-->				<AssertPropertyValue target="haloMenuTests.testMenu.mx_internal:subMenus.0" propertyName="visible" value="true" />
 			</body>
 		</TestCase>
 		<TestCase testID="MenuTest3">
 			<body>
 				<DispatchMouseEvent target="haloMenuTests.testMenu" type="mouseOver" localX="20" localY="30" />
-				<AssertEvent target="haloMenuTests.testMenu" eventName="menuHide" eventClass="mx.events::MenuEvent" />
-				<AssertPropertyValue target="haloMenuTests.testMenu.mx_internal:subMenus.0" propertyName="visible" value="false" />
-				<AssertEvent target="haloMenuTests.testMenu" eventName="menuShow" eventClass="mx.events::MenuEvent" />
+<!--
+                <AssertEvent target="haloMenuTests.testMenu" eventName="menuHide" eventClass="mx.events::MenuEvent" />
+-->				<AssertPropertyValue target="haloMenuTests.testMenu.mx_internal:subMenus.0" propertyName="visible" value="false" />
+<!--
+                <AssertEvent target="haloMenuTests.testMenu" eventName="menuShow" eventClass="mx.events::MenuEvent" />
 				<AssertEvent target="haloMenuTests.testMenu.mx_internal:subMenus.1.mx_internal:popupTween" eventName="tweenEnd" eventClass="mx.events::TweenEvent" />
-				<AssertPropertyValue target="haloMenuTests.testMenu.mx_internal:subMenus.1" propertyName="visible" value="true" />
+-->				<AssertPropertyValue target="haloMenuTests.testMenu.mx_internal:subMenus.1" propertyName="visible" value="true" />
 			</body>
 		</TestCase>
 		<TestCase testID="MenuTest4">
@@ -80,10 +84,11 @@
 				<DispatchMouseEvent target="haloMenuTests.testMenu.mx_internal:subMenus.1" type="mouseOver" localX="20" localY="10" />
 				<DispatchMouseEvent target="haloMenuTests.testMenu.mx_internal:subMenus.1" type="mouseDown" localX="20" localY="10" />
 				<DispatchMouseEvent target="haloMenuTests.testMenu.mx_internal:subMenus.1" type="mouseUp" localX="20" localY="10" />
-				<AssertEvent target="haloMenuTests.testMenu" eventName="itemClick" eventClass="mx.events::MenuEvent" />
+<!--
+                <AssertEvent target="haloMenuTests.testMenu" eventName="itemClick" eventClass="mx.events::MenuEvent" />
 				<AssertEventPropertyValue propertyName="label" value="Copy" />
 				<AssertEvent target="haloMenuTests.testMenu" eventName="menuHide" eventClass="mx.events::MenuEvent" />
-				<AssertPropertyValue target="haloMenuTests.testMenuLabel" propertyName="text" value="Copy" />
+-->				<AssertPropertyValue target="haloMenuTests.testMenuLabel" propertyName="text" value="Copy" />
 				<AssertPropertyValue target="haloMenuTests.testMenu" propertyName="visible" value="false" />
 			</body>
 		</TestCase>
diff --git a/mustella/tests/mxtests/basicTests/halo/views/MenuBarTests.mxml b/mustella/tests/mxtests/basicTests/halo/views/MenuBarTests.mxml
index ff091b3..0d1b43c 100644
--- a/mustella/tests/mxtests/basicTests/halo/views/MenuBarTests.mxml
+++ b/mustella/tests/mxtests/basicTests/halo/views/MenuBarTests.mxml
@@ -19,8 +19,8 @@
 -->
 <mx:Panel layout="vertical" 
     xmlns:fx="http://ns.adobe.com/mxml/2009"
-    xmlns:s="library://ns.adobe.com/flex/spark"
-    xmlns:mx="library://ns.adobe.com/flex/mx"                >
+    xmlns:s="library://ns.apache.org/royale/spark"
+    xmlns:mx="library://ns.apache.org/royale/mx"                >
 
 <fx:Script>
 <![CDATA[
diff --git a/mustella/tests/mxtests/basicTests/halo/views/MenuTests.mxml b/mustella/tests/mxtests/basicTests/halo/views/MenuTests.mxml
index 15c48c2..602f955 100644
--- a/mustella/tests/mxtests/basicTests/halo/views/MenuTests.mxml
+++ b/mustella/tests/mxtests/basicTests/halo/views/MenuTests.mxml
@@ -19,8 +19,8 @@
 -->
 <mx:VBox 
     xmlns:fx="http://ns.adobe.com/mxml/2009"
-    xmlns:s="library://ns.adobe.com/flex/spark"
-    xmlns:mx="library://ns.adobe.com/flex/mx"                >
+    xmlns:s="library://ns.apache.org/royale/spark"
+    xmlns:mx="library://ns.apache.org/royale/mx"                >
 
 <fx:Script>
 <![CDATA[


[royale-asjs] 14/17: fix menu dismissal

Posted by ah...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit 9d768b1872c79e3313b12cfd8577a59645ec0ae3
Author: Alex Harui <ah...@apache.org>
AuthorDate: Fri Jul 20 23:26:02 2018 -0700

    fix menu dismissal
---
 .../html/beads/controllers/ItemRendererMouseController.as |  1 -
 .../beads/controllers/MenuSelectionMouseController.as     | 15 +++++++++++++--
 2 files changed, 13 insertions(+), 3 deletions(-)

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 c9c53e5..0a8b6bd 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
@@ -202,7 +202,6 @@ 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
index 93cd4b3..5f986bb 100644
--- 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
@@ -19,7 +19,7 @@
 package org.apache.royale.html.beads.controllers
 {
 	import org.apache.royale.core.IMenu;
-    import org.apache.royale.core.IPopUpHost;
+	import org.apache.royale.core.IPopUpHost;
 	import org.apache.royale.core.IStrand;
 	import org.apache.royale.core.IUIBase;
 	import org.apache.royale.core.UIBase;
@@ -190,12 +190,23 @@ package org.apache.royale.html.beads.controllers
 		}
 
 		/**
+         * @royaleignorecoercion HTMLElement
 		 * @private
 		 */
 		COMPILE::JS
 		protected function hideMenu_internal(event:BrowserEvent):void
 		{			
-			event.stopImmediatePropagation();
+            var menu:IMenu = _strand as IMenu;
+            if (menu.parentMenuBar)
+            {
+                var menuBarElement:HTMLElement = (menu.parentMenuBar as IUIBase).element as HTMLElement;
+                var target:HTMLElement = event.target as HTMLElement;
+                while (target != null)
+                {
+                    if (target == menuBarElement) return;
+                    target = target.parentNode as HTMLElement;
+                }
+            }
 			hideOpenMenus();
 		}
 	}


[royale-asjs] 17/17: fix mouse events in mustella

Posted by ah...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit cc768bc6096400bb254db35a5c332ef9ad2331cb
Author: Alex Harui <ah...@apache.org>
AuthorDate: Fri Jul 20 23:27:39 2018 -0700

    fix mouse events in mustella
---
 mustella/src/main/java/marmotinni/DispatchMouseEvent.java | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/mustella/src/main/java/marmotinni/DispatchMouseEvent.java b/mustella/src/main/java/marmotinni/DispatchMouseEvent.java
index 82d3387..d8e26a9 100644
--- a/mustella/src/main/java/marmotinni/DispatchMouseEvent.java
+++ b/mustella/src/main/java/marmotinni/DispatchMouseEvent.java
@@ -32,7 +32,7 @@ import org.xml.sax.Attributes;
  * Dispatch mouse event
  */
 public class DispatchMouseEvent extends TestStep { 
-
+    
     /**
      *  Dispatch a mouse event
      */
@@ -104,7 +104,7 @@ public class DispatchMouseEvent extends TestStep {
 		
 		script = new StringBuilder();
 		script.append("var e = document.createEvent('MouseEvent');");
-		script.append("e.initMouseEvent(\"" + type + "\", true, false, window, " + delta + ", " + x + ", " + y + ", " + localX + ", " + localY + ", " + ctrlKey + ", false, " + shiftKey + ", false, " + type.equals("mouseDown") + ", " + relatedObject + ");");
+		script.append("e.initMouseEvent(\"" + type.toLowerCase() + "\", true, false, window, " + delta + ", " + x + ", " + y + ", " + localX + ", " + localY + ", " + ctrlKey + ", false, " + shiftKey + ", false, " + type.equals("mouseDown") + ", " + relatedObject + ");");
 		script.append("document.getElementById('" + actualId + "').dispatchEvent(e);");
 		if (TestStep.showScripts)
 			System.out.println(script);


[royale-asjs] 02/17: make numelements a getter for consistency

Posted by ah...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit b08fc9cfef267496756032630493880566da93f2
Author: Alex Harui <ah...@apache.org>
AuthorDate: Tue Jul 17 16:34:34 2018 -0700

    make numelements a getter for consistency
---
 .../Basic/src/main/royale/org/apache/royale/core/ContainerBase.as       | 2 +-
 .../main/royale/org/apache/royale/core/ContainerBaseStrandChildren.as   | 2 +-
 .../src/main/royale/org/apache/royale/core/ListBaseStrandChildren.as    | 2 +-
 .../royale/org/apache/royale/core/IContainerBaseStrandChildrenHost.as   | 2 +-
 4 files changed, 4 insertions(+), 4 deletions(-)

diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/core/ContainerBase.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/core/ContainerBase.as
index 0b62964..73aab0c 100644
--- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/core/ContainerBase.as
+++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/core/ContainerBase.as
@@ -186,7 +186,7 @@ package org.apache.royale.core
          * @suppress {undefinedNames}
 		 * Support strandChildren.
 		 */
-		public function $numElements():int
+		public function get $numElements():int
 		{
 			return super.numElements;
 		}
diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/core/ContainerBaseStrandChildren.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/core/ContainerBaseStrandChildren.as
index 26db4b4..a3b4601 100644
--- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/core/ContainerBaseStrandChildren.as
+++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/core/ContainerBaseStrandChildren.as
@@ -56,7 +56,7 @@ package org.apache.royale.core
 		 */
 		public function get numElements():int
 		{
-			return owner.$numElements();
+			return owner.$numElements;
 		}
 		
 		/**
diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/core/ListBaseStrandChildren.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/core/ListBaseStrandChildren.as
index 1358372..e91b237 100644
--- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/core/ListBaseStrandChildren.as
+++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/core/ListBaseStrandChildren.as
@@ -52,7 +52,7 @@ package org.apache.royale.core
 		 */
 		public function get numElements():int
 		{
-			return owner.$numElements();
+			return owner.$numElements;
 		}
 		
 		/**
diff --git a/frameworks/projects/Core/src/main/royale/org/apache/royale/core/IContainerBaseStrandChildrenHost.as b/frameworks/projects/Core/src/main/royale/org/apache/royale/core/IContainerBaseStrandChildrenHost.as
index 9fc29bf..46c9c04 100644
--- a/frameworks/projects/Core/src/main/royale/org/apache/royale/core/IContainerBaseStrandChildrenHost.as
+++ b/frameworks/projects/Core/src/main/royale/org/apache/royale/core/IContainerBaseStrandChildrenHost.as
@@ -32,7 +32,7 @@ package org.apache.royale.core
      */
 	public interface IContainerBaseStrandChildrenHost
 	{
-		function $numElements():int;
+		function get $numElements():int;
 		function $addElement(c:IChild, dispatchEvent:Boolean = true):void;
 		function $addElementAt(c:IChild, index:int, dispatchEvent:Boolean = true):void;
 		function $removeElement(c:IChild, dispatchEvent:Boolean = true):void;


[royale-asjs] 16/17: mouse events bubble

Posted by ah...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit a9f3e6f666d86e39653a9d826d977ac9dfa8ca73
Author: Alex Harui <ah...@apache.org>
AuthorDate: Fri Jul 20 23:26:58 2018 -0700

    mouse events bubble
---
 mustella/src/main/java/marmotinni/DispatchMouseClickEvent.java | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/mustella/src/main/java/marmotinni/DispatchMouseClickEvent.java b/mustella/src/main/java/marmotinni/DispatchMouseClickEvent.java
index a1b99ee..5d2adc7 100644
--- a/mustella/src/main/java/marmotinni/DispatchMouseClickEvent.java
+++ b/mustella/src/main/java/marmotinni/DispatchMouseClickEvent.java
@@ -121,7 +121,7 @@ public class DispatchMouseClickEvent extends TestStep {
                 wait.until(ExpectedConditions.attributeToBe(mouseTarget, "title", "foo"));
             } */
             script = new StringBuilder();
-            script.append("var init = {};");
+            script.append("var init = { bubbles: true };");
             script.append("init.screenX = ");
             script.append(x.toString());
             script.append(";");
@@ -133,7 +133,7 @@ public class DispatchMouseClickEvent extends TestStep {
                 System.out.println(script);
             ((JavascriptExecutor)webDriver).executeScript(script.toString());
             script = new StringBuilder();
-            script.append("var init = {};");
+            script.append("var init = { bubbles: true };");
             script.append("init.screenX = ");
             script.append(x.toString());
             script.append(";");


[royale-asjs] 05/17: also needed to change to getter

Posted by ah...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit fc257bb58773c544804f26f57487b67704caacb9
Author: Alex Harui <ah...@apache.org>
AuthorDate: Tue Jul 17 16:37:13 2018 -0700

    also needed to change to getter
---
 frameworks/projects/MXRoyale/src/main/royale/mx/core/Container.as | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/frameworks/projects/MXRoyale/src/main/royale/mx/core/Container.as b/frameworks/projects/MXRoyale/src/main/royale/mx/core/Container.as
index 1a0f3eb..1f20148 100644
--- a/frameworks/projects/MXRoyale/src/main/royale/mx/core/Container.as
+++ b/frameworks/projects/MXRoyale/src/main/royale/mx/core/Container.as
@@ -987,7 +987,7 @@ public class Container extends UIComponent
 	 * @suppress {undefinedNames}
 	 * Support strandChildren.
 	 */
-	public function $numElements():int
+	public function get $numElements():int
 	{
 		return super.numElements;
 	}


[royale-asjs] 15/17: fix bubbling in JS renderers. Maybe this should be a bead

Posted by ah...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit 95aad919bf23fe2e18aa47c3d90bfdce37881659
Author: Alex Harui <ah...@apache.org>
AuthorDate: Fri Jul 20 23:26:29 2018 -0700

    fix bubbling in JS renderers.  Maybe this should be a bead
---
 .../org/apache/royale/html/supportClasses/MenuBarItemRenderer.as      | 4 ++++
 .../royale/org/apache/royale/html/supportClasses/MenuItemRenderer.as  | 4 ++++
 2 files changed, 8 insertions(+)

diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/supportClasses/MenuBarItemRenderer.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/supportClasses/MenuBarItemRenderer.as
index 9e0c53b..e897103 100644
--- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/supportClasses/MenuBarItemRenderer.as
+++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/supportClasses/MenuBarItemRenderer.as
@@ -38,6 +38,10 @@ package org.apache.royale.html.supportClasses
 			super.addedToParent();
 			
 			addElement(label);
+            COMPILE::JS
+            {
+                label.setParentEventTarget(this);        
+            }
 		}
 		
 		override public function set data(value:Object):void
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
index c53cb7c..258f1c4 100644
--- 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
@@ -58,6 +58,10 @@ package org.apache.royale.html.supportClasses
 			label = new Label();
 			label.typeNames = "MenuItemLabel";
 			addElement(label);
+            COMPILE::JS
+            {
+                label.setParentEventTarget(this);        
+            }
 		}
 		
 		/**


[royale-asjs] 01/17: abstract how Panel creates its content area so it can be re-used in emulation (and have fewer class dependencies)

Posted by ah...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit a8caeb25bea6619765070e672db5d01bb6151908
Author: Alex Harui <ah...@apache.org>
AuthorDate: Tue Jul 17 16:31:11 2018 -0700

    abstract how Panel creates its content area so it can be re-used in emulation (and have fewer class dependencies)
---
 .../projects/Basic/src/main/resources/defaults.css |   2 +
 .../main/royale/org/apache/royale/html/Panel.as    |  37 ++++++-
 .../org/apache/royale/html/beads/PanelView.as      |  33 +++----
 .../royale/html/supportClasses/PanelLayoutProxy.as | 108 +++++++++++++++++----
 4 files changed, 141 insertions(+), 39 deletions(-)

diff --git a/frameworks/projects/Basic/src/main/resources/defaults.css b/frameworks/projects/Basic/src/main/resources/defaults.css
index d60a26e..9c284a3 100644
--- a/frameworks/projects/Basic/src/main/resources/defaults.css
+++ b/frameworks/projects/Basic/src/main/resources/defaults.css
@@ -1002,6 +1002,7 @@ global
 		IContentView: ClassReference("org.apache.royale.html.supportClasses.ContainerContentArea");
 		IBorderBead: ClassReference("org.apache.royale.html.beads.SingleLineBorderBead");
 		IBackgroundBead: ClassReference("org.apache.royale.html.beads.SolidBackgroundBead");    
+		IPanelContentArea: ClassReference("org.apache.royale.html.Container");
 	}
 	
 	PanelWithControlBar
@@ -1009,6 +1010,7 @@ global
 		IContentView: ClassReference("org.apache.royale.html.supportClasses.ContainerContentArea");
 		IBorderBead: ClassReference("org.apache.royale.html.beads.SingleLineBorderBead");
 		IBackgroundBead: ClassReference("org.apache.royale.html.beads.SolidBackgroundBead");
+		IPanelContentArea: ClassReference("org.apache.royale.html.Container");
 	}
 	
 	RadioButton
diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/Panel.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/Panel.as
index f455e2d..9680244 100644
--- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/Panel.as
+++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/Panel.as
@@ -20,6 +20,7 @@ package org.apache.royale.html
 {
 	import org.apache.royale.core.IPanelModel;
 	import org.apache.royale.core.IChild;
+    import org.apache.royale.core.IContainerBaseStrandChildrenHost;
 	import org.apache.royale.html.beads.PanelView;
 	import org.apache.royale.events.Event;
 
@@ -52,7 +53,7 @@ package org.apache.royale.html
 	 *  @playerversion AIR 2.6
 	 *  @productversion Royale 0.0
 	 */
-	public class Panel extends Group
+	public class Panel extends Group implements IContainerBaseStrandChildrenHost
 	{
 		/**
 		 *  constructor.
@@ -74,16 +75,46 @@ package org.apache.royale.html
 			super.addElement(c, dispatchEvent);
 		}
 		
-		public function get $numElements():Number
+        /**
+         * @private
+         * @suppress {undefinedNames}
+         * Support strandChildren.
+         */
+        public function $addElementAt(c:IChild, index:int, dispatchEvent:Boolean = true):void
+        {
+            super.addElementAt(c, index, dispatchEvent);
+        }
+        
+		public function get $numElements():int
 		{
 			return super.numElements;
 		}
 		
-		public function $getElementAt(index:Number):IChild
+		public function $getElementAt(index:int):IChild
 		{
 			return super.getElementAt(index);
 		}
 		
+        /**
+         * @private
+         * @suppress {undefinedNames}
+         * Support strandChildren.
+         */
+        public function $removeElement(c:IChild, dispatchEvent:Boolean = true):void
+        {
+            super.removeElement(c, dispatchEvent);
+        }
+        
+        /**
+         * @private
+         * @suppress {undefinedNames}
+         * Support strandChildren.
+         */
+        public function $getElementIndex(c:IChild):int
+        {
+            return super.getElementIndex(c);
+        }
+        
 		/**
 		 *  The string to display in the org.apache.royale.html.TitleBar.
 		 *
diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/PanelView.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/PanelView.as
index d4ff9d7..df42f23 100644
--- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/PanelView.as
+++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/PanelView.as
@@ -18,12 +18,13 @@
 ////////////////////////////////////////////////////////////////////////////////
 package org.apache.royale.html.beads
 {
-	import org.apache.royale.core.IBeadView;
 	import org.apache.royale.core.IBeadLayout;
-	import org.apache.royale.core.ILayoutChild;
-	import org.apache.royale.core.ILayoutView;
+	import org.apache.royale.core.IBeadView;
 	import org.apache.royale.core.IChild;
 	import org.apache.royale.core.IContainer;
+	import org.apache.royale.core.IContainerBaseStrandChildrenHost;
+	import org.apache.royale.core.ILayoutChild;
+	import org.apache.royale.core.ILayoutView;
 	import org.apache.royale.core.IParent;
 	import org.apache.royale.core.IStrand;
 	import org.apache.royale.core.IUIBase;
@@ -35,13 +36,12 @@ package org.apache.royale.html.beads
 	import org.apache.royale.events.IEventDispatcher;
 	import org.apache.royale.geom.Rectangle;
 	import org.apache.royale.geom.Size;
-	import org.apache.royale.html.Group;
 	import org.apache.royale.html.Container;
-	import org.apache.royale.html.Panel;
+	import org.apache.royale.html.Group;
 	import org.apache.royale.html.TitleBar;
-	import org.apache.royale.utils.CSSUtils;
 	import org.apache.royale.html.beads.layouts.VerticalFlexLayout;
 	import org.apache.royale.html.supportClasses.PanelLayoutProxy;
+	import org.apache.royale.utils.CSSUtils;
 
 	COMPILE::SWF {
 		import org.apache.royale.core.SimpleCSSStylesWithFlex;
@@ -97,7 +97,7 @@ package org.apache.royale.html.beads
             _titleBar = value;
         }
 
-		private var _contentArea:Container;
+		private var _contentArea:UIBase;
 
 		/**
 		 * The content area of the panel.
@@ -107,17 +107,15 @@ package org.apache.royale.html.beads
 		 *  @playerversion AIR 2.6
 		 *  @productversion Royale 0.8
 		 */
-		public function get contentArea():Container
+		public function get contentArea():UIBase
 		{
 			return _contentArea;
 		}
-		public function set contentArea(value:Container):void
+		public function set contentArea(value:UIBase):void
 		{
 			_contentArea = value;
 		}
 
-		private var _strand:IStrand;
-
 		/**
 		 *  @copy org.apache.royale.core.IBead#strand
 		 *
@@ -129,13 +127,13 @@ package org.apache.royale.html.beads
 		 *  @royaleignorecoercion org.apache.royale.core.IBeadLayout
 		 *  @royaleignorecoercion org.apache.royale.core.IChild
 		 *  @royaleignorecoercion org.apache.royale.core.IViewport
-		 *  @royaleignorecoercion org.apache.royale.html.Panel
+		 *  @royaleignorecoercion org.apache.royale.core.IContainerBaseStrandChildrenHost
 		 */
 		override public function set strand(value:IStrand):void
 		{
-			_strand = value;
+			super.strand = value;
 
-            var host:UIBase = UIBase(value);
+            var host:UIBase = value as UIBase;
 
 			// Look for a layout and/or viewport bead on the host's beads list. If one
 			// is found, pull it off so it will not be added permanently
@@ -184,11 +182,12 @@ package org.apache.royale.html.beads
 			// be picked up automatically by the TitleBar.
 			titleBar.model = host.model;
 			if (titleBar.parent == null) {
-				(_strand as Panel).$addElement(titleBar);
+				(_strand as IContainerBaseStrandChildrenHost).$addElement(titleBar);
 			}
 
 			if (!_contentArea) {
-				_contentArea = new Container();
+                var cls:Class = ValuesManager.valuesImpl.getValue(_strand, "iPanelContentArea");
+				_contentArea = new cls() as UIBase;
 				_contentArea.id = "panelContent";
 				_contentArea.typeNames = "PanelContent";
 
@@ -225,7 +224,7 @@ package org.apache.royale.html.beads
             super.strand = value;
 
 			if (contentArea.parent == null) {
-				(_strand as Panel).$addElement(contentArea as IChild);
+				(_strand as IContainerBaseStrandChildrenHost).$addElement(contentArea as IChild);
 			}
 
 			// Now give the Panel its own layout
diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/supportClasses/PanelLayoutProxy.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/supportClasses/PanelLayoutProxy.as
index 13b2902..c7a4d87 100644
--- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/supportClasses/PanelLayoutProxy.as
+++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/supportClasses/PanelLayoutProxy.as
@@ -19,12 +19,12 @@
 package org.apache.royale.html.supportClasses
 {
 	import org.apache.royale.core.UIBase;
-	import org.apache.royale.core.ILayoutView;
-	import org.apache.royale.core.IChild;
+    import org.apache.royale.core.IChild;
+    import org.apache.royale.core.IContainerBaseStrandChildrenHost;
+    import org.apache.royale.core.ILayoutView;
+    import org.apache.royale.core.IParent;
 	import org.apache.royale.events.IEventDispatcher;
 
-	import org.apache.royale.html.Panel;
-
 	COMPILE::JS {
 		import org.apache.royale.core.WrappedHTMLElement;
 	}
@@ -42,7 +42,7 @@ package org.apache.royale.html.supportClasses
      *  @playerversion AIR 2.6
      *  @productversion Royale 0.0
      */
-	public class PanelLayoutProxy implements ILayoutView
+	public class PanelLayoutProxy implements ILayoutView, IParent
 	{
         /**
          *  Constructor.
@@ -66,7 +66,7 @@ package org.apache.royale.html.supportClasses
 		}
 
 		/**
-		 *  @royaleignorecoercion org.apache.royale.html.Panel
+		 *  @royaleignorecoercion org.apache.royale.core.UIBase
 		 *  The width of the bounding box.
 		 *
 		 *  @langversion 3.0
@@ -75,11 +75,11 @@ package org.apache.royale.html.supportClasses
 		 *  @productversion Royale 0.0
 		 */
 		public function get width():Number {
-			return (host as Panel).width;
+			return (host as UIBase).width;
 		}
 
 		/**
-		 *  @royaleignorecoercion org.apache.royale.html.Panel
+		 *  @royaleignorecoercion org.apache.royale.core.UIBase
 		 * The height of the bounding box.
 		 *
 		 *  @langversion 3.0
@@ -88,11 +88,11 @@ package org.apache.royale.html.supportClasses
 		 *  @productversion Royale 0.0
 		 */
 		public function get height():Number {
-			return (host as Panel).height;
+			return (host as UIBase).height;
 		}
 
 		/**
-		 *  @royaleignorecoercion org.apache.royale.html.Panel
+		 *  @royaleignorecoercion org.apache.royale.core.IContainerBaseStrandChildrenHost
 		 *  The number of elements in the parent.
 		 *
 		 *  @langversion 3.0
@@ -102,11 +102,11 @@ package org.apache.royale.html.supportClasses
 		 */
 		public function get numElements():int
 		{
-			return (host as Panel).$numElements;
+			return (host as IContainerBaseStrandChildrenHost).$numElements;
 		}
 
 		/**
-		 *  @royaleignorecoercion org.apache.royale.html.Panel
+		 *  @royaleignorecoercion org.apache.royale.core.IContainerBaseStrandChildrenHost
 		 *  Get a component from the parent.
 		 *
 		 *  @param c The index of the subcomponent.
@@ -118,29 +118,99 @@ package org.apache.royale.html.supportClasses
 		 */
 		public function getElementAt(index:int):IChild
 		{
-			return (host as Panel).$getElementAt(index);
+			return (host as IContainerBaseStrandChildrenHost).$getElementAt(index);
 		}
 
+        /**
+         *  @royaleignorecoercion org.apache.royale.core.IContainerBaseStrandChildrenHost
+         *  Gets the index of this subcomponent.
+         * 
+         *  @param c The subcomponent to add.
+         *  @return The index (zero-based).
+         * 
+         *  @langversion 3.0
+         *  @playerversion Flash 10.2
+         *  @playerversion AIR 2.6
+         *  @productversion Royale 0.0
+         */
+        public function getElementIndex(c:IChild):int
+        {
+            return (host as IContainerBaseStrandChildrenHost).$getElementIndex(c);
+        }
+        
+        /**
+         *  @royaleignorecoercion org.apache.royale.core.IContainerBaseStrandChildrenHost
+         *  Add a component to the parent.
+         * 
+         *  @param c The subcomponent to add.
+         *  @param dispatchEvent Whether to dispatch an event after adding the child.
+         * 
+         *
+         *  @langversion 3.0
+         *  @playerversion Flash 10.2
+         *  @playerversion AIR 2.6
+         *  @productversion Royale 0.0
+         */
+        public function addElement(c:IChild, dispatchEvent:Boolean = true):void
+        {
+            (host as IContainerBaseStrandChildrenHost).$addElement(c);
+        }
+        
+        /**
+         *  @royaleignorecoercion org.apache.royale.core.IContainerBaseStrandChildrenHost
+         *  Add a component to the parent.
+         * 
+         *  @param c The subcomponent to add.
+         *  @param index The index where the subcomponent should be added.
+         *  @param dispatchEvent Whether to dispatch an event after adding the child.
+         *
+         *  @langversion 3.0
+         *  @playerversion Flash 10.2
+         *  @playerversion AIR 2.6
+         *  @productversion Royale 0.0
+         */
+        public function addElementAt(c:IChild, index:int, dispatchEvent:Boolean = true):void
+        {
+            return (host as IContainerBaseStrandChildrenHost).$addElementAt(c, index);
+        }
+        
+        /**
+         *  @royaleignorecoercion org.apache.royale.core.IContainerBaseStrandChildrenHost
+         *  Remove a component from the parent.
+         * 
+         *  @param c The subcomponent to remove.
+         *  @param dispatchEvent Whether to dispatch an event after removing the child.
+         *
+         *  @langversion 3.0
+         *  @playerversion Flash 10.2
+         *  @playerversion AIR 2.6
+         *  @productversion Royale 0.0
+         */
+        public function removeElement(c:IChild, dispatchEvent:Boolean = true):void
+        {
+            return (host as IContainerBaseStrandChildrenHost).$removeElement(c);
+        }
+        
 		/**
-		 * @royaleignorecoercion org.apache.royale.html.Panel
+		 * @royaleignorecoercion org.apache.royale.core.UIBase
 		 */
 		COMPILE::JS
 		public function get somethingelse():WrappedHTMLElement
 		{
-			return (host as Panel).element;
+			return (host as UIBase).element;
 		}
 
 		/**
-		 * @royaleignorecoercion org.apache.royale.html.Panel
+		 * @royaleignorecoercion org.apache.royale.core.UIBase
 		 */
 		COMPILE::JS
 		public function get element():WrappedHTMLElement
 		{
-			return (host as Panel).element;
+			return (host as UIBase).element;
 		}
 
 		/**
-		 *  @royaleignorecoercion org.apache.royale.html.Panel
+		 *  @royaleignorecoercion org.apache.royale.core.UIBase
 		 *  The display style is used for both visible
 		 *  and layout so is managed as a special case.
 		 *  
@@ -152,7 +222,7 @@ package org.apache.royale.html.supportClasses
 		COMPILE::JS
 		public function setDisplayStyleForLayout(value:String):void
 		{
-			(host as Panel).setDisplayStyleForLayout(value);
+			(host as UIBase).setDisplayStyleForLayout(value);
 		}
 
 	}