Subversion Repositories Applications.papyrus

Rev

Rev 1318 | Only display areas with differences | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 1318 Rev 1422
1
/*
1
/*
2
	Copyright (c) 2004-2006, The Dojo Foundation
2
	Copyright (c) 2004-2006, The Dojo Foundation
3
	All Rights Reserved.
3
	All Rights Reserved.
4
 
4
 
5
	Licensed under the Academic Free License version 2.1 or above OR the
5
	Licensed under the Academic Free License version 2.1 or above OR the
6
	modified BSD license. For more information on Dojo licensing, see:
6
	modified BSD license. For more information on Dojo licensing, see:
7
 
7
 
8
		http://dojotoolkit.org/community/licensing.shtml
8
		http://dojotoolkit.org/community/licensing.shtml
9
*/
9
*/
-
 
10
 
-
 
11
 
10
 
12
 
11
dojo.provide("dojo.charting.PlotArea");
13
dojo.provide("dojo.charting.PlotArea");
12
dojo.require("dojo.lang.common");
14
dojo.require("dojo.lang.common");
13
dojo.require("dojo.gfx.color");
15
dojo.require("dojo.gfx.color");
14
dojo.require("dojo.gfx.color.hsl");
16
dojo.require("dojo.gfx.color.hsl");
15
dojo.require("dojo.charting.Plot");
17
dojo.require("dojo.charting.Plot");
16
dojo.charting.PlotArea = function () {
18
dojo.charting.PlotArea = function () {
17
	var id = "dojo-charting-plotarea-" + dojo.charting.PlotArea.count++;
19
	var id = "dojo-charting-plotarea-" + dojo.charting.PlotArea.count++;
18
	this.getId = function () {
20
	this.getId = function () {
19
		return id;
21
		return id;
20
	};
22
	};
21
	this.setId = function (key) {
23
	this.setId = function (key) {
22
		id = key;
24
		id = key;
23
	};
25
	};
24
	this.areaType = "standard";
26
	this.areaType = "standard";
25
	this.plots = [];
27
	this.plots = [];
26
	this.size = {width:600, height:400};
28
	this.size = {width:600, height:400};
27
	this.padding = {top:10, right:10, bottom:20, left:20};
29
	this.padding = {top:10, right:10, bottom:20, left:20};
28
	this.nodes = {main:null, area:null, background:null, axes:null, plots:null};
30
	this.nodes = {main:null, area:null, background:null, axes:null, plots:null};
29
	this._color = {h:140, s:120, l:120, step:27};
31
	this._color = {h:140, s:120, l:120, step:27};
30
};
32
};
31
dojo.charting.PlotArea.count = 0;
33
dojo.charting.PlotArea.count = 0;
32
dojo.extend(dojo.charting.PlotArea, {nextColor:function () {
34
dojo.extend(dojo.charting.PlotArea, {nextColor:function () {
33
	var rgb = dojo.gfx.color.hsl2rgb(this._color.h, this._color.s, this._color.l);
35
	var rgb = dojo.gfx.color.hsl2rgb(this._color.h, this._color.s, this._color.l);
34
	this._color.h = (this._color.h + this._color.step) % 360;
36
	this._color.h = (this._color.h + this._color.step) % 360;
35
	while (this._color.h < 140) {
37
	while (this._color.h < 140) {
36
		this._color.h += this._color.step;
38
		this._color.h += this._color.step;
37
	}
39
	}
38
	return dojo.gfx.color.rgb2hex(rgb[0], rgb[1], rgb[2]);
40
	return dojo.gfx.color.rgb2hex(rgb[0], rgb[1], rgb[2]);
39
}, getArea:function () {
41
}, getArea:function () {
40
	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 () {
42
	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 () {
41
		var a = [this.top, this.right, this.bottom, this.left];
43
		var a = [this.top, this.right, this.bottom, this.left];
42
		return "[" + a.join() + "]";
44
		return "[" + a.join() + "]";
43
	}};
45
	}};
44
}, getAxes:function () {
46
}, getAxes:function () {
45
	var axes = {};
47
	var axes = {};
46
	for (var i = 0; i < this.plots.length; i++) {
48
	for (var i = 0; i < this.plots.length; i++) {
47
		var plot = this.plots[i];
49
		var plot = this.plots[i];
48
		axes[plot.axisX.getId()] = {axis:plot.axisX, drawAgainst:plot.axisY, plot:plot, plane:"x"};
50
		axes[plot.axisX.getId()] = {axis:plot.axisX, drawAgainst:plot.axisY, plot:plot, plane:"x"};
49
		axes[plot.axisY.getId()] = {axis:plot.axisY, drawAgainst:plot.axisX, plot:plot, plane:"y"};
51
		axes[plot.axisY.getId()] = {axis:plot.axisY, drawAgainst:plot.axisX, plot:plot, plane:"y"};
50
	}
52
	}
51
	return axes;
53
	return axes;
52
}, getLegendInfo:function () {
54
}, getLegendInfo:function () {
53
	var a = [];
55
	var a = [];
54
	for (var i = 0; i < this.plots.length; i++) {
56
	for (var i = 0; i < this.plots.length; i++) {
55
		for (var j = 0; j < this.plots[i].series.length; j++) {
57
		for (var j = 0; j < this.plots[i].series.length; j++) {
56
			var data = this.plots[i].series[j].data;
58
			var data = this.plots[i].series[j].data;
57
			a.push({label:data.label, color:data.color});
59
			a.push({label:data.label, color:data.color});
58
		}
60
		}
59
	}
61
	}
60
	return a;
62
	return a;
61
}, setAxesRanges:function () {
63
}, setAxesRanges:function () {
62
	var ranges = {};
64
	var ranges = {};
63
	var axes = {};
65
	var axes = {};
64
	for (var i = 0; i < this.plots.length; i++) {
66
	for (var i = 0; i < this.plots.length; i++) {
65
		var plot = this.plots[i];
67
		var plot = this.plots[i];
66
		var ranges = plot.getRanges();
68
		var ranges = plot.getRanges();
67
		var x = ranges.x;
69
		var x = ranges.x;
68
		var y = ranges.y;
70
		var y = ranges.y;
69
		var ax, ay;
71
		var ax, ay;
70
		if (!axes[plot.axisX.getId()]) {
72
		if (!axes[plot.axisX.getId()]) {
71
			axes[plot.axisX.getId()] = plot.axisX;
73
			axes[plot.axisX.getId()] = plot.axisX;
72
			ranges[plot.axisX.getId()] = {upper:x.upper, lower:x.lower};
74
			ranges[plot.axisX.getId()] = {upper:x.upper, lower:x.lower};
73
		}
75
		}
74
		ax = ranges[plot.axisX.getId()];
76
		ax = ranges[plot.axisX.getId()];
75
		ax.upper = Math.max(ax.upper, x.upper);
77
		ax.upper = Math.max(ax.upper, x.upper);
76
		ax.lower = Math.min(ax.lower, x.lower);
78
		ax.lower = Math.min(ax.lower, x.lower);
77
		if (!axes[plot.axisY.getId()]) {
79
		if (!axes[plot.axisY.getId()]) {
78
			axes[plot.axisY.getId()] = plot.axisY;
80
			axes[plot.axisY.getId()] = plot.axisY;
79
			ranges[plot.axisY.getId()] = {upper:y.upper, lower:y.lower};
81
			ranges[plot.axisY.getId()] = {upper:y.upper, lower:y.lower};
80
		}
82
		}
81
		ay = ranges[plot.axisY.getId()];
83
		ay = ranges[plot.axisY.getId()];
82
		ay.upper = Math.max(ay.upper, y.upper);
84
		ay.upper = Math.max(ay.upper, y.upper);
83
		ay.lower = Math.min(ay.lower, y.lower);
85
		ay.lower = Math.min(ay.lower, y.lower);
84
	}
86
	}
85
	for (var p in axes) {
87
	for (var p in axes) {
86
		axes[p].range = ranges[p];
88
		axes[p].range = ranges[p];
87
	}
89
	}
88
}, render:function (kwArgs, applyToData) {
90
}, render:function (kwArgs, applyToData) {
89
	if (!this.nodes.main || !this.nodes.area || !this.nodes.background || !this.nodes.plots || !this.nodes.axes) {
91
	if (!this.nodes.main || !this.nodes.area || !this.nodes.background || !this.nodes.plots || !this.nodes.axes) {
90
		this.initialize();
92
		this.initialize();
91
	}
93
	}
92
	this.resize();
94
	this.resize();
93
	for (var i = 0; i < this.plots.length; i++) {
95
	for (var i = 0; i < this.plots.length; i++) {
94
		var plot = this.plots[i];
96
		var plot = this.plots[i];
95
		if (plot.dataNode) {
97
		if (plot.dataNode) {
96
			this.nodes.plots.removeChild(plot.dataNode);
98
			this.nodes.plots.removeChild(plot.dataNode);
97
		}
99
		}
98
		var target = this.initializePlot(plot);
100
		var target = this.initializePlot(plot);
99
		switch (plot.renderType) {
101
		switch (plot.renderType) {
100
		  case dojo.charting.RenderPlotSeries.Grouped:
102
		  case dojo.charting.RenderPlotSeries.Grouped:
101
			if (plot.series[0]) {
103
			if (plot.series[0]) {
102
				target.appendChild(plot.series[0].plotter(this, plot, kwArgs, applyToData));
104
				target.appendChild(plot.series[0].plotter(this, plot, kwArgs, applyToData));
103
			}
105
			}
104
			break;
106
			break;
105
		  case dojo.charting.RenderPlotSeries.Singly:
107
		  case dojo.charting.RenderPlotSeries.Singly:
106
		  default:
108
		  default:
107
			for (var j = 0; j < plot.series.length; j++) {
109
			for (var j = 0; j < plot.series.length; j++) {
108
				var series = plot.series[j];
110
				var series = plot.series[j];
109
				var data = series.data.evaluate(kwArgs);
111
				var data = series.data.evaluate(kwArgs);
110
				target.appendChild(series.plotter(data, this, plot, applyToData));
112
				target.appendChild(series.plotter(data, this, plot, applyToData));
111
			}
113
			}
112
		}
114
		}
113
		this.nodes.plots.appendChild(target);
115
		this.nodes.plots.appendChild(target);
114
	}
116
	}
115
}, destroy:function () {
117
}, destroy:function () {
116
	for (var i = 0; i < this.plots.length; i++) {
118
	for (var i = 0; i < this.plots.length; i++) {
117
		this.plots[i].destroy();
119
		this.plots[i].destroy();
118
	}
120
	}
119
	for (var p in this.nodes) {
121
	for (var p in this.nodes) {
120
		var node = this.nodes[p];
122
		var node = this.nodes[p];
121
		if (!node) {
123
		if (!node) {
122
			continue;
124
			continue;
123
		}
125
		}
124
		if (!node.childNodes) {
126
		if (!node.childNodes) {
125
			continue;
127
			continue;
126
		}
128
		}
127
		while (node.childNodes.length > 0) {
129
		while (node.childNodes.length > 0) {
128
			node.removeChild(node.childNodes[0]);
130
			node.removeChild(node.childNodes[0]);
129
		}
131
		}
130
		this.nodes[p] = null;
132
		this.nodes[p] = null;
131
	}
133
	}
132
}});
134
}});
133
dojo.requireIf(dojo.render.svg.capable, "dojo.charting.svg.PlotArea");
135
dojo.requireIf(dojo.render.svg.capable, "dojo.charting.svg.PlotArea");
134
dojo.requireIf(dojo.render.vml.capable, "dojo.charting.vml.PlotArea");
136
dojo.requireIf(dojo.render.vml.capable, "dojo.charting.vml.PlotArea");
135
 
137