Merge branch 'develop' into dual

Conflicts:
        examples/flexjs/MobileTrader/build.xml
        frameworks/projects/HTML/src/main/flex/HTMLClasses.as
        frameworks/projects/HTML/src/main/flex/org/apache/flex/html/DataGrid.as
        frameworks/projects/HTML/src/main/flex/org/apache/flex/html/DateField.as
        
frameworks/projects/HTML/src/main/flex/org/apache/flex/html/beads/ContainerView.as
        
frameworks/projects/HTML/src/main/flex/org/apache/flex/html/beads/DataGridView.as
        
frameworks/projects/HTML/src/main/flex/org/apache/flex/html/beads/layouts/ButtonBarLayout.as
        frameworks/projects/HTML/src/main/resources/basic-manifest.xml


Project: http://git-wip-us.apache.org/repos/asf/flex-asjs/repo
Commit: http://git-wip-us.apache.org/repos/asf/flex-asjs/commit/1691921e
Tree: http://git-wip-us.apache.org/repos/asf/flex-asjs/tree/1691921e
Diff: http://git-wip-us.apache.org/repos/asf/flex-asjs/diff/1691921e

Branch: refs/heads/develop
Commit: 1691921e7caa62fbfd7985bd1206462d1df976c5
Parents: 358a06f b1ba88e
Author: Alex Harui <[email protected]>
Authored: Tue Apr 18 23:20:18 2017 -0700
Committer: Alex Harui <[email protected]>
Committed: Tue Apr 18 23:20:18 2017 -0700

----------------------------------------------------------------------
 examples/flexjs/MobileTrader/build.xml          |   35 +-
 .../src/main/flex/MobileTrader.mxml             |    3 +
 .../src/main/flex/MyInitialView.mxml            |  135 ++-
 .../flex/controller/DataModelChangeNotifier.as  |   71 ++
 .../src/main/flex/views/AlertsView.mxml         |   23 +-
 .../src/main/flex/views/AssetsView.mxml         |   21 +-
 .../src/main/flex/views/WatchListView.mxml      |   24 +-
 .../Basic/src/main/flex/BasicClasses.as         |    2 +-
 .../main/flex/org/apache/flex/core/GroupBase.as |   16 +
 .../flex/org/apache/flex/core/LayoutBase.as     |  118 ++
 .../main/flex/org/apache/flex/html/DataGrid.as  |   24 +-
 .../main/flex/org/apache/flex/html/DateField.as |   23 +
 .../html/beads/AccordionItemRendererView.as     |    2 +-
 .../org/apache/flex/html/beads/ContainerView.as |   46 +-
 .../apache/flex/html/beads/DataContainerView.as |   25 +-
 .../org/apache/flex/html/beads/DataGridView.as  |    2 +-
 .../org/apache/flex/html/beads/GroupView.as     |  135 +--
 .../flex/html/beads/layouts/ButtonBarLayout.as  |   65 +-
 .../html/beads/layouts/HorizontalFlexLayout.as  |    1 +
 .../html/beads/layouts/VerticalFlexLayout.as    |    1 +
 .../html/supportClasses/MXMLItemRenderer.as     |   10 +
 .../supportClasses/TextButtonItemRenderer.as    |  244 +++++
 .../Basic/src/main/resources/basic-manifest.xml |    2 +-
 .../Basic/src/main/resources/defaults.css       | 1035 ++++++++++--------
 .../org/apache/flex/charts/beads/ChartView.as   |   28 +-
 .../flex/charts/beads/layouts/BarChartLayout.as |    6 +-
 .../beads/layouts/BarChartLayoutForArrayList.as |    8 +-
 .../charts/beads/layouts/ChartBaseLayout.as     |   25 +-
 .../charts/beads/layouts/ColumnChartLayout.as   |    6 +-
 .../layouts/ColumnChartLayoutForArrayList.as    |    6 +-
 .../layouts/LineChartCategoryVsLinearLayout.as  |    6 +-
 .../layouts/LineChartLinearVsLinearLayout.as    |    6 +-
 .../flex/charts/beads/layouts/PieChartLayout.as |    6 +-
 .../beads/layouts/PieChartLayoutForArrayList.as |    6 +-
 .../beads/layouts/StackedBarChartLayout.as      |    6 +-
 .../StackedBarChartLayoutForArrayList.as        |    6 +-
 .../beads/layouts/StackedColumnChartLayout.as   |    6 +-
 .../StackedColumnChartLayoutForArrayList.as     |    6 +-
 .../flex/org/apache/flex/core/ILayoutHost.as    |   20 +
 .../org/apache/flex/utils/MockLayoutHost.as     |   10 +
 .../org/apache/flex/utils/MockLayoutParent.as   |   10 +
 .../Express/src/main/resources/defaults.css     |    9 +-
 .../src/main/resources/express-manifest.xml     |    1 +
 .../Flat/src/main/resources/defaults.css        |    2 +-
 .../src/main/flex/FormattersClasses.as          |    3 +
 .../html/accessories/DateFormatDDMMYYYYBead.as  |   46 +
 .../html/accessories/DateFormatMMDDYYYYBead.as  |  129 +--
 .../html/accessories/DateFormatYYYYMMDDBead.as  |   46 +
 .../html/accessories/SimpleDateFormatBead.as    |  222 ++++
 .../HTML/src/main/resources/basic-manifest.xml  |    2 -
 .../HTML/src/main/resources/defaults.css        |   15 +-
 .../apache/flex/mobile/StackedViewManager.as    |   29 +-
 .../org/apache/flex/mobile/TabbedViewManager.as |   10 +
 .../flex/org/apache/flex/mobile/TitleView.as    |    4 -
 .../org/apache/flex/mobile/ViewManagerBase.as   |   56 +-
 .../flex/mobile/beads/StackedViewManagerView.as |  147 ++-
 .../flex/mobile/beads/TabbedViewManagerView.as  |  127 ++-
 .../flex/mobile/beads/ViewManagerViewBase.as    |  139 +--
 .../Mobile/src/main/resources/defaults.css      |   30 +
 .../Network/src/main/flex/NetworkClasses.as     |    4 +-
 .../flex/org/apache/flex/net/BinaryUploader.as  |   16 +-
 .../flex/org/apache/flex/net/HTTPConstants.as   |   30 +-
 .../main/flex/org/apache/flex/net/HTTPHeader.as |   23 +-
 .../flex/org/apache/flex/net/HTTPService.as     |    9 +-
 .../main/flex/org/apache/flex/net/HTTPUtils.as  |   19 +-
 .../flex/org/apache/flex/net/URLBinaryLoader.as |    8 +-
 .../main/flex/org/apache/flex/net/URLRequest.as |   32 +-
 .../org/apache/flex/net/URLRequestHeader.as     |    9 +-
 .../main/flex/org/apache/flex/net/URLStream.as  |  137 ++-
 .../flex/net/beads/CORSCredentialsBead.as       |   96 ++
 .../src/main/resources/basic-manifest.xml       |    1 +
 71 files changed, 2369 insertions(+), 1262 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/1691921e/examples/flexjs/MobileTrader/build.xml
----------------------------------------------------------------------
diff --cc examples/flexjs/MobileTrader/build.xml
index e331b36,81fd570..c34f553
--- a/examples/flexjs/MobileTrader/build.xml
+++ b/examples/flexjs/MobileTrader/build.xml
@@@ -29,7 -29,41 +29,40 @@@
      
      <include file="${basedir}/../../build_example.xml" />
  
-     <target name="main" depends="clean,build_example.compile" 
description="Clean build of ${example}">
+     <condition property="extlib_arg" 
value="-external-library-path=${FLEXJS_HOME}/js/libs/js.swc" >
+         <and>
+             <not>
+                 <isset property="extlib_arg" />
+             </not>
+             <available file="${FLEXJS_HOME}/js/libs/js.swc" type="file" />
+         </and>
+     </condition>
+     <condition property="extlib_arg" 
value="-external-library-path=${FALCONJX_HOME}/../js/libs/js.swc" >
+         <and>
+             <not>
+                 <isset property="extlib_arg" />
+             </not>
+             <available file="${FALCONJX_HOME}/../js/libs/js.swc" type="file" 
/>
+         </and>
+     </condition>
+     <property name="extlib_arg" 
value="-external-library-path=${FALCONJX_HOME}/../externs/js/out/bin/js.swc"/>
+ 
 -    <target name="main" 
depends="clean,build_example.compile,build_example.compilejs,copyassets" 
description="Clean build of ${example}">
++    <target name="main" depends="clean,build_example.compile,copyassets" 
description="Clean build of ${example}">
+     </target>
+     
+     <target name="copyassets">
+       <mkdir dir="${basedir}/bin/js-debug/assets" />
+       <copy todir="${basedir}/bin/js-debug/assets" >
+             <fileset dir="${basedir}/src/main/resources/assets">
+                 <include name="**" />
+             </fileset>
+         </copy>
+         <mkdir dir="${basedir}/bin/js-release/assets" />
+         <copy todir="${basedir}/bin/js-release/assets" >
+             <fileset dir="${basedir}/src/main/resources/assets">
+                 <include name="**" />
+             </fileset>
+         </copy>
      </target>
      
      <target name="clean">

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/1691921e/frameworks/projects/Basic/src/main/flex/BasicClasses.as
----------------------------------------------------------------------
diff --cc frameworks/projects/Basic/src/main/flex/BasicClasses.as
index d709608,a81838b..07bb731
--- a/frameworks/projects/Basic/src/main/flex/BasicClasses.as
+++ b/frameworks/projects/Basic/src/main/flex/BasicClasses.as
@@@ -161,7 -152,7 +161,7 @@@ internal class BasicClasse
        import org.apache.flex.html.supportClasses.DataGroup; DataGroup;
        import org.apache.flex.html.supportClasses.Viewport; Viewport;
        import org.apache.flex.html.supportClasses.ScrollingViewport; 
ScrollingViewport;
--      import 
org.apache.flex.html.supportClasses.DataGridButtonBarButtonItemRenderer; 
DataGridButtonBarButtonItemRenderer;
++      import org.apache.flex.html.supportClasses.TextButtonItemRenderer; 
TextButtonItemRenderer;
  
        import org.apache.flex.html.DataGridButtonBarTextButton; 
DataGridButtonBarTextButton;
        import org.apache.flex.html.DataGridButtonBar; DataGridButtonBar;

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/1691921e/frameworks/projects/Basic/src/main/flex/org/apache/flex/core/GroupBase.as
----------------------------------------------------------------------
diff --cc 
frameworks/projects/Basic/src/main/flex/org/apache/flex/core/GroupBase.as
index e4dfb1f,0000000..07859a1
mode 100644,000000..100644
--- a/frameworks/projects/Basic/src/main/flex/org/apache/flex/core/GroupBase.as
+++ b/frameworks/projects/Basic/src/main/flex/org/apache/flex/core/GroupBase.as
@@@ -1,280 -1,0 +1,296 @@@
 
+////////////////////////////////////////////////////////////////////////////////
 +//
 +//  Licensed to the Apache Software Foundation (ASF) under one or more
 +//  contributor license agreements.  See the NOTICE file distributed with
 +//  this work for additional information regarding copyright ownership.
 +//  The ASF licenses this file to You under the Apache License, Version 2.0
 +//  (the "License"); you may not use this file except in compliance with
 +//  the License.  You may obtain a copy of the License at
 +//
 +//      http://www.apache.org/licenses/LICENSE-2.0
 +//
 +//  Unless required by applicable law or agreed to in writing, software
 +//  distributed under the License is distributed on an "AS IS" BASIS,
 +//  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 +//  See the License for the specific language governing permissions and
 +//  limitations under the License.
 +//
 
