Repository: flex-asjs
Updated Branches:
  refs/heads/develop 5f245d318 -> a3327854e


Framework updates. Now layouts do not have to know anything about viewports and 
viewport models.


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

Branch: refs/heads/develop
Commit: a3327854e04a9265251eabed7fcb79cad8046d53
Parents: 5f245d3
Author: Peter Ent <[email protected]>
Authored: Thu Jul 23 16:40:19 2015 -0400
Committer: Peter Ent <[email protected]>
Committed: Thu Jul 23 16:40:19 2015 -0400

----------------------------------------------------------------------
 .../org/apache/flex/charts/beads/ChartView.as   |   4 +
 .../charts/beads/HorizontalCategoryAxisBead.as  |  11 +-
 .../charts/beads/HorizontalLinearAxisBead.as    |  11 +-
 .../charts/beads/VerticalCategoryAxisBead.as    |  11 +-
 .../flex/charts/beads/VerticalLinearAxisBead.as |  11 +-
 .../flex/charts/beads/layouts/BarChartLayout.as |  10 +-
 .../charts/beads/layouts/ColumnChartLayout.as   |  10 +-
 .../charts/supportClasses/ChartAxisGroup.js     |   6 +
 .../HTML/as/src/org/apache/flex/html/List.as    |   2 +-
 .../org/apache/flex/html/beads/ButtonBarView.as |   4 +-
 .../org/apache/flex/html/beads/ContainerView.as |  28 +++-
 .../src/org/apache/flex/html/beads/ListView.as  |  11 +-
 .../src/org/apache/flex/html/beads/PanelView.as |   2 +-
 .../flex/html/beads/layouts/BasicLayout.as      |  30 ----
 .../flex/html/beads/layouts/ButtonBarLayout.as  |  39 ++----
 .../flex/html/beads/layouts/HorizontalLayout.as |  37 +----
 .../flex/html/beads/layouts/TileLayout.as       |  37 +----
 .../flex/html/beads/layouts/VerticalLayout.as   |  37 +----
 .../org/apache/flex/html/MXMLBeadViewBase.as    |   1 +
 .../HTML/js/src/org/apache/flex/html/Panel.js   |   2 +
 .../org/apache/flex/html/beads/ContainerView.js | 137 ++++++++++++++++++-
 .../src/org/apache/flex/html/beads/PanelView.js |  18 ++-
 .../flex/html/beads/layouts/ButtonBarLayout.js  |   2 +
 .../flex/html/beads/layouts/TileLayout.js       |  29 ++++
 .../html/supportClasses/ScrollingViewport.js    |  37 ++++-
 .../apache/flex/html/supportClasses/Viewport.js |  24 +++-
 26 files changed, 316 insertions(+), 235 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/a3327854/frameworks/projects/Charts/asjs/src/org/apache/flex/charts/beads/ChartView.as
----------------------------------------------------------------------
diff --git 
a/frameworks/projects/Charts/asjs/src/org/apache/flex/charts/beads/ChartView.as 
b/frameworks/projects/Charts/asjs/src/org/apache/flex/charts/beads/ChartView.as
index f8bcc93..90b9097 100644
--- 
a/frameworks/projects/Charts/asjs/src/org/apache/flex/charts/beads/ChartView.as
+++ 
b/frameworks/projects/Charts/asjs/src/org/apache/flex/charts/beads/ChartView.as
@@ -26,6 +26,7 @@ package org.apache.flex.charts.beads
        import org.apache.flex.core.IParent;
        import org.apache.flex.core.ISelectionModel;
        import org.apache.flex.core.IStrand;
+       import org.apache.flex.core.IViewport;
        import org.apache.flex.core.IViewportModel;
        import org.apache.flex.core.UIBase;
        import org.apache.flex.core.UIMetrics;
@@ -33,6 +34,8 @@ package org.apache.flex.charts.beads
        import org.apache.flex.events.Event;
        import org.apache.flex.events.IEventDispatcher;
        import org.apache.flex.html.beads.ListView;
+       import org.apache.flex.html.beads.models.ViewportModel;
+       import org.apache.flex.html.supportClasses.Viewport;
        import org.apache.flex.utils.BeadMetrics;
        
        public class ChartView extends ListView implements IBeadView
@@ -92,6 +95,7 @@ package org.apache.flex.charts.beads
                override protected function viewCreatedHandler(event:Event):void
                {
                        // prevented because itemsCreated needs to happen first
+                       createViewport();
                }
                
                public function get horizontalAxisGroup():IAxisGroup

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/a3327854/frameworks/projects/Charts/asjs/src/org/apache/flex/charts/beads/HorizontalCategoryAxisBead.as
----------------------------------------------------------------------
diff --git 
a/frameworks/projects/Charts/asjs/src/org/apache/flex/charts/beads/HorizontalCategoryAxisBead.as
 
b/frameworks/projects/Charts/asjs/src/org/apache/flex/charts/beads/HorizontalCategoryAxisBead.as
index 48e5338..0adcb2c 100644
--- 
a/frameworks/projects/Charts/asjs/src/org/apache/flex/charts/beads/HorizontalCategoryAxisBead.as
+++ 
b/frameworks/projects/Charts/asjs/src/org/apache/flex/charts/beads/HorizontalCategoryAxisBead.as
@@ -131,6 +131,8 @@ package org.apache.flex.charts.beads
                        return 0;
                }
                
+               private var _strand:IStrand;
+               
                /**
                 *  @copy org.apache.flex.core.IBead#strand
                 *  
@@ -141,15 +143,16 @@ package org.apache.flex.charts.beads
                 */
                override public function set strand(value:IStrand):void
                {
+                       _strand = value;
                        super.strand = value;
                        
                        // in order to draw or create the labels, need to know 
when the series has been created.
                        
IEventDispatcher(value).addEventListener("layoutComplete",handleItemsCreated);
                }
-        override public function get strand():IStrand
-        {
-            return super.strand;
-        }
+               override public function get strand():IStrand
+               {
+                       return _strand;
+               }
                
                /**
                 * @private

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/a3327854/frameworks/projects/Charts/asjs/src/org/apache/flex/charts/beads/HorizontalLinearAxisBead.as
----------------------------------------------------------------------
diff --git 
a/frameworks/projects/Charts/asjs/src/org/apache/flex/charts/beads/HorizontalLinearAxisBead.as
 
b/frameworks/projects/Charts/asjs/src/org/apache/flex/charts/beads/HorizontalLinearAxisBead.as
index b1ef99f..a96fb2d 100644
--- 
a/frameworks/projects/Charts/asjs/src/org/apache/flex/charts/beads/HorizontalLinearAxisBead.as
+++ 
b/frameworks/projects/Charts/asjs/src/org/apache/flex/charts/beads/HorizontalLinearAxisBead.as
@@ -134,6 +134,8 @@ package org.apache.flex.charts.beads
                        _maximum = value;
                }
                
+               private var _strand:IStrand;
+               
                /**
                 *  @copy org.apache.flex.core.IBead#strand
                 *  
@@ -144,15 +146,16 @@ package org.apache.flex.charts.beads
                 */
                override public function set strand(value:IStrand):void
                {
+                       _strand = value;
                        super.strand = value;
                        
                        // in order to draw or create the labels, need to know 
when the series has been created.
                        
IEventDispatcher(strand).addEventListener("layoutComplete",handleItemsCreated);
                }
