Revision: 48794
Initial Code
Initial URL
Initial Description
Initial Title
Initial Tags
Initial Language
at July 9, 2011 02:25 by mcorlan
Initial Code
/** * Section Title font size */ [Style(name="sectionFontSize", type="Number", format="Length", inherit="no")] public class TileItemRenderer extends LabelItemRenderer { private static var _imageCache:ContentCache; public function TileItemRenderer() { super(); if (_imageCache == null) { _imageCache = new ContentCache(); _imageCache.enableCaching = true; _imageCache.maxCacheEntries = 100; } } private var _backgroundSection:Number = 0xDDDDDD; public function set backgroundSection(value:Number):void { _backgroundSection = value; } public function set sectionFontSize(value:int):void { setStyle("sectionFontSize", value); } public function set fontSize(value:int):void { setStyle("fontSize", value); } private var _backgroundRegular:Number = 0xF4DD06; private var _backgroundLabel:Number = 0xEAEAE8; private var _normalLabelField:String = "label"; public function set normalLabelField(value:String):void { _normalLabelField = value; } private var _sectionLabel:String = "section"; public function set sectionLabel(value:String):void { if (value == _sectionLabel) return; _sectionLabel = value; invalidateProperties(); } private var _iconField:String; /** * The name of the field in the data item to display as the icon. * By default <code>iconField</code> is <code>null</code>, and the item renderer * does not display an icon. * * @default null * * @langversion 3.0 * @playerversion AIR 2.5 * @productversion Flex 4.5 */ public function get iconField():String { return _iconField; } /** * @private */ public function set iconField(value:String):void { if (value == _iconField) return; _iconField = value; invalidateProperties(); } /** * Change the style based on the data: section item or regular item */ override public function set data(value:Object):void { if (value) { if (value[_sectionLabel]) { if (image) image.visible = false; if (labelBg) labelBg.visible = false; label = value[_sectionLabel]; labelDisplay.setStyle("textAlign", "center"); labelDisplay.setStyle("fontWeight", "bold"); labelDisplay.setStyle("fontSize", getStyle("sectionFontSize")); } else { if (_iconField && value[_iconField]) { if (image) image.visible = true; image.source = value[_iconField]; } else { if (image) { image.visible = false; image.source = ""; } } if (labelBg) labelBg.visible = true; label = value[_normalLabelField]; labelDisplay.setStyle("fontSize", getStyle("fontSize")); labelDisplay.setStyle("textAlign", "left"); labelDisplay.setStyle("fontWeight", "normal"); } } super.data = value; } //destroyIconDisplay() todo; override protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void { // clear the graphics before calling super.updateDisplayList() graphics.clear(); super.updateDisplayList(unscaledWidth, unscaledHeight); //the following methods are called in super.updateDisplayList(); //drawBackground(unscaledWidth, unscaledHeight); //layoutContents(unscaledWidth, unscaledHeight); } private var image:Image; private var labelBg:Sprite; private var drawn:Boolean; override protected function createChildren():void { if (!image) { image = new Image(); image.smooth = true; image.scaleMode = BitmapScaleMode.STRETCH; image.fillMode = BitmapFillMode.SCALE; image.contentLoader = _imageCache; addChild(image); } //create the background for label if (!labelBg) { labelBg = new Sprite(); addChild(labelBg); } super.createChildren(); } /** * Change the background color for section items */ override protected function drawBackground(unscaledWidth:Number, unscaledHeight:Number):void { super.drawBackground(unscaledWidth, unscaledHeight); if (data[_sectionLabel]) { graphics.beginFill(_backgroundSection, 1); graphics.lineStyle(); graphics.drawRect(0, 0, unscaledWidth, unscaledHeight); graphics.endFill(); } else { //add a vertical line to the right of the item var rightSeparatorColor:uint = 0x000000; var rightSeparatorAlpha:Number = .3; graphics.beginFill(rightSeparatorColor, rightSeparatorAlpha); graphics.drawRect(unscaledWidth - 1, 0, 1, unscaledHeight); graphics.endFill(); //draw a rounded corner place holder for text and icon //let a padding around for seeing through the selection graphics.beginFill(_backgroundRegular, 1); graphics.lineStyle(); graphics.drawRoundRect(3, 3, unscaledWidth - 6, unscaledHeight - 6, 10, 10); graphics.endFill(); } } override protected function layoutContents(unscaledWidth:Number, unscaledHeight:Number):void { super.layoutContents(unscaledWidth, unscaledHeight); //position the image if (!data[_sectionLabel] && _iconField && data[_iconField]) { setElementPosition(image, 5, 5); setElementSize(image, unscaledWidth - 10, unscaledWidth - 10); } if (!data[_sectionLabel] && labelDisplay) { labelDisplay.commitStyles(); var h:Number = labelDisplay.height; //draw for holding the text if (!drawn) { drawn = true; labelBg.graphics.clear(); labelBg.graphics.beginFill(_backgroundLabel, 1); labelBg.graphics.lineStyle(); labelBg.graphics.drawRoundRect(3, unscaledHeight - 10 - h, unscaledWidth - 6, h + 6, 10, 10); labelBg.graphics.endFill(); // setElementPosition(labelBg, 0, unscaledHeight - 10 - h); } var paddingLeft:Number = getStyle("paddingLeft"); //reposition the label at the bottom of the item setElementPosition(labelDisplay, paddingLeft, unscaledHeight - h); } } }
Initial URL
http://corlan.org/?p=2987
Initial Description
Initial Title
Tile Item Renderer for Section Tile List
Initial Tags
Initial Language
ActionScript 3