223 lines
6.3 KiB
JavaScript
223 lines
6.3 KiB
JavaScript
|
//>>built
|
||
|
define("dojox/charting/action2d/MouseIndicator", ["dojo/_base/lang", "dojo/_base/declare", "dojo/_base/connect", "dojo/_base/window", "dojo/_base/sniff",
|
||
|
"./ChartAction", "./_IndicatorElement", "dojox/lang/utils", "dojo/_base/event","dojo/_base/array"],
|
||
|
function(lang, declare, hub, win, has, ChartAction, IndicatorElement, du, eventUtil, arr){
|
||
|
|
||
|
/*=====
|
||
|
dojo.declare("dojox.charting.action2d.__MouseIndicatorCtorArgs", null, {
|
||
|
// summary:
|
||
|
// Additional arguments for mouse indicator.
|
||
|
|
||
|
// series: String
|
||
|
// Target series name for this action.
|
||
|
series: "",
|
||
|
|
||
|
// autoScroll: Boolean?
|
||
|
// Whether when moving indicator the chart is automatically scrolled. Default is true.
|
||
|
autoScroll: true,
|
||
|
|
||
|
// vertical: Boolean?
|
||
|
// Whether the indicator is vertical or not. Default is true.
|
||
|
vertical: true,
|
||
|
|
||
|
// fixed: Boolean?
|
||
|
// Whether a fixed precision must be applied to data values for display. Default is true.
|
||
|
fixed: true,
|
||
|
|
||
|
// precision: Number?
|
||
|
// The precision at which to round data values for display. Default is 1.
|
||
|
precision: 0,
|
||
|
|
||
|
// lineStroke: dojo.gfx.Stroke?
|
||
|
// An optional stroke to use for indicator line.
|
||
|
lineStroke: {},
|
||
|
|
||
|
// lineOutline: dojo.gfx.Stroke?
|
||
|
// An optional outline to use for indicator line.
|
||
|
lineOutline: {},
|
||
|
|
||
|
// lineShadow: dojo.gfx.Stroke?
|
||
|
// An optional shadow to use for indicator line.
|
||
|
lineShadow: {},
|
||
|
|
||
|
// stroke: dojo.gfx.Stroke?
|
||
|
// An optional stroke to use for indicator label background.
|
||
|
stroke: {},
|
||
|
|
||
|
// outline: dojo.gfx.Stroke?
|
||
|
// An optional outline to use for indicator label background.
|
||
|
outline: {},
|
||
|
|
||
|
// shadow: dojo.gfx.Stroke?
|
||
|
// An optional shadow to use for indicator label background.
|
||
|
shadow: {},
|
||
|
|
||
|
// fill: dojo.gfx.Fill?
|
||
|
// An optional fill to use for indicator label background.
|
||
|
fill: {},
|
||
|
|
||
|
// fillFunc: Function?
|
||
|
// An optional function to use to compute label background fill. It takes precedence over
|
||
|
// fill property when available.
|
||
|
fillFunc: null,
|
||
|
|
||
|
// labelFunc: Function?
|
||
|
// An optional function to use to compute label text. It takes precedence over
|
||
|
// the default text when available.
|
||
|
labelFunc: {},
|
||
|
|
||
|
// font: String?
|
||
|
// A font definition to use for indicator label background.
|
||
|
font: "",
|
||
|
|
||
|
// fontColor: String|dojo.Color?
|
||
|
// The color to use for indicator label background.
|
||
|
fontColor: "",
|
||
|
|
||
|
// markerStroke: dojo.gfx.Stroke?
|
||
|
// An optional stroke to use for indicator marker.
|
||
|
markerStroke: {},
|
||
|
|
||
|
// markerOutline: dojo.gfx.Stroke?
|
||
|
// An optional outline to use for indicator marker.
|
||
|
markerOutline: {},
|
||
|
|
||
|
// markerShadow: dojo.gfx.Stroke?
|
||
|
// An optional shadow to use for indicator marker.
|
||
|
markerShadow: {},
|
||
|
|
||
|
// markerFill: dojo.gfx.Fill?
|
||
|
// An optional fill to use for indicator marker.
|
||
|
markerFill: {},
|
||
|
|
||
|
// markerSymbol: String?
|
||
|
// An optional symbol string to use for indicator marker.
|
||
|
markerFill: {}
|
||
|
});
|
||
|
var ChartAction = dojox.charting.action2d.ChartAction;
|
||
|
=====*/
|
||
|
|
||
|
return declare("dojox.charting.action2d.MouseIndicator", ChartAction, {
|
||
|
// summary:
|
||
|
// Create a mouse indicator action. You can drag mouse over the chart to display a data indicator.
|
||
|
|
||
|
// the data description block for the widget parser
|
||
|
defaultParams: {
|
||
|
series: "",
|
||
|
vertical: true,
|
||
|
autoScroll: true,
|
||
|
fixed: true,
|
||
|
precision: 0
|
||
|
},
|
||
|
optionalParams: {
|
||
|
lineStroke: {},
|
||
|
outlineStroke: {},
|
||
|
shadowStroke: {},
|
||
|
stroke: {},
|
||
|
outline: {},
|
||
|
shadow: {},
|
||
|
fill: {},
|
||
|
fillFunc: null,
|
||
|
labelFunc: null,
|
||
|
font: "",
|
||
|
fontColor: "",
|
||
|
markerStroke: {},
|
||
|
markerOutline: {},
|
||
|
markerShadow: {},
|
||
|
markerFill: {},
|
||
|
markerSymbol: ""
|
||
|
},
|
||
|
|
||
|
constructor: function(chart, plot, kwArgs){
|
||
|
// summary:
|
||
|
// Create an mouse indicator action and connect it.
|
||
|
// chart: dojox.charting.Chart
|
||
|
// The chart this action applies to.
|
||
|
// kwArgs: dojox.charting.action2d.__MouseIndicatorCtorArgs?
|
||
|
// Optional arguments for the chart action.
|
||
|
this._listeners = [{eventName: "onmousedown", methodName: "onMouseDown"}];
|
||
|
this.opt = lang.clone(this.defaultParams);
|
||
|
du.updateWithObject(this.opt, kwArgs);
|
||
|
du.updateWithPattern(this.opt, kwArgs, this.optionalParams);
|
||
|
this._uName = "mouseIndicator"+this.opt.series;
|
||
|
this._handles = [];
|
||
|
this.connect();
|
||
|
},
|
||
|
|
||
|
_disconnectHandles: function(){
|
||
|
if(has("ie")){
|
||
|
this.chart.node.releaseCapture();
|
||
|
}
|
||
|
arr.forEach(this._handles, hub.disconnect);
|
||
|
this._handles = [];
|
||
|
},
|
||
|
|
||
|
connect: function(){
|
||
|
// summary:
|
||
|
// Connect this action to the chart. This adds a indicator plot
|
||
|
// to the chart that's why Chart.render() must be called after connect.
|
||
|
this.inherited(arguments);
|
||
|
// add plot with unique name
|
||
|
this.chart.addPlot(this._uName, {type: IndicatorElement, inter: this});
|
||
|
},
|
||
|
|
||
|
disconnect: function(){
|
||
|
// summary:
|
||
|
// Disconnect this action from the chart.
|
||
|
if(this._isMouseDown){
|
||
|
this.onMouseUp();
|
||
|
}
|
||
|
this.chart.removePlot(this._uName);
|
||
|
this.inherited(arguments);
|
||
|
this._disconnectHandles();
|
||
|
},
|
||
|
|
||
|
onMouseDown: function(event){
|
||
|
// summary:
|
||
|
// Called when mouse is down on the chart.
|
||
|
this._isMouseDown = true;
|
||
|
|
||
|
// we now want to capture mouse move events everywhere to avoid
|
||
|
// stop scrolling when going out of the chart window
|
||
|
if(has("ie")){
|
||
|
this._handles.push(hub.connect(this.chart.node, "onmousemove", this, "onMouseMove"));
|
||
|
this._handles.push(hub.connect(this.chart.node, "onmouseup", this, "onMouseUp"));
|
||
|
this.chart.node.setCapture();
|
||
|
}else{
|
||
|
this._handles.push(hub.connect(win.doc, "onmousemove", this, "onMouseMove"));
|
||
|
this._handles.push(hub.connect(win.doc, "onmouseup", this, "onMouseUp"));
|
||
|
}
|
||
|
|
||
|
this._onMouseSingle(event);
|
||
|
},
|
||
|
|
||
|
onMouseMove: function(event){
|
||
|
// summary:
|
||
|
// Called when the mouse is moved on the chart.
|
||
|
if(this._isMouseDown){
|
||
|
this._onMouseSingle(event);
|
||
|
}
|
||
|
},
|
||
|
|
||
|
_onMouseSingle: function(event){
|
||
|
var plot = this.chart.getPlot(this._uName);
|
||
|
plot.pageCoord = {x: event.pageX, y: event.pageY};
|
||
|
plot.dirty = true;
|
||
|
this.chart.render();
|
||
|
eventUtil.stop(event);
|
||
|
},
|
||
|
|
||
|
onMouseUp: function(event){
|
||
|
// summary:
|
||
|
// Called when mouse is up on the chart.
|
||
|
var plot = this.chart.getPlot(this._uName);
|
||
|
plot.stopTrack();
|
||
|
this._isMouseDown = false;
|
||
|
this._disconnectHandles();
|
||
|
plot.pageCoord = null;
|
||
|
plot.dirty = true;
|
||
|
this.chart.render();
|
||
|
}
|
||
|
});
|
||
|
});
|