-        override public function get strand():IStrand
-        {
-            return super.strand;
-        }
+               override public function get strand():IStrand
+               {
+                       return _strand;
+               }
                
                /**
                 * @private

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/a3327854/frameworks/projects/Charts/asjs/src/org/apache/flex/charts/beads/VerticalCategoryAxisBead.as
----------------------------------------------------------------------
diff --git 
a/frameworks/projects/Charts/asjs/src/org/apache/flex/charts/beads/VerticalCategoryAxisBead.as
 
b/frameworks/projects/Charts/asjs/src/org/apache/flex/charts/beads/VerticalCategoryAxisBead.as
index 1cd3cf9..d89819d 100644
--- 
a/frameworks/projects/Charts/asjs/src/org/apache/flex/charts/beads/VerticalCategoryAxisBead.as
+++ 
b/frameworks/projects/Charts/asjs/src/org/apache/flex/charts/beads/VerticalCategoryAxisBead.as
@@ -55,6 +55,8 @@ package org.apache.flex.charts.beads
                        
                        placement = "left";
                }
+               
+               private var _strand:IStrand;
                                
                /**
                 *  @copy org.apache.flex.core.IBead#strand
@@ -66,15 +68,16 @@ package org.apache.flex.charts.beads
                 */
                override public function set strand(value:IStrand):void
                {
+                       _strand = value;
                        super.strand = value;
                        
                        // in order to draw or create the labels, need to know 
when the series has been created.
                        
IEventDispatcher(strand).addEventListener("layoutComplete",handleItemsCreated);
                }
-        override public function get strand():IStrand
-        {
-            return super.strand;
-        }
+               override public function get strand():IStrand
+               {
+                       return _strand;
+               }
 
                private var _categoryField:String;
                

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/a3327854/frameworks/projects/Charts/asjs/src/org/apache/flex/charts/beads/VerticalLinearAxisBead.as
----------------------------------------------------------------------
diff --git 
a/frameworks/projects/Charts/asjs/src/org/apache/flex/charts/beads/VerticalLinearAxisBead.as
 
b/frameworks/projects/Charts/asjs/src/org/apache/flex/charts/beads/VerticalLinearAxisBead.as
index f07951a..823da8d 100644
--- 
a/frameworks/projects/Charts/asjs/src/org/apache/flex/charts/beads/VerticalLinearAxisBead.as
+++ 
b/frameworks/projects/Charts/asjs/src/org/apache/flex/charts/beads/VerticalLinearAxisBead.as
@@ -45,6 +45,8 @@ package org.apache.flex.charts.beads
                        
                        placement = "left";
                }
+               
+               private var _strand:IStrand;
                                
                /**
                 *  @copy org.apache.flex.core.IBead#strand
@@ -56,15 +58,16 @@ package org.apache.flex.charts.beads
                 */
                override public function set strand(value:IStrand):void
                {
+                       _strand = value;
                        super.strand = value;
                        
                        // in order to draw or create the labels, need to know 
when the series has been created.
                        
IEventDispatcher(strand).addEventListener("layoutComplete",handleItemsCreated);
                }
-        override public function get strand():IStrand
-        {
-            return super.strand;
-        }
+               override public function get strand():IStrand
+               {
+                       return _strand;
+               }
                
                private var _axisWidth:Number = 50;
                

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/a3327854/frameworks/projects/Charts/asjs/src/org/apache/flex/charts/beads/layouts/BarChartLayout.as
----------------------------------------------------------------------
diff --git 
a/frameworks/projects/Charts/asjs/src/org/apache/flex/charts/beads/layouts/BarChartLayout.as
 
b/frameworks/projects/Charts/asjs/src/org/apache/flex/charts/beads/layouts/BarChartLayout.as
index 6754055..076fb0a 100644
--- 
a/frameworks/projects/Charts/asjs/src/org/apache/flex/charts/beads/layouts/BarChartLayout.as
+++ 
b/frameworks/projects/Charts/asjs/src/org/apache/flex/charts/beads/layouts/BarChartLayout.as
@@ -24,8 +24,6 @@ package org.apache.flex.charts.beads.layouts
        import org.apache.flex.charts.supportClasses.BarSeries;
        import org.apache.flex.core.IBeadLayout;
        import org.apache.flex.core.ISelectionModel;
-       import org.apache.flex.core.IViewport;
-       import org.apache.flex.core.IViewportModel;
        import org.apache.flex.core.UIBase;
        import org.apache.flex.events.Event;
        import org.apache.flex.events.IEventDispatcher;
@@ -85,13 +83,9 @@ package org.apache.flex.charts.beads.layouts
                        if (!dp)
                                return;
                        
-                       // this layout will use and modify the IViewportMode
-                       var viewport:IViewport = chart.getBeadByType(IViewport) 
as IViewport;
-                       var viewportModel:IViewportModel = viewport.model;
-                       
                        var n:int = dp.length;
-                       var useWidth:Number = viewportModel.contentWidth;
-                       var useHeight:Number = viewportModel.contentHeight;
+                       var useWidth:Number = UIBase(chartDataGroup).width;
+                       var useHeight:Number = UIBase(chartDataGroup).height;
                        var itemHeight:Number =  (useHeight - 
gap*(dp.length-1))/dp.length;
                        var seriesHeight:Number = 
itemHeight/chart.series.length;
                        var ypos:Number = useHeight;

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/a3327854/frameworks/projects/Charts/asjs/src/org/apache/flex/charts/beads/layouts/ColumnChartLayout.as
----------------------------------------------------------------------
diff --git 
a/frameworks/projects/Charts/asjs/src/org/apache/flex/charts/beads/layouts/ColumnChartLayout.as
 
b/frameworks/projects/Charts/asjs/src/org/apache/flex/charts/beads/layouts/ColumnChartLayout.as
index 47dd0e5..0d8c019 100644
--- 
a/frameworks/projects/Charts/asjs/src/org/apache/flex/charts/beads/layouts/ColumnChartLayout.as
+++ 
b/frameworks/projects/Charts/asjs/src/org/apache/flex/charts/beads/layouts/ColumnChartLayout.as
@@ -24,8 +24,6 @@ package org.apache.flex.charts.beads.layouts
        import org.apache.flex.charts.supportClasses.ColumnSeries;
        import org.apache.flex.core.IBeadLayout;
        import org.apache.flex.core.ISelectionModel;
-       import org.apache.flex.core.IViewport;
-       import org.apache.flex.core.IViewportModel;
        import org.apache.flex.core.UIBase;
        import org.apache.flex.events.Event;
        import org.apache.flex.events.IEventDispatcher;
@@ -76,14 +74,10 @@ package org.apache.flex.charts.beads.layouts
                        if (!dp)
                                return;
                        
-                       // this layout will use and modify the IViewportMode
-                       var viewport:IViewport = chart.getBeadByType(IViewport) 
as IViewport;
-                       var viewportModel:IViewportModel = viewport.model;
-                       
                        var n:int = dp.length;
                        var xpos:Number = 0;
-                       var useWidth:Number = viewportModel.contentWidth;
-                       var useHeight:Number = viewportModel.contentHeight;
+                       var useWidth:Number = UIBase(chartDataGroup).width;
+                       var useHeight:Number = UIBase(chartDataGroup).height;
                        var itemWidth:Number =  (useWidth - 
gap*(dp.length-1))/dp.length;
                        var seriesWidth:Number = itemWidth/chart.series.length;
                        

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/a3327854/frameworks/projects/Charts/js/src/org/apache/flex/charts/supportClasses/ChartAxisGroup.js
----------------------------------------------------------------------
diff --git 
a/frameworks/projects/Charts/js/src/org/apache/flex/charts/supportClasses/ChartAxisGroup.js
 
