diff options
Diffstat (limited to 'js/dojo-1.7.2/dojox/charting/action2d/MouseIndicator.js')
| -rw-r--r-- | js/dojo-1.7.2/dojox/charting/action2d/MouseIndicator.js | 222 |
1 files changed, 222 insertions, 0 deletions
diff --git a/js/dojo-1.7.2/dojox/charting/action2d/MouseIndicator.js b/js/dojo-1.7.2/dojox/charting/action2d/MouseIndicator.js new file mode 100644 index 0000000..b6cd8fe --- /dev/null +++ b/js/dojo-1.7.2/dojox/charting/action2d/MouseIndicator.js @@ -0,0 +1,222 @@ +//>>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(); + } + }); +}); |
