http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/9fd9b78b/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/beads/layouts/VerticalFlexLayout.as
----------------------------------------------------------------------
diff --cc 
frameworks/projects/Basic/src/main/flex/org/apache/flex/html/beads/layouts/VerticalFlexLayout.as
index 0000000,0000000..f495acc
new file mode 100644
--- /dev/null
+++ 
b/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/beads/layouts/VerticalFlexLayout.as
@@@ -1,0 -1,0 +1,260 @@@
++////////////////////////////////////////////////////////////////////////////////
++//
++//  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.layouts
++{
++      //import org.apache.flex.html.beads.layouts.VerticalLayout;
++
++      import org.apache.flex.core.LayoutBase;
++      import org.apache.flex.core.ILayoutChild;
++      import org.apache.flex.core.ILayoutHost;
++      import org.apache.flex.core.ILayoutView;
++      import org.apache.flex.core.ILayoutParent;
++      import org.apache.flex.core.IStrand;
++      import org.apache.flex.core.UIBase;
++      import org.apache.flex.core.IParentIUIBase;
++
++      COMPILE::SWF {
++              import org.apache.flex.core.IUIBase;
++              import org.apache.flex.core.ValuesManager;
++              import org.apache.flex.events.Event;
++              import org.apache.flex.events.IEventDispatcher;
++              import org.apache.flex.geom.Rectangle;
++              import org.apache.flex.utils.CSSUtils;
++              import org.apache.flex.utils.CSSContainerUtils;
++      }
++
++      public class VerticalFlexLayout extends LayoutBase
++      {
++              /**
++               * Constructor.
++               *
++               *  @langversion 3.0
++               *  @playerversion Flash 10.2
++               *  @playerversion AIR 2.6
++               *  @productversion FlexJS 0.8
++               */
++              public function VerticalFlexLayout()
++              {
++                      super();
++              }
++
++              private var _grow:Number = -1;
++
++              /**
++               * Sets the amount items grow in proportion to other items.
++               * The default is 0 which prevents the items from expanding to
++               * fit the space. Use a negative value to unset this property.
++               *
++               *  @langversion 3.0
++               *  @playerversion Flash 10.2
++               *  @playerversion AIR 2.6
++               *  @productversion FlexJS 0.8
++               */
++              public function get grow():Number {
++                      return _grow;
++              }
++              public function set grow(value:Number):void {
++                      _grow = value;
++              }
++
++              private var _shrink:Number = -1;
++
++              /**
++               * Sets the amount an item may shrink in proportion to other 
items.
++               * The default is 1 which allows items to shrink to fit into 
the space.
++               * Set this to 0 if you want to allow scrolling of the space. 
Use a negative
++               * value to unset this property.
++               *
++               *  @langversion 3.0
++               *  @playerversion Flash 10.2
++               *  @playerversion AIR 2.6
++               *  @productversion FlexJS 0.8
++               */
++              public function get shrink():Number {
++                      return _shrink;
++              }
++              public function set shrink(value:Number):void {
++                      _shrink = value;
++              }
++
++              /**
++               *
++               *  @flexjsignorecoercion org.apache.flex.core.ILayoutHost
++               *
++               *  @langversion 3.0
++               *  @playerversion Flash 10.2
++               *  @playerversion AIR 2.6
++               *  @productversion FlexJS 0.8
++               */
++              override public function layout():Boolean
++              {
++                      COMPILE::SWF {
++                              var contentView:ILayoutView = layoutView;
++
++                              var n:Number = contentView.numElements;
++                              if (n == 0) return false;
++
++                              var spacing:String = "none";
++
++                              var maxWidth:Number = 0;
++                              var maxHeight:Number = 0;
++                              var growCount:Number = 0;
++                              var childData:Array = [];
++                              var hostWidthSizedToContent:Boolean = 
host.isWidthSizedToContent();
++                              var hostHeightSizedToContent:Boolean = 
host.isHeightSizedToContent();
++                              var hostWidth:Number = hostWidthSizedToContent 
? host.width : contentView.width;
++                              var hostHeight:Number = 
hostHeightSizedToContent ? host.height : contentView.height;
++
++                              var ilc:ILayoutChild;
++                              var data:Object;
++                              var canAdjust:Boolean = false;
++                              
++                              var paddingMetrics:Rectangle = 
CSSContainerUtils.getPaddingMetrics(host);
++                              var borderMetrics:Rectangle = 
CSSContainerUtils.getBorderMetrics(host);
++                              
++                              // adjust the host's usable size by the 
metrics. If hostSizedToContent, then the
++                              // resulting adjusted value may be less than 
zero.
++                              hostWidth -= paddingMetrics.left + 
paddingMetrics.right + borderMetrics.left + borderMetrics.right;
++                              hostHeight -= paddingMetrics.top + 
paddingMetrics.bottom + borderMetrics.top + borderMetrics.bottom;
++                              
++                              var remainingHeight:Number = hostHeight;
++
++                              //trace("VerticalFlexLayout for 
"+UIBase(host).id+" with remainingHeight: "+remainingHeight);
++
++                              // First pass determines the data about the 
child.
++                              for(var i:int=0; i < n; i++)
++                              {
++                                      var child:IUIBase = 
contentView.getElementAt(i) as IUIBase;
++                                      if (child == null || !child.visible) {
++                                              childData.push({width:0, 
height:0, mt:0, ml:0, mr:0, mb:0, grow:0, canAdjust:false});
++                                              continue;
++                                      }
++
++                                      ilc = child as ILayoutChild;
++                                      
++                                      var margins:Object = 
childMargins(child, hostWidth, hostHeight);
++
++                                      var flexGrow:Object = 
ValuesManager.valuesImpl.getValue(child, "flex-grow");
++                                      var growValue:Number = 0;
++                                      if (flexGrow != null) {
++                                              growValue = Number(flexGrow);
++                                              if (!isNaN(growValue) && 
growValue > 0) growCount++;
++                                              else growValue = 0;
++                                      }
++
++                                      var useWidth:Number = -1;
++                                      if (!hostWidthSizedToContent) {
++                                              if (ilc) {
++                                                      if 
(!isNaN(ilc.percentWidth)) useWidth = hostWidth * (ilc.percentWidth/100.0);
++                                                      else if 
(!isNaN(ilc.explicitWidth)) useWidth = ilc.explicitWidth;
++                                                      else useWidth = 
hostWidth;
++                                              }
++                                      }
++
++                                      var useHeight:Number = -1;
++                                      if (ilc) {
++                                              if (!isNaN(ilc.explicitHeight)) 
useHeight = ilc.explicitHeight;
++                                              else if 
(!isNaN(ilc.percentHeight)) useHeight = hostHeight * (ilc.percentHeight/100.0);
++                                              else if (ilc.height > 0) 
useHeight = ilc.height;
++                                      }
++                                      if (growValue == 0 && useHeight > 0) 
remainingHeight -= useHeight + margins.top + margins.bottom;
++                                      else remainingHeight -= margins.top + 
margins.bottom;
++
++                                      if (maxWidth < useWidth) maxWidth = 
useWidth;
++                                      if (maxHeight < useHeight) maxHeight = 
useHeight;
++
++                                      childData.push({width:useWidth, 
height:useHeight, 
++                                                          mt:margins.top, 
ml:margins.left, mr:margins.right, mb:margins.bottom, 
++                                                                      
grow:growValue, canAdjust:canAdjust});
++                              }
++
++                              var xpos:Number = borderMetrics.left + 
paddingMetrics.left;
++                              var ypos:Number = borderMetrics.top + 
paddingMetrics.top;
++
++                              // Second pass sizes and positions the children 
based on the data gathered.
++                              for(i=0; i < n; i++)
++                              {
++                                      child = contentView.getElementAt(i) as 
IUIBase;
++                                      data = childData[i];
++
++                                      useWidth = (data.width < 0 ? hostWidth 
: data.width);
++
++                                      var setHeight:Boolean = true;
++                                      if (data.height != 0) {
++                                              if (data.grow > 0 && growCount 
> 0) {
++                                                      useHeight = 
remainingHeight / growCount;
++                                                      setHeight = false;
++                                              } else {
++                                                      useHeight = data.height;
++                                              }
++                                      } else {
++                                              useHeight = child.height;
++                                      }
++
++                                      ilc = child as ILayoutChild;
++                                      if (ilc) {
++                                              ilc.setX(xpos + data.ml);
++                                              ilc.setY(ypos + data.mt);
++                                              if (data.width > 0) {
++                                                      //ilc.width = useWidth;
++                                                      ilc.setWidth(useWidth);
++                                              }
++                                              if (useHeight > 0) {
++                                                      if (setHeight) 
ilc.setHeight(useHeight);
++                                                      else ilc.height = 
useHeight;
++                                              }
++                                      } else {
++                                              child.x = xpos + data.ml;
++                                              child.y = ypos + data.mt;
++                                              child.width = useWidth;
++                                              if (useHeight > 0) {
++                                                      child.height = 
useHeight;
++                                              }
++                                      }
++
++                                      ypos += useHeight + data.mt + data.mb;
++
++                                      //trace("VerticalFlexLayout: setting 
child "+i+" to "+child.width+" x "+child.height+" at "+child.x+", "+child.y);
++                              }
++
++                              //trace("VerticalFlexLayout: complete");
++
++                              return true;
++                      }
++
++                      COMPILE::JS {
++                              var contentView:ILayoutView = layoutView;
++
++                              contentView.element.style["display"] = "flex";
++                              contentView.element.style["flex-flow"] = 
"column";
++
++                              var n:int = contentView.numElements;
++                              if (n == 0) return false;
++
++                              for(var i:int=0; i < n; i++) {
++                                      var child:UIBase = 
contentView.getElementAt(i) as UIBase;
++                                      if (grow >= 0) 
child.element.style["flex-grow"] = String(grow);
++                                      if (shrink >= 0) 
child.element.style["flex-shrink"] = String(shrink);
++                              }
++
++                              return true;
++                      }
++              }
++      }
++}

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/9fd9b78b/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/beads/layouts/VerticalLayout.as
----------------------------------------------------------------------
diff --cc 
frameworks/projects/Basic/src/main/flex/org/apache/flex/html/beads/layouts/VerticalLayout.as
index 857a458,dd02989..a8b9774
--- 
a/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/beads/layouts/VerticalLayout.as
+++ 
b/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/beads/layouts/VerticalLayout.as
@@@ -18,41 -18,40 +18,44 @@@
  