+////////////////////////////////////////////////////////////////////////////////
 +package org.apache.flex.core
 +{
 +      import org.apache.flex.core.IContentViewHost;
 +      import org.apache.flex.core.ILayoutParent;
 +      import org.apache.flex.core.ILayoutHost;
 +      import org.apache.flex.core.ILayoutView;
 +      import org.apache.flex.core.ValuesManager;
 +      import org.apache.flex.events.Event;
 +      import org.apache.flex.events.ValueChangeEvent;
 +      import org.apache.flex.states.State;
 +      import org.apache.flex.utils.MXMLDataInterpreter;
 +
 +    /**
 +     *  Indicates that the state change has completed.  All properties
 +     *  that need to change have been changed, and all transitinos
 +     *  that need to run have completed.  However, any deferred work
 +     *  may not be completed, and the screen may not be updated until
 +     *  code stops executing.
 +     *  
 +     *  @langversion 3.0
 +     *  @playerversion Flash 10.2
 +     *  @playerversion AIR 2.6
 +     *  @productversion FlexJS 0.8
 +     */
 +    [Event(name="stateChangeComplete", type="org.apache.flex.events.Event")]
 +    
 +    /**
 +     *  Indicates that the initialization of the container is complete.
 +     *  
 +     *  @langversion 3.0
 +     *  @playerversion Flash 10.2
 +     *  @playerversion AIR 2.6
 +     *  @productversion FlexJS 0.8
 +     */
 +    [Event(name="initComplete", type="org.apache.flex.events.Event")]
 +    
 +    /**
 +     *  Indicates that the children of the container is have been added.
 +     *  
 +     *  @langversion 3.0
 +     *  @playerversion Flash 10.2
 +     *  @playerversion AIR 2.6
 +     *  @productversion FlexJS 0.8
 +     */
 +    [Event(name="childrenAdded", type="org.apache.flex.events.Event")]
 +    
 +    /**
 +     *  The GroupBase class is the base class for most simple containers
 +     *  in FlexJS.  It is usable as the root tag of MXML
 +     *  documents and UI controls and containers are added to it.
 +     *  
 +     *  @langversion 3.0
 +     *  @playerversion Flash 10.2
 +     *  @playerversion AIR 2.6
 +     *  @productversion FlexJS 0.8
 +     */
 +      public class GroupBase extends UIBase implements IStatesObject, 
IContainer, ILayoutParent, ILayoutView, IContentViewHost
 +      {
 +        /**
 +         *  Constructor.
 +         *  
 +         *  @langversion 3.0
 +         *  @playerversion Flash 10.2
 +         *  @playerversion AIR 2.6
 +         *  @productversion FlexJS 0.8
 +         */
 +              public function GroupBase()
 +              {
 +                      super();            
 +              }
 +              
 +              /**
 +               * @flexjsignorecoercion org.apache.flex.core.WrappedHTMLElement
 +               */
 +              COMPILE::JS
 +              override protected function createElement():WrappedHTMLElement
 +              {
 +                      element = document.createElement('div') as 
WrappedHTMLElement;
 +                      element.flexjs_wrapper = this;
 +                      
 +                      positioner = element;
 +                      
 +                      return element;
 +              }
 +              
++              override public function addedToParent():void
++              {
++                      super.addedToParent();
++                      
++                      // Load the layout bead if it hasn't already been 
loaded.
++                      var layout:IBeadLayout = getBeadByType(IBeadLayout) as 
IBeadLayout;
++                      if (!layout)
++                      {
++                              var c:Class = 
ValuesManager.valuesImpl.getValue(this, "iBeadLayout") as Class;
++                              if (c) {
++                                      layout = new c() as IBeadLayout;
++                                      addBead(layout);
++                              }
++                      }
++              }
++              
 +              /*
 +               * IContainer
 +               */
 +        
 +        /**
 +         *  @private
 +         */
 +        public function childrenAdded():void
 +        {
 +            dispatchEvent(new Event("childrenAdded"));
 +        }
 +              
 +              /*
 +               * Utility
 +               */
 +              
 +              /**
 +               * Dispatches a "layoutNeeded" event
 +         *  
 +         *  @langversion 3.0
 +         *  @playerversion Flash 10.2
 +         *  @playerversion AIR 2.6
 +         *  @productversion FlexJS 0.8
 +               */
 +              public function layoutNeeded():void
 +              {
 +                      dispatchEvent( new Event("layoutNeeded") );
 +              }
 +              
 +              /*
 +               * ILayoutParent
 +               */
 +              
 +              /**
 +               * Returns the ILayoutHost which is its view. From 
ILayoutParent.
 +               *
 +               *  @langversion 3.0
 +               *  @playerversion Flash 10.2
 +               *  @playerversion AIR 2.6
 +               *  @productversion FlexJS 0.8
 +               */
 +              public function getLayoutHost():ILayoutHost
 +              {
 +                      return view as ILayoutHost;
 +              }
 +              
 +              /**
 +               * @copy org.apache.flex.core.IContentViewHost#strandChildren
 +         *  
 +         *  @langversion 3.0
 +         *  @playerversion Flash 10.2
 +         *  @playerversion AIR 2.6
 +         *  @productversion FlexJS 0.8
 +               */
 +              public function get strandChildren():IParent
 +              {
 +                      return this;
 +              }
 +              
 +        private var _states:Array;
 +        
 +        /**
 +         *  The array of view states. These should
 +         *  be instances of org.apache.flex.states.State.
 +         *  
 +         *  @langversion 3.0
 +         *  @playerversion Flash 10.2
 +         *  @playerversion AIR 2.6
 +         *  @productversion FlexJS 0.8
 +         */
 +        public function get states():Array
 +        {
 +            return _states;
 +        }
 +
 +        /**
 +         *  @private
 +         *  @flexjsignorecoercion Class
 +         *  @flexjsignorecoercion org.apache.flex.core.IBead
 +         */
 +        public function set states(value:Array):void
 +        {
 +            _states = value;
 +            _currentState = _states[0].name;
 +            
 +                      try{
 +                              if (getBeadByType(IStatesImpl) == null)
 +                {
 +                    var c:Class = ValuesManager.valuesImpl.getValue(this, 
"iStatesImpl") as Class;
 +                    var b:Object = new c();
 +                                      addBead(b as IBead);
 +                }
 +                      }
 +                      //TODO:  Need to handle this case more gracefully
 +                      catch(e:Error)
 +                      {
 +                COMPILE::SWF
 +                {
 +                    trace(e.message);                        
 +                }
 +                      }
 +            
 +        }
 +        
 +        /**
 +         *  <code>true</code> if the array of states
 +         *  contains a state with this name.
 +         * 
 +         *  @param state The state namem.
 +         *  @return True if state in state array
 +         *  
 +         *  @langversion 3.0
 +         *  @playerversion Flash 10.2
 +         *  @playerversion AIR 2.6
 +         *  @productversion FlexJS 0.8
 +         */
 +        public function hasState(state:String):Boolean
 +        {
 +            for each (var s:State in _states)
 +            {
 +                if (s.name == state)
 +                    return true;
 +            }
 +            return false;
 +        }
 +        
 +        private var _currentState:String;
 +        
 +        [Bindable("currentStateChange")]
 +        /**
 +         *  The name of the current state.
 +         * 
 +         *  @langversion 3.0
 +         *  @playerversion Flash 10.2
 +         *  @playerversion AIR 2.6
 +         *  @productversion FlexJS 0.8
 +         */
 +        public function get currentState():String
 +        {
 +            return _currentState;   
 +        }
 +
 +        /**
 +         *  @private
 +         */
 +        public function set currentState(value:String):void
 +        {
 +            var event:ValueChangeEvent = new 
ValueChangeEvent("currentStateChange", false, false, _currentState, value)
 +            _currentState = value;
 +            dispatchEvent(event);
 +        }
 +        
 +        private var _transitions:Array;
 +        
 +        /**
 +         *  The array of transitions.
 +         *  
 +         *  @langversion 3.0
 +         *  @playerversion Flash 10.2
 +         *  @playerversion AIR 2.6
 +         *  @productversion FlexJS 0.8
 +         */
 +        public function get transitions():Array
 +        {
 +            return _transitions;   
 +        }
 +        
 +        /**
 +         *  @private
 +         */
 +        public function set transitions(value:Array):void
 +        {
 +            _transitions = value;   
 +        }
 +
 +    }
 +}

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/1691921e/frameworks/projects/Basic/src/main/flex/org/apache/flex/core/LayoutBase.as
----------------------------------------------------------------------
diff --cc 
frameworks/projects/Basic/src/main/flex/org/apache/flex/core/LayoutBase.as
index dde6448,0000000..f23f035
mode 100644,000000..100644
--- a/frameworks/projects/Basic/src/main/flex/org/apache/flex/core/LayoutBase.as
+++ b/frameworks/projects/Basic/src/main/flex/org/apache/flex/core/LayoutBase.as
@@@ -1,166 -1,0 +1,284 @@@
 
+////////////////////////////////////////////////////////////////////////////////
 +//
 +//  Licensed to the Apache Software Foundation (ASF) under one or more
 +//  contributor license agreements.  See the NOTICE file distributed with
 +//  this work for additional information regarding copyright ownership.
 +//  The ASF licenses this file to You under the Apache License, Version 2.0
 +//  (the "License"); you may not use this file except in compliance with
 +//  the License.  You may obtain a copy of the License at
 +//
 +//      http://www.apache.org/licenses/LICENSE-2.0
 +//
 +//  Unless required by applicable law or agreed to in writing, software
 +//  distributed under the License is distributed on an "AS IS" BASIS,
 +//  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 +//  See the License for the specific language governing permissions and
 +//  limitations under the License.
 +//
 
