It will either work in the examples that use it or it won't.  Try it and
find out.

-Alex

On 7/30/17, 3:04 AM, "Harbs" <harbs.li...@gmail.com> wrote:

>I think I just ran into the same issue.
>
>This layout seems to more-or-less do the job, but it’s kind of heavy.
>
>I did some research into flexbox and it appear that setting flex-basis to
>0 does the job. It needs to be set on ONLY the one flexible child.
>
>Here’s a codepen which shows a use case.
>https://na01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fcodepen.i
>o%2Fjpdevries%2Fpen%2FoXxPOP&data=02%7C01%7C%7C699bbb170b2c4f0bf3ae08d4d73
>2638a%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C636370058818766511&sdat
>a=tSTNYANFFiQ4DMGYbAZaz0dJ9qYDYpcwP2ZoSYRIcG8%3D&reserved=0
><https://na01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fcodepen.
>io%2Fjpdevries%2Fpen%2FoXxPOP&data=02%7C01%7C%7C699bbb170b2c4f0bf3ae08d4d7
>32638a%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C636370058818766511&sda
>ta=tSTNYANFFiQ4DMGYbAZaz0dJ9qYDYpcwP2ZoSYRIcG8%3D&reserved=0>
>
>I noticed that the OneFlexibleLayouts have code which set the flex-basis
>of the children if a percentage value is set. When setting the size of
>the one flexible child to 0% this causes the flex-basis to be set to 0
>and then the one flexible child will fit the remaining space even if it
>might overflow because of its children.
>
>I have wasted quite a bit of time before I discovered this. I’m not sure
>whether the OneFlexibleLayout classes should be changed, or maybe we need
>documentation that to fit content that might overflow, the percentage
>should be set to 0. It could be there are cases where the entire
>OnFlexibleLayout should be fit when smaller and expand (and not scroll)
>when bigger. In that case, the current behavior might be correct.
>
>Thoughts?
>Harbs
>
>> On May 23, 2017, at 10:16 AM, aha...@apache.org wrote:
>> 
>> give up on trying to use FlexBox for full-screen 3-pane views.  FlexBox
>>seems more happy stretching to content size instead of clipping at the
>>computed flex-ed size.  These custom layouts will do the proper sizing
>> 
>> 
>> Project: 
>>https://na01.safelinks.protection.outlook.com/?url=http%3A%2F%2Fgit-wip-u
>>s.apache.org%2Frepos%2Fasf%2Fflex-asjs%2Frepo&data=02%7C01%7C%7C699bbb170
>>b2c4f0bf3ae08d4d732638a%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C6363
>>70058818766511&sdata=P%2FMkfZAwCYwpQEoCe5UGx8tW0mZaIZsMdDg6VxlaKWA%3D&res
>>erved=0
>> Commit: 
>>https://na01.safelinks.protection.outlook.com/?url=http%3A%2F%2Fgit-wip-u
>>s.apache.org%2Frepos%2Fasf%2Fflex-asjs%2Fcommit%2Fbdd34d2e&data=02%7C01%7
>>C%7C699bbb170b2c4f0bf3ae08d4d732638a%7Cfa7b1b5a7b34438794aed2c178decee1%7
>>C0%7C0%7C636370058818766511&sdata=QosBAau8lE4nCS7c%2F8B6GDc%2Bqa%2BpSkoP5
>>5x3oji5FnI%3D&reserved=0
>> Tree: 
>>https://na01.safelinks.protection.outlook.com/?url=http%3A%2F%2Fgit-wip-u
>>s.apache.org%2Frepos%2Fasf%2Fflex-asjs%2Ftree%2Fbdd34d2e&data=02%7C01%7C%
>>7C699bbb170b2c4f0bf3ae08d4d732638a%7Cfa7b1b5a7b34438794aed2c178decee1%7C0
>>%7C0%7C636370058818766511&sdata=T4CCqwtn%2FgFTmAnaI%2BuCXqtX0P75ebpKVZOxf
>>XOTbIE%3D&reserved=0
>> Diff: 
>>https://na01.safelinks.protection.outlook.com/?url=http%3A%2F%2Fgit-wip-u
>>s.apache.org%2Frepos%2Fasf%2Fflex-asjs%2Fdiff%2Fbdd34d2e&data=02%7C01%7C%
>>7C699bbb170b2c4f0bf3ae08d4d732638a%7Cfa7b1b5a7b34438794aed2c178decee1%7C0
>>%7C0%7C636370058818766511&sdata=f8WVJXc81KrLMuUgRckULYCfglNL7d%2BfdjSbBBU
>>0fRo%3D&reserved=0
>> 
>> Branch: refs/heads/release0.8.0
>> Commit: bdd34d2ef4d8117fa1b222ac470482a42dbea9eb
>> Parents: c505d67
>> Author: Alex Harui <aha...@apache.org>
>> Authored: Mon May 22 10:12:02 2017 -0700
>> Committer: Alex Harui <aha...@apache.org>
>> Committed: Tue May 23 00:15:56 2017 -0700
>> 
>> ----------------------------------------------------------------------
>> ...eFlexibleChildHorizontalLayoutForOverflow.as | 290 ++++++++++++++++++
>> ...xibleChildHorizontalLayoutLockChildHeight.as |  91 ------
>> ...OneFlexibleChildVerticalLayoutForOverflow.as | 291
>>+++++++++++++++++++
>> ...FlexibleChildVerticalLayoutLockChildWidth.as |  93 ------
>> .../Basic/src/main/resources/basic-manifest.xml |   4 +-
>> 5 files changed, 583 insertions(+), 186 deletions(-)
>> ----------------------------------------------------------------------
>> 
>> 
>> 
>>https://na01.safelinks.protection.outlook.com/?url=http%3A%2F%2Fgit-wip-u
>>s.apache.org%2Frepos%2Fasf%2Fflex-asjs%2Fblob%2Fbdd34d2e%2Fframeworks%2Fp
>>rojects%2FBasic%2Fsrc%2Fmain%2Fflex%2Forg%2Fapache%2Fflex%2Fhtml%2Fbeads%
>>2Flayouts%2FOneFlexibleChildHorizontalLayoutForOverflow.as&data=02%7C01%7
>>C%7C699bbb170b2c4f0bf3ae08d4d732638a%7Cfa7b1b5a7b34438794aed2c178decee1%7
>>C0%7C0%7C636370058818766511&sdata=L7BjG%2BM7nTwguX%2BNaE5Op6BIT7XZrEqKFop
>>0D%2Frc0Aw%3D&reserved=0
>> ----------------------------------------------------------------------
>> diff --git 
>>a/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/beads/layo
>>uts/OneFlexibleChildHorizontalLayoutForOverflow.as
>>b/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/beads/layo
>>uts/OneFlexibleChildHorizontalLayoutForOverflow.as
>> new file mode 100644
>> index 0000000..c6abc22
>> --- /dev/null
>> +++ 
>>b/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/beads/layo
>>uts/OneFlexibleChildHorizontalLayoutForOverflow.as
>> @@ -0,0 +1,290 @@
>> 
>>+////////////////////////////////////////////////////////////////////////
>>////////
>> +//
>> +//  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
>> +//
>> +//      
>>https://na01.safelinks.protection.outlook.com/?url=http%3A%2F%2Fwww.apach
>>e.org%2Flicenses%2FLICENSE-2.0&data=02%7C01%7C%7C699bbb170b2c4f0bf3ae08d4
>>d732638a%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C636370058818766511&
>>sdata=bButr5xXaczhl741iZvjXub0l1B72d%2FvImajqD7mvyA%3D&reserved=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.core.LayoutBase;
>> +    import org.apache.flex.core.IDocument;
>> +    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.IParentIUIBase;
>> +    import org.apache.flex.core.IStrand;
>> +    import org.apache.flex.core.IUIBase;
>> +    import org.apache.flex.core.ValuesManager;
>> +    import org.apache.flex.core.UIBase;
>> +    import org.apache.flex.events.Event;
>> +    import org.apache.flex.geom.Rectangle;
>> +    import org.apache.flex.utils.CSSContainerUtils;
>> +    import org.apache.flex.utils.CSSUtils;
>> +
>> +    /**
>> +     *  The OneFlexibleChildHorizontalLayoutForOverflowis
>> +     *  intended for building apps that clip
>> +     *  and/or scroll the overflow, especially in a
>> +     *  3-pane view like the ASDoc examples.  It does not use
>> +     *  FlexBox because FlexBox wants to grow to the size
>> +     *  of the content without specifying width/height on
>> +     *  the flexible child.  But then the children in
>> +     *  the flexible child cannot use % sizing.
>> +     *  This layout presumes the parent is a known size.
>> +     *
>> +     *  @langversion 3.0
>> +     *  @playerversion Flash 10.2
>> +     *  @playerversion AIR 2.6
>> +     *  @productversion FlexJS 0.0
>> +     */
>> +    public class OneFlexibleChildHorizontalLayoutForOverflow extends
>>LayoutBase implements IOneFlexibleChildLayout, IDocument
>> +    {
>> +        /**
>> +         *  Constructor.
>> +         *
>> +         *  @langversion 3.0
>> +         *  @playerversion Flash 10.2
>> +         *  @playerversion AIR 2.6
>> +         *  @productversion FlexJS 0.0
>> +         */
>> +            public function OneFlexibleChildHorizontalLayoutForOverflow()
>> +            {
>> +                    super();
>> +            }
>> +
>> +        private var _flexibleChild:String;
>> +
>> +        protected var actualChild:ILayoutChild;
>> +
>> +        /**
>> +         *  @private
>> +         *  The document.
>> +         */
>> +        private var document:Object;
>> +
>> +            /**
>> +             *  The id of the flexible child
>> +             *
>> +             *  @langversion 3.0
>> +             *  @playerversion Flash 10.2
>> +             *  @playerversion AIR 2.6
>> +             *  @productversion FlexJS 0.0
>> +             */
>> +            public function get flexibleChild():String
>> +            {
>> +                    return _flexibleChild;
>> +            }
>> +
>> +            /**
>> +             * @private
>> +             */
>> +            public function set flexibleChild(value:String):void
>> +            {
>> +                    _flexibleChild = value;
>> +            }
>> +
>> +        /**
>> +         * @copy org.apache.flex.core.IBeadLayout#layout
>> +         */
>> +            COMPILE::JS
>> +            override public function layout():Boolean
>> +            {
>> +                    var contentView:ILayoutView = layoutView;
>> +
>> +                    actualChild = document[flexibleChild];
>> +
>> +                    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 (child.element.style["display"] != 
>> "inline-flex" &&
>>child.element.style["display"] != "none")
>> +                                    child.element.style["display"] = 
>> "inline-block";
>> +                    }
>> +
>> +                    var w:Number = host.width;
>> +                    for(i=0; i < n; i++) {
>> +                            child = contentView.getElementAt(i) as UIBase;
>> +                            if (child != actualChild)
>> +                                    w -= child.width;
>> +                    }
>> +                    actualChild.width = w;
>> +                                    
>> +                    return true;
>> +            }
>> +
>> +            COMPILE::SWF
>> +            override public function layout():Boolean
>> +            {
>> +                    var contentView:ILayoutView = layoutView;
>> +                    actualChild = document.hasOwnProperty(flexibleChild) ?
>>document[flexibleChild] : null;
>> +
>> +                    var n:Number = contentView.numElements;
>> +                    if (n == 0) return false;
>> +                    
>> +                    var maxWidth:Number = 0;
>> +                    var maxHeight:Number = 0;
>> +                    var hostSizedToContent:Boolean = 
>> host.isHeightSizedToContent();
>> +                    var hostWidth:Number = host.width;
>> +                    var hostHeight:Number = host.height;
>> +
>> +                    var ilc:ILayoutChild;
>> +                    var data:Object;
>> +                    var canAdjust:Boolean = false;
>> +                    var margins:Object;
>> +
>> +                    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 xpos:Number = borderMetrics.left + 
>> paddingMetrics.left;
>> +                    var ypos:Number = borderMetrics.top + 
>> paddingMetrics.left;
>> +                    var child:IUIBase;
>> +                    var childHeight:Number;
>> +                    var i:int;
>> +                    var childYpos:Number;
>> +                    var adjustLeft:Number = 0;
>> +                    var adjustRight:Number = hostWidth + borderMetrics.left 
>> +
>>paddingMetrics.left;
>> +
>> +                    // first work from left to right
>> +                    for(i=0; i < n; i++)
>> +                    {
>> +                            child = contentView.getElementAt(i) as IUIBase;
>> +                            if (child == null || !child.visible) continue;
>> +                            if (child == actualChild) break;
>> +
>> +                            margins = childMargins(child, hostWidth, 
>> hostHeight);
>> +                            ilc = child as ILayoutChild;
>> +
>> +                            xpos += margins.left;
>> +
>> +                            childYpos = ypos + margins.top; // default y 
>> position
>> +
>> +                            childHeight = child.height;
>> +                            if (ilc != null)
>> +                            {
>> +                                    if (!isNaN(ilc.percentHeight)) {
>> +                                            childHeight = host.height * 
>> ilc.percentHeight/100.0;
>> +                                    }
>> +                                    else if (isNaN(ilc.explicitHeight)) {
>> +                                            childHeight = host.height;
>> +                                    }
>> +                                    ilc.setHeight(childHeight);
>> +                            }
>> +
>> +                            if (ilc) {
>> +                                    ilc.setX(xpos);
>> +                                    ilc.setY(childYpos);
>> +
>> +                                    if (!isNaN(ilc.percentWidth)) {
>> +                                            ilc.setWidth(hostWidth * 
>> ilc.percentWidth / 100);
>> +                                    }
>> +
>> +                            } else {
>> +                                    child.x = xpos;
>> +                                    child.y = childYpos;
>> +                            }
>> +
>> +                            xpos += child.width + margins.right;
>> +                            adjustLeft = xpos;
>> +                    }
>> +
>> +                    // then work from right to left
>> +                    xpos = hostWidth + borderMetrics.left + 
>> paddingMetrics.left;
>> +
>> +                    for(i=(n-1); actualChild != null && i >= 0; i--)
>> +                    {
>> +                            child = contentView.getElementAt(i) as IUIBase;
>> +                            if (child == null || !child.visible) continue;
>> +                            if (child == actualChild) break;
>> +
>> +                            margins = childMargins(child, hostWidth, 
>> hostHeight);
>> +                            ilc = child as ILayoutChild;
>> +
>> +                            childYpos = ypos + margins.top; // default y 
>> position
>> +
>> +                            childHeight = child.height;
>> +                            if (ilc != null)
>> +                            {
>> +                                    if (!isNaN(ilc.percentHeight)) {
>> +                                            childHeight = host.height * 
>> ilc.percentHeight/100.0;
>> +                                    }
>> +                                    else if (isNaN(ilc.explicitHeight)) {
>> +                                            childHeight = host.height;
>> +                                    }
>> +                                    ilc.setHeight(childHeight);
>> +                            }
>> +
>> +                            if (ilc) {
>> +                                    if (!isNaN(ilc.percentWidth)) {
>> +                                            ilc.setWidth(hostWidth * 
>> ilc.percentWidth / 100);
>> +                                    }
>> +                            }
>> +
>> +                            xpos -= child.width + margins.right;
>> +
>> +                            if (ilc) {
>> +                                    ilc.setX(xpos);
>> +                                    ilc.setY(childYpos);
>> +                            } else {
>> +                                    child.x = xpos;
>> +                                    child.y = childYpos;
>> +                            }
>> +
>> +                            xpos -= margins.left;
>> +                            adjustRight = xpos;
>> +                    }
>> +
>> +                    // now adjust the actualChild to fill the space.
>> +                    if (actualChild != null) {
>> +                            margins = childMargins(actualChild, hostWidth, 
>> hostHeight);
>> +                            ilc = actualChild as ILayoutChild;
>> +                            childHeight = actualChild.height;
>> +                            if (ilc != null)
>> +                            {
>> +                                    if (!isNaN(ilc.percentHeight)) {
>> +                                            childHeight = host.height * 
>> ilc.percentHeight/100.0;
>> +                                    }
>> +                                    else if (isNaN(ilc.explicitHeight)) {
>> +                                            childHeight = host.height;
>> +                                    }
>> +                                    ilc.setHeight(childHeight);
>> +                            }
>> +                            childYpos = ypos + margins.top;
>> +                            actualChild.x = adjustLeft + margins.left;
>> +                            actualChild.y = childYpos;
>> +                            if (ilc) {
>> +                                    
>> ilc.setWidth((adjustRight-margins.right) -
>>(adjustLeft+margins.left));
>> +                            } else {
>> +                                    actualChild.width = 
>> (adjustRight-margins.right) -
>>(adjustLeft+margins.left);
>> +                            }
>> +                    }
>> +
>> +            return true;
>> +            }
>> +
>> +        public function setDocument(document:Object, id:String =
>>null):void
>> +        {
>> +            this.document = document;
>> +        }
>> +
>> +    }
>> +
>> +}
>> 
>> 
>>https://na01.safelinks.protection.outlook.com/?url=http%3A%2F%2Fgit-wip-u
>>s.apache.org%2Frepos%2Fasf%2Fflex-asjs%2Fblob%2Fbdd34d2e%2Fframeworks%2Fp
>>rojects%2FBasic%2Fsrc%2Fmain%2Fflex%2Forg%2Fapache%2Fflex%2Fhtml%2Fbeads%
>>2Flayouts%2FOneFlexibleChildHorizontalLayoutLockChildHeight.as&data=02%7C
>>01%7C%7C699bbb170b2c4f0bf3ae08d4d732638a%7Cfa7b1b5a7b34438794aed2c178dece
>>e1%7C0%7C0%7C636370058818766511&sdata=Ir1Siye21IUzzijpvWA1XmQN0AbHktLu%2F
>>u3h%2BRtBZT0%3D&reserved=0
>> ----------------------------------------------------------------------
>> diff --git 
>>a/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/beads/layo
>>uts/OneFlexibleChildHorizontalLayoutLockChildHeight.as
>>b/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/beads/layo
>>uts/OneFlexibleChildHorizontalLayoutLockChildHeight.as
>> deleted file mode 100644
>> index d170d23..0000000
>> --- 
>>a/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/beads/layo
>>uts/OneFlexibleChildHorizontalLayoutLockChildHeight.as
>> +++ /dev/null
>> @@ -1,91 +0,0 @@
>> 
>>-////////////////////////////////////////////////////////////////////////
>>////////
>> -//
>> -//  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
>> -//
>> -//      
>>https://na01.safelinks.protection.outlook.com/?url=http%3A%2F%2Fwww.apach
>>e.org%2Flicenses%2FLICENSE-2.0&data=02%7C01%7C%7C699bbb170b2c4f0bf3ae08d4
>>d732638a%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C636370058818766511&
>>sdata=bButr5xXaczhl741iZvjXub0l1B72d%2FvImajqD7mvyA%3D&reserved=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.core.LayoutBase;
>> -    import org.apache.flex.core.IDocument;
>> -    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.IParentIUIBase;
>> -    import org.apache.flex.core.IStrand;
>> -    import org.apache.flex.core.IUIBase;
>> -    import org.apache.flex.core.ValuesManager;
>> -    import org.apache.flex.core.UIBase;
>> -    import org.apache.flex.events.Event;
>> -    import org.apache.flex.geom.Rectangle;
>> -    import org.apache.flex.utils.CSSContainerUtils;
>> -    import org.apache.flex.utils.CSSUtils;
>> -
>> -    /**
>> -     *  The OneFlexibleChildHorizontalLayoutLockChildHeight
>> -     *  is a subclass of OneFlexibleChildHorizontalLayout
>> -     *  that sets the flexible child's height to be the height
>> -     *  of the host container.  This is useful when you
>> -     *  don't want the actual child's height to dictate the
>> -     *  height of the container in order to force
>> -     *  scrollbars
>> -     *
>> -     *  @langversion 3.0
>> -     *  @playerversion Flash 10.2
>> -     *  @playerversion AIR 2.6
>> -     *  @productversion FlexJS 0.0
>> -     */
>> -    public class OneFlexibleChildHorizontalLayoutLockChildHeight extends
>>OneFlexibleChildHorizontalLayout
>> -    {
>> -        /**
>> -         *  Constructor.
>> -         *
>> -         *  @langversion 3.0
>> -         *  @playerversion Flash 10.2
>> -         *  @playerversion AIR 2.6
>> -         *  @productversion FlexJS 0.0
>> -         */
>> -            public function 
>> OneFlexibleChildHorizontalLayoutLockChildHeight()
>> -            {
>> -                    super();
>> -            }
>> -
>> -        /**
>> -         * @copy org.apache.flex.core.IBeadLayout#layout
>> -         */
>> -            override public function layout():Boolean
>> -            {
>> -                    var ret:Boolean = super.layout();
>> -                    if (ret)
>> -                    {
>> -                            var contentView:ILayoutView = layoutView;
>> -    
>> -                            var n:int = contentView.numElements;
>> -
>> -                            var h:Number = host.height;
>> -                            for(var i:int=0; i < n; i++) {
>> -                                    var child:UIBase = 
>> contentView.getElementAt(i) as UIBase;
>> -                                    if (child != actualChild)
>> -                                            h = child.height;
>> -                            }
>> -                            actualChild.setHeight(h);
>> -                    }
>> -                    return ret;
>> -            }
>> -
>> -    }
>> -
>> -}
>> 
>> 
>>https://na01.safelinks.protection.outlook.com/?url=http%3A%2F%2Fgit-wip-u
>>s.apache.org%2Frepos%2Fasf%2Fflex-asjs%2Fblob%2Fbdd34d2e%2Fframeworks%2Fp
>>rojects%2FBasic%2Fsrc%2Fmain%2Fflex%2Forg%2Fapache%2Fflex%2Fhtml%2Fbeads%
>>2Flayouts%2FOneFlexibleChildVerticalLayoutForOverflow.as&data=02%7C01%7C%
>>7C699bbb170b2c4f0bf3ae08d4d732638a%7Cfa7b1b5a7b34438794aed2c178decee1%7C0
>>%7C0%7C636370058818766511&sdata=WdJnx6IGbPwIxUibKB3UqfKTHgHugWIleqBVsqJ5f
>>eE%3D&reserved=0
>> ----------------------------------------------------------------------
>> diff --git 
>>a/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/beads/layo
>>uts/OneFlexibleChildVerticalLayoutForOverflow.as
>>b/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/beads/layo
>>uts/OneFlexibleChildVerticalLayoutForOverflow.as
>> new file mode 100644
>> index 0000000..5679f80
>> --- /dev/null
>> +++ 
>>b/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/beads/layo
>>uts/OneFlexibleChildVerticalLayoutForOverflow.as
>> @@ -0,0 +1,291 @@
>> 
>>+////////////////////////////////////////////////////////////////////////
>>////////
>> +//
>> +//  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
>> +//
>> +//      
>>https://na01.safelinks.protection.outlook.com/?url=http%3A%2F%2Fwww.apach
>>e.org%2Flicenses%2FLICENSE-2.0&data=02%7C01%7C%7C699bbb170b2c4f0bf3ae08d4
>>d732638a%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C636370058818766511&
>>sdata=bButr5xXaczhl741iZvjXub0l1B72d%2FvImajqD7mvyA%3D&reserved=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.core.LayoutBase;
>> +    import org.apache.flex.core.IDocument;
>> +    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.IParentIUIBase;
>> +    import org.apache.flex.core.IStrand;
>> +    import org.apache.flex.core.IStyleableObject;
>> +    import org.apache.flex.core.IUIBase;
>> +    import org.apache.flex.core.ValuesManager;
>> +    import org.apache.flex.core.UIBase;
>> +    import org.apache.flex.events.Event;
>> +    import org.apache.flex.geom.Rectangle;
>> +    import org.apache.flex.utils.CSSContainerUtils;
>> +    import org.apache.flex.utils.CSSUtils;
>> +
>> +    /**
>> +     *  The OneFlexibleChildVerticalLayoutForOverflow is
>> +     *  intended for building apps that clip
>> +     *  and/or scroll the overflow, especially in a
>> +     *  3-pane view like the ASDoc examples.  It does not use
>> +     *  FlexBox because FlexBox wants to grow to the size
>> +     *  of the content without specifying width/height on
>> +     *  the flexible child.  But then the children in
>> +     *  the flexible child cannot use % sizing.
>> +     *  This layout presumes the parent is a known size.
>> +     *
>> +     *  @langversion 3.0
>> +     *  @playerversion Flash 10.2
>> +     *  @playerversion AIR 2.6
>> +     *  @productversion FlexJS 0.0
>> +     */
>> +    public class OneFlexibleChildVerticalLayoutForOverflow extends
>>LayoutBase implements IOneFlexibleChildLayout, IDocument
>> +    {
>> +        /**
>> +         *  Constructor.
>> +         *
>> +         *  @langversion 3.0
>> +         *  @playerversion Flash 10.2
>> +         *  @playerversion AIR 2.6
>> +         *  @productversion FlexJS 0.0
>> +         */
>> +            public function OneFlexibleChildVerticalLayoutForOverflow()
>> +            {
>> +                    super();
>> +            }
>> +
>> +        private var _flexibleChild:String;
>> +
>> +        protected var actualChild:ILayoutChild;
>> +
>> +        /**
>> +         *  @private
>> +         *  The document.
>> +         */
>> +        private var document:Object;
>> +
>> +            /**
>> +             *  The id of the flexible child
>> +             *
>> +             *  @langversion 3.0
>> +             *  @playerversion Flash 10.2
>> +             *  @playerversion AIR 2.6
>> +             *  @productversion FlexJS 0.0
>> +             */
>> +            public function get flexibleChild():String
>> +            {
>> +                    return _flexibleChild;
>> +            }
>> +
>> +            /**
>> +             * @private
>> +             */
>> +            public function set flexibleChild(value:String):void
>> +            {
>> +                    _flexibleChild = value;
>> +            }
>> +
>> +        /**
>> +         * @copy org.apache.flex.core.IBeadLayout#layout
>> +         */
>> +            COMPILE::JS
>> +            override public function layout():Boolean
>> +            {
>> +                    var contentView:ILayoutView = layoutView;
>> +
>> +                    actualChild = document[flexibleChild];
>> +
>> +                    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 (child.element.style["display"] != "flex" &&
>>child.element.style["display"] != "none")
>> +                                    child.element.style["display"] = 
>> "block";
>> +                    }
>> +
>> +                    var h:Number = host.height;
>> +                    for(i=0; i < n; i++) {
>> +                            child = contentView.getElementAt(i) as UIBase;
>> +                            if (child != actualChild)
>> +                                    h -= child.height;
>> +                    }
>> +                    actualChild.height = h;
>> +                                    
>> +                    return true;
>> +            }
>> +
>> +            COMPILE::SWF
>> +            override public function layout():Boolean
>> +            {
>> +                    var contentView:ILayoutView = layoutView;
>> +                    actualChild = document.hasOwnProperty(flexibleChild) ?
>>document[flexibleChild] : null;
>> +
>> +                    var n:Number = contentView.numElements;
>> +                    if (n == 0) return false;
>> +                    
>> +                    var maxWidth:Number = 0;
>> +                    var maxHeight:Number = 0;
>> +                    var hostSizedToContent:Boolean = 
>> host.isWidthSizedToContent();
>> +                    var hostWidth:Number = host.width;
>> +                    var hostHeight:Number = host.height;
>> +
>> +                    var ilc:ILayoutChild;
>> +                    var data:Object;
>> +                    var canAdjust:Boolean = false;
>> +                    var margins:Object;
>> +
>> +                    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 xpos:Number = borderMetrics.left + 
>> paddingMetrics.left;
>> +                    var ypos:Number = borderMetrics.top + 
>> paddingMetrics.left;
>> +                    var child:IUIBase;
>> +                    var childWidth:Number;
>> +                    var i:int;
>> +                    var childXpos:Number;
>> +                    var adjustTop:Number = 0;
>> +                    var adjustBottom:Number = hostHeight + 
>> borderMetrics.top +
>>paddingMetrics.top;
>> +
>> +                    // first work from top to bottom
>> +                    for(i=0; i < n; i++)
>> +                    {
>> +                            child = contentView.getElementAt(i) as IUIBase;
>> +                            if (child == null || !child.visible) continue;
>> +                            if (child == actualChild) break;
>> +
>> +                            margins = childMargins(child, hostWidth, 
>> hostHeight);
>> +                            ilc = child as ILayoutChild;
>> +
>> +                            ypos += margins.top;
>> +
>> +                            childXpos = xpos + margins.left; // default x 
>> position
>> +
>> +                            childWidth = child.width;
>> +                            if (ilc != null)
>> +                            {
>> +                                    if (!isNaN(ilc.percentWidth)) {
>> +                                            childWidth = hostWidth * 
>> ilc.percentWidth/100.0;
>> +                                    }
>> +                                    else if (isNaN(ilc.explicitWidth)) {
>> +                                            childWidth = hostWidth;
>> +                                    }
>> +                                    ilc.setWidth(childWidth);
>> +                            }
>> +
>> +                            if (ilc) {
>> +                                    ilc.setX(childXpos);
>> +                                    ilc.setY(ypos);
>> +
>> +                                    if (!isNaN(ilc.percentHeight)) {
>> +                                            ilc.setHeight(hostHeight * 
>> ilc.percentHeight / 100);
>> +                                    }
>> +
>> +                            } else {
>> +                                    child.x = childXpos;
>> +                                    child.y = ypos;
>> +                            }
>> +
>> +                            ypos += child.height + margins.bottom;
>> +                            adjustTop = ypos;
>> +                    }
>> +
>> +                    // then work from bottom to top
>> +                    ypos = hostHeight + borderMetrics.top + 
>> paddingMetrics.top;
>> +
>> +                    for(i=(n-1); actualChild != null && i >= 0; i--)
>> +                    {
>> +                            child = contentView.getElementAt(i) as IUIBase;
>> +                            if (child == null || !child.visible) continue;
>> +                            if (child == actualChild) break;
>> +
>> +                            margins = childMargins(child, hostWidth, 
>> hostHeight);
>> +                            ilc = child as ILayoutChild;
>> +
>> +                            childXpos = xpos + margins.left; // default x 
>> position
>> +
>> +                            childWidth = child.width;
>> +                            if (ilc != null)
>> +                            {
>> +                                    if (!isNaN(ilc.percentWidth)) {
>> +                                            childWidth = hostWidth * 
>> ilc.percentWidth/100.0;
>> +                                    }
>> +                                    else if (isNaN(ilc.explicitWidth)) {
>> +                                            childWidth = hostWidth;
>> +                                    }
>> +                                    ilc.setWidth(childWidth);
>> +                            }
>> +
>> +                            if (ilc) {
>> +                                    if (!isNaN(ilc.percentHeight)) {
>> +                                            ilc.setHeight(hostHeight * 
>> ilc.percentHeight / 100);
>> +                                    }
>> +                            }
>> +
>> +                            ypos -= child.height + margins.bottom;
>> +
>> +                            if (ilc) {
>> +                                    ilc.setX(childXpos);
>> +                                    ilc.setY(ypos);
>> +                            } else {
>> +                                    child.x = childXpos;
>> +                                    child.y = ypos;
>> +                            }
>> +
>> +                            ypos -= margins.top;
>> +                            adjustBottom = ypos;
>> +                    }
>> +
>> +                    // now adjust the actualChild to fill the space.
>> +                    if (actualChild != null) {
>> +                            margins = childMargins(actualChild, hostWidth, 
>> hostHeight);
>> +                            ilc = actualChild as ILayoutChild;
>> +                            childWidth = actualChild.width;
>> +                            if (ilc != null)
>> +                            {
>> +                                    if (!isNaN(ilc.percentWidth)) {
>> +                                            childWidth = hostWidth * 
>> ilc.percentWidth/100.0;
>> +                                    }
>> +                                    else if (isNaN(ilc.explicitWidth)) {
>> +                                            childWidth = hostWidth;
>> +                                    }
>> +                                    ilc.setWidth(childWidth);
>> +                            }
>> +                            childXpos = xpos + margins.left;
>> +                                    
>> +                            actualChild.x = childXpos
>> +                            actualChild.y = adjustTop + margins.top;
>> +                            if (ilc) {
>> +                                    
>> ilc.setHeight((adjustBottom-margins.bottom) -
>>(adjustTop+margins.top));
>> +                            } else {
>> +                                    actualChild.height = 
>> (adjustBottom-margins.bottom) -
>>(adjustTop+margins.top);
>> +                            }
>> +                    }
>> +
>> +                    return true;
>> +            }
>> +
>> +        public function setDocument(document:Object, id:String =
>>null):void
>> +        {
>> +            this.document = document;
>> +        }
>> +    }
>> +
>> +}
>> 
>> 
>>https://na01.safelinks.protection.outlook.com/?url=http%3A%2F%2Fgit-wip-u
>>s.apache.org%2Frepos%2Fasf%2Fflex-asjs%2Fblob%2Fbdd34d2e%2Fframeworks%2Fp
>>rojects%2FBasic%2Fsrc%2Fmain%2Fflex%2Forg%2Fapache%2Fflex%2Fhtml%2Fbeads%
>>2Flayouts%2FOneFlexibleChildVerticalLayoutLockChildWidth.as&data=02%7C01%
>>7C%7C699bbb170b2c4f0bf3ae08d4d732638a%7Cfa7b1b5a7b34438794aed2c178decee1%
>>7C0%7C0%7C636370058818766511&sdata=4Q4bkts0dp4wvvLUtu2yTYNg%2Fr7jS8bRt4co
>>3nYbPKc%3D&reserved=0
>> ----------------------------------------------------------------------
>> diff --git 
>>a/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/beads/layo
>>uts/OneFlexibleChildVerticalLayoutLockChildWidth.as
>>b/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/beads/layo
>>uts/OneFlexibleChildVerticalLayoutLockChildWidth.as
>> deleted file mode 100644
>> index 7415299..0000000
>> --- 
>>a/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/beads/layo
>>uts/OneFlexibleChildVerticalLayoutLockChildWidth.as
>> +++ /dev/null
>> @@ -1,93 +0,0 @@
>> 
>>-////////////////////////////////////////////////////////////////////////
>>////////
>> -//
>> -//  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
>> -//
>> -//      
>>https://na01.safelinks.protection.outlook.com/?url=http%3A%2F%2Fwww.apach
>>e.org%2Flicenses%2FLICENSE-2.0&data=02%7C01%7C%7C699bbb170b2c4f0bf3ae08d4
>>d732638a%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C636370058818766511&
>>sdata=bButr5xXaczhl741iZvjXub0l1B72d%2FvImajqD7mvyA%3D&reserved=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.core.LayoutBase;
>> -    import org.apache.flex.core.IDocument;
>> -    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.IParentIUIBase;
>> -    import org.apache.flex.core.IStrand;
>> -    import org.apache.flex.core.IStyleableObject;
>> -    import org.apache.flex.core.IUIBase;
>> -    import org.apache.flex.core.ValuesManager;
>> -    import org.apache.flex.core.UIBase;
>> -    import org.apache.flex.events.Event;
>> -    import org.apache.flex.geom.Rectangle;
>> -    import org.apache.flex.utils.CSSContainerUtils;
>> -    import org.apache.flex.utils.CSSUtils;
>> -
>> -    /**
>> -     *  The OneFlexibleChildHorizontalLayoutLockChildHeight 
>> -     *  is a subclass of OneFlexibleChildHorizontalLayout
>> -     *  that sets the flexible child's height to be the height
>> -     *  of the host container.  This is useful when you
>> -     *  don't want the actual child's height to dictate the
>> -     *  height of the container in order to force
>> -     *  scrollbars or line wrapping.
>> -     *
>> -     *  @langversion 3.0
>> -     *  @playerversion Flash 10.2
>> -     *  @playerversion AIR 2.6
>> -     *  @productversion FlexJS 0.0
>> -     */
>> -    public class OneFlexibleChildVerticalLayoutLockChildWidth extends 
>>OneFlexibleChildVerticalLayout
>> -    {
>> -        /**
>> -         *  Constructor.
>> -         *
>> -         *  @langversion 3.0
>> -         *  @playerversion Flash 10.2
>> -         *  @playerversion AIR 2.6
>> -         *  @productversion FlexJS 0.0
>> -         */
>> -            public function OneFlexibleChildVerticalLayoutLockChildWidth()
>> -            {
>> -                    super();
>> -            }
>> -
>> -        /**
>> -         * @copy org.apache.flex.core.IBeadLayout#layout
>> -         */
>> -            override public function layout():Boolean
>> -            {
>> -                    var ret:Boolean = super.layout();
>> -                    if (ret)
>> -                    {
>> -                            var contentView:ILayoutView = layoutView;
>> -    
>> -                            var n:int = contentView.numElements;
>> -
>> -                            var w:Number = host.width;
>> -                            for(var i:int=0; i < n; i++) {
>> -                                    var child:UIBase = 
>> contentView.getElementAt(i) as UIBase;
>> -                                    if (child != actualChild)
>> -                                            w = child.width;
>> -                            }
>> -                            
>> -                            actualChild.setWidth(w); 
>> -                    }
>> -                    return ret;
>> -            }
>> -
>> -    }
>> -
>> -}
>> 
>> 
>>https://na01.safelinks.protection.outlook.com/?url=http%3A%2F%2Fgit-wip-u
>>s.apache.org%2Frepos%2Fasf%2Fflex-asjs%2Fblob%2Fbdd34d2e%2Fframeworks%2Fp
>>rojects%2FBasic%2Fsrc%2Fmain%2Fresources%2Fbasic-manifest.xml&data=02%7C0
>>1%7C%7C699bbb170b2c4f0bf3ae08d4d732638a%7Cfa7b1b5a7b34438794aed2c178decee
>>1%7C0%7C0%7C636370058818766511&sdata=mPldYCuDfp%2BxQ4QROdu4BWSl3Dh7HP19VX
>>BR3B3IXOg%3D&reserved=0
>> ----------------------------------------------------------------------
>> diff --git 
>>a/frameworks/projects/Basic/src/main/resources/basic-manifest.xml 
>>b/frameworks/projects/Basic/src/main/resources/basic-manifest.xml
>> index 7cbc05d..09bb1a3 100644
>> --- a/frameworks/projects/Basic/src/main/resources/basic-manifest.xml
>> +++ b/frameworks/projects/Basic/src/main/resources/basic-manifest.xml
>> @@ -150,8 +150,8 @@
>>     <component id="FlexibleFirstChildHorizontalLayout" 
>>class="org.apache.flex.html.beads.layouts.FlexibleFirstChildHorizontalLay
>>out"/>
>>     <component id="OneFlexibleChildVerticalLayout" 
>>class="org.apache.flex.html.beads.layouts.OneFlexibleChildVerticalLayout"
>>/>
>>     <component id="OneFlexibleChildHorizontalLayout" 
>>class="org.apache.flex.html.beads.layouts.OneFlexibleChildHorizontalLayou
>>t"/>
>> -    <component id="OneFlexibleChildVerticalLayoutLockChildWidth" 
>>class="org.apache.flex.html.beads.layouts.OneFlexibleChildVerticalLayoutL
>>ockChildWidth"/>
>> -    <component id="OneFlexibleChildHorizontalLayoutLockChildHeight" 
>>class="org.apache.flex.html.beads.layouts.OneFlexibleChildHorizontalLayou
>>tLockChildHeight"/>
>> +    <component id="OneFlexibleChildVerticalLayoutForOverflow" 
>>class="org.apache.flex.html.beads.layouts.OneFlexibleChildVerticalLayoutF
>>orOverflow"/>
>> +    <component id="OneFlexibleChildHorizontalLayoutForOverflow" 
>>class="org.apache.flex.html.beads.layouts.OneFlexibleChildHorizontalLayou
>>tForOverflow"/>
>>     <component id="MXMLBeadView" 
>>class="org.apache.flex.html.MXMLBeadView"/>
>> 
>>     <component id="SubAppLoader" 
>>class="org.apache.flex.html.SubAppLoader" />
>> 
>

Reply via email to