//////////////////////////////////////////////////////////////////////////////// // // Licensed to the Apache Software Foundation (ASF) under one or more // contributor license agreements. See the NOTICE file distributed with // this work for additional information regarding copyright ownership. // The ASF licenses this file to You under the Apache License, Version 2.0 // (the "License"); you may not use this file except in compliance with // the License. You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // //////////////////////////////////////////////////////////////////////////////// package { import mx.charts.*; import mx.charts.series.*; import mx.charts.series.items.*; import mx.charts.chartClasses.*; import mx.charts.renderers.*; import mx.charts.*; import mx.core.ClassFactory; import mx.graphics.*; import mx.controls.Alert; import mx.controls.Label; public class DataGraphicsUtils { public function DataGraphicsUtils() { } public static function myParseFunction(s:String):Date { var a:Array = s.split(","); var newDate:Date = new Date(a[0],a[1]-1,a[2]); return newDate; } public static function DrawShapes(testCaseType:String, chart:Object, elementType:String):void { var myCanvas:CartesianDataCanvas = new CartesianDataCanvas(); switch(testCaseType) { case "circle": //draw circle myCanvas.clear(); myCanvas.beginFill(0xFFCC04, 1); myCanvas.drawCircle("1", 20,50); myCanvas.endFill(); break; case "line": // draw line myCanvas.clear(); myCanvas.moveTo("0", 200); myCanvas.beginFill(0xFFCC04, 1); myCanvas.lineStyle(1, 0x003399, 1.0); myCanvas.lineTo("5", 30); break; case "rect": //rect with a label(component) myCanvas.clear(); myCanvas.beginFill(0xFFCC04, 1); myCanvas.drawRect("2", 20,"5",10); var myLabel:Label = new Label(); myLabel.text = "Test"; myCanvas.addChild(myLabel); myCanvas.updateDataChild(myLabel, "3", 40); myCanvas.endFill(); break; case "roundedRect": //rounded rect myCanvas.clear(); myCanvas.beginFill(0x003399, 1); myCanvas.drawRoundedRect("4", 20,"5",10,15); myCanvas.endFill(); break; case "ellipse": //ellipse myCanvas.clear(); myCanvas.beginFill(0xFDCC34, 1); myCanvas.drawEllipse("1", 20,"4", 30); myCanvas.endFill(); break; case "curve": //curve myCanvas.clear(); myCanvas.beginFill(0xFFCC04, 1); myCanvas.curveTo("2", 25, "5", 30); myCanvas.endFill(); break; } switch(elementType) { case "annotation": chart.annotationElements = chart.annotationElements.concat(myCanvas); break; case "background": chart.backgroundElements = chart.backgroundElements.concat(myCanvas); break; } } public static function DrawShapesWithNegativeVal(testCaseType:String, chart:Object, elementType:String):void { var myCanvas:CartesianDataCanvas = new CartesianDataCanvas(); switch(testCaseType) { case "circle": // circle with negative value for radius myCanvas.clear(); myCanvas.beginFill(0xFFCC04, 1); myCanvas.drawCircle("2", 20,-50); myCanvas.endFill(); chart.annotationElements = chart.annotationElements.concat(myCanvas); break; case "line": // draw line with negative value in line style myCanvas.clear(); myCanvas.moveTo("0", 20); myCanvas.beginFill(0xFFCC04, 1); myCanvas.lineStyle(1, 0x003399, -1.0); myCanvas.lineTo("5", 30); chart.annotationElements = chart.annotationElements.concat(myCanvas); break; case "rect": //rect with a label(component) with data coordinates that are not present in the chart myCanvas.clear(); myCanvas.beginFill(0xFFCC04, 1); myCanvas.drawRect("2", 200,"5",10); var myLabel:Label = new Label(); myLabel.text = "Test"; myCanvas.addChild(myLabel); myCanvas.updateDataChild(myLabel, "3", 40); myCanvas.endFill(); chart.annotationElements = chart.annotationElements.concat(myCanvas); break; case "roundedRect": //rounded rect myCanvas.clear(); myCanvas.beginFill(0x003399, 1); myCanvas.drawRoundedRect("5", 20,"6",10,15); myCanvas.endFill(); chart.annotationElements = chart.annotationElements.concat(myCanvas); break; case "ellipse": //ellipse with negative rounded radius value myCanvas.clear(); myCanvas.beginFill(0xFDCC34, 1); myCanvas.drawEllipse("1", 20,"4", -30); myCanvas.endFill(); chart.annotationElements = chart.annotationElements.concat(myCanvas); break; case "curve": //curve myCanvas.clear(); myCanvas.beginFill(0xFFCC04, 1); myCanvas.curveTo("0", 25, "5", 30); myCanvas.endFill(); chart.annotationElements = chart.annotationElements.concat(myCanvas); break; } switch(elementType) { case "annotation": chart.annotationElements = chart.annotationElements.concat(myCanvas); break; case "background": chart.backgroundElements = chart.backgroundElements.concat(myCanvas); break; } } public static function DrawWithCartesianCanvasValue(testCaseType:String, chart:Object, elementType:String):void { var myCanvas:CartesianDataCanvas = new CartesianDataCanvas(); switch(testCaseType) { case "circle": // circle with 0 offset in CartesianCanvasValue myCanvas.clear(); myCanvas.beginFill(0xFFCC04, 1); myCanvas.drawCircle(new CartesianCanvasValue("2"), 20,50); myCanvas.endFill(); break; case "line": // draw line 30 offset in CartesianCanvasValue in line style myCanvas.clear(); myCanvas.moveTo("0", 20); myCanvas.beginFill(0xFFCC04, 1); myCanvas.lineStyle(1, 0x003399, 1.0); myCanvas.lineTo(new CartesianCanvasValue("5", 30), 30); break; case "rect": //rect with a label(component) with data coordinates that are not present in the chart myCanvas.clear(); myCanvas.beginFill(0xFFCC04, 1); myCanvas.drawRect(new CartesianCanvasValue("2",5), 20,new CartesianCanvasValue("5",5),10); var myLabel:Label = new Label(); myLabel.text = "Test"; myCanvas.addChild(myLabel); myCanvas.updateDataChild(myLabel, "3", 40); myCanvas.endFill(); break; case "roundedRect": //rounded rect myCanvas.clear(); myCanvas.beginFill(0x003399, 1); myCanvas.drawRoundedRect(new CartesianCanvasValue("3"), 20,new CartesianCanvasValue("5"),10,15); myCanvas.endFill(); break; case "ellipse": //ellipse with negative rounded radius value myCanvas.clear(); myCanvas.beginFill(0xFDCC34, 1); myCanvas.drawEllipse(new CartesianCanvasValue("1",10), new CartesianCanvasValue(20,-10), new CartesianCanvasValue("4",10), new CartesianCanvasValue(30, 10)); myCanvas.endFill(); break; case "curve": //curve myCanvas.clear(); myCanvas.beginFill(0xFFCC04, 1); myCanvas.curveTo(new CartesianCanvasValue("0", 10), 25, new CartesianCanvasValue("5"), 30); myCanvas.endFill(); break; } switch(elementType) { case "annotation": chart.annotationElements = chart.annotationElements.concat(myCanvas); break; case "background": chart.backgroundElements = chart.backgroundElements.concat(myCanvas); break; } } public static function DrawCanvasOnNegativeAxis(testCaseType:String, chart:Object, elementType:String):void { var myCanvas:CartesianDataCanvas = new CartesianDataCanvas(); switch(testCaseType) { case "circle": // circle with 0 offset in CartesianCanvasValue myCanvas.clear(); myCanvas.beginFill(0xFFCC04, 1); myCanvas.drawCircle(new CartesianCanvasValue("2"), -20,50); myCanvas.endFill(); break; case "line": // draw line 30 offset in CartesianCanvasValue in line style myCanvas.clear(); myCanvas.moveTo("0", -20); myCanvas.beginFill(0xFFCC04, 1); myCanvas.lineStyle(1, 0x003399, 1.0); myCanvas.lineTo(new CartesianCanvasValue("5", 30), -30); break; case "rect": //rect with a label(component) with data coordinates that are not present in the chart myCanvas.clear(); myCanvas.beginFill(0xFFCC04, 1); myCanvas.drawRect(new CartesianCanvasValue("2",5), -20,new CartesianCanvasValue("5",5),-10); var myLabel:Label = new Label(); myLabel.text = "Test"; myCanvas.addChild(myLabel); myCanvas.updateDataChild(myLabel, "3", -40); myCanvas.endFill(); break; case "roundedRect": //rounded rect myCanvas.clear(); myCanvas.beginFill(0x003399, 1); myCanvas.drawRoundedRect(new CartesianCanvasValue("3"), -20,new CartesianCanvasValue("5"),-10,15); myCanvas.endFill(); break; case "ellipse": //ellipse with negative rounded radius value myCanvas.clear(); myCanvas.beginFill(0xFDCC34, 1); myCanvas.drawEllipse(new CartesianCanvasValue("1",10), new CartesianCanvasValue(-20,-10), new CartesianCanvasValue("4",10), new CartesianCanvasValue(-30, 10)); myCanvas.endFill(); break; case "curve": //curve myCanvas.clear(); myCanvas.beginFill(0xFFCC04, 1); myCanvas.curveTo(new CartesianCanvasValue("0", 10), -25, new CartesianCanvasValue("5"), -30); myCanvas.endFill(); break; } switch(elementType) { case "annotation": chart.annotationElements = chart.annotationElements.concat(myCanvas); break; case "background": chart.backgroundElements = chart.backgroundElements.concat(myCanvas); break; } } public static function DrawCanvasWithIncludeInRanges(testCaseType:String, chart:Object, elementType:String):void { var myCanvas:CartesianDataCanvas = new CartesianDataCanvas(); switch(testCaseType) { case "circle": myCanvas.clear(); myCanvas.includeInRanges=true; myCanvas.beginFill(0xFFCC04, 1); myCanvas.drawCircle("1", 120,50); myCanvas.endFill(); break; case "line": // draw line myCanvas.clear(); myCanvas.includeInRanges=true; myCanvas.moveTo("0", 200); myCanvas.beginFill(0xFFCC04, 1); myCanvas.lineStyle(1, 0x003399, 1.0); myCanvas.lineTo("5", 30); break; case "rect": //rect with a label(component) myCanvas.clear(); myCanvas.includeInRanges=true; myCanvas.beginFill(0xFFCC04, 1); myCanvas.drawRect("2", 120,"5",100); var myLabel:Label = new Label(); myLabel.text = "Test"; myCanvas.addChild(myLabel); myCanvas.updateDataChild(myLabel, "3", 40); myCanvas.endFill(); break; case "roundedRect": //rounded rect myCanvas.clear(); myCanvas.includeInRanges=true; myCanvas.beginFill(0x003399, 1); myCanvas.drawRoundedRect("4", 20,"5",10,15); myCanvas.endFill(); break; case "ellipse": //ellipse myCanvas.clear(); myCanvas.includeInRanges=true; myCanvas.beginFill(0xFDCC34, 1); myCanvas.drawEllipse("1", 20,"4", 30); myCanvas.endFill(); break; case "curve": //curve myCanvas.clear(); myCanvas.includeInRanges=true; myCanvas.beginFill(0xFFCC04, 1); myCanvas.curveTo("2", 25, "5", 30); myCanvas.endFill(); break; } switch(elementType) { case "annotation": chart.annotationElements = chart.annotationElements.concat(myCanvas); break; case "background": chart.backgroundElements = chart.backgroundElements.concat(myCanvas); break; } } public static function AddCompWithUpdateDataChild(testCaseType:String, chart:Object, elementType:String):void { var myCanvas:CartesianDataCanvas = new CartesianDataCanvas(); var myLabel:Label = new Label(); switch(testCaseType) { case "1": myCanvas.clear(); myCanvas.includeInRanges=true; myLabel.text = "Test"; myCanvas.addChild(myLabel); myCanvas.updateDataChild(myLabel, "2", 20, "4", 30, 3, 4); break; case "2": myCanvas.clear(); myCanvas.includeInRanges=true; myLabel.text = "Test"; myCanvas.addChild(myLabel); myCanvas.updateDataChild(myLabel, "3", 40, "5", 20, 1, 2); break; case "3": myCanvas.clear(); myCanvas.includeInRanges=true; myLabel.text = "Test"; myCanvas.addChild(myLabel); myCanvas.updateDataChild(myLabel, "3", 40, "2", 30, 0, 0); break; case "4": myCanvas.clear(); myCanvas.includeInRanges=true; myLabel.text = "Test"; myCanvas.addChild(myLabel); myCanvas.updateDataChild(myLabel, "3", 40); break; } switch(elementType) { case "annotation": chart.annotationElements = chart.annotationElements.concat(myCanvas); break; case "background": chart.backgroundElements = chart.backgroundElements.concat(myCanvas); break; } } public static function CanvasOnMultipleAxes(testCaseType:String, chart:Object, elementType:String):void { var myCanvas:CartesianDataCanvas = new CartesianDataCanvas(); var myCanvas1:CartesianDataCanvas = new CartesianDataCanvas(); var myCanvas2:CartesianDataCanvas = new CartesianDataCanvas(); var arrHorAxisRenderers:Array = new Array(); var arrVerAxisRenderers:Array = new Array(); var seriesArray:Array = new Array(); var myHorH1:CategoryAxis = new CategoryAxis(); var myHorH2:CategoryAxis = new CategoryAxis(); var myVerV1:LinearAxis = new LinearAxis(); var myVerV2:LinearAxis = new LinearAxis(); var myVerV3:LinearAxis = new LinearAxis(); var myVerV4:LinearAxis = new LinearAxis(); var myHorAxisRenderer: AxisRenderer = new AxisRenderer(); var myHorAxisRenderer1: AxisRenderer = new AxisRenderer(); var myVerAxisRenderer: AxisRenderer = new AxisRenderer(); var myVerAxisRenderer1: AxisRenderer = new AxisRenderer(); var myVerAxisRenderer2: AxisRenderer = new AxisRenderer(); var myVerAxisRenderer3: AxisRenderer = new AxisRenderer(); var closeCol1:ColumnSeries = new ColumnSeries(); var openLine:LineSeries = new LineSeries(); var highLine:LineSeries = new LineSeries(); var lowPlot:PlotSeries = new PlotSeries(); switch(testCaseType) { case "axisSet": // axis set for canvas myHorH1.categoryField = "month"; myHorH2.categoryField = "date"; chart.horizontalAxis = myHorH1; myVerV2.minimum = 20; myVerV2.maximum = 170; myVerV1.title = "close"; myVerV2.title = "open"; myVerV3.title = "high"; myVerV4.title = "low"; myHorAxisRenderer.axis = myHorH2; myHorAxisRenderer.placement = "top"; arrHorAxisRenderers.push(myHorAxisRenderer); myHorAxisRenderer1.axis = myHorH1; myHorAxisRenderer1.placement = "bottom"; arrHorAxisRenderers.push(myHorAxisRenderer1); myVerAxisRenderer.axis = myVerV1; myVerAxisRenderer.placement = "left"; arrVerAxisRenderers.push(myVerAxisRenderer); myVerAxisRenderer1.axis = myVerV2; myVerAxisRenderer1.placement = "right"; arrVerAxisRenderers.push(myVerAxisRenderer1); myVerAxisRenderer2.axis = myVerV3; myVerAxisRenderer2.placement = "right"; arrVerAxisRenderers.push(myVerAxisRenderer2); myVerAxisRenderer3.axis = myVerV4; myVerAxisRenderer3.placement = "left"; arrVerAxisRenderers.push(myVerAxisRenderer3); chart.verticalAxis = myVerV1; chart.horizontalAxisRenderers = chart.horizontalAxisRenderers.concat(arrHorAxisRenderers); chart.verticalAxisRenderers = chart.verticalAxisRenderers.concat(arrVerAxisRenderers); closeCol1.yField = "close"; closeCol1.horizontalAxis = myHorH1; seriesArray.push(closeCol1); openLine.yField = "open"; openLine.xField = "date"; openLine.horizontalAxis = myHorH2; openLine.verticalAxis = myVerV2; seriesArray.push(openLine); highLine.yField = "high"; highLine.horizontalAxis = myHorH1; highLine.verticalAxis = myVerV3; seriesArray.push(highLine); lowPlot.yField = "low"; lowPlot.verticalAxis = myVerV4; seriesArray.push(lowPlot); chart.series = seriesArray; myCanvas.clear(); myCanvas.horizontalAxis = myHorH1; myCanvas.verticalAxis = myVerV4; myCanvas.includeInRanges=true; myCanvas.beginFill(0xFFCC04, 1); myCanvas.drawCircle("Jul", 120,50); myCanvas.endFill(); break; case "axisNotSet": // canvas axis when not specified takes primary axes myHorH1.categoryField = "month"; myHorH2.categoryField = "date"; chart.horizontalAxis = myHorH1; myVerV2.minimum = 20; myVerV2.maximum = 170; myVerV1.title = "close"; myVerV2.title = "open"; myVerV3.title = "high"; myVerV4.title = "low"; myHorAxisRenderer.axis = myHorH2; myHorAxisRenderer.placement = "top"; arrHorAxisRenderers.push(myHorAxisRenderer); myHorAxisRenderer1.axis = myHorH1; myHorAxisRenderer1.placement = "bottom"; arrHorAxisRenderers.push(myHorAxisRenderer1); myVerAxisRenderer.axis = myVerV1; myVerAxisRenderer.placement = "left"; arrVerAxisRenderers.push(myVerAxisRenderer); myVerAxisRenderer1.axis = myVerV2; myVerAxisRenderer1.placement = "right"; arrVerAxisRenderers.push(myVerAxisRenderer1); chart.verticalAxis = myVerV1; chart.horizontalAxisRenderers = chart.horizontalAxisRenderers.concat(arrHorAxisRenderers); chart.verticalAxisRenderers = chart.verticalAxisRenderers.concat(arrVerAxisRenderers); closeCol1.yField = "close"; closeCol1.horizontalAxis = myHorH1; seriesArray.push(closeCol1); openLine.yField = "open"; openLine.xField = "date"; openLine.horizontalAxis = myHorH2; openLine.verticalAxis = myVerV2; seriesArray.push(openLine); chart.series = seriesArray; myCanvas.clear(); myCanvas.horizontalAxis = myHorH1; myCanvas.verticalAxis = myVerV2; myCanvas.includeInRanges=true; myCanvas.beginFill(0xFFCC04, 1); myCanvas.drawCircle("Jul", 120,50); myCanvas.endFill(); myCanvas1.clear(); myCanvas1.includeInRanges=true; myCanvas1.moveTo("Jul", 200); myCanvas1.beginFill(0xFFCC04, 1); myCanvas1.lineStyle(1, 0x003399, 1.0); myCanvas1.lineTo("Jun", 30); break; case "multipleCanvas": //multiple canvas with multiple axes myHorH1.categoryField = "month"; myHorH2.categoryField = "date"; chart.horizontalAxis = myHorH1; myVerV2.minimum = 20; myVerV2.maximum = 170; myVerV1.title = "close"; myVerV2.title = "open"; myHorAxisRenderer.axis = myHorH2; myHorAxisRenderer.placement = "top"; arrHorAxisRenderers.push(myHorAxisRenderer); myHorAxisRenderer1.axis = myHorH1; myHorAxisRenderer1.placement = "bottom"; arrHorAxisRenderers.push(myHorAxisRenderer1); myVerAxisRenderer.axis = myVerV1; myVerAxisRenderer.placement = "left"; arrVerAxisRenderers.push(myVerAxisRenderer); myVerAxisRenderer1.axis = myVerV2; myVerAxisRenderer1.placement = "right"; arrVerAxisRenderers.push(myVerAxisRenderer1); chart.verticalAxis = myVerV1; chart.horizontalAxisRenderers = chart.horizontalAxisRenderers.concat(arrHorAxisRenderers); chart.verticalAxisRenderers = chart.verticalAxisRenderers.concat(arrVerAxisRenderers); closeCol1.yField = "close"; closeCol1.horizontalAxis = myHorH1; seriesArray.push(closeCol1); openLine.yField = "open"; openLine.xField = "date"; openLine.horizontalAxis = myHorH2; openLine.verticalAxis = myVerV2; seriesArray.push(openLine); chart.series = seriesArray; myCanvas.clear(); myCanvas.horizontalAxis = myHorH1; myCanvas.verticalAxis = myVerV2; myCanvas.includeInRanges=true; myCanvas.beginFill(0xFFCC04, 1); myCanvas.drawCircle("Nov", 100,50); myCanvas.endFill(); myCanvas1.clear(); myCanvas1.includeInRanges=true; myCanvas.horizontalAxis = myHorH2; myCanvas.verticalAxis = myVerV1; myCanvas1.moveTo("Jul", 200); myCanvas1.beginFill(0xFFCC04, 1); myCanvas1.lineStyle(1, 0x003399, 1.0); myCanvas1.lineTo("Jun", 30); break; } switch(elementType) { case "annotation": chart.annotationElements = chart.annotationElements.concat(myCanvas); chart.annotationElements = chart.annotationElements.concat(myCanvas1); break; case "background": chart.backgroundElements = chart.backgroundElements.concat(myCanvas); chart.backgroundElements = chart.backgroundElements.concat(myCanvas1); break; } } } }