Revision: 48361
Initial Code
Initial URL
Initial Description
Initial Title
Initial Tags
Initial Language
at June 29, 2011 20:09 by mcorlan
Initial Code
//see Evtim Georgiev article http://www.adobe.com/devnet/flex/articles/spark_layouts.html package org.corlan.layout { import mx.core.ILayoutElement; import spark.components.supportClasses.GroupBase; import spark.layouts.BasicLayout; public class SectionListLayout extends BasicLayout { private var _horizontalGap:Number = 0; private var _verticalGap:Number = 0; private var explicitColumnWidth:Number; private var _columnWidth:Number = 250; public function SectionListLayout() { super(); } public function set horizontalGap(value:Number):void { _horizontalGap = value; // We must invalidate the layout var layoutTarget:GroupBase = target; if (layoutTarget) { layoutTarget.invalidateSize(); layoutTarget.invalidateDisplayList(); } } public function set verticalGap(value:Number):void { _verticalGap = value; // We must invalidate the layout var layoutTarget:GroupBase = target; if (layoutTarget) { layoutTarget.invalidateSize(); layoutTarget.invalidateDisplayList(); } } public function set columnWidth(value:Number):void { explicitColumnWidth = value; if (value == _columnWidth) return; _columnWidth = value; var layoutTarget:GroupBase = target; if (layoutTarget) { layoutTarget.invalidateSize(); layoutTarget.invalidateDisplayList(); } } // When extending the BasicLayout // you have to override this method override public function measure():void { } // override public function updateDisplayList(containerWidth:Number, containerHeight:Number):void { // The position for the first element var x:Number = 0; var y:Number = 0; var maxWidth:Number = 0; var maxHeight:Number = 0; var elementWidth:Number, elementHeight:Number; // loop through the elements var layoutTarget:GroupBase = target; var count:int = layoutTarget.numElements; var element:ILayoutElement; for (var i:int = 0; i < count; i++) { // get the current element, we're going to work with the // ILayoutElement interface 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); elementHeight = element.getLayoutBoundsHeight(); if ((element as Object).data && (element as Object).data.section) { element.setLayoutBoundsSize(containerWidth, elementHeight); elementWidth = containerWidth; } else { element.setLayoutBoundsSize(_columnWidth, elementHeight); elementWidth = _columnWidth; } // Would the element fit on this line, or should we move // to the next line? if (x + elementWidth > containerWidth) { x = 0; y += elementHeight + _verticalGap; } // Position the element element.setLayoutBoundsPosition(x, y); // Find maximum element extents. This is needed for // the scrolling support. maxWidth = Math.max(maxWidth, x + elementWidth); maxHeight = Math.max(maxHeight, y + elementHeight); // Update the current position, add the gap x += elementWidth + _horizontalGap; } // Scrolling support - update the content size layoutTarget.setContentSize(maxWidth, maxHeight); } } }
Initial URL
http://corlan.org/?p=2931
Initial Description
This layout manager doesn't support virtualization.
Initial Title
Simple Section Tile Layout Manager
Initial Tags
list, mobile, Flex
Initial Language
ActionScript 3