+////////////////////////////////////////////////////////////////////////////////
 +package org.apache.flex.core
 +{
 +
 +      import org.apache.flex.core.IBeadLayout;
 +      import org.apache.flex.core.ILayoutChild;
 +      import org.apache.flex.core.ILayoutHost;
 +      import org.apache.flex.core.ILayoutParent;
 +      import org.apache.flex.core.ILayoutView;
 +      import org.apache.flex.core.IParent;
 +      import org.apache.flex.core.IStrand;
 +      import org.apache.flex.core.ValuesManager;
++      import org.apache.flex.events.IEventDispatcher;
++      import org.apache.flex.events.Event;
 +    import org.apache.flex.utils.CSSUtils;
 +
 +    /**
 +     *  This class is the base class for most, if not all, layouts. 
 +     *
 +     *  @langversion 3.0
 +     *  @playerversion Flash 10.2
 +     *  @playerversion AIR 2.6
 +     *  @productversion FlexJS 0.8
 +     */
 +      public class LayoutBase implements IBeadLayout
 +      {
 +        /**
 +         *  Constructor.
 +         *
 +         *  @langversion 3.0
 +         *  @playerversion Flash 10.2
 +         *  @playerversion AIR 2.6
 +         *  @productversion FlexJS 0.8
 +         */
 +              public function LayoutBase()
 +              {
 +              }
 +
 +        /**
 +               * The strand/host container is also an ILayoutChild because
 +         * it can have its size dictated by the host's parent which is
 +         * important to know for layout optimization.
 +         *
 +         *  @langversion 3.0
 +         *  @playerversion Flash 10.2
 +         *  @playerversion AIR 2.6
 +         *  @productversion FlexJS 0.8
 +               */
 +        protected var host:ILayoutChild;
 +
 +        /**
 +         *  @copy org.apache.flex.core.IBead#strand
 +         *
 +         *  @langversion 3.0
 +         *  @playerversion Flash 10.2
 +         *  @playerversion AIR 2.6
 +         *  @productversion FlexJS 0.8
 +               * 
 +               * @flexjsignorecoercion org.apache.flex.core.ILayoutChild
 +         */
 +              public function set strand(value:IStrand):void
 +              {
 +            host = value as ILayoutChild;
++                      
++                      IEventDispatcher(host).addEventListener("widthChanged", 
handleSizeChange);
++                      
IEventDispatcher(host).addEventListener("heightChanged", handleSizeChange);
++                      IEventDispatcher(host).addEventListener("sizeChanged", 
handleSizeChange);
++                      
++                      
IEventDispatcher(host).addEventListener("childrenAdded", handleChildrenAdded);
++                      IEventDispatcher(host).addEventListener("initComplete", 
handleInitComplete);
++                      
++                      IEventDispatcher(host).addEventListener("layoutNeeded", 
handleLayoutNeeded);
++              }
++              
++              /**
++               * Changes in size to the host strand are handled (by default) 
by running the
++               * layout sequence. Subclasses can override this function and 
use event.type
++               * to handle specific changes in dimension.
++         *
++         *  @langversion 3.0
++         *  @playerversion Flash 10.2
++         *  @playerversion AIR 2.6
++         *  @productversion FlexJS 0.8
++               */
++              protected function handleSizeChange(event:Event):void
++              {
++                      performLayout();
++              }
++              
++              /**
++               * Handles the addition of children to the host's layoutView by 
listening for
++               * size changes in the children.
++         *
++         *  @langversion 3.0
++         *  @playerversion Flash 10.2
++         *  @playerversion AIR 2.6
++         *  @productversion FlexJS 0.8
++               */
++              protected function handleChildrenAdded(event:Event):void
++              {
++                      COMPILE::SWF {
++                              var n:Number = layoutView.numElements;
++                              for(var i:int=0; i < n; i++) {
++                                      var child:IEventDispatcher = 
layoutView.getElementAt(i) as IEventDispatcher;
++                                      child.addEventListener("widthChanged", 
childResizeHandler);
++                                      child.addEventListener("heightChanged", 
childResizeHandler);
++                                      child.addEventListener("sizeChanged", 
childResizeHandler);
++                              }
++                      }
++              }
++              
++              /**
++               * If changes happen to a layoutView's child, this function 
will perform the
++               * layout again.
++         *
++         *  @langversion 3.0
++         *  @playerversion Flash 10.2
++         *  @playerversion AIR 2.6
++         *  @productversion FlexJS 0.8
++               */
++              protected function childResizeHandler(event:Event):void
++              {
++                      performLayout();
++              }
++              
++              /**
++               * Called whenever "layoutNeeded" event is dispatched against 
the host strand.
++         *
++         *  @langversion 3.0
++         *  @playerversion Flash 10.2
++         *  @playerversion AIR 2.6
++         *  @productversion FlexJS 0.8
++               */
++              protected function handleLayoutNeeded(event:Event):void
++              {
++                      performLayout();
++              }
++              
++              /**
++               * Handles the final start-up condition by running the layout 
an initial time.
++         *
++         *  @langversion 3.0
++         *  @playerversion Flash 10.2
++         *  @playerversion AIR 2.6
++         *  @productversion FlexJS 0.8
++               */
++              protected function handleInitComplete(event:Event):void
++              {
++                      performLayout();
 +              }
 +              
 +              /**
 +               * Returns an object of margins for the given child.
 +               * 
 +               * @param child Object The element whose margins are required.
 +               * @param hostWidth Number The usable width dimension of the 
host.
 +               * @param hostHeight Number The usable height dimension of the 
host.
 +               * 
 +               * @return Object A structure of {top:Number, left:Number, 
bottom:Number, right:Number}
 +         *
 +         *  @langversion 3.0
 +         *  @playerversion Flash 10.2
 +         *  @playerversion AIR 2.6
 +         *  @productversion FlexJS 0.8
 +               */
 +              protected function childMargins(child:Object, hostWidth:Number, 
hostHeight:Number):Object
 +              {
 +                      var margin:Object = 
ValuesManager.valuesImpl.getValue(child, "margin");
 +                      var marginLeft:Object = 
ValuesManager.valuesImpl.getValue(child, "margin-left");
 +                      var marginTop:Object = 
ValuesManager.valuesImpl.getValue(child, "margin-top");
 +                      var marginRight:Object = 
ValuesManager.valuesImpl.getValue(child, "margin-right");
 +                      var marginBottom:Object = 
ValuesManager.valuesImpl.getValue(child, "margin-bottom");
 +                      var ml:Number = CSSUtils.getLeftValue(marginLeft, 
margin, hostWidth);
 +                      var mr:Number = CSSUtils.getRightValue(marginRight, 
margin, hostWidth);
 +                      var mt:Number = CSSUtils.getTopValue(marginTop, margin, 
hostHeight);
 +                      var mb:Number = CSSUtils.getBottomValue(marginBottom, 
margin, hostHeight);
 +                      if (marginLeft == "auto")
 +                              ml = 0;
 +                      if (marginRight == "auto")
 +                              mr = 0;
 +                      
 +                      return {left:ml, top:mt, right:mr, bottom:mb};
 +              }
 +              
 +              /**
 +               * Returns an object containing the child's positioning values.
 +               * 
 +               * @param child Object The element whose positions are required.
 +               * 
 +               * @return Object A structure of {top:Number, left:Number, 
bottom:Number, right:Number}
 +         *
 +         *  @langversion 3.0
 +         *  @playerversion Flash 10.2
 +         *  @playerversion AIR 2.6
 +         *  @productversion FlexJS 0.8
 +               */
 +              protected function childPositions(child:Object):Object
 +              {
 +                      var left:Number = 
ValuesManager.valuesImpl.getValue(child, "left");
 +                      var right:Number = 
ValuesManager.valuesImpl.getValue(child, "right");
 +                      var top:Number = 
ValuesManager.valuesImpl.getValue(child, "top");
 +                      var bottom:Number = 
ValuesManager.valuesImpl.getValue(child, "bottom");
 +                      
 +                      return {top:top, left:left, bottom:bottom, right:right};
 +              }
 +              
 +              /**
 +               * Returns the ILayoutView for the host.
 +         *
 +         *  @langversion 3.0
 +         *  @playerversion Flash 10.2
 +         *  @playerversion AIR 2.6
 +         *  @productversion FlexJS 0.8
 +               * 
 +               * @flexjsignorecoercion org.apache.flex.core.ILayoutParent
 +               */
 +              protected function get layoutView():ILayoutView
 +              {
 +                      var viewBead:ILayoutHost = (host as 
ILayoutParent).getLayoutHost();
 +                      return viewBead.contentView;
 +              }
++              
++              private var isLayoutRunning:Boolean = false;
++              
++              /**
++               * Performs the layout in three parts: before, layout, after.
++         *
++         *  @langversion 3.0
++         *  @playerversion Flash 10.2
++         *  @playerversion AIR 2.6
++         *  @productversion FlexJS 0.8
++               */
++              public function performLayout():void
++              {
++                      // avoid running this layout instance recursively.
++                      if (isLayoutRunning) return;
++                      
++                      isLayoutRunning = true;
++                      
++                      var viewBead:ILayoutHost = (host as 
ILayoutParent).getLayoutHost();
++                      
++                      viewBead.beforeLayout();
++                      
++                      if (layout()) {
++                              viewBead.afterLayout();
++                      }
++                      
++                      isLayoutRunning = false;
++                      
++                      IEventDispatcher(host).dispatchEvent(new 
Event("layoutComplete"));
++              }
 +
 +        /**
 +         * @copy org.apache.flex.core.IBeadLayout#layout
 +         *
 +         *  @langversion 3.0
 +         *  @playerversion Flash 10.2
 +         *  @playerversion AIR 2.6
 +         *  @productversion FlexJS 0.8
 +         */
 +              public function layout():Boolean
 +              {
 +            // override in subclass
 +                      return false;
 +              }
 +      }
 +}

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/1691921e/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/DataGrid.as
----------------------------------------------------------------------
diff --cc 
frameworks/projects/Basic/src/main/flex/org/apache/flex/html/DataGrid.as
index fda1b46,c271134..5a17c4a
--- a/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/DataGrid.as
+++ b/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/DataGrid.as
@@@ -22,8 -22,7 +22,10 @@@ package org.apache.flex.htm
        import org.apache.flex.core.IDataGridModel;
        import org.apache.flex.core.IDataGridPresentationModel;
        import org.apache.flex.core.UIBase;
++      import org.apache.flex.core.GroupBase;
 +      import org.apache.flex.core.ValuesManager;
        import org.apache.flex.html.beads.models.DataGridPresentationModel;
++      import org.apache.flex.events.Event;
        
        [Event(name="change", type="org.apache.flex.events.Event")]
        
@@@ -41,7 -39,7 +43,7 @@@
         *  @playerversion AIR 2.6
         *  @productversion FlexJS 0.0
         */
-       public class DataGrid extends Group
 -      public class DataGrid extends UIBase
++      public class DataGrid extends GroupBase
        {
                /**
                 *  constructor.
@@@ -160,24 -143,24 +162,10 @@@
                        presentationModel.rowHeight = value;
                }
                
--              /**
--               * @private
--               * The DataGrid needs to know whenever its size is being 
changed so the columns can be
--               * be aligned properly, so the noEvent value must always be 
false.
--               */
--              override public function setWidth(value:Number, 
noEvent:Boolean=false):void
--              {
--                      super.setWidth(value,false);
--              }
--              
--              /**
--               * @private
--               * The DataGrid needs to know whenever its size is being 
changed so the columns can be
--               * be aligned properly, so the noEvent value must always be 
false.
--               */
--              override public function setHeight(value:Number, 
noEvent:Boolean=false):void
++              override public function addedToParent():void
                {
--                      super.setHeight(value,false);
++                      super.addedToParent();
++                      dispatchEvent(new Event("initComplete"));
                }
        }
  }

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/1691921e/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/DateField.as
----------------------------------------------------------------------
diff --cc 
frameworks/projects/Basic/src/main/flex/org/apache/flex/html/DateField.as
index f46e453,ca142ba..5b73db0
--- a/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/DateField.as
+++ b/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/DateField.as
@@@ -33,6 -34,6 +34,7 @@@ package org.apache.flex.htm
         * and a pop-up calendar control for picking a date as an alternative to
         * the text field.
         *  
++     *  @toplevel
         *  @langversion 3.0
         *  @playerversion Flash 10.2
         *  @playerversion AIR 2.6

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/1691921e/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/beads/AccordionItemRendererView.as
----------------------------------------------------------------------
diff --cc 
frameworks/projects/Basic/src/main/flex/org/apache/flex/html/beads/AccordionItemRendererView.as
index bc9f89d,0000000..85e2b79
mode 100644,000000..100644
--- 
a/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/beads/AccordionItemRendererView.as
+++ 
b/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/beads/AccordionItemRendererView.as
@@@ -1,66 -1,0 +1,66 @@@
 
+////////////////////////////////////////////////////////////////////////////////
 +//
 +//  Licensed to the Apache Software Foundation (ASF) under one or more
 +//  contributor license agreements.  See the NOTICE file distributed with
 +//  this work for additional information regarding copyright ownership.
 +//  The ASF licenses this file to You under the Apache License, Version 2.0
 +//  (the "License"); you may not use this file except in compliance with
 +//  the License.  You may obtain a copy of the License at
 +//
 +//      http://www.apache.org/licenses/LICENSE-2.0
 +//
 +//  Unless required by applicable law or agreed to in writing, software
 +//  distributed under the License is distributed on an "AS IS" BASIS,
 +//  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 +//  See the License for the specific language governing permissions and
 +//  limitations under the License.
 +//
 
