I used the evtimmy sample, it seems working with some modifications

/package layouts
{
        import mx.core.ILayoutElement;

        import spark.components.supportClasses.GroupBase;
        import spark.layouts.supportClasses.LayoutBase;

        public class FlowLayout extends LayoutBase
        {
                
                
//---------------------------------------------------------------
                //
                //  Class properties
                //
                
//---------------------------------------------------------------
                
                
//---------------------------------------------------------------
                //  horizontalGap
                
//---------------------------------------------------------------

                private var _horizontalGap:Number = 10;

                public function set horizontalGap(value:Number):void
                {
                        _horizontalGap = value;
                        
                        // We must invalidate the layout
                        var layoutTarget:GroupBase = target;
                        if (layoutTarget)
                                layoutTarget.invalidateDisplayList();
                }
                
                
//---------------------------------------------------------------
                //  verticalGap
                
//---------------------------------------------------------------

                private var _verticalGap:Number = 10;

                public function set verticalGap(value:Number):void
                {
                        _verticalGap = value;
                        
                        // We must invalidate the layout
                        var layoutTarget:GroupBase = target;
                        if (layoutTarget)
                                layoutTarget.invalidateDisplayList();
                }
                
                
//---------------------------------------------------------------
                //  verticalAlign
                
//---------------------------------------------------------------

                private var _verticalAlign:String = "bottom";
                
                public function set verticalAlign(value:String):void
                {
                        _verticalAlign = value;
                        
                        // We must invalidate the layout
                        var layoutTarget:GroupBase = target;
                        if (layoutTarget)
                                layoutTarget.invalidateDisplayList();
                }
                
                
//---------------------------------------------------------------
                //  horizontalAlign
                
//---------------------------------------------------------------
                
                private var _horizontalAlign:String = "left"; // center, right
                
                public function set horizontalAlign(value:String):void
                {
                        _horizontalAlign = value;
                        
                        // We must invalidate the layout
                        var layoutTarget:GroupBase = target;
                        if (layoutTarget)
                                layoutTarget.invalidateDisplayList();
                }
                
                
//---------------------------------------------------------------
                //
                //  Class methods
                //
                
//---------------------------------------------------------------
                
                override public function 
updateDisplayList(containerWidth:Number,
                                                                                
                   containerHeight:Number):void
                {
                        var element:ILayoutElement;
                        var layoutTarget:GroupBase = target;
                        var count:int = layoutTarget.numElements;
                        var hGap:Number = _horizontalGap;
                        var vGap:Number = _verticalGap;

                        // The position for the current element
                        var x:Number = 0;
                        var y:Number = 0;
                        var elementWidth:Number;
                        var elementHeight:Number;

                        var vAlign:Number = 0;
                        switch (_verticalAlign)
                        {
                                case "middle" : vAlign = 0.5; break;
                                case "bottom" : vAlign = 1; break;
                        }

                        // Keep track of per-row height, maximum row width
                        var maxRowWidth:Number = 0;

                        // loop through the elements
                        // while we can start a new row
                        var rowStart:int = 0;
                        while (rowStart < count)
                        {
                                // The row always contains the start element
                                element = useVirtualLayout ? 
layoutTarget.getVirtualElementAt(rowStart)
:
                                                                                
         layoutTarget.getElementAt(rowStart);
                                                                                
         
                                var rowWidth:Number = 
element.getPreferredBoundsWidth();
                                var rowHeight:Number =  
element.getPreferredBoundsHeight();
                                
                                // Find the end of the current row
                                var rowEnd:int = rowStart;
                                while (rowEnd + 1 < count)
                                {
                                        element = useVirtualLayout ? 
layoutTarget.getVirtualElementAt(rowEnd +
1) :
                                                                                
                 layoutTarget.getElementAt(rowEnd + 1);
                                        
                                        // Since we haven't resized the element 
just yet, get its preferred
size
                                        elementWidth = 
element.getPreferredBoundsWidth();
                                        elementHeight = 
element.getPreferredBoundsHeight();

                                        // Can we add one more element to this 
row?
                                        if (rowWidth + hGap + elementWidth > 
containerWidth)
                                                break;

                                        rowWidth += hGap + elementWidth;
                                        rowHeight = Math.max(rowHeight, 
elementHeight);
                                        rowEnd++;
                                }
                                
                                x = 0;
                                switch (_horizontalAlign)
                                {
                                        case "center" : x = 
Math.round(containerWidth - rowWidth) / 2; break;
                                        case "right" : x = containerWidth - 
rowWidth;
                                }
                                
                                // Keep track of the maximum row width so that 
we can
                                // set the correct contentSize
                                maxRowWidth = Math.max(maxRowWidth, x + 
rowWidth);

                                // Layout all the elements within the row
                                for (var i:int = rowStart; i <= rowEnd; i++) 
                                {
                                        element = useVirtualLayout ? 
layoutTarget.getVirtualElementAt(i) : 
                                                                                
                 layoutTarget.getElementAt(i);

                                        // Resize the element to its preferred 
size by passing
                                        // NaN for the width and height 
constraints
                                        element.setLayoutBoundsSize(NaN, NaN);

                                        // Find out the element's dimensions 
sizes.
                                        // We do this after the element has 
been already resized
                                        // to its preferred size.
                                        elementWidth = 
element.getLayoutBoundsWidth();
                                        elementHeight = 
element.getLayoutBoundsHeight();

                                        // Calculate the position within the row
                                        var elementY:Number = 
Math.round((rowHeight - elementHeight) * vAlign);

                                        // Position the element
                                        element.setLayoutBoundsPosition(x, y + 
elementY);

                                        x += hGap + elementWidth;
                                }

                                // Next row will start with the first element 
after the current row's
end
                                rowStart = rowEnd + 1;

                                // Update the position to the beginning of the 
row
                                x = 0;
                                y += vGap + rowHeight;
                        }
                        y -= vGap;

                        // Set the content size which determines the scrolling 
limits
                        // and is used by the Scroller to calculate whether to 
show up
                        // the scrollbars when the the scroll policy is set to 
"auto"
                        layoutTarget.setContentSize(maxRowWidth, y);
                        layoutTarget.invalidateSize();
                }
                
                override public function measure():void
                {
                        var layoutTarget:GroupBase = target;
                        if (!layoutTarget)
                                return;
                        
                        // Use Math.ceil() to make sure that if the content 
partially occupies
                        // the last pixel, we'll count it as if the whole pixel 
is occupied.
                        layoutTarget.measuredWidth = 
Math.ceil(layoutTarget.contentWidth);    
                        layoutTarget.measuredHeight = 
Math.ceil(layoutTarget.contentHeight);     
                }
        }
}/



--
Sent from: http://apache-flex-users.2333346.n4.nabble.com/

Reply via email to