129 lines
4.4 KiB
JavaScript
129 lines
4.4 KiB
JavaScript
//>>built
|
|
define("dojox/charting/action2d/MouseZoomAndPan",["dojo/_base/html","dojo/_base/declare","dojo/_base/window","dojo/_base/array","dojo/_base/event","dojo/_base/connect","./ChartAction","dojo/_base/sniff","dojo/dom-prop","dojo/keys"],function(_1,_2,_3,_4,_5,_6,_7,_8,_9,_a){
|
|
var _b=_8("mozilla")?-3:120;
|
|
var _c={none:function(_d){
|
|
return !_d.ctrlKey&&!_d.altKey&&!_d.shiftKey;
|
|
},ctrl:function(_e){
|
|
return _e.ctrlKey&&!_e.altKey&&!_e.shiftKey;
|
|
},alt:function(_f){
|
|
return !_f.ctrlKey&&_f.altKey&&!_f.shiftKey;
|
|
},shift:function(_10){
|
|
return !_10.ctrlKey&&!_10.altKey&&_10.shiftKey;
|
|
}};
|
|
return _2("dojox.charting.action2d.MouseZoomAndPan",_7,{defaultParams:{axis:"x",scaleFactor:1.2,maxScale:100,enableScroll:true,enableDoubleClickZoom:true,enableKeyZoom:true,keyZoomModifier:"ctrl"},optionalParams:{},constructor:function(_11,_12,_13){
|
|
this._listeners=[{eventName:!_8("mozilla")?"onmousewheel":"DOMMouseScroll",methodName:"onMouseWheel"}];
|
|
if(!_13){
|
|
_13={};
|
|
}
|
|
this.axis=_13.axis?_13.axis:"x";
|
|
this.scaleFactor=_13.scaleFactor?_13.scaleFactor:1.2;
|
|
this.maxScale=_13.maxScale?_13.maxScale:100;
|
|
this.enableScroll=_13.enableScroll!=undefined?_13.enableScroll:true;
|
|
this.enableDoubleClickZoom=_13.enableDoubleClickZoom!=undefined?_13.enableDoubleClickZoom:true;
|
|
this.enableKeyZoom=_13.enableKeyZoom!=undefined?_13.enableKeyZoom:true;
|
|
this.keyZoomModifier=_13.keyZoomModifier?_13.keyZoomModifier:"ctrl";
|
|
if(this.enableScroll){
|
|
this._listeners.push({eventName:"onmousedown",methodName:"onMouseDown"});
|
|
}
|
|
if(this.enableDoubleClickZoom){
|
|
this._listeners.push({eventName:"ondblclick",methodName:"onDoubleClick"});
|
|
}
|
|
if(this.enableKeyZoom){
|
|
this._listeners.push({eventName:"keypress",methodName:"onKeyPress"});
|
|
}
|
|
this._handles=[];
|
|
this.connect();
|
|
},_disconnectHandles:function(){
|
|
if(_8("ie")){
|
|
this.chart.node.releaseCapture();
|
|
}
|
|
_4.forEach(this._handles,_6.disconnect);
|
|
this._handles=[];
|
|
},connect:function(){
|
|
this.inherited(arguments);
|
|
if(this.enableKeyZoom){
|
|
_9.set(this.chart.node,"tabindex","0");
|
|
}
|
|
},disconnect:function(){
|
|
this.inherited(arguments);
|
|
if(this.enableKeyZoom){
|
|
_9.set(this.chart.node,"tabindex","-1");
|
|
}
|
|
this._disconnectHandles();
|
|
},onMouseDown:function(_14){
|
|
var _15=this.chart,_16=_15.getAxis(this.axis);
|
|
if(!_16.vertical){
|
|
this._startCoord=_14.pageX;
|
|
}else{
|
|
this._startCoord=_14.pageY;
|
|
}
|
|
this._startOffset=_16.getWindowOffset();
|
|
this._isPanning=true;
|
|
if(_8("ie")){
|
|
this._handles.push(_6.connect(this.chart.node,"onmousemove",this,"onMouseMove"));
|
|
this._handles.push(_6.connect(this.chart.node,"onmouseup",this,"onMouseUp"));
|
|
this.chart.node.setCapture();
|
|
}else{
|
|
this._handles.push(_6.connect(_3.doc,"onmousemove",this,"onMouseMove"));
|
|
this._handles.push(_6.connect(_3.doc,"onmouseup",this,"onMouseUp"));
|
|
}
|
|
_15.node.focus();
|
|
_5.stop(_14);
|
|
},onMouseMove:function(_17){
|
|
if(this._isPanning){
|
|
var _18=this.chart,_19=_18.getAxis(this.axis);
|
|
var _1a=_19.vertical?(this._startCoord-_17.pageY):(_17.pageX-this._startCoord);
|
|
var _1b=_19.getScaler().bounds,s=_1b.span/(_1b.upper-_1b.lower);
|
|
var _1c=_19.getWindowScale();
|
|
_18.setAxisWindow(this.axis,_1c,this._startOffset-_1a/s/_1c);
|
|
_18.render();
|
|
}
|
|
},onMouseUp:function(_1d){
|
|
this._isPanning=false;
|
|
this._disconnectHandles();
|
|
},onMouseWheel:function(_1e){
|
|
var _1f=_1e[(_8("mozilla")?"detail":"wheelDelta")]/_b;
|
|
if(_1f>-1&&_1f<0){
|
|
_1f=-1;
|
|
}else{
|
|
if(_1f>0&&_1f<1){
|
|
_1f=1;
|
|
}
|
|
}
|
|
this._onZoom(_1f,_1e);
|
|
},onKeyPress:function(_20){
|
|
if(_c[this.keyZoomModifier](_20)){
|
|
if(_20.keyChar=="+"||_20.keyCode==_a.NUMPAD_PLUS){
|
|
this._onZoom(1,_20);
|
|
}else{
|
|
if(_20.keyChar=="-"||_20.keyCode==_a.NUMPAD_MINUS){
|
|
this._onZoom(-1,_20);
|
|
}
|
|
}
|
|
}
|
|
},onDoubleClick:function(_21){
|
|
var _22=this.chart,_23=_22.getAxis(this.axis);
|
|
var _24=1/this.scaleFactor;
|
|
if(_23.getWindowScale()==1){
|
|
var _25=_23.getScaler(),_26=_25.bounds.from,end=_25.bounds.to,_27=(_26+end)/2,_28=this.plot.toData({x:_21.pageX,y:_21.pageY})[this.axis],_29=_24*(_26-_27)+_28,_2a=_24*(end-_27)+_28;
|
|
_22.zoomIn(this.axis,[_29,_2a]);
|
|
}else{
|
|
_22.setAxisWindow(this.axis,1,0);
|
|
_22.render();
|
|
}
|
|
_5.stop(_21);
|
|
},_onZoom:function(_2b,_2c){
|
|
var _2d=(_2b<0?Math.abs(_2b)*this.scaleFactor:1/(Math.abs(_2b)*this.scaleFactor));
|
|
var _2e=this.chart,_2f=_2e.getAxis(this.axis);
|
|
var _30=_2f.getWindowScale();
|
|
if(_30/_2d>this.maxScale){
|
|
return;
|
|
}
|
|
var _31=_2f.getScaler(),_32=_31.bounds.from,end=_31.bounds.to;
|
|
var _33=(_2c.type=="keypress")?(_32+end)/2:this.plot.toData({x:_2c.pageX,y:_2c.pageY})[this.axis];
|
|
var _34=_2d*(_32-_33)+_33,_35=_2d*(end-_33)+_33;
|
|
_2e.zoomIn(this.axis,[_34,_35]);
|
|
_5.stop(_2c);
|
|
}});
|
|
});
|