/** * The Back Button < http://thebackbutton.com; * Created by: Alex Bustin (bustin@gmail.com); * * Respect the code: ©; * * Class: com.thebackbutton.utils::FilterCodeUtil; * Version: 1.0; * Date: Oct 26th 2007 */ package com.thebackbutton.utils { import flash.display.DisplayObject; import flash.filters.BitmapFilter; import flash.utils.describeType; public class FilterCodeUtil { /** * Generates ActionScript code to replicate filter configurations usually set within the Flash IDE via a GUI. * * Will work with any object inherited from DisplayObject. * * Output shall be traced the the output console ready to be copied and pasted. * * @param displayObject - Source DisplayList object * */ public static function generateCode(displayObject:DisplayObject):void { var filterList:Array = displayObject.filters, filter:BitmapFilter, params:XMLList, param:*, paramName:String, className:String, filterVarName:String, filterNames:Array = [], classManifest:XML, imports:Object = {}, functionBlock:String = "", counter:uint = 0; for each(filter in filterList) { classManifest = describeType(filter); className = String(classManifest.@name).split("::").join("."); imports[className] = true; className = className.substring(className.lastIndexOf(".")+1); filterVarName = "f"+counter; filterNames.push(filterVarName); params = classManifest.accessor.@name if (!params) { continue; } functionBlock += " var "+filterVarName+":"+className+" = new "+className+"()\n with ("+filterVarName+") {\n"; for each (paramName in params) { param = filter[paramName]; if (param is Array) { functionBlock += " "+paramName+" = ["+param+"];\n"; } else if (param is String) { functionBlock += " "+paramName+" = '"+param+"';\n"; } else { functionBlock += " "+paramName+" = "+param+";\n"; } } counter++; functionBlock += " }\n"; } for (className in imports) { trace("import "+className); } trace("\nprotected function getFilter():Array {"); trace(functionBlock) trace(" return ["+filterNames.join(",")+"];\n}") } } }