diff options
Diffstat (limited to 'js/dojo-1.6/dojox/geo/charting/_Feature.js')
| -rw-r--r-- | js/dojo-1.6/dojox/geo/charting/_Feature.js | 180 |
1 files changed, 180 insertions, 0 deletions
diff --git a/js/dojo-1.6/dojox/geo/charting/_Feature.js b/js/dojo-1.6/dojox/geo/charting/_Feature.js new file mode 100644 index 0000000..f269499 --- /dev/null +++ b/js/dojo-1.6/dojox/geo/charting/_Feature.js @@ -0,0 +1,180 @@ +/*
+ Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.geo.charting._Feature"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojox.geo.charting._Feature"] = true;
+dojo.provide("dojox.geo.charting._Feature");
+dojo.require("dojox.gfx.fx");
+
+dojo.declare("dojox.geo.charting._Feature", null, {
+ _isZoomIn: false,
+ _isFocused: false,
+ markerText:null,
+
+ constructor: function(parent, name, shapeData){
+ this.id = name;
+ this.shape = parent.mapObj.createGroup();
+ this.parent = parent;
+ this.mapObj = parent.mapObj;
+ this._bbox = shapeData.bbox;
+ this._center = shapeData.center;
+ //TODO: fill color would be defined by charting data and legend
+ //this._defaultFill = ["#FFCE52", "#CE6342", "#63A584"][Math.floor(Math.random() * 3)];
+ this._defaultFill = parent.defaultColor;
+ this._highlightFill = parent.highlightColor;
+ this._defaultStroke = {
+ width: this._normalizeStrokeWeight(.5),
+ color: "white"
+ };
+ this._scale = Math.min(this.parent.containerSize.w / this._bbox.w, this.parent.containerSize.h / this._bbox.h);
+
+ var shapes = (dojo.isArray(shapeData.shape[0])) ? shapeData.shape : [shapeData.shape];
+ dojo.forEach(shapes, function(points){
+ this.shape.createPolyline(points).setStroke(this._defaultStroke).setFill(this._defaultFill);
+ }, this);
+ },
+ setValue:function(value){
+ this.value = value;
+ if(this.parent.series.length != 0){
+ for(var i = 0;i < this.parent.series.length;i++){
+ var range = this.parent.series[i];
+ if((value>=range.min)&&(value<range.max)){
+ this._setFillWith(range.color);
+ this._defaultFill = range.color;
+ }
+ }
+ }
+ },
+ _setFillWith: function(color){
+ var borders = (dojo.isArray(this.shape.children)) ? this.shape.children : [this.shape.children];
+ dojo.forEach(borders, function(item){
+ item.setFill(color);
+ });
+ },
+ _setStrokeWith: function(stroke){
+ var borders = (dojo.isArray(this.shape.children)) ? this.shape.children : [this.shape.children];
+ dojo.forEach(borders, function(item){
+ item.setStroke({
+ color: stroke.color,
+ width: stroke.width,
+ join: "round"
+ });
+ });
+ },
+ _normalizeStrokeWeight: function(weight){
+ var matrix = this.shape._getRealMatrix();
+ return (dojox.gfx.renderer != "vml")?weight/(this.shape._getRealMatrix()||{xx:1}).xx:weight;
+ },
+ _onmouseoverHandler: function(evt){
+ this.parent.onFeatureOver(this);
+ this._setFillWith(this._highlightFill);
+ this.mapObj.marker.show(this.id);
+ },
+ _onmouseoutHandler: function(){
+ this._setFillWith(this._defaultFill);
+ this.mapObj.marker.hide();
+ dojo.style("mapZoomCursor", "display", "none");
+ },
+ _onmousemoveHandler: function(evt){
+ if(this._isFocused){
+ var evt = dojo.fixEvent(evt || window.event);
+ dojo.style("mapZoomCursor", "left", evt.pageX + 12 + "px");
+ dojo.style("mapZoomCursor", "top", evt.pageY + "px");
+ dojo.byId("mapZoomCursor").className = (this._isZoomIn)?"mapZoomOut":"mapZoomIn";
+ dojo.style("mapZoomCursor", "display", "block");
+ }
+ },
+ _onclickHandler: function(){
+ if(!this._isFocused){
+ for (var name in this.mapObj.features){
+ if (this.mapObj.features[name] != this){
+ this.mapObj.features[name]._setStrokeWith(this._defaultStroke);
+ this.mapObj.features[name]._setFillWith(this.mapObj.features[name]._defaultFill);
+ this.mapObj.features[name]._isFocused = false;
+ this.mapObj.features[name]._isZoomIn = false;
+ }
+ }
+ this._focus();
+ }
+ else if (this._isZoomIn){
+ this._zoomOut();
+ }
+ else {
+ this._zoomIn();
+ }
+ },
+ _focus: function(){
+ this.shape._moveToFront();
+ this._setStrokeWith({color:"black",width:this._normalizeStrokeWeight(2)});
+ this.parent.onFeatureClick(this);
+ this._isFocused = true;
+ },
+ _zoomIn: function(){
+ var anim = dojox.gfx.fx.animateTransform({
+ duration: 1000,
+ shape: this.mapObj,
+ transform: [{
+ name: "translate",
+ start: [-this.mapObj.currentBBox.x, -this.mapObj.currentBBox.y],
+ end: [-this._bbox.x, -this._bbox.y]
+ },{
+ name: "scaleAt",
+ start: [this.mapObj.currentScale, this.mapObj.currentBBox.x, this.mapObj.currentBBox.y],
+ end: [this._scale, this._bbox.x, this._bbox.y]
+ }]
+ });
+ dojo.connect(anim,"onEnd",this,function(){
+ this._setStrokeWith({color:"black",width:this._normalizeStrokeWeight(2)});
+ this.parent.onZoomEnd(this);
+ });
+ anim.play();
+ this.mapObj.currentScale = this._scale;
+ this.mapObj.currentBBox = {
+ x: this._bbox.x,
+ y: this._bbox.y
+ };
+ this._isZoomIn = true;
+ dojo.byId("mapZoomCursor").className = "";
+ },
+ _zoomOut: function(){
+ var anim = dojox.gfx.fx.animateTransform({
+ duration: 1000,
+ shape: this.mapObj,
+ transform: [{
+ name: "translate",
+ start: [-this._bbox.x, -this._bbox.y],
+ end: [-this.mapObj.boundBox[0], -this.mapObj.boundBox[1]]
+ }, {
+ name: "scaleAt",
+ start: [this._scale, this._bbox.x, this._bbox.y],
+ end: [this.mapObj.scale, this.mapObj.boundBox[0], this.mapObj.boundBox[1]]
+ }]
+ });
+ dojo.connect(anim,"onEnd",this,function(){
+ this._setStrokeWith({color:"black",width:this._normalizeStrokeWeight(2)});
+ });
+ anim.play();
+ this.mapObj.currentScale = this.mapObj.scale;
+ this.mapObj.currentBBox = {
+ x: this.mapObj.boundBox[0],
+ y: this.mapObj.boundBox[1]
+ };
+ this._isZoomIn = false;
+ dojo.byId("mapZoomCursor").className = "";
+ },
+
+ init: function(){
+ this.shape.rawNode.id = this.id;
+ this.tooltip = null;
+ this.shape.connect("onmouseover", this, this._onmouseoverHandler);
+ this.shape.connect("onmouseout", this, this._onmouseoutHandler);
+ this.shape.connect("onmousemove", this, this._onmousemoveHandler);
+ this.shape.connect("onclick", this, this._onclickHandler);
+ }
+});
+
+}
|
