Repository: flex-asjs
Updated Branches:
  refs/heads/develop 18b4a7a02 -> d0fa0c8c8


Resolves layout timing issues. Cleaned up Panel presentation.


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

Branch: refs/heads/develop
Commit: d0fa0c8c86a704a3ab07fb902fa412ea534b2dae
Parents: 18b4a7a
Author: Peter Ent <p...@apache.org>
Authored: Thu Jul 16 10:20:19 2015 -0400
Committer: Peter Ent <p...@apache.org>
Committed: Thu Jul 16 10:20:19 2015 -0400

----------------------------------------------------------------------
 frameworks/projects/HTML/as/defaults.css        |  4 +-
 .../org/apache/flex/html/beads/ContainerView.as | 49 +++++++++++++-------
 .../src/org/apache/flex/html/beads/PanelView.as | 15 +++---
 .../flex/html/beads/PanelWithControlBarView.as  | 38 +++++++--------
 .../flex/html/beads/SolidBackgroundBead.as      |  3 +-
 .../html/supportClasses/ScrollingViewport.as    | 12 ++---
 6 files changed, 66 insertions(+), 55 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/d0fa0c8c/frameworks/projects/HTML/as/defaults.css
----------------------------------------------------------------------
diff --git a/frameworks/projects/HTML/as/defaults.css 
b/frameworks/projects/HTML/as/defaults.css
index dc0311d..c18570a 100644
--- a/frameworks/projects/HTML/as/defaults.css
+++ b/frameworks/projects/HTML/as/defaults.css
@@ -95,7 +95,7 @@ Container
 ControlBar
 {
        IBeadView: ClassReference("org.apache.flex.html.beads.ContainerView");
-       IBeadLayout: 
ClassReference("org.apache.flex.html.beads.layouts.HorizontalLayout");
+       IBeadLayout: 
ClassReference("org.apache.flex.html.beads.layouts.FlexibleFirstChildHorizontalLayout");
        
     background-color: #CECECE;
     border-style: solid;
@@ -293,7 +293,7 @@ Container
 
 ControlBar
 {
-    IBeadLayout: 
ClassReference("org.apache.flex.html.beads.layouts.HorizontalLayout");
+       IBeadLayout: 
ClassReference("org.apache.flex.html.beads.layouts.FlexibleFirstChildHorizontalLayout");
     iMeasurementBead: 
ClassReference("org.apache.flex.html.beads.ControlBarMeasurementBead");
     iBackgroundBead: 
ClassReference("org.apache.flex.html.beads.SolidBackgroundBead");
     iBorderBead: 
ClassReference("org.apache.flex.html.beads.SingleLineBorderBead");    

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/d0fa0c8c/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 e201c64..517d22d 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
@@ -96,28 +96,32 @@ package org.apache.flex.html.beads
                        
                        displayBackgroundAndBorder(host as UIBase);
                        
+                       // listen for initComplete to signal that the strand is 
set with its size
+                       // and beads.
+                       host.addEventListener("initComplete", 
initCompleteHandler);
+               }
+               
+               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();
-                               IEventDispatcher(_strand).dispatchEvent( new 
Event("viewCreated") );
+                               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);
                        }
                }
                
-               protected function createContentView():IParentIUIBase
-               {
-                       var area:ContainerContentArea = new 
ContainerContentArea();
-                       area.className = "ActualParent";
-                       return area;
-               }
-               
                protected function deferredSizeHandler(event:Event):void
                {
+                       trace("deferredSizeHandler ("+event.type+"): 
"+UIBase(_strand).id);
                        host.removeEventListener(event.type, 
deferredSizeHandler);
-                       
                        completeSetup();
-                       IEventDispatcher(_strand).dispatchEvent( new 
Event("viewCreated") );
+                       performLayout(event);
                }
                
                protected function completeSetup():void
@@ -134,6 +138,13 @@ package org.apache.flex.html.beads
                        host.addEventListener("viewCreated", 
viewCreatedHandler);
                }
                
+               protected function createContentView():IParentIUIBase
+               {
+                       var area:ContainerContentArea = new 
ContainerContentArea();
+                       area.className = "ActualParent";
+                       return area;
+               }
+               
                protected function viewCreatedHandler(event:Event):void
                {
                        resizeViewport();
@@ -166,12 +177,14 @@ package org.apache.flex.html.beads
                                viewport.model = viewportModel;
                        }
                        