b/frameworks/projects/Charts/js/src/org/apache/flex/charts/supportClasses/ChartAxisGroup.js
index 397c6c9..a0d17dc 100644
--- 
a/frameworks/projects/Charts/js/src/org/apache/flex/charts/supportClasses/ChartAxisGroup.js
+++ 
b/frameworks/projects/Charts/js/src/org/apache/flex/charts/supportClasses/ChartAxisGroup.js
@@ -69,6 +69,7 @@ org.apache.flex.charts.supportClasses.ChartAxisGroup.
  * @param {number} boxWidth The size of the area for the label.
  * @param {number} boxHeight The size of the area for the label.
  * @param {org.apache.flex.core.graphics.IStroke} tickFill The color of the 
path.
+ * @return {Object} The label.
  */
 
org.apache.flex.charts.supportClasses.ChartAxisGroup.prototype.drawHorizontalTickLabel
 =
 function(text, xpos, ypos, boxWidth, boxHeight, tickFill) {
@@ -77,6 +78,7 @@ function(text, xpos, ypos, boxWidth, boxHeight, tickFill) {
   label.text = text;
   label.x = xpos - label.width / 2;
   label.y = ypos;
+  return label;
 };
 
 
@@ -88,6 +90,7 @@ function(text, xpos, ypos, boxWidth, boxHeight, tickFill) {
  * @param {number} boxWidth The size of the area for the label.
  * @param {number} boxHeight The size of the area for the label.
  * @param {org.apache.flex.core.graphics.IStroke} tickFill The color of the 
path.
+ * @return {Object} The label.
  */
 
org.apache.flex.charts.supportClasses.ChartAxisGroup.prototype.drawVerticalTickLabel
 =
 function(text, xpos, ypos, boxWidth, boxHeight, tickFill) {
@@ -96,6 +99,7 @@ function(text, xpos, ypos, boxWidth, boxHeight, tickFill) {
   label.text = text;
   label.x = xpos;
   label.y = ypos - label.height / 2;
+  return label;
 };
 
 
@@ -107,6 +111,7 @@ function(text, xpos, ypos, boxWidth, boxHeight, tickFill) {
  * @param {number} height The size of the area for the path.
  * @param {string} marks The path to draw.
  * @param {org.apache.flex.core.graphics.IStroke} tickStroke The color of the 
path.
+ * @return {Object} The tick path.
  */
 org.apache.flex.charts.supportClasses.ChartAxisGroup.prototype.drawTickMarks =
 function(originX, originY, width, height, marks, tickStroke) {
@@ -118,6 +123,7 @@ function(originX, originY, width, height, marks, 
tickStroke) {
   this.addElement(tickPath);
   tickPath.stroke = tickStroke;
   tickPath.drawPath(0, 0, marks);
+  return tickPath;
 };
 
 

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/a3327854/frameworks/projects/HTML/as/src/org/apache/flex/html/List.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/HTML/as/src/org/apache/flex/html/List.as 
b/frameworks/projects/HTML/as/src/org/apache/flex/html/List.as
index 179674d..7e4d744 100644
--- a/frameworks/projects/HTML/as/src/org/apache/flex/html/List.as
+++ b/frameworks/projects/HTML/as/src/org/apache/flex/html/List.as
@@ -226,7 +226,7 @@ package org.apache.flex.html
                                itemRendererFactory = new 
(ValuesManager.valuesImpl.getValue(this, "iItemRendererClassFactory")) as 
IItemRendererClassFactory;
                                addBead(itemRendererFactory);
                        }
-                       IEventDispatcher(this).dispatchEvent(new 
Event("layoutNeeded"));
+//                     IEventDispatcher(this).dispatchEvent(new 
Event("layoutNeeded"));
                }
         
        }

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/a3327854/frameworks/projects/HTML/as/src/org/apache/flex/html/beads/ButtonBarView.as
----------------------------------------------------------------------
diff --git 
a/frameworks/projects/HTML/as/src/org/apache/flex/html/beads/ButtonBarView.as 
b/frameworks/projects/HTML/as/src/org/apache/flex/html/beads/ButtonBarView.as
index 378d9b4..86e9b55 100644
--- 
a/frameworks/projects/HTML/as/src/org/apache/flex/html/beads/ButtonBarView.as
+++ 
b/frameworks/projects/HTML/as/src/org/apache/flex/html/beads/ButtonBarView.as
@@ -77,9 +77,7 @@ package org.apache.flex.html.beads
                        // the ButtonBar is always matched to its size so it is
                        // important that the contentWidth/Height match the 
host's
                        // width/height
-                       
-                       trace("BBSize: "+UIBase(host).width);
-                       
+                                               
                        viewportModel.contentWidth = UIBase(host).width;
                        viewportModel.contentHeight = UIBase(host).height;
                        

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/a3327854/frameworks/projects/HTML/as/src/org/apache/flex/html/beads/ContainerView.as
----------------------------------------------------------------------
diff --git 
a/frameworks/projects/HTML/as/src/org/apache/flex/html/beads/ContainerView.as 
b/frameworks/projects/HTML/as/src/org/apache/flex/html/beads/ContainerView.as
index 517d22d..8d3d7fe 100644
--- 
a/frameworks/projects/HTML/as/src/org/apache/flex/html/beads/ContainerView.as
+++ 
b/frameworks/projects/HTML/as/src/org/apache/flex/html/beads/ContainerView.as
@@ -103,14 +103,12 @@ package org.apache.flex.html.beads
                
                protected function initCompleteHandler(event:Event):void
                {
-                       trace("initCompleteHandler: completeSetup for 
"+UIBase(_strand).id);
                        // if the host component is not being sized by 
percentage, go ahead and complete the setup.
                        if (isNaN((host as UIBase).percentHeight) && 
isNaN((host as UIBase).percentWidth)) {
                                completeSetup();
                                performLayout(event);
                        }
                        else {
-                               trace(" -- deferring setup for 
"+UIBase(_strand).id);
                                // otherwise, wait until the size has been set 
and then finish
                                host.addEventListener("sizeChanged", 
deferredSizeHandler);
                        }
@@ -118,7 +116,6 @@ package org.apache.flex.html.beads
                
                protected function deferredSizeHandler(event:Event):void
                {
-                       trace("deferredSizeHandler ("+event.type+"): 
"+UIBase(_strand).id);
                        host.removeEventListener(event.type, 
deferredSizeHandler);
                        completeSetup();
                        performLayout(event);
@@ -204,6 +201,7 @@ package org.apache.flex.html.beads
                        
                        if (layout) {
                                layout.layout();
+                               determineContentSizeFromChildren();
                        }
                        
                        adjustSizeAfterLayout();
@@ -213,7 +211,7 @@ package org.apache.flex.html.beads
                {
                        var host:UIBase = _strand as UIBase;
                        var metrics:UIMetrics = BeadMetrics.getMetrics(host);
-                       
+                                               
                        if (host.isWidthSizedToContent() && 
host.isHeightSizedToContent()) {                                    
                                
host.setWidthAndHeight(viewportModel.contentWidth+metrics.left+metrics.right, 
                                        
viewportModel.contentHeight+metrics.top+metrics.bottom, false);
@@ -238,6 +236,28 @@ package org.apache.flex.html.beads
                        }
                }
                
+               protected function determineContentSizeFromChildren():void
+               {
+                       // pass through all of the children and determine the 
maxWidth and maxHeight
+                       // note: this is not done on the JavaScript side 
because the browser handles
+                       // this automatically.
+                       var maxWidth:Number = 0;
+                       var maxHeight:Number = 0;
+                       var num:Number = contentView.numElements;
+                       
+                       for (var i:int=0; i < num; i++) {
+                               var child:IUIBase = contentView.getElementAt(i) 
as IUIBase;
+                               if (child == null || !child.visible) continue;
+                               var childXMax:Number = child.x + child.width;
+                               var childYMax:Number = child.y + child.height;
+                               maxWidth = Math.max(maxWidth, childXMax);
+                               maxHeight = Math.max(maxHeight, childYMax);
+                       }
+                       
+                       viewportModel.contentWidth = 
Math.max(maxWidth,contentView.width);
+                       viewportModel.contentHeight = 
Math.max(maxHeight,contentView.height);
+               }
+               
                protected function resizeViewport():void
                {
                        // the viewport takes the entire space as there is no 
default chrome.

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/a3327854/frameworks/projects/HTML/as/src/org/apache/flex/html/beads/ListView.as
----------------------------------------------------------------------
diff --git 
a/frameworks/projects/HTML/as/src/org/apache/flex/html/beads/ListView.as 
b/frameworks/projects/HTML/as/src/org/apache/flex/html/beads/ListView.as
index 08bea38..e98db41 100644
--- a/frameworks/projects/HTML/as/src/org/apache/flex/html/beads/ListView.as
+++ b/frameworks/projects/HTML/as/src/org/apache/flex/html/beads/ListView.as
@@ -152,7 +152,7 @@ package org.apache.flex.html.beads
                        
                        host.removeEventListener("childrenAdded", 
childrenChangedHandler);
                        host.removeEventListener("childrenAdded", 
performLayout);
-                       host.addEventListener("itemsCreated", performLayout);
+                       host.addEventListener("itemsCreated", 
itemsCreatedHandler);
                        
                        listModel = _strand.getBeadByType(ISelectionModel) as 
ISelectionModel;
                        listModel.addEventListener("selectedIndexChanged", 
selectionChangeHandler);
@@ -173,9 +173,16 @@ package org.apache.flex.html.beads
                /**
                 * @private
                 */
+               protected function itemsCreatedHandler(event:Event):void
+               {
+                       performLayout(event);
+               }
+               
+               /**
+                * @private
+                */
                protected function dataProviderChangeHandler(event:Event):void
                {
-                       // override if needed
                        performLayout(event);
                }
                

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/a3327854/frameworks/projects/HTML/as/src/org/apache/flex/html/beads/PanelView.as
----------------------------------------------------------------------
diff --git 
a/frameworks/projects/HTML/as/src/org/apache/flex/html/beads/PanelView.as 
b/frameworks/projects/HTML/as/src/org/apache/flex/html/beads/PanelView.as
index 2d3e4e4..ebfa27a 100644
--- a/frameworks/projects/HTML/as/src/org/apache/flex/html/beads/PanelView.as
+++ b/frameworks/projects/HTML/as/src/org/apache/flex/html/beads/PanelView.as
@@ -148,7 +148,7 @@ package org.apache.flex.html.beads
                {
                        var host:UIBase = UIBase(_strand);
                        var viewportModel:IViewportModel = viewport.model;
-                       
+                                               
                        titleBar.x = 0;
                        titleBar.y = 0;
                        titleBar.width = host.width;

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/a3327854/frameworks/projects/HTML/as/src/org/apache/flex/html/beads/layouts/BasicLayout.as
----------------------------------------------------------------------
diff --git 
a/frameworks/projects/HTML/as/src/org/apache/flex/html/beads/layouts/BasicLayout.as
 
b/frameworks/projects/HTML/as/src/org/apache/flex/html/beads/layouts/BasicLayout.as
index 62304cb..bfdf68f 100644
--- 
a/frameworks/projects/HTML/as/src/org/apache/flex/html/beads/layouts/BasicLayout.as
+++ 
b/frameworks/projects/HTML/as/src/org/apache/flex/html/beads/layouts/BasicLayout.as
@@ -25,8 +25,6 @@ package org.apache.flex.html.beads.layouts
        import org.apache.flex.core.IParentIUIBase;
        import org.apache.flex.core.IStrand;
        import org.apache.flex.core.IUIBase;
-       import org.apache.flex.core.IViewport;
-       import org.apache.flex.core.IViewportModel;
        import org.apache.flex.core.ValuesManager;
        import org.apache.flex.events.Event;
        import org.apache.flex.events.IEventDispatcher;
@@ -74,25 +72,6 @@ package org.apache.flex.html.beads.layouts
                {
             host = value as ILayoutChild;
                }
-               
-               private var _viewportModel:IViewportModel;
-               
-               /**
-                *  The data that describes the viewport used by this layout.
-                *  
-                *  @langversion 3.0
-                *  @playerversion Flash 10.2
-                *  @playerversion AIR 2.6
-                *  @productversion FlexJS 0.0
-                */
-               public function get viewportModel():IViewportModel
-               {
-                       return _viewportModel;
-               }
-               public function set viewportModel(value:IViewportModel):void
-               {
-                       _viewportModel = value;
-               }
                
         /**
          * @copy org.apache.flex.core.IBeadLayout#layout
@@ -103,10 +82,6 @@ package org.apache.flex.html.beads.layouts
                        var layoutParent:ILayoutParent = 
host.getBeadByType(ILayoutParent) as ILayoutParent;
                        var contentView:IParentIUIBase = layoutParent ? 
layoutParent.contentView : IParentIUIBase(host);
                        
-                       // this layout will use and modify the IViewportMode
-                       var viewport:IViewport = host.getBeadByType(IViewport) 
as IViewport;
-                       viewportModel = viewport.model;
-                       
             var hostWidthSizedToContent:Boolean = host.isWidthSizedToContent();
             var hostHeightSizedToContent:Boolean = 
host.isHeightSizedToContent();
             var w:Number = hostWidthSizedToContent ? 0 : contentView.width;
@@ -258,11 +233,6 @@ package org.apache.flex.html.beads.layouts
                 }
             }
                        
-                       if (viewportModel != null) {
-                               viewportModel.contentWidth = maxWidth;
-                               viewportModel.contentHeight = maxHeight;
-                       }
-                       
             return true;
                }
        }

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/a3327854/frameworks/projects/HTML/as/src/org/apache/flex/html/beads/layouts/ButtonBarLayout.as
----------------------------------------------------------------------
diff --git 
a/frameworks/projects/HTML/as/src/org/apache/flex/html/beads/layouts/ButtonBarLayout.as
 
b/frameworks/projects/HTML/as/src/org/apache/flex/html/beads/layouts/ButtonBarLayout.as
index d386e47..d56f11c 100644
--- 
a/frameworks/projects/HTML/as/src/org/apache/flex/html/beads/layouts/ButtonBarLayout.as
+++ 
b/frameworks/projects/HTML/as/src/org/apache/flex/html/beads/layouts/ButtonBarLayout.as
@@ -27,8 +27,6 @@ package org.apache.flex.html.beads.layouts
        import org.apache.flex.core.ISelectionModel;
        import org.apache.flex.core.IStrand;
        import org.apache.flex.core.IUIBase;
-       import org.apache.flex.core.IViewport;
-       import org.apache.flex.core.IViewportModel;
        import org.apache.flex.core.UIBase;
        import org.apache.flex.core.ValuesManager;
        import org.apache.flex.events.Event;
@@ -75,25 +73,6 @@ package org.apache.flex.html.beads.layouts
                        _strand = value;
                }
                
-               private var _viewportModel:IViewportModel;
-               
-               /**
-                *  The data that describes the viewport used by this layout.
-                *  
-                *  @langversion 3.0
-                *  @playerversion Flash 10.2
-                *  @playerversion AIR 2.6
-                *  @productversion FlexJS 0.0
-                */
-               public function get viewportModel():IViewportModel
-               {
-                       return _viewportModel;
-               }
-               public function set viewportModel(value:IViewportModel):void
-               {
-                       _viewportModel = value;
-               }
-               
                private var _buttonWidths:Array = null;
                
                /**
@@ -123,11 +102,7 @@ package org.apache.flex.html.beads.layouts
                        var contentView:IParent = layoutParent.contentView;
                        var itemRendererParent:IItemRendererParent = 
contentView as IItemRendererParent;
                        
-                       // this layout will use and modify the IViewportMode
-                       var viewport:IViewport = 
_strand.getBeadByType(IViewport) as IViewport;
-                       if (viewport) viewportModel = viewport.model;
-                       
-                       var n:int = itemRendererParent.numElements;
+                       var n:int = contentView.numElements;
                        var realN:int = n;
                        
                        for (var j:int=0; j < n; j++)
@@ -137,19 +112,23 @@ package org.apache.flex.html.beads.layouts
                        }
                        
                        var xpos:Number = 0;
-                       var useWidth:Number = viewportModel.contentWidth / 
realN;
-                       var useHeight:Number = viewportModel.contentHeight;
+                       var useWidth:Number = UIBase(contentView).width / realN;
+                       var useHeight:Number = UIBase(contentView).height;
                        
                        for (var i:int=0; i < n; i++)
                        {
                                var ir:ISelectableItemRenderer = 
itemRendererParent.getElementAt(i) as ISelectableItemRenderer;
                                if (ir == null || !UIBase(ir).visible) continue;
                                UIBase(ir).y = 0;
-                               UIBase(ir).height = useHeight;
                                UIBase(ir).x = xpos;
+                               if (!isNaN(useHeight) && useHeight > 0) {
+                                       UIBase(ir).height = useHeight;
+                               }
                                
                                if (buttonWidths) UIBase(ir).width = 
Number(buttonWidths[i]);
-                               else UIBase(ir).width = useWidth;
+                               else if (!isNaN(useWidth) && useWidth > 0) {
+                                       UIBase(ir).width = useWidth;
+                               }
                                xpos += UIBase(ir).width;
                        }
             return true;

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/a3327854/frameworks/projects/HTML/as/src/org/apache/flex/html/beads/layouts/HorizontalLayout.as
----------------------------------------------------------------------
diff --git 
a/frameworks/projects/HTML/as/src/org/apache/flex/html/beads/layouts/HorizontalLayout.as
 
b/frameworks/projects/HTML/as/src/org/apache/flex/html/beads/layouts/HorizontalLayout.as
index 0b8dc97..0ab6103 100644
--- 
a/frameworks/projects/HTML/as/src/org/apache/flex/html/beads/layouts/HorizontalLayout.as
+++ 
b/frameworks/projects/HTML/as/src/org/apache/flex/html/beads/layouts/HorizontalLayout.as
@@ -25,8 +25,6 @@ package org.apache.flex.html.beads.layouts
        import org.apache.flex.core.IParentIUIBase;
        import org.apache.flex.core.IStrand;
        import org.apache.flex.core.IUIBase;
-       import org.apache.flex.core.IViewport;
-       import org.apache.flex.core.IViewportModel;
        import org.apache.flex.core.ValuesManager;
        import org.apache.flex.events.Event;
        import org.apache.flex.events.IEventDispatcher;
@@ -74,25 +72,6 @@ package org.apache.flex.html.beads.layouts
                {
                        host = value as ILayoutChild;
                }
-               
-               private var _viewportModel:IViewportModel;
-               
-               /**
-                *  The data that describes the viewport used by this layout.
-                *  
-                *  @langversion 3.0
-                *  @playerversion Flash 10.2
-                *  @playerversion AIR 2.6
-                *  @productversion FlexJS 0.0
-                */
-               public function get viewportModel():IViewportModel
-               {
-                       return _viewportModel;
-               }
-               public function set viewportModel(value:IViewportModel):void
-               {
-                       _viewportModel = value;
-               }
        
         /**
          * @copy org.apache.flex.core.IBeadLayout#layout
@@ -103,10 +82,6 @@ package org.apache.flex.html.beads.layouts
                        var layoutParent:ILayoutParent = 
host.getBeadByType(ILayoutParent) as ILayoutParent;
                        var contentView:IParentIUIBase = 
layoutParent.contentView;
                        
-                       // this layout will use and modify the IViewportMode
-                       var viewport:IViewport = host.getBeadByType(IViewport) 
as IViewport;
-                       if (viewport) viewportModel = viewport.model;
-                       
                        var n:int = contentView.numElements;
             var hostSizedToContent:Boolean = host.isHeightSizedToContent();
             var ilc:ILayoutChild;
@@ -261,17 +236,7 @@ package org.apache.flex.html.beads.layouts
                        
                        // Only return true if the contentView needs to be 
larger; that new
                        // size is stored in the model.
-                       var sizeChanged:Boolean = false;
-                       if (viewportModel != null) {
-                               if (viewportModel.contentHeight != maxHeight) {
-                                       viewportModel.contentHeight = maxHeight;
-                                       sizeChanged = true;
-                               }
-                               if (viewportModel.contentWidth != xx) {
-                                       viewportModel.contentWidth = xx;
-                                       sizeChanged = true;
-                               }
-                       }
+                       var sizeChanged:Boolean = true;
                        
                        host.dispatchEvent( new Event("layoutComplete") );
                        

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/a3327854/frameworks/projects/HTML/as/src/org/apache/flex/html/beads/layouts/TileLayout.as
----------------------------------------------------------------------
diff --git 
a/frameworks/projects/HTML/as/src/org/apache/flex/html/beads/layouts/TileLayout.as
 
b/frameworks/projects/HTML/as/src/org/apache/flex/html/beads/layouts/TileLayout.as
index 214b9df..87a4cc0 100644
--- 
a/frameworks/projects/HTML/as/src/org/apache/flex/html/beads/layouts/TileLayout.as
+++ 
b/frameworks/projects/HTML/as/src/org/apache/flex/html/beads/layouts/TileLayout.as
@@ -22,8 +22,6 @@ package org.apache.flex.html.beads.layouts
        import org.apache.flex.core.ILayoutParent;
        import org.apache.flex.core.IStrand;
        import org.apache.flex.core.IUIBase;
-       import org.apache.flex.core.IViewport;
-       import org.apache.flex.core.IViewportModel;
        import org.apache.flex.core.UIBase;
        import org.apache.flex.events.Event;
        import org.apache.flex.events.IEventDispatcher;
@@ -68,25 +66,6 @@ package org.apache.flex.html.beads.layouts
                        _strand = value;                        
                }
                
-               private var _viewportModel:IViewportModel;
-               
-               /**
-                *  The data that describes the viewport used by this layout.
-                *  
-                *  @langversion 3.0
-                *  @playerversion Flash 10.2
-                *  @playerversion AIR 2.6
-                *  @productversion FlexJS 0.0
-                */
-               public function get viewportModel():IViewportModel
-               {
-                       return _viewportModel;
-               }
-               public function set viewportModel(value:IViewportModel):void
-               {
-                       _viewportModel = value;
-               }
-               
                private var _numColumns:Number = 4;
                private var _columnWidth:Number = Number.NaN;
                private var _rowHeight:Number = Number.NaN;
@@ -156,10 +135,6 @@ package org.apache.flex.html.beads.layouts
                        var p:ILayoutParent = 
_strand.getBeadByType(ILayoutParent) as ILayoutParent;
                        var area:UIBase = p.contentView as UIBase;
                        
-                       // this layout will use and modify the IViewportMode
-                       var viewport:IViewport = 
_strand.getBeadByType(IViewport) as IViewport;
-                       if (viewport) viewportModel = viewport.model;
-                       
                        var xpos:Number = 0;
                        var ypos:Number = 0;
                        var useWidth:Number = columnWidth;
@@ -210,17 +185,7 @@ package org.apache.flex.html.beads.layouts
                        
                        // Only return true if the contentView needs to be 
larger; that new
                        // size is stored in the model.
-                       var sizeChanged:Boolean = false;
-                       if (viewportModel != null) {
-                               if (viewportModel.contentHeight != maxHeight) {
-                                       viewportModel.contentHeight = maxHeight;
-                                       sizeChanged = true;
-                               }
-                               if (viewportModel.contentWidth != maxWidth) {
-                                       viewportModel.contentWidth = maxWidth;
-                                       sizeChanged = true;
-                               }
-                       }
+                       var sizeChanged:Boolean = true;
                        
                        IEventDispatcher(_strand).dispatchEvent( new 
Event("layoutComplete") );
                        

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/a3327854/frameworks/projects/HTML/as/src/org/apache/flex/html/beads/layouts/VerticalLayout.as
----------------------------------------------------------------------
diff --git 
a/frameworks/projects/HTML/as/src/org/apache/flex/html/beads/layouts/VerticalLayout.as
 
b/frameworks/projects/HTML/as/src/org/apache/flex/html/beads/layouts/VerticalLayout.as
index cc7f3a5..3801a04 100644
--- 
a/frameworks/projects/HTML/as/src/org/apache/flex/html/beads/layouts/VerticalLayout.as
+++ 
b/frameworks/projects/HTML/as/src/org/apache/flex/html/beads/layouts/VerticalLayout.as
@@ -25,8 +25,6 @@ package org.apache.flex.html.beads.layouts
        import org.apache.flex.core.IParentIUIBase;
        import org.apache.flex.core.IStrand;
        import org.apache.flex.core.IUIBase;
-       import org.apache.flex.core.IViewport;
-       import org.apache.flex.core.IViewportModel;
        import org.apache.flex.core.ValuesManager;
        import org.apache.flex.events.Event;
        import org.apache.flex.events.IEventDispatcher;
@@ -75,33 +73,10 @@ package org.apache.flex.html.beads.layouts
                        host = value as ILayoutChild; 
                }
                
-               private var _viewportModel:IViewportModel;
-               
-               /**
-                *  The data that describes the viewport used by this layout.
-                *  
-                *  @langversion 3.0
-                *  @playerversion Flash 10.2
-                *  @playerversion AIR 2.6
-                *  @productversion FlexJS 0.0
-                */
-               public function get viewportModel():IViewportModel
-               {
-                       return _viewportModel;
-               }
-               public function set viewportModel(value:IViewportModel):void
-               {
-                       _viewportModel = value;
-               }
-               
                public function layout():Boolean
                {
                        var layoutParent:ILayoutParent = 
host.getBeadByType(ILayoutParent) as ILayoutParent;
                        var contentView:IParentIUIBase = layoutParent ? 
layoutParent.contentView : IParentIUIBase(host);
-                       
-                       // this layout will use and modify the IViewportMode
-                       var viewport:IViewport = host.getBeadByType(IViewport) 
as IViewport;
-                       if (viewport) viewportModel = viewport.model;
 
                        var n:int = contentView.numElements;
                        var hasHorizontalFlex:Boolean;
@@ -264,17 +239,7 @@ package org.apache.flex.html.beads.layouts
                        
                        // Only return true if the contentView needs to be 
larger; that new
                        // size is stored in the model.
-                       var sizeChanged:Boolean = false;
-                       if (viewportModel != null) {
-                               if (viewportModel.contentHeight != yy) {
-                                       viewportModel.contentHeight = yy;
-                                       sizeChanged = true;
-                               }
-                               if (viewportModel.contentWidth != maxWidth) {
-                                       viewportModel.contentWidth = maxWidth;
-                                       sizeChanged = true;
-                               }
-                       }
+                       var sizeChanged:Boolean = true;
                        
                        host.dispatchEvent( new Event("layoutComplete") );
 

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/a3327854/frameworks/projects/HTML/asjs/src/org/apache/flex/html/MXMLBeadViewBase.as
----------------------------------------------------------------------
diff --git 
a/frameworks/projects/HTML/asjs/src/org/apache/flex/html/MXMLBeadViewBase.as 
b/frameworks/projects/HTML/asjs/src/org/apache/flex/html/MXMLBeadViewBase.as
index e270058..0493f25 100644
--- a/frameworks/projects/HTML/asjs/src/org/apache/flex/html/MXMLBeadViewBase.as
+++ b/frameworks/projects/HTML/asjs/src/org/apache/flex/html/MXMLBeadViewBase.as
@@ -73,6 +73,7 @@ package org.apache.flex.html
          */
         override public function set strand(value:IStrand):void
         {
+                       _strand = value;
             super.strand = value;
             // each MXML file can also have styles in fx:Style block
             ValuesManager.valuesImpl.init(this);

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/a3327854/frameworks/projects/HTML/js/src/org/apache/flex/html/Panel.js
----------------------------------------------------------------------
diff --git a/frameworks/projects/HTML/js/src/org/apache/flex/html/Panel.js 
b/frameworks/projects/HTML/js/src/org/apache/flex/html/Panel.js
index cb159c6..15882c4 100644
--- a/frameworks/projects/HTML/js/src/org/apache/flex/html/Panel.js
+++ b/frameworks/projects/HTML/js/src/org/apache/flex/html/Panel.js
@@ -56,6 +56,7 @@ org.apache.flex.html.Panel.prototype.addElement = function(c) 
{
   }
   else {
     this.contentArea.appendChild(c.element);
+    this.dispatchEvent('childrenAdded');
   }
   c.addedToParent();
 };
@@ -76,6 +77,7 @@ org.apache.flex.html.Panel.prototype.addElementAt =
     this.contentArea.insertBefore(c.element,
         children[index]);
     c.addedToParent();
+    this.dispatchEvent('childrenAdded');
   }
 };
 

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/a3327854/frameworks/projects/HTML/js/src/org/apache/flex/html/beads/ContainerView.js
----------------------------------------------------------------------
diff --git 
a/frameworks/projects/HTML/js/src/org/apache/flex/html/beads/ContainerView.js 
b/frameworks/projects/HTML/js/src/org/apache/flex/html/beads/ContainerView.js
index 8c9a500..e60c1ed 100644
--- 
a/frameworks/projects/HTML/js/src/org/apache/flex/html/beads/ContainerView.js
+++ 
b/frameworks/projects/HTML/js/src/org/apache/flex/html/beads/ContainerView.js
@@ -17,6 +17,8 @@ goog.provide('org.apache.flex.html.beads.ContainerView');
 goog.require('org.apache.flex.core.BeadViewBase');
 goog.require('org.apache.flex.core.IBeadLayout');
 goog.require('org.apache.flex.core.ILayoutParent');
+goog.require('org.apache.flex.html.beads.models.ViewportModel');
+goog.require('org.apache.flex.html.supportClasses.Viewport');
 
 
 
@@ -58,12 +60,35 @@ org.apache.flex.html.beads.ContainerView.prototype.strand_ 
= null;
 
 
 /**
+ * @private
+ * @type {Object}
+ */
+org.apache.flex.html.beads.ContainerView.prototype.viewport_ = null;
+
+
+/**
+ * @private
+ * @type {Object}
+ */
+org.apache.flex.html.beads.ContainerView.prototype.viewportModel_ = null;
+
+
+/**
+ * @private
+ * @type {Object}
+ */
+org.apache.flex.html.beads.ContainerView.prototype.contentArea_ = null;
+
+
+/**
  *
  */
 org.apache.flex.html.beads.ContainerView.
     prototype.addOtherListeners = function() {
   this.strand_.addEventListener('childrenAdded',
       goog.bind(this.changeHandler, this));
+  this.strand_.addEventListener('elementAdded',
+      goog.bind(this.changeHandler, this));
   this.strand_.addEventListener('layoutNeeded',
      goog.bind(this.changeHandler, this));
   this.strand_.addEventListener('itemsCreated',
@@ -72,20 +97,59 @@ org.apache.flex.html.beads.ContainerView.
 
 
 /**
+ * @return {Object} The container's child content area.
+ */
+org.apache.flex.html.beads.ContainerView.
+    prototype.createContentView = function() {
+  return this.strand_;
+};
+
+
+/**
  * @param {org.apache.flex.events.Event} event The event.
  */
 org.apache.flex.html.beads.ContainerView.
     prototype.changeHandler = function(event) {
+  this.createViewport();
+
+  this.performLayout();
+};
+
+
+/**
+ * @param {org.apache.flex.events.Event} event The event.
+ */
+org.apache.flex.html.beads.ContainerView.
+    prototype.sizeChangeHandler = function(event) {
+  this.addOtherListeners();
+  this.changeHandler(event);
+};
+
+
+/**
+ * @param {org.apache.flex.events.Event} event The event.
+ */
+org.apache.flex.html.beads.ContainerView.
+    prototype.performLayout = function(event) {
   if (this.layout_ == null) {
     this.layout_ = 
this.strand_.getBeadByType(org.apache.flex.core.IBeadLayout);
     if (this.layout_ == null) {
       var m3 = 
org.apache.flex.core.ValuesManager.valuesImpl.getValue(this.strand_, 
'iBeadLayout');
       this.layout_ = new m3();
       this.strand_.addBead(this.layout_);
-      //this.layout_.strand = this.strand_;
     }
   }
   this.layout_.layout();
+
+  this.adjustSizeAfterLayout();
+};
+
+
+/**
+ *
+ */
+org.apache.flex.html.beads.ContainerView.
+    prototype.adjustSizeAfterLayout = function() {
   var max = this.layout_.maxWidth;
   if (isNaN(this.resizableView.explicitWidth) && !isNaN(max))
     this.resizableView.setWidth(max, true);
@@ -96,12 +160,47 @@ org.apache.flex.html.beads.ContainerView.
 
 
 /**
- * @param {org.apache.flex.events.Event} event The event.
+ *
  */
 org.apache.flex.html.beads.ContainerView.
-    prototype.sizeChangeHandler = function(event) {
-  this.addOtherListeners();
-  this.changeHandler(event);
+    prototype.determineContentSizeFromChildren = function() {
+  // this function has no meaning in the HTML world
+};
+
+
+/**
+ * Creates the viewport and viewportModel.
+ */
+org.apache.flex.html.beads.ContainerView.
+    prototype.createViewport = function() {
+  if (this.viewportModel_ == null) {
+    this.viewportModel_ = new 
org.apache.flex.html.beads.models.ViewportModel();
+    this.viewportModel_.contentArea = this.contentView;
+    this.viewportModel_.contentIsHost = true;
+    this.viewportModel_.contentWidth = this.strand_.width;
+    this.viewportModel_.contentHeight = this.strand_.height;
+    this.viewportModel_.contentX = 0;
+    this.viewportModel_.contentY = 0;
+  }
+  if (this.viewport_ == null) {
+    this.viewport_ = new org.apache.flex.html.supportClasses.Viewport();
+    this.viewport_.model = this.viewportModel_;
+    this.strand_.addBead(this.viewport_);
+  }
+  this.resizeViewport();
+};
+
+
+/**
+ * Adjusts the size of the viewportModel's viewport parameters to match those
+ * of the strand.
+ */
+org.apache.flex.html.beads.ContainerView.
+    prototype.resizeViewport = function() {
+  this.viewportModel_.viewportHeight = this.strand_.height;
+  this.viewportModel_.viewportWidth = this.strand_.width;
+  this.viewportModel_.viewportX = 0;
+  this.viewportModel_.viewportY = 0;
 };
 
 
@@ -110,7 +209,7 @@ 
Object.defineProperties(org.apache.flex.html.beads.ContainerView.prototype, {
     contentView: {
         /** @this {org.apache.flex.html.beads.ContainerView} */
         get: function() {
-            return this.strand_;
+            return this.contentArea_;
         }
     },
     /** @export */
@@ -127,6 +226,7 @@ 
Object.defineProperties(org.apache.flex.html.beads.ContainerView.prototype, {
         /** @this {org.apache.flex.html.beads.ContainerView} */
         set: function(value) {
             
org.apache.flex.utils.Language.superSetter(org.apache.flex.html.beads.ContainerView,
 this, 'strand', value);
+            this.contentArea_ = this.createContentView();
             if (this.strand_.isWidthSizedToContent() &&
                 this.strand_.isHeightSizedToContent())
               this.addOtherListeners();
@@ -141,7 +241,30 @@ 
Object.defineProperties(org.apache.flex.html.beads.ContainerView.prototype, {
                   !isNaN(this.strand_.explicitHeight))
                 this.addOtherListeners();
             }
-         }
+         },
+         get: function() {
+             return this.strand_;
+        }
+    },
+    /** @export */
+    viewport: {
+        /** @this {org.apache.flex.html.beads.ContainerView} */
+        set: function(value) {
+            this.viewport_ = value;
+        },
+        get: function() {
+            return this.viewport_;
+        }
+    },
+    /** @export */
+    viewportModel: {
+        /** @this {org.apache.flex.html.beads.ContainerView} */
+        set: function(value) {
+            this.viewportModel_ = value;
+        },
+        get: function() {
+            return this.viewportModel_;
+        }
     }
 
 });

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/a3327854/frameworks/projects/HTML/js/src/org/apache/flex/html/beads/PanelView.js
----------------------------------------------------------------------
diff --git 
a/frameworks/projects/HTML/js/src/org/apache/flex/html/beads/PanelView.js 
b/frameworks/projects/HTML/js/src/org/apache/flex/html/beads/PanelView.js
index e0c6d56..8cea3a0 100644
--- a/frameworks/projects/HTML/js/src/org/apache/flex/html/beads/PanelView.js
+++ b/frameworks/projects/HTML/js/src/org/apache/flex/html/beads/PanelView.js
@@ -15,6 +15,7 @@
 goog.provide('org.apache.flex.html.beads.PanelView');
 
 goog.require('org.apache.flex.html.beads.ContainerView');
+goog.require('org.apache.flex.html.supportClasses.ContainerContentArea');
 
 
 
@@ -51,15 +52,18 @@ org.apache.flex.html.beads.PanelView
                 qName: 'org.apache.flex.html.beads.PanelView'}]};
 
 
+/**
+ * @override
+ */
+org.apache.flex.html.beads.PanelView.
+    prototype.createContentView = function() {
+  var ca = new org.apache.flex.html.supportClasses.ContainerContentArea();
+  return ca;
+};
+
+
 Object.defineProperties(org.apache.flex.html.beads.PanelView.prototype, {
     /** @export */
-    contentView: {
-        /** @this {org.apache.flex.html.beads.ContainerView} */
-        get: function() {
-            return this.strand_.contentArea;
-        }
-    },
-    /** @export */
     strand: {
         /** @this {org.apache.flex.html.beads.PanelView} */
         set: function(value) {

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/a3327854/frameworks/projects/HTML/js/src/org/apache/flex/html/beads/layouts/ButtonBarLayout.js
----------------------------------------------------------------------
diff --git 
a/frameworks/projects/HTML/js/src/org/apache/flex/html/beads/layouts/ButtonBarLayout.js
 
b/frameworks/projects/HTML/js/src/org/apache/flex/html/beads/layouts/ButtonBarLayout.js
index 23636e1..9d5d149 100644
--- 
a/frameworks/projects/HTML/js/src/org/apache/flex/html/beads/layouts/ButtonBarLayout.js
+++ 
b/frameworks/projects/HTML/js/src/org/apache/flex/html/beads/layouts/ButtonBarLayout.js
@@ -92,6 +92,8 @@ org.apache.flex.html.beads.layouts.ButtonBarLayout.
     ir.positioner.style['text-align'] = 'center';
     ir.positioner.style['left-margin'] = 'auto';
     ir.positioner.style['right-margin'] = 'auto';
+    ir.positioner.style['top-margin'] = 'auto';
+    ir.positioner.style['bottom-margin'] = 'auto';
 
     if (this.buttonWidths_ && !isNaN(this.buttonWidths_[i])) ir.width = 
this.buttonWidths_[i] - 2;
     else ir.width = useWidth - 2;

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/a3327854/frameworks/projects/HTML/js/src/org/apache/flex/html/beads/layouts/TileLayout.js
----------------------------------------------------------------------
diff --git 
a/frameworks/projects/HTML/js/src/org/apache/flex/html/beads/layouts/TileLayout.js
 
b/frameworks/projects/HTML/js/src/org/apache/flex/html/beads/layouts/TileLayout.js
index 8f474aa..d00d250 100644
--- 
a/frameworks/projects/HTML/js/src/org/apache/flex/html/beads/layouts/TileLayout.js
+++ 
b/frameworks/projects/HTML/js/src/org/apache/flex/html/beads/layouts/TileLayout.js
@@ -101,6 +101,34 @@ org.apache.flex.html.beads.layouts.TileLayout.
   for (i = 0; i < n; i++)
   {
     child = children[i].flexjs_wrapper;
+    if (!child.visible) realN--;
+  }
+
+  xpos = 0;
+  ypos = 0;
+  useWidth = this.columnWidth;
+  useHeight = this.rowHeight;
+
+  if (isNaN(useWidth)) useWidth = Math.floor(this.strand_.width / 
this.numColumns); // + gap
+  if (isNaN(useHeight)) {
+    // given the width and total number of items, how many rows?
+    var numRows = Math.floor(realN / this.numColumns);
+    useHeight = Math.floor(this.strand_.height / numRows);
+  }
+
+  for (i = 0; i < n; i++)
+  {
+    child = children[i].flexjs_wrapper;
+    if (!child.visible) continue;
+    child.positioner.internalDisplay = 'inline-block';
+    child.width = useWidth;
+    child.height = useHeight;
+  }
+/*
+  var realN = n;
+  for (i = 0; i < n; i++)
+  {
+    child = children[i].flexjs_wrapper;
     if (!child.get_visible()) realN--;
   }
 
@@ -133,4 +161,5 @@ org.apache.flex.html.beads.layouts.TileLayout.
       ypos += useHeight;
     }
   }
+*/
 };

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/a3327854/frameworks/projects/HTML/js/src/org/apache/flex/html/supportClasses/ScrollingViewport.js
----------------------------------------------------------------------
diff --git 
a/frameworks/projects/HTML/js/src/org/apache/flex/html/supportClasses/ScrollingViewport.js
 
b/frameworks/projects/HTML/js/src/org/apache/flex/html/supportClasses/ScrollingViewport.js
index fad5a29..f7ac3e0 100644
--- 
a/frameworks/projects/HTML/js/src/org/apache/flex/html/supportClasses/ScrollingViewport.js
+++ 
b/frameworks/projects/HTML/js/src/org/apache/flex/html/supportClasses/ScrollingViewport.js
@@ -14,11 +14,7 @@
 
 goog.provide('org.apache.flex.html.supportClasses.ScrollingViewport');
 
-goog.require('org.apache.flex.core.IItemRenderer');
-goog.require('org.apache.flex.core.IItemRendererFactory');
-goog.require('org.apache.flex.core.UIBase');
 goog.require('org.apache.flex.events.Event');
-goog.require('org.apache.flex.utils.MXMLDataInterpreter');
 
 
 
@@ -40,6 +36,27 @@ 
org.apache.flex.html.supportClasses.ScrollingViewport.prototype.FLEXJS_CLASS_INF
                 qName: 'org.apache.flex.html.supportClasses.ScrollingViewport' 
}]};
 
 
+/**
+ * @private
+ * @type {Object}
+ */
+org.apache.flex.html.supportClasses.ScrollingViewport.prototype.strand_ = null;
+
+
+/**
+ *
+ */
+org.apache.flex.html.supportClasses.ScrollingViewport.prototype.updateSize = 
function() {
+};
+
+
+/**
+ *
+ */
+org.apache.flex.html.supportClasses.ScrollingViewport.prototype.updateContentAreaSize
 = function() {
+};
+
+
 
 
Object.defineProperties(org.apache.flex.html.supportClasses.ScrollingViewport.prototype,
 {
     /** @export */
@@ -52,5 +69,17 @@ 
Object.defineProperties(org.apache.flex.html.supportClasses.ScrollingViewport.pr
         set: function(value) {
             this.model_ = value;
         }
+    },
+    /** @export */
+    strand: {
+        /** @this {org.apache.flex.html.supportClasses.ScrollingViewport} */
+        get: function() {
+            return this.strand_;
+        },
+        /** @this {org.apache.flex.html.supportClasses.ScrollingViewport} */
+        set: function(value) {
+            this.strand_ = value;
+            this.strand_.element.style['overflow'] = 'auto';
+        }
     }
 });

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/a3327854/frameworks/projects/HTML/js/src/org/apache/flex/html/supportClasses/Viewport.js
----------------------------------------------------------------------
diff --git 
a/frameworks/projects/HTML/js/src/org/apache/flex/html/supportClasses/Viewport.js
 
b/frameworks/projects/HTML/js/src/org/apache/flex/html/supportClasses/Viewport.js
index a9ba784..d200b8e 100644
--- 
a/frameworks/projects/HTML/js/src/org/apache/flex/html/supportClasses/Viewport.js
+++ 
b/frameworks/projects/HTML/js/src/org/apache/flex/html/supportClasses/Viewport.js
@@ -14,11 +14,8 @@
 
 goog.provide('org.apache.flex.html.supportClasses.Viewport');
 
-goog.require('org.apache.flex.core.IItemRenderer');
-goog.require('org.apache.flex.core.IItemRendererFactory');
-goog.require('org.apache.flex.core.UIBase');
-goog.require('org.apache.flex.events.Event');
-goog.require('org.apache.flex.utils.MXMLDataInterpreter');
+goog.require('org.apache.flex.core.IBead');
+goog.require('org.apache.flex.core.IViewport');
 
 
 
@@ -37,9 +34,24 @@ function() {
  */
 org.apache.flex.html.supportClasses.Viewport.prototype.FLEXJS_CLASS_INFO =
     { names: [{ name: 'Viewport',
-                qName: 'org.apache.flex.html.supportClasses.Viewport' }]};
+                qName: 'org.apache.flex.html.supportClasses.Viewport' }],
+      interfaces: [org.apache.flex.core.IBead,
+                   org.apache.flex.core.IViewport]};
 
 
+/**
+ *
+ */
+org.apache.flex.html.supportClasses.Viewport.prototype.updateSize = function() 
{
+};
+
+
+/**
+ *
+ */
+org.apache.flex.html.supportClasses.Viewport.prototype.updateContentAreaSize = 
function() {
+};
+
 
 
Object.defineProperties(org.apache.flex.html.supportClasses.Viewport.prototype, 
{
     /** @export */

Reply via email to