////////////////////////////////////////////////////////////////////////////////
  package org.apache.flex.html.beads.layouts
  {
++      import org.apache.flex.core.LayoutBase;
++      
        import org.apache.flex.core.IBeadLayout;
        import org.apache.flex.core.IBeadModel;
        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.ILayoutParent;
        import org.apache.flex.core.IParentIUIBase;
        import org.apache.flex.core.IStrand;
        import org.apache.flex.core.IUIBase;
        import org.apache.flex.core.ValuesManager;
        COMPILE::JS
        {
--              import org.apache.flex.core.WrappedHTMLElement;                 
++              import org.apache.flex.core.WrappedHTMLElement;
        }
        import org.apache.flex.events.Event;
        import org.apache.flex.events.IEventDispatcher;
        import org.apache.flex.geom.Rectangle;
        import org.apache.flex.utils.CSSContainerUtils;
        import org.apache.flex.utils.CSSUtils;
--      
++
        /**
         *  The VerticalLayout class is a simple layout
         *  bead.  It takes the set of children and lays them out
         *  vertically in one column, separating them according to
         *  CSS layout rules for margin and horizontal-align styles.
--       *  
++       *
         *  @langversion 3.0
         *  @playerversion Flash 10.2
         *  @playerversion AIR 2.6
         *  @productversion FlexJS 0.0
         */
--      public class VerticalLayout implements IBeadLayout
++      public class VerticalLayout extends LayoutBase implements IBeadLayout
        {
                /**
                 *  Constructor.
--               *  
++               *
                 *  @langversion 3.0
                 *  @playerversion Flash 10.2
                 *  @playerversion AIR 2.6
@@@ -60,304 -59,304 +63,123 @@@
                 */
                public function VerticalLayout()
                {
++                      super();
                }
--              
--              // the strand/host container is also an ILayoutChild because
--              // can have its size dictated by the host's parent which is
--              // important to know for layout optimization
--              private var host:ILayoutChild;
--              
--              /**
--               *  @copy org.apache.flex.core.IBead#strand
--               *  
--               *  @langversion 3.0
--               *  @playerversion Flash 10.2
--               *  @playerversion AIR 2.6
--               *  @productversion FlexJS 0.0
--               */
--              public function set strand(value:IStrand):void
--              {
--                      host = value as ILayoutChild; 
--              }
--              
++
                /**
                 *  Layout children vertically
--               *  
++               *
                 *  @langversion 3.0
                 *  @playerversion Flash 10.2
                 *  @playerversion AIR 2.6
                 *  @productversion FlexJS 0.0
                 *  @flexjsignorecoercion org.apache.flex.core.ILayoutHost
                 */
--              public function layout():Boolean
++              override public function layout():Boolean
                {
                        COMPILE::SWF
                        {
-                 var layoutParent:ILayoutHost = (host as 
ILayoutParent).getLayoutHost();
 -                              var layoutParent:ILayoutHost = 
host.getBeadByType(ILayoutHost) as ILayoutHost;
--                              var contentView:IParentIUIBase = layoutParent ? 
layoutParent.contentView : IParentIUIBase(host);
--                              var padding:Rectangle = 
CSSContainerUtils.getPaddingMetrics(host);
--                              
--                              var n:int = contentView.numElements;
--                              var hasHorizontalFlex:Boolean;
--                              var hostSizedToContent:Boolean = 
host.isWidthSizedToContent();
--                              var flexibleHorizontalMargins:Array = [];
--                              var ilc:ILayoutChild;
--                              var marginLeft:Object;
--                              var marginRight:Object;
--                              var marginTop:Object;
--                              var marginBottom:Object;
--                              var margin:Object;
++                              var contentView:ILayoutView = layoutView;
++
++                              var n:Number = contentView.numElements;
++                              if (n == 0) return false;
++
                                var maxWidth:Number = 0;
--                              var cssValue:*;
--                              // asking for contentView.width can result in 
infinite loop if host isn't sized already
--                              var w:Number = hostSizedToContent ? 0 : 
contentView.width;
--                              var h:Number = contentView.height;
++                              var maxHeight:Number = 0;
++                              var hostWidthSizedToContent:Boolean = 
host.isWidthSizedToContent();
++                              var hostHeightSizedToContent:Boolean = 
host.isHeightSizedToContent();
++                              var hostWidth:Number = hostWidthSizedToContent 
? 0 : contentView.width;
++                              var hostHeight:Number = 
hostHeightSizedToContent ? 0 : contentView.height;
++
++                              var ilc:ILayoutChild;
++                              var data:Object;
++                              var canAdjust:Boolean = false;
++
++                              var paddingMetrics:Rectangle = 
CSSContainerUtils.getPaddingMetrics(host);
++                              var borderMetrics:Rectangle = 
CSSContainerUtils.getBorderMetrics(host);
                                
--                              for (var i:int = 0; i < n; i++)
++                              // adjust the host's usable size by the 
metrics. If hostSizedToContent, then the
++                              // resulting adjusted value may be less than 
zero.
++                              hostWidth -= paddingMetrics.left + 
paddingMetrics.right + borderMetrics.left + borderMetrics.right;
++                              hostHeight -= paddingMetrics.top + 
paddingMetrics.bottom + borderMetrics.top + borderMetrics.bottom;
++
++                              var xpos:Number = borderMetrics.left + 
paddingMetrics.left;
++                              var ypos:Number = borderMetrics.top + 
paddingMetrics.left;
++
++                              // First pass determines the data about the 
child.
++                              for(var i:int=0; i < n; i++)
                                {
                                        var child:IUIBase = 
contentView.getElementAt(i) as IUIBase;
                                        if (child == null || !child.visible) 
continue;
++                                      var positions:Object = 
childPositions(child);
++                                      var margins:Object = 
childMargins(child, hostWidth, hostHeight);
++
                                        ilc = child as ILayoutChild;
--                                      var left:Number = NaN;
--                                      cssValue = 
ValuesManager.valuesImpl.getValue(child, "left");
--                                      if (cssValue !== undefined)
--                                              left = 
CSSUtils.toNumber(cssValue);
--                                      var right:Number = NaN;
--                                      cssValue = 
ValuesManager.valuesImpl.getValue(child, "right");
--                                      if (cssValue !== undefined)
--                                              right = 
CSSUtils.toNumber(cssValue);
--                                      margin = 
ValuesManager.valuesImpl.getValue(child, "margin");
--                                      marginLeft = 
ValuesManager.valuesImpl.getValue(child, "margin-left");
--                                      marginTop = 
ValuesManager.valuesImpl.getValue(child, "margin-top");
--                                      marginRight = 
ValuesManager.valuesImpl.getValue(child, "margin-right");
--                                      marginBottom = 
ValuesManager.valuesImpl.getValue(child, "margin-bottom");
--                                      var ml:Number = 
CSSUtils.getLeftValue(marginLeft, margin, w);
--                                      var mr:Number = 
CSSUtils.getRightValue(marginRight, margin, w);
--                                      var mt:Number = 
CSSUtils.getTopValue(marginTop, margin, h);
--                                      var mb:Number = 
CSSUtils.getBottomValue(marginBottom, margin, h);
--                                      var lastmb:Number;
--                                      var yy:Number;
--                                      if (i == 0)
--                                      {
--                                              if (ilc)
--                                                      ilc.setY(mt + 
padding.top);
--                                              else
--                                                      child.y = mt + 
padding.top;
--                                      }
--                                      else
--                                      {
--                                              if (ilc)
--                                                      ilc.setY(yy + 
Math.max(mt, lastmb));
--                                              else
--                                                      child.y = yy + 
Math.max(mt, lastmb);
--                                      }
--                                      if (ilc)
--                                      {
--                                              if (!isNaN(ilc.percentHeight))
--                                                      
ilc.setHeight(contentView.height * ilc.percentHeight / 100, 
!isNaN(ilc.percentWidth));
--                                      }
--                                      lastmb = mb;
--                                      var marginObject:Object = {};
--                                      flexibleHorizontalMargins[i] = 
marginObject;
--                                      if (marginLeft == "auto")
--                                      {
--                                              ml = 0;
--                                              marginObject.marginLeft = 
marginLeft;
--                                              hasHorizontalFlex = true;
--                                      }
--                                      else
--                                      {
--                                              ml = Number(marginLeft);
--                                              if (isNaN(ml))
--                                              {
--                                                      ml = 0;
--                                                      marginObject.marginLeft 
= marginLeft;
--                                              }
--                                              else
--                                                      marginObject.marginLeft 
= ml;
--                                      }
--                                      if (marginRight == "auto")
--                                      {
--                                              mr = 0;
--                                              marginObject.marginRight = 
marginRight;
--                                              hasHorizontalFlex = true;
--                                      }
--                                      else
--                                      {
--                                              mr = Number(marginRight);
--                                              if (isNaN(mr))
--                                              {
--                                                      mr = 0;
--                                                      
marginObject.marginRight = marginRight;
--                                              }
--                                              else
--                                                      
marginObject.marginRight = mr;
--                                      }
--                                      if (!hostSizedToContent)
--                                      {
--                                              // if host is sized by parent,
--                                              // we can position and size 
children horizontally now
--                                              setPositionAndWidth(child, 
left, ml, padding.left, 
--                                                      right, mr, 
padding.right, w);
--                                      }
--                                      else
--                                      {
--                                              if (!isNaN(left))
--                                              {
--                                                      ml = left;
--                                                      marginObject.left = ml;
--                                              }
--                                              if (!isNaN(right))
--                                              {
--                                                      mr = right;
--                                                      marginObject.right = mr;
++
++                                      ypos += margins.top;
++
++                                      var childXpos:Number = xpos + 
margins.left; // default x position
++
++                                      if (!hostWidthSizedToContent) {
++                                              var childWidth:Number = 
child.width;
++                                              if (ilc != null && 
!isNaN(ilc.percentWidth)) {
++                                                      childWidth = hostWidth 
* ilc.percentWidth/100.0;
++                                                      
ilc.setWidth(childWidth);
                                                }
--                                              maxWidth = Math.max(maxWidth, 
ml + child.width + mr);                    
++                                              // the following code 
center-aligns the child, but since HTML does not
++                                              // do this normally, this code 
is commented. (Use VerticalFlexLayout for
++                                              // horizontally centered 
elements in a vertical column).
++                                              //                              
        childXpos = hostWidth/2 - (childWidth + ml + mr)/2;
                                        }
--                                      yy = child.y + child.height;
--                              }
--                              if (hostSizedToContent)
--                              {
--                                      for (i = 0; i < n; i++)
--                                      {
--                                              child = 
contentView.getElementAt(i) as IUIBase;
--                                              if (child == null || 
!child.visible) continue;
--                                              var obj:Object = 
flexibleHorizontalMargins[i];
--                                              setPositionAndWidth(child, 
obj.left, obj.marginLeft, padding.left,
--                                                      obj.right, 
obj.marginRight, padding.right, maxWidth);
--                                      }
--                              }
--                              if (hasHorizontalFlex)
--                              {
--                                      for (i = 0; i < n; i++)
--                                      {
--                                              child = 
contentView.getElementAt(i) as IUIBase;
--                                              if (child == null || 
!child.visible) continue;
--                                              ilc = child as ILayoutChild;
--                                              obj = 
flexibleHorizontalMargins[i];
--                                              if (hasHorizontalFlex)
--                                              {
--                                                      if (ilc)
--                                                      {
--                                                              if 
(obj.marginLeft == "auto" && obj.marginRight == "auto")
--                                                                      
ilc.setX(maxWidth - child.width / 2);
--                                                              else if 
(obj.marginLeft == "auto")
--                                                                      
ilc.setX(maxWidth - child.width - obj.marginRight - padding.right);             
               
--                                                      }
--                                                      else
--                                                      {
--                                                              if 
(obj.marginLeft == "auto" && obj.marginRight == "auto")
--                                                                      child.x 
= maxWidth - child.width / 2;
--                                                              else if 
(obj.marginLeft == "auto")
--                                                                      child.x 
= maxWidth - child.width - obj.marginRight - padding.right;
--                                                      }
++
++                                      if (ilc) {
++                                              ilc.setX(childXpos);
++                                              ilc.setY(ypos);
++
++                                              if (!hostHeightSizedToContent 
&& !isNaN(ilc.percentHeight)) {
++                                                      var newHeight:Number = 
hostHeight * ilc.percentHeight / 100;
++                                                      
ilc.setHeight(newHeight);
                                                }
++
++                                      } else {
++                                              child.x = childXpos;
++                                              child.y = ypos;
                                        }
++
++                                      ypos += child.height + margins.bottom;
                                }
--                              
--                              // Only return true if the contentView needs to 
be larger; that new
--                              // size is stored in the model.
--                              var sizeChanged:Boolean = true;
--                              
--                              host.dispatchEvent( new Event("layoutComplete") 
);
--                              
--                              return sizeChanged;
--                              
++
++                              return true;
                        }
                        COMPILE::JS
                        {
                                var children:Array;
                                var i:int;
                                var n:int;
++                              var contentView:IParentIUIBase = layoutView as 
IParentIUIBase;
                                
-                 var viewBead:ILayoutHost = (host as 
ILayoutParent).getLayoutHost()
 -                              var viewBead:ILayoutHost = 
host.getBeadByType(ILayoutHost) as ILayoutHost;
--                              var contentView:IParentIUIBase = 
viewBead.contentView;
                                children = contentView.internalChildren();
--                              var scv:Object = 
getComputedStyle(host.positioner);
--                              var hasWidth:Boolean = 
!host.isWidthSizedToContent();
--                              var maxWidth:Number = 0;
                                n = children.length;
                                for (i = 0; i < n; i++)
                                {
                                        var child:WrappedHTMLElement = 
children[i];
                                        
child.flexjs_wrapper.setDisplayStyleForLayout('block');
--                                      if (child.style.display === 'none') 
++                                      if (child.style.display === 'none')
                                        {
                                                
child.flexjs_wrapper.setDisplayStyleForLayout('block');
--                                      } 
--                                      else 
++                                      }
++                                      else
                                        {
                                                // block elements don't measure 
width correctly so set to inline for a second
                                                child.style.display = 
'inline-block';
--                                              maxWidth = Math.max(maxWidth, 
child.offsetLeft + child.offsetWidth);
                                                child.style.display = 'block';
                                        }
                                        
child.flexjs_wrapper.dispatchEvent('sizeChanged');
                                }
--                              if (!hasWidth && n > 0 && !isNaN(maxWidth)) {
--                                      var pl:String = scv['padding-left'];
--                                      var pr:String = scv['padding-right'];
--                                      var npl:int = parseInt(pl.substring(0, 
pl.length - 2), 10);
--                                      var npr:int = parseInt(pr.substring(0, 
pr.length - 2), 10);
--                                      maxWidth += npl + npr;
--                                      contentView.width = maxWidth;
--                              }
++
                                return true;
                        }
                }
--              
--              COMPILE::SWF
--              private function setPositionAndWidth(child:IUIBase, 
left:Number, ml:Number, pl:Number,
--                                                                              
         right:Number, mr:Number, pr:Number, w:Number):void
--              {
--                      var widthSet:Boolean = false;
--                      
--                      var ww:Number = w;
--                      var ilc:ILayoutChild = child as ILayoutChild;
--                      if (!isNaN(left))
--                      {
--                if (ilc)
--                    ilc.setX(left + ml);
--                else
--                              child.x = left + ml;
--                              ww -= left + ml;
--                      }
--                      else 
--                      {
--                if (ilc)
--                    ilc.setX(ml + pl);
--                else
--                              child.x = ml + pl;
--                              ww -= ml + pl;
--                      }
--                      if (!isNaN(right))
--                      {
--                              if (!isNaN(left))
--                              {
--                                      if (ilc)
--                                              ilc.setWidth(ww - right - mr, 
true);
--                                      else
--                                      {
--                                              child.width = ww - right - mr;
--                                              widthSet = true;
--                                      }
--                              }
--                              else
--                {
--                    if (ilc)
--                        ilc.setX(w - right - mr - child.width);
--                    else
--                                      child.x = w - right - mr - child.width;
--                }
--                      }
--                      if (ilc)
--                      {
--                              if (!isNaN(ilc.percentWidth))
--                                      ilc.setWidth(w * ilc.percentWidth / 
100, true);
--                      }
--                      if (!widthSet)
--                              child.dispatchEvent(new Event("sizeChanged"));
--              }
--              
++
        }
  }

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/9fd9b78b/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/beads/models/ButtonBarModel.as
----------------------------------------------------------------------
diff --cc 
frameworks/projects/Basic/src/main/flex/org/apache/flex/html/beads/models/ButtonBarModel.as
index 0000000,0000000..9eb6a24
new file mode 100644
--- /dev/null
+++ 
b/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/beads/models/ButtonBarModel.as
@@@ -1,0 -1,0 +1,102 @@@
++////////////////////////////////////////////////////////////////////////////////
++//
++//  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.models
++{
++      import org.apache.flex.core.IRollOverModel;
++      import org.apache.flex.core.ISelectionModel;
++      import org.apache.flex.core.IStrand;
++      import org.apache.flex.events.Event;
++      import org.apache.flex.events.EventDispatcher;
++                      
++    /**
++     *  The ArraySelectionModel class is a selection model for
++     *  a dataProvider that is an array. It assumes that items
++     *  can be fetched from the dataProvider
++     *  dataProvider[index].  Other selection models
++     *  would support other kinds of data providers.
++     *  
++     *  @langversion 3.0
++     *  @playerversion Flash 10.2
++     *  @playerversion AIR 2.6
++     *  @productversion FlexJS 0.0
++     */
++      public class ButtonBarModel extends ArraySelectionModel
++      {
++              public static const PIXEL_WIDTHS:Number = 0;
++              public static const PROPORTIONAL_WIDTHS:Number = 1;
++              public static const PERCENT_WIDTHS:Number = 2;
++              
++        /**
++         *  Constructor.
++         *  
++         *  @langversion 3.0
++         *  @playerversion Flash 10.2
++         *  @playerversion AIR 2.6
++         *  @productversion FlexJS 0.0
++         */
++              public function ButtonBarModel()
++              {
++              }
++              
++              private var _buttonWidths:Array = null;
++              
++              /**
++               *  The widths of each button. This property may be null (the 
default) in which
++               *  case the buttons are equally sized. Or this array may 
contain values, one per
++               *  button, which either indicate each button's width in pixels 
(set .widthType
++               *  to ButtonBarModel.PIXEL_WIDTHS) or proportional to other 
buttons (set
++               *  .widthType to ButtonBarModel.PROPORTIONAL_WIDTHS). The 
array can also contain
++               *  specific percentages (set .widthType to 
ButtonBarModel.PERCENT_WIDTHS). If 
++               *  this array is set, the number of entries must match the 
number of buttons. 
++               *  However, any entry may be null to indicate the button's 
default size is to be used.
++               *  
++               *  @langversion 3.0
++               *  @playerversion Flash 10.2
++               *  @playerversion AIR 2.6
++               *  @productversion FlexJS 0.0
++               */
++              public function get buttonWidths():Array
++              {
++                      return _buttonWidths;
++              }
++              public function set buttonWidths(value:Array):void
++              {
++                      _buttonWidths = value;
++                      dispatchEvent(new Event("buttonWidthsChanged"));
++              }
++              
++              private var _widthType:Number = ButtonBarModel.PIXEL_WIDTHS;
++              
++              /**
++               * Indicates how to interpret the values of the buttonWidths 
array.
++               * 
++               * PIXEL_WIDTHS: all of the values are exact pixel widths 
(unless a value is null).
++               * PROPORTIONAL_WIDTHS: all of the values are proportions. Use 
1 to indicate normal, 2 to be 2x, etc. Use 0 (or null) to mean fixed default 
size.
++               */
++              public function get widthType():Number
++              {
++                      return _widthType;
++              }
++              public function set widthType(value:Number):void
++              {
++                      _widthType = value;
++                      dispatchEvent(new Event("widthTypeChanged"));
++              }
++      }
++}

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/9fd9b78b/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/beads/models/NonNullTextModel.as
----------------------------------------------------------------------
diff --cc 
frameworks/projects/Basic/src/main/flex/org/apache/flex/html/beads/models/NonNullTextModel.as
index 0000000,0000000..aefb25f
new file mode 100644
--- /dev/null
+++ 
b/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/beads/models/NonNullTextModel.as
@@@ -1,0 -1,0 +1,125 @@@
++////////////////////////////////////////////////////////////////////////////////
++//
++//  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.models
++{     
++      import org.apache.flex.core.IBead;
++      import org.apache.flex.core.IStrand;
++      import org.apache.flex.core.ITextModel;
++      import org.apache.flex.events.Event;
++      import org.apache.flex.events.EventDispatcher;
++      import org.apache.flex.events.IEventDispatcher;
++              
++    /**
++     *  The TextModel class is most basic data model for a
++     *  component that displays text.  All FlexJS components
++     *  that display text should also support HTML, although
++     *  the Flash Player implementations may only support
++     *  a subset of HTML. 
++     *  
++     *  @langversion 3.0
++     *  @playerversion Flash 10.2
++     *  @playerversion AIR 2.6
++     *  @productversion FlexJS 0.0
++     */
++      public class NonNullTextModel extends EventDispatcher implements IBead, 
ITextModel
++      {
++        /**
++         *  Constructor.
++         *  
++         *  @langversion 3.0
++         *  @playerversion Flash 10.2
++         *  @playerversion AIR 2.6
++         *  @productversion FlexJS 0.0
++         */
++              public function NonNullTextModel()
++              {
++              }
++              
++              private var _strand:IStrand;
++              
++        /**
++         *  @copy org.apache.flex.core.IBead#strand
++         *  
++         *  @langversion 3.0
++         *  @playerversion Flash 10.2
++         *  @playerversion AIR 2.6
++         *  @productversion FlexJS 0.0
++         */
++              public function set strand(value:IStrand):void
++              {
++                      _strand = value;
++              }
++
++              private var _text:String = "";
++
++        /**
++         *  @copy org.apache.flex.core.ITextModel#text
++         *  
++         *  @langversion 3.0
++         *  @playerversion Flash 10.2
++         *  @playerversion AIR 2.6
++         *  @productversion FlexJS 0.0
++         */
++        public function get text():String
++              {
++                      return _text;
++              }
++              
++        /**
++         *  @private
++         */
++              public function set text(value:String):void
++              {
++            if (value == null)
++                value = "";
++                      if (value != _text)
++                      {
++                              _text = value;
++                              dispatchEvent(new Event("textChange"));
++                      }
++              }
++              
++              private var _html:String;
++        
++        /**
++         *  @copy org.apache.flex.core.ITextModel#html
++         *  
++         *  @langversion 3.0
++         *  @playerversion Flash 10.2
++         *  @playerversion AIR 2.6
++         *  @productversion FlexJS 0.0
++         */
++              public function get html():String
++              {
++                      return _html;
++              }
++              
++        /**
++         *  @private
++         */
++              public function set html(value:String):void
++              {
++                      if (value != _html)
++                      {
++                              _html = value;
++                              dispatchEvent(new Event("htmlChange"));
++                      }
++              }
++      }
++}

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/9fd9b78b/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/supportClasses/ButtonBarButtonItemRenderer.as
----------------------------------------------------------------------
diff --cc 
frameworks/projects/Basic/src/main/flex/org/apache/flex/html/supportClasses/ButtonBarButtonItemRenderer.as
index 1d320e3,1d320e3..214125e
--- 
a/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/supportClasses/ButtonBarButtonItemRenderer.as
+++ 
b/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/supportClasses/ButtonBarButtonItemRenderer.as
@@@ -92,6 -92,6 +92,24 @@@ package org.apache.flex.html.supportCla
                }
                
                /**
++               * @private
++               */
++              override public function setWidth(value:Number, noEvent:Boolean 
= false):void
++              {
++                      super.setWidth(value, noEvent);
++                      textButton.width = value;
++              }
++              
++              /**
++               * @private
++               */
++              override public function setHeight(value:Number, 
noEvent:Boolean = false):void
++              {
++                      super.setHeight(value, noEvent);
++                      textButton.height = value;
++              }
++              
++              /**
                 *  The data to be displayed by the itemRenderer instance. For 
ButtonBarItemRenderer, the
                 *  data's string version is used as the label for the Button.
                 *
@@@ -107,6 -107,6 +125,7 @@@
                        var added:Boolean = false;
                        if (textButton == null) {
                                textButton = new TextButton();
++                              textButton.percentWidth = 100;
                                
                                // listen for clicks on the button and 
translate them into
                                // an itemClicked event.

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/9fd9b78b/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/supportClasses/CheckBoxIcon.as
----------------------------------------------------------------------
diff --cc 
frameworks/projects/Basic/src/main/flex/org/apache/flex/html/supportClasses/CheckBoxIcon.as
index 92c3f53,92c3f53..c9eeefb
--- 
a/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/supportClasses/CheckBoxIcon.as
+++ 
b/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/supportClasses/CheckBoxIcon.as
@@@ -82,7 -82,7 +82,7 @@@ package org.apache.flex.html.supportCla
                        element = input as WrappedHTMLElement;
  
                        positioner = element;
--                      positioner.style.position = 'relative';
++                      //positioner.style.position = 'relative';
  
                        (element as WrappedHTMLElement).flexjs_wrapper = this;
  

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/9fd9b78b/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/supportClasses/ClippingViewport.as
----------------------------------------------------------------------
diff --cc 
frameworks/projects/Basic/src/main/flex/org/apache/flex/html/supportClasses/ClippingViewport.as
index 9ef88cf,0000000..16d6d3e
mode 100644,000000..100644
--- 
a/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/supportClasses/ClippingViewport.as
+++ 
b/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/supportClasses/ClippingViewport.as
@@@ -1,137 -1,0 +1,132 @@@
 
+////////////////////////////////////////////////////////////////////////////////
 +//
 +//  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.supportClasses
 +{
 +      import org.apache.flex.core.IBead;
 +      import org.apache.flex.core.IBeadLayout;
 +      import org.apache.flex.core.IViewport;
 +      import org.apache.flex.core.UIBase;
 +      import org.apache.flex.geom.Size;
 +
 +      COMPILE::JS
 +      {
 +              import org.apache.flex.core.IStrand;
 +      }
 +    COMPILE::SWF
 +    {
 +        import flash.geom.Rectangle;
 +    }
 +
 +      /**
 +       * The ClippingViewport extends the Viewport class and makes 
 +       * sure that items extending outside the Container are hidden.
 +       *
 +       *  @langversion 3.0
 +       *  @playerversion Flash 10.2
 +       *  @playerversion AIR 2.6
 +       *  @productversion FlexJS 0.0
 +       */
 +      public class ClippingViewport extends Viewport implements IBead, 
IViewport
 +      {
 +              /**
 +               * Constructor
 +           *
 +           *  @langversion 3.0
 +           *  @playerversion Flash 10.2
 +           *  @playerversion AIR 2.6
 +           *  @productversion FlexJS 0.0
 +               */
 +              public function ClippingViewport()
 +              {
 +              }
 +
 +        /**
 +         * @flexjsignorecoercion HTMLElement 
 +         */
 +        COMPILE::JS
 +        override public function set strand(value:IStrand):void
 +        {
 +            super.strand = value;
 +            (contentView.element as HTMLElement).style.overflow = 'hidden';
 +        }
 +
 +        private var viewportWidth:Number;
 +        private var viewportHeight:Number;
 +
 +        /**
 +         * @copy org.apache.flex.core.IViewport
 +         */
 +        override public function 
layoutViewportBeforeContentLayout(width:Number, height:Number):void
 +        {
 +           super.layoutViewportBeforeContentLayout(width, height);
 +           viewportWidth = width;
 +           viewportHeight = height;
 +        }
 +
 +        /**
 +         * @copy org.apache.flex.core.IViewport
 +         */
-               override public function layoutViewportAfterContentLayout():Size
++              override public function 
layoutViewportAfterContentLayout(contentSize:Size):void
 +              {
 +            COMPILE::SWF
 +            {
-                    var contentSize:Size;
++                   //var contentSize:Size;
 +                do
 +                {
-                     contentSize = super.layoutViewportAfterContentLayout();
++                    /*contentSize = 
*/super.layoutViewportAfterContentLayout(contentSize);
 +                    if (isNaN(viewportHeight))
 +                        viewportHeight = contentSize.height;
 +                    if (isNaN(viewportWidth))
 +                        viewportWidth = contentSize.width;
 +
 +                    var host:UIBase = UIBase(_strand);
 +                    var visibleWidth:Number;
 +                    var visibleHeight:Number;
 +
 +                    var needsLayout:Boolean = false;
 +                    // resize content area
 +                    if (!isNaN(visibleWidth) || !isNaN(visibleHeight))
 +                    {
 +                        if (!isNaN(visibleWidth))
 +                            needsLayout = visibleWidth != contentView.width;
 +                        if (!isNaN(visibleHeight))
 +                            needsLayout = visibleHeight != contentView.height;
 +                        if (!isNaN(visibleWidth) && !isNaN(visibleHeight))
 +                            contentArea.setWidthAndHeight(visibleWidth, 
visibleHeight, false);
 +                        else if (!isNaN(visibleWidth))
 +                            contentArea.setWidth(visibleWidth, false);
 +                        else if (!isNaN(visibleHeight))
 +                            contentArea.setHeight(visibleHeight, false);
 +                    }
 +                    if (needsLayout)
 +                    {
 +                        var layout:IBeadLayout = 
host.getBeadByType(IBeadLayout) as IBeadLayout;
 +                        layout.layout();
 +                    }
 +                } while (needsLayout);
 +
 +                var rect:Rectangle = new Rectangle(0, 0, 
viewportWidth,viewportHeight);
 +                contentArea.scrollRect = rect;
-                 return contentSize;
 +
 +            }
-             COMPILE::JS
-             {
-                 return new Size(contentView.width, contentView.height);
-             }
 +
 +              }
 +
 +      }
 +}

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/9fd9b78b/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/supportClasses/ContainerContentArea.as
----------------------------------------------------------------------
diff --cc 
frameworks/projects/Basic/src/main/flex/org/apache/flex/html/supportClasses/ContainerContentArea.as
index 461c57e,6e1bb69..53d9bd5
--- 
a/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/supportClasses/ContainerContentArea.as
+++ 
b/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/supportClasses/ContainerContentArea.as
@@@ -18,29 -18,26 +18,28 @@@
  
////////////////////////////////////////////////////////////////////////////////
  package org.apache.flex.html.supportClasses
  {
--      import org.apache.flex.core.IContentView;
++      import org.apache.flex.core.IBead;
++      import org.apache.flex.core.IStrand;
        import org.apache.flex.core.UIBase;
      import org.apache.flex.events.Event;
        import org.apache.flex.events.IEventDispatcher;
-     COMPILE::SWF {
-         import org.apache.flex.core.IChild;
-     }
 -      
++      import org.apache.flex.core.IChild;
++      import org.apache.flex.core.ILayoutView;
 +
      /**
       *  The ContainerContentArea class implements the contentView for
--     *  a Container.  Container's don't always parent their children directly 
as
--     *  that makes it harder to handle scrolling.
--     *  
++     *  a Container on the SWF platform.
++     *
       *  @langversion 3.0
       *  @playerversion Flash 10.2
       *  @playerversion AIR 2.6
       *  @productversion FlexJS 0.0
       */
--      public class ContainerContentArea extends UIBase implements IContentView
++      public class ContainerContentArea extends UIBase implements IBead, 
ILayoutView
        {
          /**
           *  Constructor.
--         *  
++         *
           *  @langversion 3.0
           *  @playerversion Flash 10.2
           *  @playerversion AIR 2.6
@@@ -51,39 -48,34 +50,18 @@@
                        super();
              addEventListener("layoutNeeded", forwardEventHandler);
                }
--        
++              
++              protected var host:IStrand;
++              
++              public function set strand(value:IStrand):void
++              {
++                      host = value;
++              }
++
          private function forwardEventHandler(event:Event):void
          {
              if (parent is IEventDispatcher)
                  (parent as IEventDispatcher).dispatchEvent(event);
          }
--              
--              /**
--               *  @copy 
org.apache.flex.core.IItemRendererParent#removeAllElements()
--               *  
--               *  @langversion 3.0
--               *  @playerversion Flash 10.2
--               *  @playerversion AIR 2.6
--               *  @productversion FlexJS 0.0
--               */
--              public function removeAllElements():void
--              {
--                      COMPILE::SWF
--                      {
-                 var n:Number = numElements;
-                 for (var i:Number = n-1; i >= 0; i--) {
-                     var child:IChild = getElementAt(i);
-                     removeElement(child,false);
-                 }
--                              removeChildren(0);                              
        
--                      }
--                      COMPILE::JS
--                      {
--                              while (element.hasChildNodes()) 
--                              {
--                                      element.removeChild(element.lastChild);
--                              }
--                      }
--              }
        }
  }

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/9fd9b78b/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/supportClasses/DataGridButtonBarButtonItemRenderer.as
----------------------------------------------------------------------
diff --cc 
frameworks/projects/Basic/src/main/flex/org/apache/flex/html/supportClasses/DataGridButtonBarButtonItemRenderer.as
index f6663a5,f6663a5..d05036f
--- 
a/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/supportClasses/DataGridButtonBarButtonItemRenderer.as
+++ 
b/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/supportClasses/DataGridButtonBarButtonItemRenderer.as
@@@ -66,6 -66,6 +66,7 @@@ package org.apache.flex.html.supportCla
                        var added:Boolean = false;
                        if (textButton == null) {
                                textButton = new DataGridButtonBarTextButton();
++                              textButton.percentWidth = 100;
                                
                                // listen for clicks on the button and 
translate them into
                                // an itemClicked event.
@@@ -77,5 -77,5 +78,14 @@@
                        
                        if (added) addElement(textButton);
                }
++              
++              /**
++               * @private
++               */
++              COMPILE::JS
++              override public function adjustSize():void
++              {
++                      // not neeed for JS platform
++              }
        }
  }

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/9fd9b78b/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/supportClasses/DataGridColumnList.as
----------------------------------------------------------------------
diff --cc 
frameworks/projects/Basic/src/main/flex/org/apache/flex/html/supportClasses/DataGridColumnList.as
index bb0fa65,bb0fa65..e612517
--- 
a/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/supportClasses/DataGridColumnList.as
+++ 
b/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/supportClasses/DataGridColumnList.as
@@@ -56,6 -56,6 +56,7 @@@ package org.apache.flex.html.supportCla
                public function DataGridColumnList()
                {
                        super();
++                      typeNames = "DataGridColumnList";
                }
        }
  }

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/9fd9b78b/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/supportClasses/DataGroup.as
----------------------------------------------------------------------
diff --cc 
frameworks/projects/Basic/src/main/flex/org/apache/flex/html/supportClasses/DataGroup.as
index f7ebf01,f7ebf01..b6ebb71
--- 
a/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/supportClasses/DataGroup.as
+++ 
b/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/supportClasses/DataGroup.as
@@@ -41,7 -41,7 +41,7 @@@ package org.apache.flex.html.supportCla
       *  @playerversion AIR 2.6
       *  @productversion FlexJS 0.0
       */