+                       var metrics:UIMetrics = BeadMetrics.getMetrics(host);
+                       
                        viewportModel.contentArea = contentView;
                        viewportModel.contentIsHost = false;
-                       viewportModel.contentWidth = host.width;
-                       viewportModel.contentHeight = host.height;
-                       viewportModel.contentX = 0;
-                       viewportModel.contentY = 0;
+                       viewportModel.contentWidth = host.width - metrics.left 
- metrics.right;
+                       viewportModel.contentHeight = host.height - metrics.top 
- metrics.bottom;
+                       viewportModel.contentX = metrics.left;
+                       viewportModel.contentY = metrics.top;
                        
                        resizeViewport();
                }
@@ -199,21 +212,23 @@ package org.apache.flex.html.beads
                protected function adjustSizeAfterLayout():void
                {
                        var host:UIBase = _strand as UIBase;
+                       var metrics:UIMetrics = BeadMetrics.getMetrics(host);
                        
                        if (host.isWidthSizedToContent() && 
host.isHeightSizedToContent()) {                                    
-                               
host.setWidthAndHeight(viewportModel.contentWidth, viewportModel.contentHeight, 
true);
+                               
host.setWidthAndHeight(viewportModel.contentWidth+metrics.left+metrics.right, 
+                                       
viewportModel.contentHeight+metrics.top+metrics.bottom, false);
                                resizeViewport();
                        }
                        else if (!host.isWidthSizedToContent() && 
host.isHeightSizedToContent())
                        {
                                viewport.needsHorizontalScroller();
-                               host.setHeight(viewportModel.contentHeight, 
false);
+                               
host.setHeight(viewportModel.contentHeight-metrics.top-metrics.bottom, false);
                                resizeViewport();
                        }
                        else if (host.isWidthSizedToContent() && 
!host.isHeightSizedToContent())
                        {
                                viewport.needsVerticalScroller();
-                               host.setWidth(viewportModel.contentWidth, 
false);
+                               
host.setWidth(viewportModel.contentWidth-metrics.left-metrics.right, false);
                                resizeViewport();
                        }
                        else {

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/d0fa0c8c/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 67da9a4..2d3e4e4 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
@@ -92,8 +92,11 @@ package org.apache.flex.html.beads
                {
             var host:UIBase = UIBase(value);
             
-            if (!_titleBar)
+            if (!_titleBar) {
                 _titleBar = new TitleBar();
+                               _titleBar.id = "panelTitleBar";
+                               _titleBar.height = 30;
+                       }
                        // replace the TitleBar's model with the Panel's model 
(it implements ITitleBarModel) so that
                        // any changes to values in the Panel's model that 
correspond values in the TitleBar will 
                        // be picked up automatically by the TitleBar.
@@ -107,7 +110,6 @@ package org.apache.flex.html.beads
                        super.completeSetup();
                        
                        UIBase(_strand).addElement(titleBar, false);
-                       titleBar.addEventListener("heightChanged", 
titleBarHeightChanged);
                }
                
                /**
@@ -119,7 +121,6 @@ package org.apache.flex.html.beads
                        var metrics:UIMetrics = BeadMetrics.getMetrics(host);
                        
                        titleBar.width = host.width;
-                       titleBar.height = 25;
                        titleBar.dispatchEvent( new Event("layoutNeeded") );
                        
                        var model:IViewportModel = viewport.model;
@@ -130,7 +131,7 @@ package org.apache.flex.html.beads
                        model.contentX = model.viewportX + metrics.left;
                        model.contentY = model.viewportY + metrics.top;
                        model.contentWidth = model.viewportWidth - metrics.left 
- metrics.right;
-                       model.contentHeight = model.viewportHeight - 
metrics.top - metrics.bottom;
+                       model.contentHeight = model.viewportHeight - 
metrics.bottom;
                        model.contentArea = contentView;
                        model.contentIsHost = false;
                        
@@ -151,6 +152,7 @@ package org.apache.flex.html.beads
                        titleBar.x = 0;
                        titleBar.y = 0;
                        titleBar.width = host.width;
+                       titleBar.dispatchEvent( new Event("layoutNeeded") );
                        
                        // If the host is being sized by its content, the 
change in the contentArea
                        // causes the host's size to change
@@ -185,11 +187,6 @@ package org.apache.flex.html.beads
                                viewport.updateContentAreaSize();
                        }
                }
-               
-               private function titleBarHeightChanged(event:Event):void
-               {
-                       resizeViewport();
-               }
                 
        }
 }

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/d0fa0c8c/frameworks/projects/HTML/as/src/org/apache/flex/html/beads/PanelWithControlBarView.as
----------------------------------------------------------------------
diff --git 
a/frameworks/projects/HTML/as/src/org/apache/flex/html/beads/PanelWithControlBarView.as
 
b/frameworks/projects/HTML/as/src/org/apache/flex/html/beads/PanelWithControlBarView.as
index 286184b..ea66f6f 100644
--- 
a/frameworks/projects/HTML/as/src/org/apache/flex/html/beads/PanelWithControlBarView.as
+++ 
b/frameworks/projects/HTML/as/src/org/apache/flex/html/beads/PanelWithControlBarView.as
@@ -103,16 +103,25 @@ package org.apache.flex.html.beads
                        var host:UIBase = UIBase(value);
                        
                        // TODO: (aharui) get class to instantiate from CSS
-                       if (!_titleBar)
+                       if (!_titleBar) {
                                _titleBar = new TitleBar();
+                               _titleBar.id = "panelTitleBar";
+                               _titleBar.height = 30;
+                       }
                        // replace the TitleBar's model with the Panel's model 
(it implements ITitleBarModel) so that
                        // any changes to values in the Panel's model that 
correspond values in the TitleBar will 
                        // be picked up automatically by the TitleBar.
-                       titleBar.model = host.model;
+                       _titleBar.model = host.model;
                        
                        var controlBarItems:Array = (host.model as 
IPanelModel).controlBar;
                        if( controlBarItems && controlBarItems.length > 0 ) {
                                _controlBar = new ControlBar();
+                               _controlBar.id = "panelControlBar";
+                               _controlBar.height = 30;
+                               
+                               for each(var comp:IUIBase in controlBarItems) {
+                                       _controlBar.addElement(comp, false);
+                               }
                        }
                        
                        super.strand = value;
@@ -123,20 +132,9 @@ package org.apache.flex.html.beads
                        super.completeSetup();
                        
                        UIBase(_strand).addElement(titleBar, false);
-                       titleBar.addEventListener("heightChanged", 
chromeHeightChanged);
                        
-                       var controlBarItems:Array = (UIBase(_strand).model as 
IPanelModel).controlBar;
-                       if( _controlBar ) {
-                               _controlBar.percentWidth = 100;
-                               _controlBar.height = 30;
-                               
-                               for each(var comp:IUIBase in controlBarItems) {
-                                       _controlBar.addElement(comp, false);
-                               }
-                               _controlBar.dispatchEvent(new 
Event("layoutNeeded"));
-                               
-                               UIBase(_strand).addElement(controlBar, false);
-                               controlBar.addEventListener("heightChanged", 
chromeHeightChanged);
+                       if (controlBar) {
+                               UIBase(_strand).addElement(_controlBar, false);
                        }
                }
                
@@ -146,8 +144,11 @@ package org.apache.flex.html.beads
                        var metrics:UIMetrics = BeadMetrics.getMetrics(host);
                        
                        titleBar.width = host.width;
+                       titleBar.dispatchEvent( new Event("layoutNeeded") );
+                       
                        if (controlBar) {
                                controlBar.width = host.width;
+                               controlBar.dispatchEvent( new 
Event("layoutNeeded") );
                                controlBar.y = host.height - controlBar.height;
                        }
                        
@@ -176,10 +177,12 @@ package org.apache.flex.html.beads
                        titleBar.x = 0;
                        titleBar.y = 0;
                        titleBar.width = host.width;
+                       titleBar.dispatchEvent( new Event("layoutNeeded") );
                        
                        if (controlBar) {
                                controlBar.width = host.width;
                                controlBar.y = host.height - controlBar.height;
+                               controlBar.dispatchEvent( new 
Event("layoutNeeded") );
                        }
                        
                        // If the host is being sized by its content, the 
change in the contentArea
@@ -225,10 +228,5 @@ package org.apache.flex.html.beads
                                viewport.updateContentAreaSize();
                        }
                }
-               
-               private function chromeHeightChanged(event:Event):void
-               {
-                       resizeViewport();
-               }
        }
 }

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/d0fa0c8c/frameworks/projects/HTML/as/src/org/apache/flex/html/beads/SolidBackgroundBead.as
----------------------------------------------------------------------
diff --git 
a/frameworks/projects/HTML/as/src/org/apache/flex/html/beads/SolidBackgroundBead.as
 
b/frameworks/projects/HTML/as/src/org/apache/flex/html/beads/SolidBackgroundBead.as
index ffa5502..696c814 100644
--- 
a/frameworks/projects/HTML/as/src/org/apache/flex/html/beads/SolidBackgroundBead.as
+++ 
b/frameworks/projects/HTML/as/src/org/apache/flex/html/beads/SolidBackgroundBead.as
@@ -75,7 +75,8 @@ package org.apache.flex.html.beads
             
             IEventDispatcher(host).addEventListener("heightChanged", 
changeHandler);
             IEventDispatcher(host).addEventListener("widthChanged", 
changeHandler);
-            IEventDispatcher(host).addEventListener("sizeChanged", 
changeHandler);
+                       IEventDispatcher(host).addEventListener("sizeChanged", 
changeHandler);
+                       IEventDispatcher(host).addEventListener("initComplete", 
changeHandler);
                        
                        var bgColor:Object = 
ValuesManager.valuesImpl.getValue(host, "background-color");
                        if( bgColor != null ) {

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/d0fa0c8c/frameworks/projects/HTML/as/src/org/apache/flex/html/supportClasses/ScrollingViewport.as
----------------------------------------------------------------------
diff --git 
a/frameworks/projects/HTML/as/src/org/apache/flex/html/supportClasses/ScrollingViewport.as
 
b/frameworks/projects/HTML/as/src/org/apache/flex/html/supportClasses/ScrollingViewport.as
index 0b55370..fdce428 100644
--- 
a/frameworks/projects/HTML/as/src/org/apache/flex/html/supportClasses/ScrollingViewport.as
+++ 
b/frameworks/projects/HTML/as/src/org/apache/flex/html/supportClasses/ScrollingViewport.as
@@ -147,23 +147,23 @@ package org.apache.flex.html.supportClasses
                        if (addVbar) needsVerticalScroller();
                        if (_verticalScroller) {
                                ScrollBarModel(_verticalScroller.model).maximum 
= model.contentHeight;
-                               
ScrollBarModel(_verticalScroller.model).pageSize = model.viewportHeight - 
metrics.top - metrics.bottom;
-                               
ScrollBarModel(_verticalScroller.model).pageStepSize = model.viewportHeight - 
metrics.top - metrics.bottom;
+                               
ScrollBarModel(_verticalScroller.model).pageSize = model.viewportHeight;// - 
metrics.top - metrics.bottom;
+                               
ScrollBarModel(_verticalScroller.model).pageStepSize = model.viewportHeight;// 
- metrics.top - metrics.bottom;
                        }
                        
                        if (addHbar) needsHorizontalScroller();
                        if (_horizontalScroller) {
                                
ScrollBarModel(_horizontalScroller.model).maximum = model.contentWidth;
-                               
ScrollBarModel(_horizontalScroller.model).pageSize = model.viewportWidth - 
metrics.left - metrics.right;
-                               
ScrollBarModel(_horizontalScroller.model).pageStepSize = model.viewportWidth - 
metrics.left - metrics.right
+                               
ScrollBarModel(_horizontalScroller.model).pageSize = model.viewportWidth;// - 
metrics.left - metrics.right;
+                               
ScrollBarModel(_horizontalScroller.model).pageStepSize = model.viewportWidth;// 
- metrics.left - metrics.right
                        }
                        
                        var rect:Rectangle = contentArea.scrollRect;
                        if (rect) {
                                rect.x = 0;
                                rect.y = 0;
-                               rect.width = model.viewportWidth - metrics.left 
- metrics.right;
-                               rect.height = model.viewportHeight - 
2*metrics.top - 2*metrics.bottom;
+                               rect.width = model.viewportWidth - 
metrics.left;// - metrics.right;
+                               rect.height = model.viewportHeight - 
2*metrics.top;// - 2*metrics.bottom;
                                contentArea.scrollRect = rect;
                        }
                }

Reply via email to