class IBarChart extends MovieClip { /* notes movieClip hierachy: background (draw on init? or pre-draw?) chart (registary point at bottom left) --> group (registary point at bottom left) --> bar(registerary point at bottom left) data: chartData --> rowData --> row chartData --> colData --> col */ //PROPERTIES/////////////////////////////////////// //Objects private var chart:MovieClip; //Data public var attempts:Number = 0; public var correct:Number = 0; private var chartData:Object; public var groups:Number = 0; public var categories:Number = 0; //Attributes public var barMargin:Number = 2; public var chartHeight:Number = 100; public var chartWidth:Number = 100; public var chartX:Number = 0; public var chartY:Number = 0; public var shadowDistance:Number = 1; //Apperance public var backgroundColors:Array = [0x9BAFB9, 0x68808C]; public var backgroundAlphas:Array = [100, 100]; public var barShadows:Boolean = true; public var highlightAlphas:Array = [75, 10]; public var keyFormat:TextFormat; public var labelFormat:TextFormat; //METHODS////////////////////////////////////////// //CONSTRUCTOR public function IBarChart() { //On initialize create text formats keyFormat = new TextFormat(); keyFormat.size = 5; keyFormat.align = "right"; keyFormat.font = "Arial"; labelFormat = new TextFormat(); labelFormat.size = 5; labelFormat.align = "center"; labelFormat.font = "Arial"; labelFormat.color = 0xFFFFFF; } //Draw the complete chart public function drawChart():Void { initializeChart(); //Initialize for drawing drawAll(); //Draw all bars drawKeys(); //Draw all keys drawLabels(); //Draw all labels } //Initialize Chart public function initializeChart():Void { try { removeChart(); } finally { chart = this.createEmptyMovieClip("chart", this.getNextHighestDepth()); chart._x = chartX; chart._y = chartY; chart.lineStyle(0.1, 0x000000, 100); //line style groups = chartData.row.length; //Number of groups categories = chartData.col.length; //Number of categories drawBackground(); //Draw background //getColours(); //Get colours for categories } } //Rectangle drawing function, subjugates code private function drawRectangle(mc:MovieClip, colour:Array, alpha:Array, a:Number, b:Number, c:Number, d:Number):Void { //Draw generic rectangle using data passed in var matrix = {matrixType:"box", x:a, y:0, w:(c-a), h:(d-b), r:(0/180)*Math.PI}; mc.beginGradientFill("linear", colour, alpha, [0, 0xFF], matrix); mc.moveTo(a, b); mc.lineTo(c, b); mc.lineTo(c, d); mc.lineTo(a, d); mc.lineTo(a, b); mc.endFill(); } //Draw background details public function drawBackground():Void { drawRectangle(chart, backgroundColors, backgroundAlphas, 0, 0, chartWidth, chartHeight); drawRectangle(chart, backgroundColors, backgroundAlphas, 0, chartHeight+1, chartWidth, chartHeight+11); drawRectangle(chart, backgroundColors, backgroundAlphas, 101, 0, chartWidth+41, (categories*15)); } //Draw a single bar public function drawBar(i:Number, j:Number):Void { //Create empty movie clip to store bar in var target:MovieClip = this["chart"]["group"+i]; if (target == undefined) { chart.createEmptyMovieClip("group"+i, chart.getNextHighestDepth()); target = this["chart"]["group"+i]; } var bar = target.createEmptyMovieClip("bar"+String(j), target.getNextHighestDepth()); //Calculate positions to draw to var a:Number = barMargin/2; //Initial x var b:Number = -50; //Initial y (value of data) var c:Number = ((chartWidth/groups)/categories)-(barMargin/2); //End x var d:Number = 0; //Initial y //Draw Shadow Fill if ((barShadows == true) && (b100) { this._height = 100; } }; bar.onPress = function() { this._parent._parent._parent.attempts++; if (this._height<(this.percentData+5) && this._height>(this.percentData-5)) { this._parent._parent._parent.correct++; this._alpha = 100; this._height = this.percentData; delete this.onEnterFrame; delete this.onPress; } }; } public function drawGroup(no:Number):Void { chart.createEmptyMovieClip("group"+no, chart.getNextHighestDepth()); for (var i = 0; i