+////////////////////////////////////////////////////////////////////////////////
 +package org.apache.flex.html.beads
 +{             
 +      import org.apache.flex.events.Event;
 +      import org.apache.flex.html.supportClasses.ICollapsible;
 +    
 +      /**
 +       * This class creates and manages the contents of an 
AccordionItemItemRenderer
 +     *  
 +       *  @viewbead
 +     *  @langversion 3.0
 +     *  @playerversion Flash 10.2
 +     *  @playerversion AIR 2.6
 +     *  @productversion FlexJS 0.0
 +       */
 +      public class AccordionItemRendererView extends PanelView
 +      {
 +              /**
 +       *  The AccordionItemRendererView class is the default view for
 +         *  the org.apache.flex.html.supportClasses.AccordionItemRenderer 
classes.
 +         *  It provides some layout optimizations that can be attained by 
assuming
 +               *  the strand to be an 
org.apache.flex.html.supportClasses.ICollapsible.
 +         *  
 +         *  @langversion 3.0
 +         *  @playerversion Flash 10.2
 +         *  @playerversion AIR 2.6
 +         *  @productversion FlexJS 0.0
 +         */
 +              public function AccordionItemRendererView()
 +              {
 +                      super();
 +              }
 +              
 +              override protected function performLayout(event:Event):void
 +              {
 +                      var collapsibleStrand:ICollapsible = _strand as 
ICollapsible;
 +                      if (!collapsibleStrand.collapsed)
 +                      {
 +                              super.performLayout(event);
 +                      } else // skip layout for viewport children
 +                      {
 +                              COMPILE::SWF {
 +                              // no longer needed 
layoutViewBeforeContentLayout();
-                               layoutViewAfterContentLayout();
++                              afterLayout();
 +                              }
 +                      }
 +              }
 +      }
 +}

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/1691921e/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/beads/ContainerView.as
----------------------------------------------------------------------
diff --cc 
frameworks/projects/Basic/src/main/flex/org/apache/flex/html/beads/ContainerView.as
index 4de5634,d62e799..ac723a9
--- 
a/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/beads/ContainerView.as
+++ 
b/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/beads/ContainerView.as
@@@ -160,15 -274,49 +160,15 @@@ package org.apache.flex.html.bead
                 *  @playerversion AIR 2.6
                 *  @productversion FlexJS 0.0
                 */
 -              protected function completeSetup():void
 +              override protected function completeSetup():void
                {
 +                      super.completeSetup();
 +
                        // when the first layout is complete, set up listeners 
for changes
                        // to the childrens' sizes.
--                      host.addEventListener("layoutComplete", 
childrenChangedHandler);
 -                      
 -                      host.addEventListener("childrenAdded", performLayout);
 -                      host.addEventListener("layoutNeeded", performLayout);
 -                      host.addEventListener("widthChanged", resizeHandler);
 -                      host.addEventListener("heightChanged", resizeHandler);
 -                      host.addEventListener("sizeChanged", resizeHandler);
 -                      host.addEventListener("viewCreated", 
viewCreatedHandler);
 -              }
 -              
 -              /**
 -               * Handles the viewCreated event by performing the first layout 
if
 -               * there are children already present (ie, from MXML).
 -               *  
 -               *  @langversion 3.0
 -               *  @playerversion Flash 10.2
 -               *  @playerversion AIR 2.6
 -               *  @productversion FlexJS 0.0
 -               */
 -              protected function viewCreatedHandler(event:Event):void
 -              {                       
 -                      if ((host as UIBase).numElements > 0) {
 -                              performLayout(null);
 -                      }
++//                    host.addEventListener("layoutComplete", 
childrenChangedHandler);
                }
 -              
 -        /**
 -         * Calculate the space taken up by non-content children like a 
TItleBar in a Panel.
 -         *  
 -         *  @langversion 3.0
 -         *  @playerversion Flash 10.2
 -         *  @playerversion AIR 2.6
 -         *  @productversion FlexJS 0.0
 -         */
 -        protected function getChromeMetrics():Rectangle
 -        {
 -            return new Rectangle(0, 0, 0, 0);
 -        }
 -        
 +
                /**
                 * Creates the Viewport (or ScrollableViewport) through which 
the content
                 * area is presented.
@@@ -229,22 -391,32 +229,22 @@@
                 *  @playerversion AIR 2.6
                 *  @productversion FlexJS 0.0
                 */
-               override protected function layoutViewBeforeContentLayout():void
 -              protected function performLayout(event:Event):void
++              override public function beforeLayout():void
                {
 -                      layoutRunning = true;
 -                      
 -                      layoutViewBeforeContentLayout();
 -                      
 -                      var host:UIBase = _strand as UIBase;
 -                      
 -                      var layout:IBeadLayout = 
_strand.getBeadByType(IBeadLayout) as IBeadLayout;
 -                      if (layout == null) {
 -                              var c:Class = 
ValuesManager.valuesImpl.getValue(host, "iBeadLayout");
 -                              if (c) {
 -                                      layout = new c() as IBeadLayout;
 -                                      _strand.addBead(layout);
 -                              }
 -                      }
 -                      
 -                      if (layout) {
 -                              layout.layout();
 -                      }
 -                      
 -                      layoutViewAfterContentLayout();
 -                      
 -                      layoutRunning = false;
 +            var host:ILayoutChild = this.host as ILayoutChild;
 +            var vm:IViewportModel = viewportModel;
 +                      var hostWidth:Number = host.width;
 +                      var hostHeight:Number = host.height;
 +
 +            vm.borderMetrics = CSSContainerUtils.getBorderMetrics(host);
 +
 +            viewport.setPosition(vm.borderMetrics.left, vm.borderMetrics.top);
 +
 +                      viewport.layoutViewportBeforeContentLayout(
 +                              host.isWidthSizedToContent() ? NaN : hostWidth 
- vm.borderMetrics.left - vm.borderMetrics.right,
 +                              host.isHeightSizedToContent() ? NaN : 
hostHeight - vm.borderMetrics.top - vm.borderMetrics.bottom);
                }
 -              
 +
                /**
                 * @private
                 */
@@@ -259,20 -431,35 +259,20 @@@
                 *  @playerversion AIR 2.6
                 *  @productversion FlexJS 0.0
                 */
-               override protected function layoutViewAfterContentLayout():void
 -              protected function layoutViewAfterContentLayout():void
++              override public function afterLayout():void
                {
 -                      var host:UIBase = _strand as UIBase;
 -            var vm:IViewportModel = viewportModel;
 -            
 +                      if (adjusting) return;
 +
                        adjusting = true;
 -                      
 -            var viewportSize:Size = 
viewport.layoutViewportAfterContentLayout();
 -            
 -                      if (host.isWidthSizedToContent() && 
host.isHeightSizedToContent()) {                                    
 -                              host.setWidthAndHeight(viewportSize.width + 
vm.borderMetrics.left + vm.borderMetrics.right +
 -                                           vm.chromeMetrics.left + 
vm.chromeMetrics.right, 
 -                                                         viewportSize.height 
+ vm.borderMetrics.top + vm.borderMetrics.bottom +
 -                                           vm.chromeMetrics.top + 
vm.chromeMetrics.bottom,
 -                                       false);
 -                      }
 -                      else if (!host.isWidthSizedToContent() && 
host.isHeightSizedToContent())
 -                      {
 -                              host.setHeight(viewportSize.height + 
vm.borderMetrics.top + vm.borderMetrics.bottom +
 -                    vm.chromeMetrics.top + vm.chromeMetrics.bottom, false);
 -                      }
 -                      else if (host.isWidthSizedToContent() && 
!host.isHeightSizedToContent())
 -                      {
 -                              host.setWidth(viewportSize.width + 
vm.borderMetrics.left + vm.borderMetrics.right +
 -                    vm.chromeMetrics.left + vm.chromeMetrics.right, false);
 -                      }                       
 +
-                       super.layoutViewAfterContentLayout();
++                      super.afterLayout();
 +
 +                      var contentSize:Size = calculateContentSize();
 +                      viewport.layoutViewportAfterContentLayout(contentSize);
 +
                        adjusting = false;
                }
 -              
 +
                /**
                 * Handles dynamic changes to the host's size by running the 
layout once
                 * the viewport has been adjusted.
@@@ -282,54 -469,11 +282,54 @@@
                 *  @playerversion AIR 2.6
                 *  @productversion FlexJS 0.0
                 */
-               override protected function resizeHandler(event:Event):void
-               {
-                       if (!adjusting) {
-                               performLayout(event);
-                       }
-               }
 -              protected function resizeHandler(event:Event):void
++//            override protected function resizeHandler(event:Event):void
++//            {
++//                    if (!adjusting) {
++//                            performLayout(event);
++//                    }
++//            }
 +
 +              /**
 +               * Whenever children are added, listeners are added to detect 
changes
 +               * in their size.
 +               *
 +               *  @langversion 3.0
 +               *  @playerversion Flash 10.2
 +               *  @playerversion AIR 2.6
 +               *  @productversion FlexJS 0.0
 +               */
