Revision: 48786
Initial Code
Initial URL
Initial Description
Initial Title
Initial Tags
Initial Language
at July 9, 2011 00:46 by mcorlan
Initial Code
override public function updateDisplayList(containerWidth:Number, containerHeight:Number):void { if (useVirtualLayout) updateVirtual(containerWidth, containerHeight); else updateNonVirtual(containerWidth, containerHeight); } /** * Lay down the current items in the view - this is used when useVirtualLayout is set to true */ private function updateVirtual(containerWidth:Number, containerHeight:Number):void { var layoutTarget:GroupBase = target; if (!(layoutTarget as DataGroup).dataProvider || (layoutTarget as DataGroup).dataProvider.length == 0) return; if (!_containerWidth) _containerWidth = containerWidth; if (!_containerHeight) _containerHeight = containerHeight; //a resize of the component occured if (_containerWidth != containerWidth || _containerHeight != containerHeight) { _containerWidth = containerWidth; _containerHeight = containerHeight; addExtraItems = 0; measure(); //set the new _firstIndex and _lastIndex scrollPositionChanged(); } trace(layoutTarget.numElements); var x:Number = 0; var y:Number = 0; var maxWidth:Number = 0; var maxHeight:Number = 0; var elementWidth:Number, elementHeight:Number, prevElementHeight:Number; //provide the initial values if (!_firstIndexInView) _firstIndexInView = 0; if (!_lastIndexInView) _lastIndexInView = yToIndex.length - 1 > layoutTarget.height ? yToIndex[layoutTarget.height + 1] : layoutTarget.numElements - 1; //add some extra rows after the current view currentFirstIndex = _firstIndexInView; if (currentFirstIndex < 0 ) currentFirstIndex = 0; if (!addExtraItems) { addExtraItems = Math.ceil(containerWidth / (_columnWidth + _horizontalGap)) * Math.ceil(containerHeight / ((_tileHeight + _sectionHeight) / 2)); } currentLastIndex = _firstIndexInView + addExtraItems; if (currentLastIndex > layoutTarget.numElements - 1) currentLastIndex = layoutTarget.numElements - 1; y = indexToY[currentFirstIndex]; var count:int = currentLastIndex + 1; var element:ILayoutElement; for (var i:int = currentFirstIndex; i < count; i++) { // get the current element, we're going to work with the // ILayoutElement interface element = layoutTarget.getVirtualElementAt(i); // Resize the element to its preferred size by passing // NaN for the width and height constraints element.setLayoutBoundsSize(NaN, NaN); if (element["data"] && _sectionLabel in element["data"]) { elementWidth = containerWidth; elementHeight = _sectionHeight; } else { elementWidth = _columnWidth; elementHeight = _tileHeight; } element.setLayoutBoundsSize(elementWidth, elementHeight); // Would the element fit on this line, or should we move // to the next line? if (x + elementWidth > containerWidth) { x = 0; //move to the next row y += prevElementHeight + _verticalGap; } // Position the element element.setLayoutBoundsPosition(x, y); prevElementHeight = elementHeight; // Update the current position, add the gap x += elementWidth + _horizontalGap; } }
Initial URL
http://corlan.org/?p=2987
Initial Description
Initial Title
Custom Layout manager updateDisplayList() method
Initial Tags
Initial Language
ActionScript 3