New file |
0,0 → 1,135 |
/* |
Copyright (c) 2004-2006, The Dojo Foundation |
All Rights Reserved. |
|
Licensed under the Academic Free License version 2.1 or above OR the |
modified BSD license. For more information on Dojo licensing, see: |
|
http://dojotoolkit.org/community/licensing.shtml |
*/ |
|
dojo.provide("dojo.charting.PlotArea"); |
dojo.require("dojo.lang.common"); |
dojo.require("dojo.gfx.color"); |
dojo.require("dojo.gfx.color.hsl"); |
dojo.require("dojo.charting.Plot"); |
dojo.charting.PlotArea = function () { |
var id = "dojo-charting-plotarea-" + dojo.charting.PlotArea.count++; |
this.getId = function () { |
return id; |
}; |
this.setId = function (key) { |
id = key; |
}; |
this.areaType = "standard"; |
this.plots = []; |
this.size = {width:600, height:400}; |
this.padding = {top:10, right:10, bottom:20, left:20}; |
this.nodes = {main:null, area:null, background:null, axes:null, plots:null}; |
this._color = {h:140, s:120, l:120, step:27}; |
}; |
dojo.charting.PlotArea.count = 0; |
dojo.extend(dojo.charting.PlotArea, {nextColor:function () { |
var rgb = dojo.gfx.color.hsl2rgb(this._color.h, this._color.s, this._color.l); |
this._color.h = (this._color.h + this._color.step) % 360; |
while (this._color.h < 140) { |
this._color.h += this._color.step; |
} |
return dojo.gfx.color.rgb2hex(rgb[0], rgb[1], rgb[2]); |
}, getArea:function () { |
return {left:this.padding.left, right:this.size.width - this.padding.right, top:this.padding.top, bottom:this.size.height - this.padding.bottom, toString:function () { |
var a = [this.top, this.right, this.bottom, this.left]; |
return "[" + a.join() + "]"; |
}}; |
}, getAxes:function () { |
var axes = {}; |
for (var i = 0; i < this.plots.length; i++) { |
var plot = this.plots[i]; |
axes[plot.axisX.getId()] = {axis:plot.axisX, drawAgainst:plot.axisY, plot:plot, plane:"x"}; |
axes[plot.axisY.getId()] = {axis:plot.axisY, drawAgainst:plot.axisX, plot:plot, plane:"y"}; |
} |
return axes; |
}, getLegendInfo:function () { |
var a = []; |
for (var i = 0; i < this.plots.length; i++) { |
for (var j = 0; j < this.plots[i].series.length; j++) { |
var data = this.plots[i].series[j].data; |
a.push({label:data.label, color:data.color}); |
} |
} |
return a; |
}, setAxesRanges:function () { |
var ranges = {}; |
var axes = {}; |
for (var i = 0; i < this.plots.length; i++) { |
var plot = this.plots[i]; |
var ranges = plot.getRanges(); |
var x = ranges.x; |
var y = ranges.y; |
var ax, ay; |
if (!axes[plot.axisX.getId()]) { |
axes[plot.axisX.getId()] = plot.axisX; |
ranges[plot.axisX.getId()] = {upper:x.upper, lower:x.lower}; |
} |
ax = ranges[plot.axisX.getId()]; |
ax.upper = Math.max(ax.upper, x.upper); |
ax.lower = Math.min(ax.lower, x.lower); |
if (!axes[plot.axisY.getId()]) { |
axes[plot.axisY.getId()] = plot.axisY; |
ranges[plot.axisY.getId()] = {upper:y.upper, lower:y.lower}; |
} |
ay = ranges[plot.axisY.getId()]; |
ay.upper = Math.max(ay.upper, y.upper); |
ay.lower = Math.min(ay.lower, y.lower); |
} |
for (var p in axes) { |
axes[p].range = ranges[p]; |
} |
}, render:function (kwArgs, applyToData) { |
if (!this.nodes.main || !this.nodes.area || !this.nodes.background || !this.nodes.plots || !this.nodes.axes) { |
this.initialize(); |
} |
this.resize(); |
for (var i = 0; i < this.plots.length; i++) { |
var plot = this.plots[i]; |
if (plot.dataNode) { |
this.nodes.plots.removeChild(plot.dataNode); |
} |
var target = this.initializePlot(plot); |
switch (plot.renderType) { |
case dojo.charting.RenderPlotSeries.Grouped: |
if (plot.series[0]) { |
target.appendChild(plot.series[0].plotter(this, plot, kwArgs, applyToData)); |
} |
break; |
case dojo.charting.RenderPlotSeries.Singly: |
default: |
for (var j = 0; j < plot.series.length; j++) { |
var series = plot.series[j]; |
var data = series.data.evaluate(kwArgs); |
target.appendChild(series.plotter(data, this, plot, applyToData)); |
} |
} |
this.nodes.plots.appendChild(target); |
} |
}, destroy:function () { |
for (var i = 0; i < this.plots.length; i++) { |
this.plots[i].destroy(); |
} |
for (var p in this.nodes) { |
var node = this.nodes[p]; |
if (!node) { |
continue; |
} |
if (!node.childNodes) { |
continue; |
} |
while (node.childNodes.length > 0) { |
node.removeChild(node.childNodes[0]); |
} |
this.nodes[p] = null; |
} |
}}); |
dojo.requireIf(dojo.render.svg.capable, "dojo.charting.svg.PlotArea"); |
dojo.requireIf(dojo.render.vml.capable, "dojo.charting.vml.PlotArea"); |
|