import nl.idgis.giclient.template.Parameterable; import nl.idgis.giclient.template.Parameter; import nl.idgis.giclient.gis.GIS; import nl.idgis.giclient.template.TemplateMovie; import mx.utils.Delegate; import nl.idgis.giclient.template.CallbackCounter; /** * @author copierrj */ class nl.idgis.giclient.template.TemplateElement implements Parameterable { private var gis:GIS; private var x:Number = 0; private var y:Number = 0; private var width:Number = 0; private var height:Number = 0; private var visible:Boolean = true; private var dynamicParameters:Array; private var drawStack:Array; public function TemplateElement(gis:GIS) { dynamicParameters = new Array(); this.gis = gis; drawStack = new Array(); } public function setParameter(name:String, value:Object):Void { if(typeof(this[name]) == "number" && typeof(value) == "string") { var number:Number = Number(value); if(number != Number.NaN) { this[name] = number; } else { trace("'" + value + "' is not a number!"); } } else if(typeof(this[name]) == "boolean") { this[name] = value.toString().toLowerCase() == "true"; }else { this[name] = value; } } public function addDynamicParameter(parameter:Parameter) { dynamicParameters.push(parameter); } private function parametersReady():Void { var obj:Object = drawStack.pop(); if(visible) { doDrawElement(MovieClip(obj["mc"]), obj["handler"]); } else { obj["handler"].onReady(); } } public function doDrawElement(mc:MovieClip, handler:Object):Void { trace("doDrawElement"); } public function drawElement(mc:MovieClip, handler:Object):Void { if(dynamicParameters.length > 0) { drawStack.push({mc: mc, handler: handler}); var callbackCounter:CallbackCounter = new CallbackCounter(dynamicParameters.length, Delegate.create(this, parametersReady)); for(var i:Number = 0; i < dynamicParameters.length; i++) { Parameter(dynamicParameters[i]).execute(callbackCounter.getCallback()); } } else { if(visible) { doDrawElement(mc, handler); } else { handler.onReady(); } } } public function getX():Number { return x; } public function getY():Number { return y; } public function getWidth():Number { return width; } public function getHeight():Number { return height; } }