-               protected function childrenChangedHandler(event:Event):void
-               {
-                       var host:UIBase = _strand as UIBase;
-                       host.removeEventListener(event.type, 
childrenChangedHandler);
- 
-                       var n:Number = contentView.numElements;
-                       for (var i:int=0; i < n; i++) {
-                               var child:IUIBase = contentView.getElementAt(i) 
as IUIBase;
-                               child.addEventListener("widthChanged", 
childResizeHandler);
-                               child.addEventListener("heightChanged", 
childResizeHandler);
-                               child.addEventListener("sizeChanged", 
childResizeHandler);
-                       }
-               }
++//            protected function childrenChangedHandler(event:Event):void
++//            {
++//                    var host:UIBase = _strand as UIBase;
++//                    host.removeEventListener(event.type, 
childrenChangedHandler);
++//
++//                    var n:Number = contentView.numElements;
++//                    for (var i:int=0; i < n; i++) {
++//                            var child:IUIBase = contentView.getElementAt(i) 
as IUIBase;
++//                            child.addEventListener("widthChanged", 
childResizeHandler);
++//                            child.addEventListener("heightChanged", 
childResizeHandler);
++//                            child.addEventListener("sizeChanged", 
childResizeHandler);
++//                    }
++//            }
 +      }
 +
 +      COMPILE::JS
 +      public class ContainerView extends GroupView //??implements IParent
 +      {
 +              private var _viewport:IViewport;
 +
 +              /**
 +               * The viewport used to present the content and may display
 +               * scroll bars (depending on the actual type of viewport).
 +               *
 +               *  @langversion 3.0
 +               *  @playerversion Flash 10.2
 +               *  @playerversion AIR 2.6
 +               *  @productversion FlexJS 0.0
 +               */
 +              protected function get viewport():IViewport
                {
 -                      if (!adjusting) {
 -                              performLayout(event);
 -                      }
 +                      return _viewport;
                }
                
                /**

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/1691921e/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/beads/DataContainerView.as
----------------------------------------------------------------------
diff --cc 
frameworks/projects/Basic/src/main/flex/org/apache/flex/html/beads/DataContainerView.as
index 36ed489,0000000..fc5f3a2
mode 100644,000000..100644
--- 
a/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/beads/DataContainerView.as
+++ 
b/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/beads/DataContainerView.as
@@@ -1,230 -1,0 +1,233 @@@
 
+////////////////////////////////////////////////////////////////////////////////
 +//
 +//  Licensed to the Apache Software Foundation (ASF) under one or more
 +//  contributor license agreements.  See the NOTICE file distributed with
 +//  this work for additional information regarding copyright ownership.
 +//  The ASF licenses this file to You under the Apache License, Version 2.0
 +//  (the "License"); you may not use this file except in compliance with
 +//  the License.  You may obtain a copy of the License at
 +//
 +//      http://www.apache.org/licenses/LICENSE-2.0
 +//
 +//  Unless required by applicable law or agreed to in writing, software
 +//  distributed under the License is distributed on an "AS IS" BASIS,
 +//  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 +//  See the License for the specific language governing permissions and
 +//  limitations under the License.
 +//
 
+////////////////////////////////////////////////////////////////////////////////
 +package org.apache.flex.html.beads
 +{     
 +      import org.apache.flex.core.BeadViewBase;
 +      import org.apache.flex.core.ContainerBase;
 +      import org.apache.flex.core.IBead;
 +      import org.apache.flex.core.IBeadLayout;
 +      import org.apache.flex.core.IBeadModel;
 +      import org.apache.flex.core.IBeadView;
-       import org.apache.flex.core.IList;
-       import org.apache.flex.core.ISelectableItemRenderer;
++      import org.apache.flex.core.IDataProviderModel;
 +      import org.apache.flex.core.IItemRenderer;
 +      import org.apache.flex.core.IItemRendererParent;
++      import org.apache.flex.core.IList;
 +      import org.apache.flex.core.IParent;
-     import org.apache.flex.core.IParentIUIBase;
-       import org.apache.flex.core.IDataProviderModel;
++      import org.apache.flex.core.IParentIUIBase;
++      import org.apache.flex.core.ISelectableItemRenderer;
 +      import org.apache.flex.core.ISelectionModel;
 +      import org.apache.flex.core.IStrand;
-     import org.apache.flex.core.IUIBase;
++      import org.apache.flex.core.IUIBase;
++      import org.apache.flex.core.LayoutBase;
 +      import org.apache.flex.core.Strand;
 +      import org.apache.flex.core.UIBase;
 +      import org.apache.flex.core.ValuesManager;
 +      import org.apache.flex.events.Event;
 +      import org.apache.flex.events.IEventDispatcher;
 +      import org.apache.flex.html.beads.models.ScrollBarModel;
 +      import org.apache.flex.html.beads.models.SingleLineBorderModel;
 +      import org.apache.flex.html.supportClasses.Border;
 +      import org.apache.flex.html.supportClasses.DataGroup;
 +      import org.apache.flex.html.supportClasses.ScrollBar;
 +
 +      /**
 +       *  The DataContainerView provides the visual elements for the 
DataContainer.
 +       *  
 +       *  @viewbead
 +       *  @langversion 3.0
 +       *  @playerversion Flash 10.2
 +       *  @playerversion AIR 2.6
 +       *  @productversion FlexJS 0.8
 +       */
 +      COMPILE::JS
 +      public class DataContainerView extends ContainerView implements 
IListView
 +      {
 +              public function DataContainerView()
 +              {
 +                      super();
 +              }
 +              
 +              /**
 +               *  @copy org.apache.flex.core.IBead#strand
 +               *  
 +               *  @langversion 3.0
 +               *  @playerversion Flash 10.2
 +               *  @playerversion AIR 2.6
 +               *  @productversion FlexJS 0.8
 +               */
 +              override public function set strand(value:IStrand):void
 +              {
 +                      _strand = value;
 +                      super.strand = value;
 +                      
 +                      host.addEventListener("beadsAdded", beadsAddedHandler);
 +              }
 +              
 +              protected var dataModel:IDataProviderModel;
 +              
 +              /**
 +               * @flexjsignorecoercion 
org.apache.flex.core.IItemRendererParent
 +               */
 +              public function get dataGroup():IItemRendererParent
 +              {
 +                      return super.contentView as IItemRendererParent;
 +              }
 +              
 +              protected function beadsAddedHandler(event:Event):void
 +              {
 +                      dataModel = _strand.getBeadByType(IDataProviderModel) 
as IDataProviderModel;
 +                      host.addEventListener("itemsCreated", 
itemsCreatedHandler);
 +                      dataModel.addEventListener("dataProviderChanged", 
dataProviderChangeHandler);
 +              }
 +              
 +              /**
 +               * @private
 +               */
 +              override protected function handleInitComplete(event:Event):void
 +              {
 +                      super.handleInitComplete(event);
 +              }
 +              
 +              /**
 +               * @private
 +               */
 +              protected function itemsCreatedHandler(event:Event):void
 +              {
-                       performLayout(event);
++                      trace("DataContainerView: itemsCreatedHandler");
++                      host.dispatchEvent(new Event("layoutNeeded"));
 +              }
 +              
 +              /**
 +               * @private
 +               */
 +              protected function dataProviderChangeHandler(event:Event):void
 +              {
++                      trace("DataContainerView: dataProviderChangeHandler");
 +                      performLayout(event);
 +              }
 +      }
 +      
 +      COMPILE::SWF
 +      public class DataContainerView extends ContainerView implements 
IListView
 +      {
 +              public function DataContainerView()
 +              {
 +                      super();
 +              }
 +                                              
 +              protected var dataModel:IDataProviderModel;
 +              
 +              /**
 +               * @private
 +               */
 +              override public function get host():IUIBase
 +              {
 +                      return _strand as IUIBase;
 +              }
 +              
 +              /**
 +               *  @copy org.apache.flex.core.IBead#strand
 +               *  
 +               *  @langversion 3.0
 +               *  @playerversion Flash 10.2
 +               *  @playerversion AIR 2.6
 +               *  @productversion FlexJS 0.8
 +               */
 +              override public function set strand(value:IStrand):void
 +              {
 +                      _strand = value;
 +                      super.strand = value;
 +                      
 +                      host.addEventListener("beadsAdded", beadsAddedHandler);
++                      host.addEventListener("itemsCreated", 
itemsCreatedHandler);
 +              }
 +              
 +              override protected function completeSetup():void
 +              {
 +                      super.completeSetup();
 +                      
 +                      // list is not interested in UI children, it wants to 
know when new items
 +                      // have been added or the dataProvider has changed.
-                       host.removeEventListener("childrenAdded", 
childrenChangedHandler);
-                       host.removeEventListener("childrenAdded", 
performLayout);
-                       host.addEventListener("itemsCreated", 
itemsCreatedHandler);
++//                    host.removeEventListener("childrenAdded", 
childrenChangedHandler);
++//                    host.removeEventListener("childrenAdded", 
performLayout);
 +              }
 +              
 +              protected function beadsAddedHandler(event:Event):void
 +              {
 +                      dataModel = _strand.getBeadByType(IDataProviderModel) 
as IDataProviderModel;
 +                      dataModel.addEventListener("dataProviderChanged", 
dataProviderChangeHandler);
 +              }
 +              
 +              override protected function handleInitComplete(event:Event):void
 +              {
 +                      super.handleInitComplete(event);
 +              }
 +              
 +              /**
 +               *  The area holding the itemRenderers.
 +               *
 +               *  @langversion 3.0
 +               *  @playerversion Flash 10.2
 +               *  @playerversion AIR 2.6
 +               *  @productversion FlexJS 0.8
 +               */
 +              public function get dataGroup():IItemRendererParent
 +              {
 +                      return super.contentView as IItemRendererParent;
 +              }
 +                              
 +              /**
 +               * @private
 +               */
 +              override public function get resizableView():IUIBase
 +              {
 +                      return _strand as IUIBase;
 +              }
 +              
 +              /**
 +               * @private
 +               */
 +              protected function itemsCreatedHandler(event:Event):void
 +              {
-                       performLayout(event);
++                      host.dispatchEvent(new Event("layoutNeeded"));
 +              }
 +              
 +              /**
 +               * @private
 +               */
 +              protected function dataProviderChangeHandler(event:Event):void
 +              {
-                       performLayout(event);
++                      host.dispatchEvent(new Event("layoutNeeded"));
 +              }
 +                      
 +        /**
 +         *  respond to a change in size or request to re-layout everything
 +         *  
 +         *  @langversion 3.0
 +         *  @playerversion Flash 10.2
 +         *  @playerversion AIR 2.6
 +         *  @productversion FlexJS 0.0
 +         */
 +              override protected function resizeHandler(event:Event):void
 +              {
 +                      // might need to do something here, not sure yet.
 +                      super.resizeHandler(event);
 +              }
 +      }
 +}

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/1691921e/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/beads/DataGridView.as
----------------------------------------------------------------------
diff --cc 
frameworks/projects/Basic/src/main/flex/org/apache/flex/html/beads/DataGridView.as
index 68e5d95,8393057..3b387d9
--- 
a/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/beads/DataGridView.as
+++ 
b/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/beads/DataGridView.as
@@@ -52,249 -115,152 +52,249 @@@ package org.apache.flex.html.bead
                 *  @playerversion AIR 2.6
                 *  @productversion FlexJS 0.0
                 */
 -              public function set strand(value:IStrand):void
 +              public class DataGridView extends GroupView implements IBeadView
                {
 -                      _strand = value;
 -
 -                      var host:UIBase = value as UIBase;
 -
 -                      _header = new DataGridButtonBar();
 -                      _header.id = "dataGridHeader";
 -
 -                      var scrollPort:ScrollingViewport = new 
ScrollingViewport();
 -
 -                      _listArea = new Container();
 -                      _listArea.id = "dataGridListArea";
 -                      _listArea.className = "DataGridListArea";
 -                      _listArea.addBead(scrollPort);
 +                      /**
 +                       *  constructor.
 +                       *
 +                       *  @langversion 3.0
 +                       *  @playerversion Flash 10.2
 +                       *  @playerversion AIR 2.6
 +                       *  @productversion FlexJS 0.0
 +                       */
 +                      public function DataGridView()
 +                      {
 +                              super();
 +                      }
                        
 -                      if (_strand.getBeadByType(IBeadLayout) == null) {
 -                              var c:Class = 
ValuesManager.valuesImpl.getValue(host, "iBeadLayout");
 -                              if (c)
 -                              {
 -                                      var layout:IBeadLayout = new c() as 
IBeadLayout;
 -                                      _strand.addBead(layout);
 +                      private var _strand:IStrand;
 +                      private var _header:DataGridButtonBar;
 +                      private var _listArea:Container;
 +                      
 +                      private var _lists:Array;
 +                      
 +                      /**
 +                       * An array of List objects the comprise the columns of 
the DataGrid.
 +                       */
 +                      public function get columnLists():Array
 +                      {
 +                              return _lists;
 +                      }
 +                      
 +                      /**
 +                       * The area used to hold the columns
 +                       *
 +                       */
 +                      public function get listArea():Container
 +                      {
 +                              return _listArea;
 +                      }
 +                      
 +                      /**
 +                       * Returns the component used as the header for the 
DataGrid.
 +                       */
 +                      public function get header():IUIBase
 +                      {
 +                              return _header;
 +                      }
 +                      
 +                      /**
 +                       *  @copy org.apache.flex.core.IBead#strand
 +                       *
 +                       *  @langversion 3.0
 +                       *  @playerversion Flash 10.2
 +                       *  @playerversion AIR 2.6
 +                       *  @productversion FlexJS 0.0
 +                       */
 +                      override public function set strand(value:IStrand):void
 +                      {
 +                              super.strand = value;
 +                              _strand = value;
 +                              
 +                              var host:DataGrid = value as DataGrid;
 +                              
 +                              _header = new DataGridButtonBar();
 +                              _header.height = 30;
 +                              _header.percentWidth = 100;
 +                              
 +                              _listArea = new Container();
 +                              _listArea.percentWidth = 100;
 +                              _listArea.className = "DataGridListArea";
 +                              
 +                              COMPILE::SWF {
 +                                      _header.style = new SimpleCSSStyles();
 +                                      _header.style.flexGrow = 0;
 +                                      
 +                                      _listArea.style = new SimpleCSSStyles();
 +                                      _listArea.style.flexGrow = 1;
                                }
 +                              COMPILE::JS {
 +                                      _header.element.style["flex-grow"] = 
"0";
 +                                      _header.element.style["min-height"] = 
"30px";
 +                                      _listArea.element.style["flex-grow"] = 
"1";
 +                              }
 +                              
-                               
IEventDispatcher(_strand).addEventListener("initComplete", finishSetup);
++                              
IEventDispatcher(_strand).addEventListener("beadsAdded", finishSetup);
                        }
 -
 -                      finishSetup(null);
 -              }
 -
 -              /**
 -               * @private
 -               */
 -              private function finishSetup(event:Event):void
 -              {
 -                      var host:UIBase = _strand as UIBase;
 -
 -                      // see if there is a presentation model already in 
place. if not, add one.
 -                      var presentationModel:DataGridPresentationModel = 
_strand.getBeadByType(DataGridPresentationModel) as DataGridPresentationModel;
 -                      if (presentationModel == null) {
 -                              presentationModel = new 
DataGridPresentationModel();
 -                              _strand.addBead(presentationModel);
 +                      
 +                      /**
 +                       * @private
 +                       */
 +                      private function finishSetup(event:Event):void
 +                      {
 +                              var host:DataGrid = _strand as DataGrid;
 +                              
 +                              if (_lists == null || _lists.length == 0) {
 +                                      createLists();
 +                              }
 +                              
 +                              // see if there is a presentation model already 
in place. if not, add one.
 +                              var 
presentationModel:IDataGridPresentationModel = host.presentationModel;
 +                              var sharedModel:IDataGridModel = host.model as 
IDataGridModel;
 +                              
IEventDispatcher(sharedModel).addEventListener("dataProviderChanged",handleDataProviderChanged);
 +                              
IEventDispatcher(sharedModel).addEventListener("selectedIndexChanged", 
handleSelectedIndexChanged);
 +                              
 +                              var columnLabels:Array = new Array();
 +                              var buttonWidths:Array = new Array();
 +                              
 +                              var marginBorderOffset:int = 0;
 +                              COMPILE::SWF {
 +                                      marginBorderOffset = 1;
 +                              }
 +                                      
 +                              for(var i:int=0; i < 
sharedModel.columns.length; i++) {
 +                                      var dgc:DataGridColumn = 
sharedModel.columns[i] as DataGridColumn;
 +                                      columnLabels.push(dgc.label);
 +                                      var colWidth:Number = dgc.columnWidth - 
marginBorderOffset;
 +                                      buttonWidths.push(colWidth);
 +                                      
 +                                      var list:DataGridColumnList = _lists[i] 
as DataGridColumnList;
 +                                      if (!isNaN(colWidth)) {
 +                                              list.width = Number(colWidth - 
marginBorderOffset);
 +                                      } else {
 +                                              COMPILE::SWF {
 +                                                      list.style = new 
SimpleCSSStyles();
 +                                                      list.style.flexGrow = 1;
 +                                              }
 +                                                      COMPILE::JS {
 +                                                              
list.element.style["flex-grow"] = "1";
 +                                                      }
 +                                      }
 +                              }
 +                                      
 +                              var bblayout:ButtonBarLayout = new 
ButtonBarLayout();
 +                              _header.buttonWidths = buttonWidths
 +                              _header.widthType = ButtonBarModel.PIXEL_WIDTHS;
 +                              _header.dataProvider = columnLabels;
 +                              _header.addBead(bblayout);
 +                              _header.addBead(new Viewport());
 +                              host.addElement(_header);
 +                              
 +                              host.addElement(_listArea);
 +                              
 +                              handleDataProviderChanged(event);
 +                              
 +                              host.addEventListener("widthChanged", 
handleSizeChanges);
 +                              host.addEventListener("heightChanged", 
handleSizeChanges);
                        }
 -
 -                      var sharedModel:IDataGridModel = 
_strand.getBeadByType(IBeadModel) as IDataGridModel;
 -                      
IEventDispatcher(sharedModel).addEventListener("dataProviderChanged",handleDataProviderChanged);
 -
 -                      var columnLabels:Array = new Array();
 -
 -                      for(var i:int=0; i < sharedModel.columns.length; i++) {
 -                              var dgc:DataGridColumn = sharedModel.columns[i] 
as DataGridColumn;
 -                              columnLabels.push(dgc.label);
 +                      
 +                      /**
 +                       * @private
 +                       */
 +                      private function handleSizeChanges(event:Event):void
 +                      {       
 +                              _header.dispatchEvent(new 
Event("layoutChanged"));
 +                              _listArea.dispatchEvent(new 
Event("layoutChanged"));
                        }
 -
 -                      var bblayout:ButtonBarLayout = new ButtonBarLayout();
 -                      var buttonBarModel:ArraySelectionModel = new 
ArraySelectionModel();
 -                      buttonBarModel.dataProvider = columnLabels;
 -
 -                      _header.addBead(buttonBarModel);
 -                      _header.addBead(bblayout);
 -                      _header.addBead(new Viewport());
 -                      host.addElement(_header);
 -
 -                      host.addElement(_listArea);
 -
 -                      handleDataProviderChanged(event);
 -              }
 -
 -              /**
 -               * @private
 -               */
 -              private function handleSizeChanges(event:Event):void
 -              {       
 -                      var layoutBead:IDataGridLayout = 
_strand.getBeadByType(IBeadLayout) as IDataGridLayout;
 -                      layoutBead.header = _header;
 -                      layoutBead.columns = _lists;
 -                      layoutBead.listArea = _listArea;
 -                      layoutBead.layout();
 -              }
 -
 -              /**
 -               * @private
 -               */
 -              private function handleDataProviderChanged(event:Event):void
 -              {
 -                      var sharedModel:IDataGridModel = 
_strand.getBeadByType(IBeadModel) as IDataGridModel;
 -
 -                      if (_lists == null || _lists.length == 0) {
 -                              createLists();
 +                      
 +                      /**
 +                       * @private
 +                       */
 +                      private function 
handleDataProviderChanged(event:Event):void
 +                      {
 +                              var sharedModel:IDataGridModel = 
_strand.getBeadByType(IBeadModel) as IDataGridModel;
 +                              
 +                              for (var i:int=0; i < _lists.length; i++)
 +                              {
 +                                      var list:DataGridColumnList = _lists[i] 
as DataGridColumnList;
 +                                      var listModel:ISelectionModel = 
list.getBeadByType(IBeadModel) as ISelectionModel;
 +                                      listModel.dataProvider = 
sharedModel.dataProvider;
 +                              }
 +                              
 +                              host.dispatchEvent(new Event("layoutNeeded"));
                        }
 -
 -                      for (var i:int=0; i < _lists.length; i++)
 +                      
 +                      /**
 +                       * @private
 +                       */
 +                      private function 
handleSelectedIndexChanged(event:Event):void
                        {
 -                              var list:DataGridColumnList = _lists[i] as 
DataGridColumnList;
 -                              var listModel:ISelectionModel = 
list.getBeadByType(IBeadModel) as ISelectionModel;
 -                              listModel.dataProvider = 
sharedModel.dataProvider;
 +                              var sharedModel:IDataGridModel = 
_strand.getBeadByType(IBeadModel) as IDataGridModel;
 +                              var newIndex:int = sharedModel.selectedIndex;
 +                              
 +                              for (var i:int=0; i < _lists.length; i++)
 +                              {
 +                                      var list:DataGridColumnList = _lists[i] 
as DataGridColumnList;
 +                                      list.selectedIndex = newIndex;
 +                              }
                        }
 -
 -                      host.dispatchEvent(new Event("layoutNeeded"));
 -              }
 -
 -              /**
 -               * @private
 -               */
 -              private function handleColumnListChange(event:Event):void
 -              {
 -                      var sharedModel:IDataGridModel = 
_strand.getBeadByType(IBeadModel) as IDataGridModel;
 -                      var list:DataGridColumnList = event.target as 
DataGridColumnList;
 -                      sharedModel.selectedIndex = list.selectedIndex;
 -
 -                      for(var i:int=0; i < _lists.length; i++) {
 -                              if (list != _lists[i]) {
 -                                      var otherList:DataGridColumnList = 
_lists[i] as DataGridColumnList;
 -                                      otherList.selectedIndex = 
list.selectedIndex;
 +                      
 +                      /**
 +                       * @private
 +                       */
 +                      private function 
handleColumnListChange(event:Event):void
 +                      {
 +                              var sharedModel:IDataGridModel = 
_strand.getBeadByType(IBeadModel) as IDataGridModel;
 +                              var list:DataGridColumnList = event.target as 
DataGridColumnList;
 +                              sharedModel.selectedIndex = list.selectedIndex;
 +                              
 +                              for(var i:int=0; i < _lists.length; i++) {
 +                                      if (list != _lists[i]) {
 +                                              var 
otherList:DataGridColumnList = _lists[i] as DataGridColumnList;
 +                                              otherList.selectedIndex = 
list.selectedIndex;
 +                                      }
                                }
 +                              
 +                              host.dispatchEvent(new Event('change'));
                        }
 -
 -                      host.dispatchEvent(new Event('change'));
 -              }
 -
 -              /**
 -               * @private
 -               */
 -              private function createLists():void
 -              {
 -                      var sharedModel:IDataGridModel = 
_strand.getBeadByType(IBeadModel) as IDataGridModel;
 -                      var presentationModel:DataGridPresentationModel = 
_strand.getBeadByType(DataGridPresentationModel) as DataGridPresentationModel;
 -                      var listWidth:Number = host.width / 
sharedModel.columns.length;
 -
 -                      _lists = new Array();
 -
 -                      for (var i:int=0; i < sharedModel.columns.length; i++) {
 -                              var dataGridColumn:DataGridColumn = 
sharedModel.columns[i] as DataGridColumn;
 -
 -                              var list:DataGridColumnList = new 
DataGridColumnList();
 -                              list.id = "dataGridColumn"+String(i);
 -                              list.addBead(sharedModel);
 -                              list.itemRenderer = dataGridColumn.itemRenderer;
 -                              list.labelField = dataGridColumn.dataField;
 -                              
list.addEventListener('change',handleColumnListChange);
 -                              list.addBead(presentationModel);
 -
 -                              _listArea.addElement(list);
 -                              _lists.push(list);
 +                      
 +                      /**
 +                       * @private
 +                       */
 +                      private function createLists():void
 +                      {
 +                              var host:DataGrid = _strand as DataGrid;
 +                              
 +                              var sharedModel:IDataGridModel = host.model as 
IDataGridModel;
 +                              var 
presentationModel:IDataGridPresentationModel = host.presentationModel;
 +                              
 +                              _lists = new Array();
 +                              
 +                              for (var i:int=0; i < 
sharedModel.columns.length; i++) {
 +                                      var dataGridColumn:DataGridColumn = 
sharedModel.columns[i] as DataGridColumn;
 +                                      
 +                                      var list:DataGridColumnList = new 
DataGridColumnList();
 +                                      list.id = "dataGridColumn"+String(i);
 +                                      list.addBead(sharedModel);
 +                                      list.itemRenderer = 
dataGridColumn.itemRenderer;
 +                                      list.labelField = 
dataGridColumn.dataField;
 +                                      
list.addEventListener('change',handleColumnListChange);
 +                                      list.addBead(presentationModel);
 +                                      
 +                                      if (i == 0) {
 +                                              list.className = "first";
 +                                      } else if (i == 
sharedModel.columns.length-1) {
 +                                              list.className = "last";
 +                                      } else {
 +                                              list.className = "middle";
 +                                      }
 +                                      
 +                                      _listArea.addElement(list);
 +                                      _lists.push(list);
 +                              }
 +                              
 +                              host.dispatchEvent(new Event("layoutNeeded"));
                        }
 -
 -                      host.dispatchEvent(new Event("layoutNeeded"));
                }
 -      }
  }
  

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/1691921e/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/beads/GroupView.as
----------------------------------------------------------------------
diff --cc 
frameworks/projects/Basic/src/main/flex/org/apache/flex/html/beads/GroupView.as
index c3351a5,0000000..2a982c2
mode 100644,000000..100644
--- 
a/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/beads/GroupView.as
+++ 
b/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/beads/GroupView.as
@@@ -1,429 -1,0 +1,344 @@@
 
+////////////////////////////////////////////////////////////////////////////////
 +//
 +//  Licensed to the Apache Software Foundation (ASF) under one or more
 +//  contributor license agreements.  See the NOTICE file distributed with
 +//  this work for additional information regarding copyright ownership.
 +//  The ASF licenses this file to You under the Apache License, Version 2.0
 +//  (the "License"); you may not use this file except in compliance with
 +//  the License.  You may obtain a copy of the License at
 +//
 +//      http://www.apache.org/licenses/LICENSE-2.0
 +//
 +//  Unless required by applicable law or agreed to in writing, software
 +//  distributed under the License is distributed on an "AS IS" BASIS,
 +//  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 +//  See the License for the specific language governing permissions and
 +//  limitations under the License.
 +//
 
+////////////////////////////////////////////////////////////////////////////////
 +package org.apache.flex.html.beads
 +{
 +      import org.apache.flex.core.BeadViewBase;
 +      import org.apache.flex.core.IBead;
 +      import org.apache.flex.core.IBeadLayout;
 +      import org.apache.flex.core.IBeadView;
 +      import org.apache.flex.core.ILayoutChild;
 +      import org.apache.flex.core.ILayoutHost;
 +      import org.apache.flex.core.ILayoutView;
 +      import org.apache.flex.core.IStrand;
 +      import org.apache.flex.core.IUIBase;
 +      import org.apache.flex.core.UIBase;
 +      import org.apache.flex.core.ValuesManager;
 +      import org.apache.flex.events.Event;
 +      import org.apache.flex.events.IEventDispatcher;
 +
 +      COMPILE::SWF {
 +              import org.apache.flex.geom.Size;
 +              import org.apache.flex.geom.Rectangle;
 +              import org.apache.flex.utils.CSSContainerUtils;
 +      }
 +
 +      /**
 +       *  The GroupView is a bead that manages the layout bead (if any) 
attached to a Group. This class
 +       *  also provides support for background and border styles for a Group 
on the SWF platform.
 +     *
 +       *  @viewbead
 +     *  @langversion 3.0
 +     *  @playerversion Flash 10.2
 +     *  @playerversion AIR 2.6
 +     *  @productversion FlexJS 0.8
 +       */
 +      public class GroupView extends BeadViewBase implements IBeadView, 
ILayoutHost
 +      {
 +              /**
 +       *  The GroupView class is the default view for
 +         *  the org.apache.flex.html.Group class.
 +         *  It lets you use some CSS styles to manage the border, background
 +         *  and padding around the content area.
 +         *
 +         *  @langversion 3.0
 +         *  @playerversion Flash 10.2
 +         *  @playerversion AIR 2.6
 +         *  @productversion FlexJS 0.8
 +         */
 +              public function GroupView()
 +              {
 +                      super();
 +
 +                      layoutRunning = false;
 +              }
 +
 +              /**
 +               * The sub-element used as the parent of the container's 
elements. This does not
 +               * include the chrome elements.
 +               *
 +               *  @langversion 3.0
 +               *  @playerversion Flash 10.2
 +               *  @playerversion AIR 2.6
 +               *  @productversion FlexJS 0.8
 +               */
 +              public function get contentView():ILayoutView
 +              {
 +                      return host as ILayoutView;
 +              }
 +
 +              /**
 +               * The view that can be resized.
 +               *
 +               *  @langversion 3.0
 +               *  @playerversion Flash 10.2
 +               *  @playerversion AIR 2.6
 +               *  @productversion FlexJS 0.8
 +               */
 +              public function get resizableView():IUIBase
 +              {
 +                      return host;
 +              }
 +
 +
 +              private var layoutRunning:Boolean;
 +
 +              /**
 +               * Strand setter.
 +               *
 +               *  @langversion 3.0
 +               *  @playerversion Flash 10.2
 +               *  @playerversion AIR 2.6
 +               *  @productversion FlexJS 0.8
 +               */
 +              override public function set strand(value:IStrand):void
 +              {
 +                      _strand = value;
 +                      super.strand = value;
 +
 +                      COMPILE::SWF {
 +                              displayBackgroundAndBorder(host as UIBase);
 +                      }
 +
 +                      // listen for initComplete to signal that the strand 
has been initialized
 +                      // with its beads and children.
 +                      host.addEventListener("initComplete", 
handleInitComplete);
-                       
-                       // listen for when children have been added so 
additional event listeners
-                       // can be placed upon them.
-                       host.addEventListener("childrenAdded", 
handleChildrenAdded);
-                       
-                       // listen for requests to run the layout.
-                       host.addEventListener("layoutNeeded", performLayout);
 +              }
 +
 +              /**
 +               * Handles the initComplete event by completing the setup and 
kicking off the
 +               * presentation of the contents.
 +               *
 +               *  @langversion 3.0
 +               *  @playerversion Flash 10.2
 +               *  @playerversion AIR 2.6
 +               *  @productversion FlexJS 0.8
 +               */
 +              protected function handleInitComplete(event:Event):void
 +              {
 +            var ilc:ILayoutChild = host as ILayoutChild;
 +                      // Complete the setup if the height is sized to content 
or has been explicitly set
 +            // and the width is sized to content or has been explicitly set
 +                      if ((ilc.isHeightSizedToContent() || 
!isNaN(ilc.explicitHeight) || !isNaN(ilc.percentHeight)) &&
 +                (ilc.isWidthSizedToContent() || !isNaN(ilc.explicitWidth) || 
!isNaN(ilc.percentWidth))) {
 +                              completeSetup();
 +                      }
 +                      else {
 +                              // otherwise, wait until the unknown sizes have 
been set and then finish
 +                              host.addEventListener("sizeChanged", 
deferredSizeHandler);
 +                host.addEventListener("widthChanged", deferredSizeHandler);
 +                host.addEventListener("heightChanged", deferredSizeHandler);
 +                      }
 +              }
 +
 +              /**
 +               * Handles the case where the size of the host is not 
immediately known, usually do
 +               * to one of its dimensions being indicated as a percent size.
 +               *
 +               *  @langversion 3.0
 +               *  @playerversion Flash 10.2
 +               *  @playerversion AIR 2.6
 +               *  @productversion FlexJS 0.8
 +               */
 +              protected function deferredSizeHandler(event:Event):void
 +              {
 +            host.removeEventListener("sizeChanged", deferredSizeHandler);
 +            host.removeEventListener("widthChanged", deferredSizeHandler);
 +            host.removeEventListener("heightChanged", deferredSizeHandler);
 +                      
 +                      completeSetup();
- 
-                       var num:Number = contentView.numElements;
-                       if (num > 0)
-             {
-                 performLayout(event);
-             }
 +              }
 +
 +              /**
 +               * Called when the host is ready to complete its setup (usually 
after its size has been
 +               * determined).
 +               *
 +               *  @langversion 3.0
 +               *  @playerversion Flash 10.2
 +               *  @playerversion AIR 2.6
 +               *  @productversion FlexJS 0.8
 +               */
 +              protected function completeSetup():void
 +              {
 +                      // listen for changes to strand's size and rerun the 
layout
 +                      host.addEventListener("sizeChanged", resizeHandler);
 +                      host.addEventListener("widthChanged", resizeHandler);
 +                      host.addEventListener("heightChanged", resizeHandler);
 +              }
- 
-               /**
-                * Handles the viewCreated event by performing the first layout 
if
-                * there are children already present (ie, from MXML).
-                *
-                *  @langversion 3.0
-                *  @playerversion Flash 10.2
-                *  @playerversion AIR 2.6
-                *  @productversion FlexJS 0.8
-                */
-               protected function viewCreatedHandler(event:Event):void
-               {
-                       var num:Number = contentView.numElements;
-                       if (num > 0)
-                       {
-                               performLayout(event);
-                       }
-               }
- 
-               /**
-                * @private
-                */
-               protected function handleChildrenAdded(event:Event):void
-               {
-                       COMPILE::SWF {
-                               var n:Number = contentView.numElements;
-                               for(var i:int=0; i < n; i++) {
-                                       var child:IEventDispatcher = 
contentView.getElementAt(i) as IEventDispatcher;
-                                       child.addEventListener("widthChanged", 
childResizeHandler);
-                                       child.addEventListener("heightChanged", 
childResizeHandler);
-                                       child.addEventListener("sizeChanged", 
childResizeHandler);
-                               }
-                       }
- 
-                       performLayout(event);
-               }
 +              
 +              /**
 +               * Invoked in response to the strand being resized.
 +               *
 +               *  @langversion 3.0
 +               *  @playerversion Flash 10.2
 +               *  @playerversion AIR 2.6
 +               *  @productversion FlexJS 0.8
 +               */
 +              protected function resizeHandler(event:Event):void
 +              {
-                       performLayout(event);
-               }
-               
-               /**
-                * Invoked in response to any child being resized.
-                *
-                *  @langversion 3.0
-                *  @playerversion Flash 10.2
-                *  @playerversion AIR 2.6
-                *  @productversion FlexJS 0.8
-                */
-               protected function childResizeHandler(event:Event):void
-               {
-                       performLayout(event);
++                      // override in subclasses in case there is something 
besides running
++                      // the layout (which is handled automatically by the 
layout itself).
 +              }
 +              
 +              /**
 +               * Provides a place for pre-layout actions.
 +               *
 +               *  @langversion 3.0
 +               *  @playerversion Flash 10.2
 +               *  @playerversion AIR 2.6
 +               *  @productversion FlexJS 0.8
 +               */
-               protected function layoutViewBeforeContentLayout():void
++              public function beforeLayout():void
 +              {
 +                      // This has no use for Group but is here so a subclass 
can override it.
 +              }
 +
 +              /**
 +               * Executes the layout associated with this container. Once the 
layout has been
 +               * run, it may affect the size of the host or may cause the 
host to present scroll
 +               * bars view its viewport.
 +               *
 +               *  @langversion 3.0
 +               *  @playerversion Flash 10.2
 +               *  @playerversion AIR 2.6
 +               *  @productversion FlexJS 0.8
 +               */
 +              protected function performLayout(event:Event):void
 +              {
-                       if (layoutRunning) return;
- 
-                       layoutRunning = true;
-                       
-                       // pre-process before layout
-                       layoutViewBeforeContentLayout();
- 
-                       var host:UIBase = _strand as UIBase;
- 
-                       var layout:IBeadLayout = 
_strand.getBeadByType(IBeadLayout) as IBeadLayout;
-                       if (layout == null) {
-                               var c:Class = 
ValuesManager.valuesImpl.getValue(host, "iBeadLayout");
-                               if (c) {
-                                       layout = new c() as IBeadLayout;
-                                       _strand.addBead(layout);
-                               }
-                       }
- 
-                       if (layout) {
-                               layout.layout();
-                       }
- 
-                       // cleanup or adjust after layout
-                       layoutViewAfterContentLayout();
- 
-                       layoutRunning = false;
-                       
-                       host.dispatchEvent(new Event("layoutComplete"));
++                      trace("CALLING performLayout !!!!");
 +              }
 +
 +              /**
 +               * Returns the size of the content area including the padding.
 +               *
 +               *  @langversion 3.0
 +               *  @playerversion Flash 10.2
 +               *  @playerversion AIR 2.6
 +               *  @productversion FlexJS 0.0
 +               */
 +              COMPILE::SWF
 +              protected function calculateContentSize():Size
 +              {
 +                      var maxWidth:Number = 0;
 +                      var maxHeight:Number = 0;
 +                      var num:Number = contentView.numElements;
 +
 +                      for (var i:int=0; i < num; i++) {
 +                              var child:IUIBase = contentView.getElementAt(i) 
as IUIBase;
 +                              if (child == null || !child.visible) continue;
 +                              var childXMax:Number = child.x + child.width;
 +                              var childYMax:Number = child.y + child.height;
 +                              maxWidth = Math.max(maxWidth, childXMax);
 +                              maxHeight = Math.max(maxHeight, childYMax);
 +                      }
 +
 +                      var padding:org.apache.flex.geom.Rectangle = 
CSSContainerUtils.getPaddingMetrics(this._strand);
 +                      var border:org.apache.flex.geom.Rectangle = 
CSSContainerUtils.getBorderMetrics(this._strand);
 +
 +                      // return the content size as the max plus right/bottom 
padding. the x,y position of
 +                      // each child is already offset by the left/top padding 
by the layout algorithm.
 +                      return new Size(maxWidth + padding.right - 
(border.left+border.right), maxHeight + padding.bottom - 
(border.top+border.bottom));
 +              }
 +
 +              /**
-                * @private
-                */
-               private var adjusting:Boolean = false;
- 
-               /**
 +               * Adjusts the size of the host after the layout has been run.
 +               *
 +               *  @langversion 3.0
 +               *  @playerversion Flash 10.2
 +               *  @playerversion AIR 2.6
 +               *  @productversion FlexJS 0.0
 +               */
 +              COMPILE::SWF
-               protected function layoutViewAfterContentLayout():void
++              public function afterLayout():void
 +              {
-                       if (adjusting) return;
- 
 +                      var host:UIBase = _strand as UIBase;
- 
-                       adjusting = true;
- 
 +                      var contentSize:Size = calculateContentSize();
 +
 +                      if (host.isWidthSizedToContent() && 
host.isHeightSizedToContent()) {
 +                              host.setWidthAndHeight(contentSize.width, 
contentSize.height, true);
 +                      }
 +                      else if (!host.isWidthSizedToContent() && 
host.isHeightSizedToContent())
 +                      {
 +                              host.setHeight(contentSize.height, true);
 +                      }
 +                      else if (host.isWidthSizedToContent() && 
!host.isHeightSizedToContent())
 +                      {
 +                              host.setWidth(contentSize.width, true);
 +                      }
- 
-                       adjusting = false;
 +              }
 +              
 +              COMPILE::JS
-               protected function layoutViewAfterContentLayout():void
++              public function afterLayout():void
 +              {
 +                      // maybe useful in a subclass on the JS side.
 +              }
 +
 +              /**
 +               * @private
 +               */
 +              COMPILE::SWF
 +              protected function displayBackgroundAndBorder(host:UIBase) : 
void
 +              {
 +                      var backgroundColor:Object = 
ValuesManager.valuesImpl.getValue(host, "background-color");
 +                      var backgroundImage:Object = 
ValuesManager.valuesImpl.getValue(host, "background-image");
 +                      if (backgroundColor != null || backgroundImage != null)
 +                      {
 +                              if (host.getBeadByType(IBackgroundBead) == null)
 +                                      var c:Class = 
ValuesManager.valuesImpl.getValue(host, "iBackgroundBead");
 +                              if (c) {
 +                                      host.addBead( new c() as IBead );
 +                              }
 +                      }
- 
++                      
++                      if (setupForBorder(host, "border")) return;
++                      if (setupForBorder(host, "border-top")) return;
++                      if (setupForBorder(host, "border-bottom")) return;
++                      if (setupForBorder(host, "border-left")) return;
++                      if (setupForBorder(host, "border-right")) return;
++              }
++              
++              COMPILE::SWF
++              protected function setupForBorder(host:UIBase, 
borderType:String):Boolean
++              {
++                      var result:Boolean = false;
++                      
 +                      var borderStyle:String;
-                       var borderStyles:Object = 
ValuesManager.valuesImpl.getValue(host, "border");
++                      var borderStyles:Object = 
ValuesManager.valuesImpl.getValue(host, borderType);
 +                      if (borderStyles is Array)
 +                      {
 +                              borderStyle = borderStyles[1];
 +                      }
 +                      if (borderStyle == null)
 +                      {
-                               borderStyle = 
ValuesManager.valuesImpl.getValue(host, "border-style") as String;
++                              borderStyle = 
ValuesManager.valuesImpl.getValue(host, borderType+"-style") as String;
 +                      }
 +                      if (borderStyle != null && borderStyle != "none")
 +                      {
 +                              if (host.getBeadByType(IBorderBead) == null) {
-                                       c = 
ValuesManager.valuesImpl.getValue(host, "iBorderBead");
++                                      var c:Class = 
ValuesManager.valuesImpl.getValue(host, "iBorderBead");
 +                                      if (c) {
 +                                              host.addBead( new c() as IBead 
);
++                                              result = true;
 +                                      }
 +                              }
 +                      }
++                      
++                      return result;
 +              }
 +      }
 +}

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/1691921e/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/beads/layouts/ButtonBarLayout.as
----------------------------------------------------------------------
diff --cc 
frameworks/projects/Basic/src/main/flex/org/apache/flex/html/beads/layouts/ButtonBarLayout.as
index 761e1c7,5bd1159..51d0c4c
--- 
a/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/beads/layouts/ButtonBarLayout.as
+++ 
b/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/beads/layouts/ButtonBarLayout.as
@@@ -17,36 -17,30 +17,21 @@@
  //
  
////////////////////////////////////////////////////////////////////////////////
  package org.apache.flex.html.beads.layouts
 -{     
 +{
        import org.apache.flex.core.IBeadLayout;
 -      import org.apache.flex.core.IItemRendererClassFactory;
 -      import org.apache.flex.core.IItemRendererParent;
--      import org.apache.flex.core.ILayoutHost;
-       import org.apache.flex.core.ILayoutParent;
 -      import org.apache.flex.core.IParentIUIBase;
 -      import org.apache.flex.core.ISelectableItemRenderer;
 -      import org.apache.flex.core.ISelectionModel;
++      import org.apache.flex.core.ILayoutChild;
 +      import org.apache.flex.core.ILayoutView;
-       import org.apache.flex.core.IParentIUIBase;
-       import org.apache.flex.core.ISelectableItemRenderer;
-       import org.apache.flex.core.ISelectionModel;
++      import org.apache.flex.core.IStyleableObject;
        import org.apache.flex.core.IStrand;
--      import org.apache.flex.core.IUIBase;
--      import org.apache.flex.core.IViewportModel;
-       import org.apache.flex.core.LayoutBase;
-       import org.apache.flex.core.SimpleCSSStyles;
--      import org.apache.flex.core.UIBase;
--      import org.apache.flex.core.ValuesManager;
--      import org.apache.flex.events.Event;
--      import org.apache.flex.events.IEventDispatcher;
--      import org.apache.flex.html.List;
--      import org.apache.flex.html.beads.ButtonBarView;
 -      
 +      import org.apache.flex.html.beads.models.ButtonBarModel;
-       import org.apache.flex.geom.Rectangle;
-       import org.apache.flex.utils.CSSUtils;
-       import org.apache.flex.utils.CSSContainerUtils;
++      import org.apache.flex.html.supportClasses.UIItemRendererBase;
 +
        /**
-        *  The ButtonBarLayout class bead sizes and positions the 
org.apache.flex.html.Button
 -       *  The ButtonBarLayout class bead sizes and positions the 
org.apache.flex.html.Button 
 -       *  elements that make up a org.apache.flex.html.ButtonBar. This bead 
arranges the Buttons 
++       *  The ButtonBarLayout class bead sizes and positions the button
 +       *  elements that make up a org.apache.flex.html.ButtonBar. This bead 
arranges the Buttons
         *  horizontally and makes them all the same width unless the 
buttonWidths property has been set in which case
         *  the values stored in that array are used.
 -       *  
 +       *
         *  @langversion 3.0
         *  @playerversion Flash 10.2
         *  @playerversion AIR 2.6
@@@ -91,81 -98,46 +76,71 @@@
                /**
                 * @copy org.apache.flex.core.IBeadLayout#layout
                 */
 -              public function layout():Boolean
 +              override public function layout():Boolean
                {
 -                      var layoutParent:ILayoutHost = 
_strand.getBeadByType(ILayoutHost) as ILayoutHost;
 -                      var contentView:IParentIUIBase = 
layoutParent.contentView as IParentIUIBase;
 -                      var itemRendererParent:IItemRendererParent = 
contentView as IItemRendererParent;
 -                      var viewportModel:IViewportModel = (layoutParent as 
ButtonBarView).viewportModel;
 -                      
 -                      var n:int = contentView.numElements;
 -                      var realN:int = n;
 -                      
 -                      for (var j:int=0; j < n; j++)
 -                      {
 -                              var child:IUIBase = 
itemRendererParent.getElementAt(j) as IUIBase;
 -                              if (child == null || !child.visible) realN--;
 +                      var contentView:ILayoutView = layoutView;
 +
 +                      var model:ButtonBarModel = (host as 
IStrand).getBeadByType(ButtonBarModel) as ButtonBarModel;
 +                      if (model) {
 +                              buttonWidths = model.buttonWidths;
 +                              _widthType = model.widthType;
                        }
 -                      
 -                      var xpos:Number = 0;
 -                      var useWidth:Number = contentView.width / realN;
 -                      var useHeight:Number = contentView.height;
 -                      
 +
 +                      var n:int = contentView.numElements;
++                      if (n <= 0) return false;
 +
                        for (var i:int=0; i < n; i++)
--                      {
-                               var ir:ISelectableItemRenderer = 
contentView.getElementAt(i) as ISelectableItemRenderer;
 -                              var ir:ISelectableItemRenderer = 
itemRendererParent.getElementAt(i) as ISelectableItemRenderer;
--                              if (ir == null || !UIBase(ir).visible) continue;
 -                              UIBase(ir).y = 0;
 -                              UIBase(ir).x = xpos;
 -                              if (!isNaN(useHeight) && useHeight > 0) {
 -                                      UIBase(ir).height = useHeight;
 -                              }
++                      {       
++                              var ilc:ILayoutChild = 
contentView.getElementAt(i) as ILayoutChild;
++                              if (ilc == null || !ilc.visible) continue;
++                              if (!(ilc is IStyleableObject)) continue;
                                
 -                              if (buttonWidths) UIBase(ir).width = 
Number(buttonWidths[i]);
 -                              else if (!isNaN(useWidth) && useWidth > 0) {
 -                                      UIBase(ir).width = useWidth;
 +                              COMPILE::SWF {
 +                                      if (buttonWidths) {
 +                                              var widthValue:* = 
buttonWidths[i];
 +
 +                                              if (_widthType == 
ButtonBarModel.PIXEL_WIDTHS) {
-                                                       if (widthValue != null) 
UIBase(ir).width = Number(widthValue);
-                                                       if (UIBase(ir).style == 
null) {
-                                                               
UIBase(ir).style = new SimpleCSSStyles();
-                                                       }
-                                                       
UIBase(ir).style.flexGrow = 0;
++                                                      if (widthValue != null) 
ilc.width = Number(widthValue);
++                                                      
IStyleableObject(ilc).style.flexGrow = 0;
 +                                              }
 +                                              else if (_widthType == 
ButtonBarModel.PROPORTIONAL_WIDTHS) {
 +                                                      if (widthValue != null) 
{
-                                                               if 
(UIBase(ir).style == null) {
-                                                                       
UIBase(ir).style = new SimpleCSSStyles();
-                                                               }
-                                                               
UIBase(ir).style.flexGrow = Number(widthValue);
++                                                              
IStyleableObject(ilc).style.flexGrow = Number(widthValue);
 +                                                      }
 +                                              }
 +                                              else if (_widthType == 
ButtonBarModel.PERCENT_WIDTHS) {
-                                                       if (widthValue != null) 
UIBase(ir).percentWidth = Number(widthValue);
-                                                       if (UIBase(ir).style == 
null) {
-                                                               
UIBase(ir).style = new SimpleCSSStyles();
-                                                       }
-                                                       
UIBase(ir).style.flexGrow = 0;
++                                                      if (widthValue != null) 
ilc.percentWidth = Number(widthValue);
++                                                      
IStyleableObject(ilc).style.flexGrow = 0;
 +                                              }
 +                                      } else {
-                                               if (UIBase(ir).style == null) {
-                                                       UIBase(ir).style = new 
SimpleCSSStyles();
-                                               }
-                                               UIBase(ir).style.flexGrow = 1;
++                                              
IStyleableObject(ilc).style.flexGrow = 1;
 +                                      }
 +                              }
 +
 +                              COMPILE::JS {
 +                                      // otherwise let the flexbox layout 
handle matters on its own.
 +                                      if (buttonWidths) {
 +                                              var widthValue:* = 
buttonWidths[i];
 +
 +                                              if (_widthType == 
ButtonBarModel.PIXEL_WIDTHS) {
-                                                       if (widthValue != null) 
UIBase(ir).width = Number(widthValue);
++                                                      if (widthValue != null) 
ilc.width = Number(widthValue);
 +                                              }
 +                                              else if (_widthType == 
ButtonBarModel.PROPORTIONAL_WIDTHS) {
-                                                       if (widthValue != null) 
UIBase(ir).element.style["flex-grow"] = String(widthValue);
++                                                      if (widthValue != null) 
ilc.element.style["flex-grow"] = String(widthValue);
 +                                              }
 +                                              else if (_widthType == 
ButtonBarModel.PERCENT_WIDTHS) {
-                                                       if (widthValue != null) 
UIBase(ir).percentWidth = Number(widthValue);
++                                                      if (widthValue != null) 
ilc.percentWidth = Number(widthValue);
 +                                              }
 +                                      } else {
-                                               
UIBase(ir).element.style["flex-grow"] = "1";
++                                              ilc.element.style["flex-grow"] 
= "1";
 +                                      }
 +                                      
-                                       UIBase(ir).height = contentView.height;
++                                      ilc.height = contentView.height;
                                }
 -                              xpos += UIBase(ir).width;
                        }
 -                      
 -                      IEventDispatcher(_strand).dispatchEvent( new 
Event("layoutComplete") );
 -                      
 -            return true;
 +
 +                      // now let the horizontal layout take care of things.
 +                      return super.layout();
                }
        }
  }

Reply via email to