--      public class DataGroup extends ContainerContentArea implements 
IItemRendererParent, IContentView
++      public class DataGroup extends ContainerContentArea implements 
IItemRendererParent
        {
          /**
           *  Constructor.
@@@ -56,55 -56,55 +56,87 @@@
                        super();
                }
                
++              /*
++              * IItemRendererParent
++              */
++              
                /**
++               * @copy 
org.apache.flex.core.IItemRendererParent#addItemRenderer()
                 * @private
++               *
++               *  @langversion 3.0
++               *  @playerversion Flash 10.2
++               *  @playerversion AIR 2.6
++               *  @productversion FlexJS 0.8
                 */
--              override public function addElement(c:IChild, 
dispatchEvent:Boolean = true):void
++              public function addItemRenderer(renderer:IItemRenderer):void
                {
--                      super.addElement(c, dispatchEvent);
++                      addElement(renderer, true);
                        
                        var newEvent:ItemAddedEvent = new 
ItemAddedEvent("itemAdded");
--                      newEvent.item = c;
++                      newEvent.item = renderer;
                        
--                      var strand:IEventDispatcher = parent as 
IEventDispatcher;
--                      strand.dispatchEvent(newEvent);
++                      (host as IEventDispatcher).dispatchEvent(newEvent);
                }
                
                /**
++               * @copy 
org.apache.flex.core.IItemRendererParent#removeItemRenderer()
                 * @private
++               *
++               *  @langversion 3.0
++               *  @playerversion Flash 10.2
++               *  @playerversion AIR 2.6
++               *  @productversion FlexJS 0.8
                 */
--              override public function removeElement(c:IChild, 
dispatchEvent:Boolean = true):void
--              {       
--                      super.removeElement(c, dispatchEvent);
++              public function removeItemRenderer(renderer:IItemRenderer):void
++              {
++                      removeElement(renderer, true);
                        
                        var newEvent:ItemRemovedEvent = new 
ItemRemovedEvent("itemRemoved");
--                      newEvent.item = c;
++                      newEvent.item = renderer;
                        
--                      var strand:IEventDispatcher = parent as 
IEventDispatcher;
--                      strand.dispatchEvent(newEvent);
++                      (host as IEventDispatcher).dispatchEvent(newEvent);
                }
--
--        /**
--         *  @copy 
org.apache.flex.core.IItemRendererParent#getItemRendererForIndex()
--         *  
--         *  @langversion 3.0
--         *  @playerversion Flash 10.2
--         *  @playerversion AIR 2.6
--         *  @productversion FlexJS 0.0
--         */
--        public function getItemRendererForIndex(index:int):IItemRenderer
--        {
++              
++              /**
++               * @copy 
org.apache.flex.core.IItemRendererParent#removeAllItemRenderers()
++               * @private
++               *
++               *  @langversion 3.0
++               *  @playerversion Flash 10.2
++               *  @playerversion AIR 2.6
++               *  @productversion FlexJS 0.8
++               */
++              public function removeAllItemRenderers():void
++              {
++                      while (numElements > 0) {
++                              var child:IChild = getElementAt(0);
++                              removeItemRenderer(child as IItemRenderer);
++                      }
++              }
++              
++              /**
++               *  @copy 
org.apache.flex.core.IItemRendererParent#getItemRendererForIndex()
++               *
++               *  @langversion 3.0
++               *  @playerversion Flash 10.2
++               *  @playerversion AIR 2.6
++               *  @productversion FlexJS 0.8
++               */
++              public function getItemRendererForIndex(index:int):IItemRenderer
++              {
                        if (index < 0 || index >= numElements) return null;
--            return getElementAt(index) as IItemRenderer;
--        }
++                      return getElementAt(index) as IItemRenderer;
++              }
                
                /**
                 *  Refreshes the itemRenderers. Useful after a size change by 
the data group.
--         *  
--         *  @langversion 3.0
--         *  @playerversion Flash 10.2
--         *  @playerversion AIR 2.6
--         *  @productversion FlexJS 0.0
++               *
++               *  @copy 
org.apache.flex.core.IItemRendererParent#updateAllItemRenderers()
++               *  @langversion 3.0
++               *  @playerversion Flash 10.2
++               *  @playerversion AIR 2.6
++               *  @productversion FlexJS 0.8
                 */
                public function updateAllItemRenderers():void
                {

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/9fd9b78b/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/supportClasses/DataItemRenderer.as
----------------------------------------------------------------------
diff --cc 
frameworks/projects/Basic/src/main/flex/org/apache/flex/html/supportClasses/DataItemRenderer.as
index 8b4ad5b,8b4ad5b..7154689
--- 
a/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/supportClasses/DataItemRenderer.as
+++ 
b/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/supportClasses/DataItemRenderer.as
@@@ -163,7 -163,7 +163,7 @@@ package org.apache.flex.html.supportCla
                {
                        element = document.createElement('div') as 
WrappedHTMLElement;
                        positioner = element;
--                      positioner.style.position = 'relative';
++                      //positioner.style.position = 'relative';
  
                        element.flexjs_wrapper = this;
                        className = 'DataItemRenderer';

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/9fd9b78b/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/supportClasses/DataProviderNotifierBase.as
----------------------------------------------------------------------
diff --cc 
frameworks/projects/Basic/src/main/flex/org/apache/flex/html/supportClasses/DataProviderNotifierBase.as
index 0000000,0000000..6c7eb08
new file mode 100644
--- /dev/null
+++ 
b/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/supportClasses/DataProviderNotifierBase.as
@@@ -1,0 -1,0 +1,154 @@@
++////////////////////////////////////////////////////////////////////////////////
++//
++//  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.supportClasses
++{
++      import org.apache.flex.core.IBead;
++      import org.apache.flex.core.IBeadModel;
++      import org.apache.flex.core.IDocument;
++      import org.apache.flex.core.ISelectionModel;
++      import org.apache.flex.core.IStrand;
++      import org.apache.flex.core.UIBase;
++      import org.apache.flex.events.IEventDispatcher;
++      import org.apache.flex.events.Event;
++      import org.apache.flex.collections.ArrayList;
++      
++      /**
++       *  Base class for all data provider notifiers.
++       *  
++       *  @langversion 3.0
++       *  @playerversion Flash 10.2
++       *  @playerversion AIR 2.6
++       *  @productversion FlexJS 0.0
++       */
++      public class DataProviderNotifierBase implements IBead, IDocument
++      {
++              /**
++               *  constructor.
++               *  
++               *  @langversion 3.0
++               *  @playerversion Flash 10.2
++               *  @playerversion AIR 2.6
++               *  @productversion FlexJS 0.0
++               */
++              public function DataProviderNotifierBase()
++              {
++              }
++              
++              protected var dataProvider:ArrayList;
++              
++              protected var _strand:IStrand;
++              
++              /**
++               *  @copy org.apache.flex.core.IBead#strand
++               *  
++               *  @langversion 3.0
++               *  @playerversion Flash 10.2
++               *  @playerversion AIR 2.6
++               *  @productversion FlexJS 0.0
++               */
++              public function set strand(value:IStrand):void
++              {
++                      _strand = value;
++                      
++                      if (_strand[destinationPropertyName] == null) {
++                              var model:IBeadModel = UIBase(_strand).model as 
IBeadModel;
++                              
IEventDispatcher(model).addEventListener(changeEventName, 
destinationChangedHandler);
++                      }
++                      else {
++                              destinationChangedHandler(null);
++                      }
++              }
++              
++              protected function destinationChangedHandler(event:Event):void
++              {
++
++              }
++              
++              protected var document:Object;
++              
++              /**
++               * @private
++               */
++              public function setDocument(document:Object, id:String = 
null):void
++              {
++                      this.document = document;
++              }
++              
++              private var _destinationPropertyName:String;
++              
++              public function get destinationPropertyName():String
++              {
++                      return _destinationPropertyName;
++              }
++              public function set destinationPropertyName(value:String):void
++              {
++                      _destinationPropertyName = value;
++              }
++              
++              private var _changeEventName:String;
++              
++              public function get changeEventName():String
++              {
++                      return _changeEventName;
++              }
++              public function set changeEventName(value:String):void
++              {
++                      _changeEventName = value;
++              }
++              
++              private var _sourceID:String;
++              
++              /**
++               *  The ID of the object holding the ArrayList, usually a model.
++               *  
++               *  @langversion 3.0
++               *  @playerversion Flash 10.2
++               *  @playerversion AIR 2.6
++               *  @productversion FlexJS 0.0
++               */
++              public function get sourceID():String
++              {
++                      return _sourceID;
++              }
++              public function set sourceID(value:String):void
++              {
++                      _sourceID = value;
++              }
++              
++              private var _propertyName:String;
++              
++              /**
++               *  The property in the sourceID that is the ArrayList.
++               *  
++               *  @langversion 3.0
++               *  @playerversion Flash 10.2
++               *  @playerversion AIR 2.6
++               *  @productversion FlexJS 0.0
++               */
++              public function get propertyName():String
++              {
++                      return _propertyName;
++              }
++              
++              public function set propertyName(value:String):void
++              {
++                      _propertyName = value;
++              }
++      }
++}

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/9fd9b78b/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/supportClasses/DateChooserHeader.as
----------------------------------------------------------------------
diff --cc 
frameworks/projects/Basic/src/main/flex/org/apache/flex/html/supportClasses/DateChooserHeader.as
index 775a140,0000000..0fde1c9
mode 100644,000000..100644
--- 
a/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/supportClasses/DateChooserHeader.as
+++ 
b/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/supportClasses/DateChooserHeader.as
@@@ -1,66 -1,0 +1,64 @@@
 
+////////////////////////////////////////////////////////////////////////////////
 +//
 +//  Licensed to the Apache Software Foundation (ASF) under one or more
 +//  contributor license agreements.  See the NOTICE file distributed with
 +//  this work for additional information regarding copyright ownership.
 +//  The ASF licenses this file to You under the Apache License, Version 2.0
 +//  (the "License"); you may not use this file except in compliance with
 +//  the License.  You may obtain a copy of the License at
 +//
 +//      http://www.apache.org/licenses/LICENSE-2.0
 +//
 +//  Unless required by applicable law or agreed to in writing, software
 +//  distributed under the License is distributed on an "AS IS" BASIS,
 +//  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 +//  See the License for the specific language governing permissions and
 +//  limitations under the License.
 +//
 
+////////////////////////////////////////////////////////////////////////////////
 +package org.apache.flex.html.supportClasses
 +{
 +      import org.apache.flex.html.DataContainer;
-       import org.apache.flex.html.beads.layouts.TileLayout;
++      import org.apache.flex.html.beads.layouts.HorizontalFlexLayout;
 +      
 +      /**
 +       *  The DateChooserHeader is the container for the days of the week 
labels
 +       *  in the DateChooser.
 +       *
 +       *  @langversion 3.0
 +       *  @playerversion Flash 10.2
 +       *  @playerversion AIR 2.6
 +       *  @productversion FlexJS 0.0
 +       */
 +      public class DateChooserHeader extends DataContainer
 +      {
 +              /**
 +               * Constructor.
 +               *
 +               *  @langversion 3.0
 +               *  @playerversion Flash 10.2
 +               *  @playerversion AIR 2.6
 +               *  @productversion FlexJS 0.0
 +               */
 +              public function DateChooserHeader()
 +              {
 +                      super();
 +                      
-                       tileLayout = new TileLayout();
-                       tileLayout.numColumns = 7;
-                       addBead(tileLayout);
++                      myLayout = new HorizontalFlexLayout();
++                      addBead(myLayout);
 +              }
 +              
 +              /**
 +               * @private
 +               */
-               private var tileLayout:TileLayout;
++              private var myLayout:HorizontalFlexLayout;
 +              
 +              /**
 +               * @private
 +               */
 +              override public function set height(value:Number):void
 +              {
 +                      super.height = value;
-                       tileLayout.rowHeight = value;
 +              }
 +      }
 +}

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/9fd9b78b/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/supportClasses/MXMLItemRenderer.as
----------------------------------------------------------------------
diff --cc 
frameworks/projects/Basic/src/main/flex/org/apache/flex/html/supportClasses/MXMLItemRenderer.as
index cacac1e,0000000..de1b304
mode 100644,000000..100644
--- 
a/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/supportClasses/MXMLItemRenderer.as
+++ 
b/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/supportClasses/MXMLItemRenderer.as
@@@ -1,83 -1,0 +1,84 @@@
 
+////////////////////////////////////////////////////////////////////////////////
 +//
 +//  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.supportClasses
 +{
 +      import org.apache.flex.core.ILayoutHost;
 +      import org.apache.flex.core.ILayoutParent;
++      import org.apache.flex.core.ILayoutView;
 +      import org.apache.flex.core.IStrand;
 +      import org.apache.flex.core.IBead;
 +      import org.apache.flex.core.IBeadLayout;
 +      import org.apache.flex.core.IParentIUIBase;
 +    import org.apache.flex.events.Event;
 +
 +      /**
 +       *  The MXMLItemRenderer class is the base class for itemRenderers that 
are MXML-based
 +       *  and provides support for a layout and a data object.
 +       *
 +       *  @langversion 3.0
 +       *  @playerversion Flash 10.2
 +       *  @playerversion AIR 2.6
 +       *  @productversion FlexJS 0.0
 +       */
-       public class MXMLItemRenderer extends DataItemRenderer implements 
ILayoutParent, ILayoutHost, IStrand
++      public class MXMLItemRenderer extends DataItemRenderer implements 
ILayoutParent, ILayoutHost, IStrand, ILayoutView
 +      {
 +              /**
 +               *  constructor.
 +               *
 +               *  @langversion 3.0
 +               *  @playerversion Flash 10.2
 +               *  @playerversion AIR 2.6
 +               *  @productversion FlexJS 0.0
 +               */
 +              public function MXMLItemRenderer()
 +              {
 +                      super();
 +              }
-               
++
 +        [Bindable("dataChange")]
 +        override public function set data(value:Object):void
 +        {
 +            if (value != data)
 +            {
 +                super.data = value;
 +                dispatchEvent(new Event("dataChange"));
 +            }
 +        }
-         
++
 +              public function getLayoutHost():ILayoutHost
 +              {
-                       return this; 
++                      return this;
 +              }
-               
-               public function get contentView():IParentIUIBase
++
++              public function get contentView():ILayoutView
 +              {
 +                      return this;
 +              }
-               
++
 +              override public function adjustSize():void
 +              {
 +                      var layout:IBeadLayout = getBeadByType(IBeadLayout) as 
IBeadLayout;
 +                      if (layout != null) {
 +                              layout.layout();
 +                      }
 +              }
 +
 +
 +      }
 +}

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/9fd9b78b/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/supportClasses/PanelLayoutProxy.as
----------------------------------------------------------------------
diff --cc 
frameworks/projects/Basic/src/main/flex/org/apache/flex/html/supportClasses/PanelLayoutProxy.as
index 0000000,0000000..4ebc174
new file mode 100644
--- /dev/null
+++ 
b/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/supportClasses/PanelLayoutProxy.as
@@@ -1,0 -1,0 +1,132 @@@
++////////////////////////////////////////////////////////////////////////////////
++//
++//  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.supportClasses
++{
++      import org.apache.flex.core.UIBase;
++      import org.apache.flex.core.ILayoutView;
++      import org.apache.flex.core.IChild;
++      import org.apache.flex.events.IEventDispatcher;
++
++      import org.apache.flex.html.Panel;
++
++      COMPILE::JS {
++              import org.apache.flex.core.WrappedHTMLElement;
++      }
++
++    /**
++     *  The PanelLayoutProxy class is used by Panel in order for layouts to 
operate
++       *  on the Panel itself. If Panel were being used, its numElements, 
getElementAt, etc.
++       *  functions would actually redirect to its Container content. In 
order for a layout
++       *  to work on the Panel directly (its TitleBar, Container, and 
ControlBar children),
++       *  this proxy is used which will invoke the Panel's $numElements, 
$getElementAt, etc
++       *  functions.
++     *
++     *  @langversion 3.0
++     *  @playerversion Flash 10.2
++     *  @playerversion AIR 2.6
++     *  @productversion FlexJS 0.0
++     */
++      public class PanelLayoutProxy implements ILayoutView
++      {
++        /**
++         *  Constructor.
++         *
++         *  @langversion 3.0
++         *  @playerversion Flash 10.2
++         *  @playerversion AIR 2.6
++         *  @productversion FlexJS 0.0
++         */
++              public function PanelLayoutProxy(host:Object)
++              {
++                      super();
++                      _host = host;
++              }
++
++              private var _host:Object;
++
++              public function get host():Object
++              {
++                      return _host;
++              }
++
++              /**
++               *  The width of the bounding box.
++               *
++               *  @langversion 3.0
++               *  @playerversion Flash 10.2
++               *  @playerversion AIR 2.6
++               *  @productversion FlexJS 0.0
++               */
++              public function get width():Number {
++                      return (host as Panel).width;
++              }
++
++              /**
++               * The height of the bounding box.
++               *
++               *  @langversion 3.0
++               *  @playerversion Flash 10.2
++               *  @playerversion AIR 2.6
++               *  @productversion FlexJS 0.0
++               */
++              public function get height():Number {
++                      return (host as Panel).height;
++              }
++
++              /**
++               *  The number of elements in the parent.
++               *
++               *  @langversion 3.0
++               *  @playerversion Flash 10.2
++               *  @playerversion AIR 2.6
++               *  @productversion FlexJS 0.0
++               */
++              public function get numElements():int
++              {
++                      return (host as Panel).$numElements;
++              }
++
++              /**
++               *  Get a component from the parent.
++               *
++               *  @param c The index of the subcomponent.
++               *
++               *  @langversion 3.0
++               *  @playerversion Flash 10.2
++               *  @playerversion AIR 2.6
++               *  @productversion FlexJS 0.0
++               */
++              public function getElementAt(index:int):IChild
++              {
++                      return (host as Panel).$getElementAt(index);
++              }
++
++              COMPILE::JS
++              public function get somethingelse():WrappedHTMLElement
++              {
++                      return (host as Panel).element;
++              }
++
++              COMPILE::JS
++              public function get element():WrappedHTMLElement
++              {
++                      return (host as Panel).element;
++              }
++      }
++}

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/9fd9b78b/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/supportClasses/RadioButtonIcon.as
----------------------------------------------------------------------
diff --cc 
frameworks/projects/Basic/src/main/flex/org/apache/flex/html/supportClasses/RadioButtonIcon.as
index 119400f,119400f..3c29ae5
--- 
a/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/supportClasses/RadioButtonIcon.as
+++ 
b/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/supportClasses/RadioButtonIcon.as
@@@ -101,7 -101,7 +101,7 @@@ package org.apache.flex.html.supportCla
                        element = input as WrappedHTMLElement;
  
                        positioner = element;
--                      positioner.style.position = 'relative';
++                      //positioner.style.position = 'relative';
  
                        (element as WrappedHTMLElement).flexjs_wrapper = this;
  

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/9fd9b78b/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/supportClasses/ScrollingViewport.as
----------------------------------------------------------------------
diff --cc 
frameworks/projects/Basic/src/main/flex/org/apache/flex/html/supportClasses/ScrollingViewport.as
index 46ba9a6,46ba9a6..444606b
--- 
a/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/supportClasses/ScrollingViewport.as
+++ 
b/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/supportClasses/ScrollingViewport.as
@@@ -18,12 -18,12 +18,9 @@@
  
////////////////////////////////////////////////////////////////////////////////
  package org.apache.flex.html.supportClasses
  {
--    COMPILE::SWF
--    {
--        import flash.geom.Rectangle;
--    }
        import org.apache.flex.core.IBead;
        import org.apache.flex.core.IBeadLayout;
++      import org.apache.flex.core.IContainer;
        import org.apache.flex.core.IContentViewHost;
        import org.apache.flex.core.IParentIUIBase;
        import org.apache.flex.core.IStrand;
@@@ -33,12 -33,12 +30,16 @@@
      COMPILE::SWF
      {
          import org.apache.flex.core.IViewportScroller;
++              import org.apache.flex.utils.CSSContainerUtils;
++              import flash.geom.Rectangle;
++              import org.apache.flex.geom.Rectangle;
      }
        import org.apache.flex.core.UIBase;
        import org.apache.flex.events.Event;
        import org.apache.flex.geom.Size;
        import org.apache.flex.html.beads.ScrollBarView;
        import org.apache.flex.html.beads.models.ScrollBarModel;
++      import org.apache.flex.geom.Rectangle;
  
        /**
         * The ScrollingViewport extends the Viewport class by adding 
horizontal and
@@@ -51,6 -51,6 +52,71 @@@
         *  @playerversion AIR 2.6
         *  @productversion FlexJS 0.0
         */
++      COMPILE::JS
++      public class ScrollingViewport extends Viewport implements IBead, 
IViewport
++      {
++              /**
++               * Constructor
++               *
++               *  @langversion 3.0
++               *  @playerversion Flash 10.2
++               *  @playerversion AIR 2.6
++               *  @productversion FlexJS 0.0
++               */
++              public function ScrollingViewport()
++              {
++                      super();
++              }
++              
++              public function get verticalScrollPosition():Number
++              {
++                      return this.contentView.positioner.scrollTop;
++              }
++              public function set verticalScrollPosition(value:Number):void
++              {
++                      this.contentView.positioner.scrollTop = value;
++              }
++              
++              public function get horizontalScrollPosition():Number
++              {
++                      return this.contentView.positioner.scrollLeft;
++              }
++              public function set horizontalScrollPosition(value:Number):void
++              {
++                      this.contentView.positioner.scrollLeft = value;
++              }
++              
++              /**
++               * @flexjsignorecoercion HTMLElement 
++               */
++              override public function set strand(value:IStrand):void
++              {
++                      super.strand = value;
++                      if (contentView == null) {
++                              (value as UIBase).element.style.overflow = 
"auto";
++                      } else {
++                              (contentView as UIBase).element.style.overflow 
= "auto";
++                      }
++              }
++              
++              /**
++              * @copy org.apache.flex.core.IViewport
++              */
++              override public function 
layoutViewportBeforeContentLayout(width:Number, height:Number):void
++              {
++                      // does nothing for the JS platform
++              }
++              
++              /**
++               * @copy org.apache.flex.core.IViewport
++               */
++              override public function 
layoutViewportAfterContentLayout(contentSize:Size):void
++              {
++                      // does nothing for the JS platform
++              }
++      }
++      
++      COMPILE::SWF
        public class ScrollingViewport extends Viewport implements IBead, 
IViewport
        {
                /**
@@@ -63,88 -63,88 +129,45 @@@
                 */
                public function ScrollingViewport()
                {
++                      super();
                }
  
--        COMPILE::SWF
                private var _verticalScroller:ScrollBar;
  
--        COMPILE::SWF
                public function get verticalScroller():IViewportScroller
                {
                        return _verticalScroller;
                }
  
--        COMPILE::SWF
                private var _horizontalScroller:ScrollBar
  
--        COMPILE::SWF
                public function get horizontalScroller():IViewportScroller
                {
                        return _horizontalScroller;
                }
  
--        COMPILE::SWF
          private var _verticalScrollPosition:Number = 0;
  
          public function get verticalScrollPosition():Number
          {
--            COMPILE::SWF
--            {
--                return _verticalScrollPosition;
--            }
--            COMPILE::JS
--            {
--                return this.contentView.positioner.scrollTop;
--            }
++                      return _verticalScrollPosition;
          }
          public function set verticalScrollPosition(value:Number):void
          {
--            COMPILE::SWF
--            {
--                _verticalScrollPosition = value;
--                handleVerticalScrollChange();
--            }
--            COMPILE::JS
--            {
--                this.contentView.positioner.scrollTop = value;
--            }
++                      _verticalScrollPosition = value;
++                      handleVerticalScrollChange();
          }
  
--        COMPILE::SWF
          private var _horizontalScrollPosition:Number = 0;
  
          public function get horizontalScrollPosition():Number
          {
--            COMPILE::SWF
--            {
--                return _horizontalScrollPosition;
--            }
--            COMPILE::JS
--            {
--                return this.contentView.positioner.scrollLeft;
--            }
++                      return _horizontalScrollPosition;
          }
          public function set horizontalScrollPosition(value:Number):void
          {
--            COMPILE::SWF
--            {
--                _horizontalScrollPosition = value;
--                handleHorizontalScrollChange();
--            }
--            COMPILE::JS
--            {
--                this.contentView.positioner.scrollLeft = value;
--            }
--        }
--
--        /**
--         * @flexjsignorecoercion HTMLElement 
--         */
--        COMPILE::JS
--        override public function set strand(value:IStrand):void
--        {
--            super.strand = value;
--            (contentView.element as HTMLElement).style.overflow = 'auto';
++                      _horizontalScrollPosition = value;
++                      handleHorizontalScrollChange();
          }
  
          private var viewportWidth:Number;
@@@ -155,127 -155,127 +178,90 @@@
           */
          override public function 
layoutViewportBeforeContentLayout(width:Number, height:Number):void
          {
--           super.layoutViewportBeforeContentLayout(width, height);
--           viewportWidth = width;
--           viewportHeight = height;
++              super.layoutViewportBeforeContentLayout(width, height);
++              viewportWidth = width;
++              viewportHeight = height;
          }
  
          /**
           * @copy org.apache.flex.core.IViewport
           */
--              override public function layoutViewportAfterContentLayout():Size
++              override public function 
layoutViewportAfterContentLayout(contentSize:Size):void
                {
--            COMPILE::SWF
--            {
--                var hadV:Boolean = _verticalScroller != null && 
_verticalScroller.visible;
--                var hadH:Boolean = _horizontalScroller != null && 
_horizontalScroller.visible;
--                var contentSize:Size;
--                do
--                {
--                    contentSize = super.layoutViewportAfterContentLayout();
--                    if (isNaN(viewportHeight))
--                        viewportHeight = contentSize.height;
--                    if (isNaN(viewportWidth))
--                        viewportWidth = contentSize.width;
--
--                    var host:UIBase = UIBase(_strand);
--                    var visibleWidth:Number;
--                    var visibleHeight:Number;
--                    var needV:Boolean = contentSize.height > viewportHeight;
--                    var needH:Boolean = contentSize.width > viewportWidth;
--
--                    if (needV)
--                    {
--                        if (_verticalScroller == null) {
--                            _verticalScroller = createVerticalScrollBar();
--                            (host as 
IContentViewHost).strandChildren.addElement(_verticalScroller);
--                        }
--                    }
--                    if (needH)
--                    {
--                        if (_horizontalScroller == null) {
--                            _horizontalScroller = createHorizontalScrollBar();
--                            (host as 
IContentViewHost).strandChildren.addElement(_horizontalScroller);
--                        }
--                    }
--
--                    if (needV)
--                    {
--                        _verticalScroller.visible = true;
--                        _verticalScroller.x = contentArea.x + viewportWidth - 
_verticalScroller.width;
--                        _verticalScroller.y = contentArea.y;
--                        _verticalScroller.setHeight(viewportHeight - (needH ? 
_horizontalScroller.height : 0), true);
--                        visibleWidth = _verticalScroller.x;
--                    }
--                    else if (_verticalScroller)
--                        _verticalScroller.visible = false;
--
--                    if (needH)
--                    {
--                        _horizontalScroller.visible = true;
--                        _horizontalScroller.x = contentArea.x;
--                        _horizontalScroller.y = contentArea.y + 
viewportHeight - _horizontalScroller.height;
--                        _horizontalScroller.setWidth(viewportWidth - (needV ? 
_verticalScroller.width : 0), true);
--                        visibleHeight = _horizontalScroller.y;
--                    }
--
--                    var needsLayout:Boolean = false;
--                    // resize content area if needed to get out from under 
scrollbars
--                    if (!isNaN(visibleWidth) || !isNaN(visibleHeight))
--                    {
--                        if (!isNaN(visibleWidth))
--                            needsLayout = visibleWidth != contentView.width;
--                        if (!isNaN(visibleHeight))
--                            needsLayout = visibleHeight != contentView.height;
--                        if (!isNaN(visibleWidth) && !isNaN(visibleHeight))
--                            contentArea.setWidthAndHeight(visibleWidth, 
visibleHeight, false);
--                        else if (!isNaN(visibleWidth))
--                            contentArea.setWidth(visibleWidth, false);
--                        else if (!isNaN(visibleHeight))
--                            contentArea.setHeight(visibleHeight, false);
--                    }
--                    if (needsLayout)
--                    {
--                        var layout:IBeadLayout = 
host.getBeadByType(IBeadLayout) as IBeadLayout;
--                        layout.layout();
--                    }
--                } while (needsLayout && (needV != hadV || needH == hadH));
--                if (_verticalScroller)
--                {
--                    ScrollBarModel(_verticalScroller.model).maximum = 
contentSize.height;
--                    ScrollBarModel(_verticalScroller.model).pageSize = 
contentArea.height;
--                    ScrollBarModel(_verticalScroller.model).pageStepSize = 
contentArea.height;
--                    if (contentSize.height > contentArea.height &&
--                        (contentSize.height - contentArea.height) < 
_verticalScrollPosition)
--                        _verticalScrollPosition = contentSize.height - 
contentArea.height;
--                }
--                if (_horizontalScroller)
--                {
--                    ScrollBarModel(_horizontalScroller.model).maximum = 
contentSize.width;
--                    ScrollBarModel(_horizontalScroller.model).pageSize = 
contentArea.width;
--                    ScrollBarModel(_horizontalScroller.model).pageStepSize = 
contentArea.width;
--                    if (contentSize.width > contentArea.width &&
--                        (contentSize.width - contentArea.width) < 
_horizontalScrollPosition)
--                        _horizontalScrollPosition = contentSize.width - 
contentArea.width;
--                }
--
--                var rect:Rectangle = new Rectangle(_horizontalScrollPosition, 
_verticalScrollPosition,
--                    (_verticalScroller != null && _verticalScroller.visible) ?
--                    _verticalScroller.x : viewportWidth,
--                    (_horizontalScroller != null && 
_horizontalScroller.visible) ?
--                    _horizontalScroller.y : viewportHeight);
--                contentArea.scrollRect = rect;
--                return contentSize;
--
--            }
--            COMPILE::JS
--            {
--                return new Size(contentView.width, contentView.height);
--            }
--
++                      var hadV:Boolean = _verticalScroller != null && 
_verticalScroller.visible;
++                      var hadH:Boolean = _horizontalScroller != null && 
_horizontalScroller.visible;
++                      
++                      var hostWidth:Number = UIBase(_strand).width;
++                      var hostHeight:Number = UIBase(_strand).height;
++                      
++                      var borderMetrics:org.apache.flex.geom.Rectangle = 
CSSContainerUtils.getBorderMetrics(_strand);
++                      
++                      hostWidth -= borderMetrics.left + borderMetrics.right;
++                      hostHeight -= borderMetrics.top + borderMetrics.bottom;
++                      
++                      var needV:Boolean = contentSize.height > viewportHeight;
++                      var needH:Boolean = contentSize.width > viewportWidth;
++                      
++                      if (needV)
++                      {
++                              if (_verticalScroller == null) {
++                                      _verticalScroller = 
createVerticalScrollBar();
++                                      (_strand as 
IContainer).strandChildren.addElement(_verticalScroller);
++                              }
++                      }
++                      if (needH)
++                      {
++                              if (_horizontalScroller == null) {
++                                      _horizontalScroller = 
createHorizontalScrollBar();
++                                      (_strand as 
IContainer).strandChildren.addElement(_horizontalScroller);
++                              }
++                      }
++                      
++                      if (needV)
++                      {
++                              _verticalScroller.visible = true;
++                              _verticalScroller.x = UIBase(_strand).width - 
borderMetrics.right - _verticalScroller.width;
++                              _verticalScroller.y = borderMetrics.top;
++                              _verticalScroller.setHeight(hostHeight - (needH 
? _horizontalScroller.height : 0), true);
++                              
++                              ScrollBarModel(_verticalScroller.model).maximum 
= contentSize.height;
++                              
ScrollBarModel(_verticalScroller.model).pageSize = contentArea.height;
++                              
ScrollBarModel(_verticalScroller.model).pageStepSize = contentArea.height;
++                              
++                              if (contentSize.height > contentArea.height &&
++                                      (contentSize.height - 
contentArea.height) < _verticalScrollPosition)
++                                      _verticalScrollPosition = 
contentSize.height - contentArea.height;
++                      }
++                      else if (_verticalScroller) {
++                              _verticalScroller.visible = false;
++                      }
++                      
++                      if (needH)
++                      {
++                              _horizontalScroller.visible = true;
++                              _horizontalScroller.x = 0;
++                              _horizontalScroller.y = UIBase(_strand).height 
- borderMetrics.bottom - _horizontalScroller.height;
++                              _horizontalScroller.setWidth(hostWidth - (needV 
? _verticalScroller.width : 0), true);
++                              
++                              
ScrollBarModel(_horizontalScroller.model).maximum = contentSize.width;
++                              
ScrollBarModel(_horizontalScroller.model).pageSize = contentArea.width;
++                              
ScrollBarModel(_horizontalScroller.model).pageStepSize = contentArea.width;
++                              
++                              if (contentSize.width > contentArea.width &&
++                                      (contentSize.width - contentArea.width) 
< _horizontalScrollPosition)
++                                      _horizontalScrollPosition = 
contentSize.width - contentArea.width;
++                      } 
++                      else if (_horizontalScroller) {
++                              _horizontalScroller.visible = false;
++                      }
++                      
++                      var rect:flash.geom.Rectangle = new 
flash.geom.Rectangle(_horizontalScrollPosition, _verticalScrollPosition,
++                              (_verticalScroller != null && 
_verticalScroller.visible) ? _verticalScroller.x : hostWidth,
++                              (_horizontalScroller != null && 
_horizontalScroller.visible) ? _horizontalScroller.y : hostHeight);
++                      
++                      contentArea.scrollRect = rect;
                }
  
--              COMPILE::SWF
                private function createVerticalScrollBar():ScrollBar
                {
                        var vsbm:ScrollBarModel = new ScrollBarModel();
@@@ -293,7 -293,7 +279,6 @@@
                        return vsb;
                }
  
--        COMPILE::SWF
                private function createHorizontalScrollBar():ScrollBar
                {
                        var hsbm:ScrollBarModel = new ScrollBarModel();
@@@ -311,31 -311,31 +296,28 @@@
                        return hsb;
                }
  
--        COMPILE::SWF
                private function handleVerticalScroll(event:Event):void
                {
                        var host:UIBase = UIBase(_strand);
                        var vpos:Number = 
ScrollBarModel(_verticalScroller.model).value;
--                      var rect:Rectangle = contentArea.scrollRect;
++                      var rect:flash.geom.Rectangle = contentArea.scrollRect;
                        rect.y = vpos;
                        contentArea.scrollRect = rect;
  
                        _verticalScrollPosition = vpos;
                }
  
--        COMPILE::SWF
                private function handleHorizontalScroll(event:Event):void
                {
                        var host:UIBase = UIBase(_strand);
                        var hpos:Number = 
ScrollBarModel(_horizontalScroller.model).value;
--                      var rect:Rectangle = contentArea.scrollRect;
++                      var rect:flash.geom.Rectangle = contentArea.scrollRect;
                        rect.x = hpos;
                        contentArea.scrollRect = rect;
  
                        _horizontalScrollPosition = hpos;
                }
  
--        COMPILE::SWF
                private function handleVerticalScrollChange():void
                {
                        if (_verticalScroller) {
@@@ -343,7 -343,7 +325,6 @@@
                        }
                }
  
--        COMPILE::SWF
                private function handleHorizontalScrollChange():void
                {
                        if (_horizontalScroller) {

Reply via email to