diff options
| author | Tristan Zur <tzur@web.web.ccwn.org> | 2014-03-27 22:27:47 +0100 |
|---|---|---|
| committer | Tristan Zur <tzur@web.web.ccwn.org> | 2014-03-27 22:27:47 +0100 |
| commit | b62676ca5d3d6f6ba3f019ea3f99722e165a98d8 (patch) | |
| tree | 86722cb80f07d4569f90088eeaea2fc2f6e2ef94 /js/dojo-1.7.2/dojox/geo/charting/Feature.js | |
Diffstat (limited to 'js/dojo-1.7.2/dojox/geo/charting/Feature.js')
| -rw-r--r-- | js/dojo-1.7.2/dojox/geo/charting/Feature.js | 199 |
1 files changed, 199 insertions, 0 deletions
diff --git a/js/dojo-1.7.2/dojox/geo/charting/Feature.js b/js/dojo-1.7.2/dojox/geo/charting/Feature.js new file mode 100644 index 0000000..4bfc059 --- /dev/null +++ b/js/dojo-1.7.2/dojox/geo/charting/Feature.js @@ -0,0 +1,199 @@ +//>>built +define("dojox/geo/charting/Feature", ["dojo/_base/lang", "dojo/_base/declare","dojo/_base/array", + "dojo/_base/html","dojo/dom","dojo/_base/event", "dojox/gfx/fx", "dojox/color"], + function(lang, declare,arr, html,dom, event, fx,color) { + +return declare("dojox.geo.charting.Feature", null, { + // summary: + // class to encapsulate a map element. + // tags: + // private + + _isZoomIn: false, + isSelected: false, + markerText:null, + + + constructor: function(parent, name, shapeData){ + // summary: + // constructs a new Feature. + // tags: + // private + 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._highlightFill = ["#FFCE52", "#CE6342", "#63A584"][Math.floor(Math.random() * 3)]; + this._defaultFill = parent.defaultColor; + this._highlightFill = parent.highlightColor; + this._defaultStroke = { + width: this._normalizeStrokeWeight(.5), + color: "white" + }; + + var shapes = (lang.isArray(shapeData.shape[0])) ? shapeData.shape : [shapeData.shape]; + arr.forEach(shapes, function(points){ + this.shape.createPolyline(points).setStroke(this._defaultStroke); + }, this); + this.unsetValue(); + }, + unsetValue:function(){ + // summary: + // clears the numeric value on this Feature object (removes color). + + this.value = null; + this.unsetColor(); + }, + unsetColor:function(){ + this._defaultFill = this.parent.defaultColor; + var col = new color.Color(this.parent.defaultColor).toHsl(); + col.l = 1.2 * col.l; + this._highlightFill = color.fromHsl(col); + this._setFillWith(this._defaultFill); + }, + setValue:function(value){ + // summary: + // sets a numeric value on this Feature object (used together with series to apply a color). + // value: + // a number + this.value = value; + if (value == null) { + this.unsetValue(); + } else { + 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; + var col = new color.Color(range.color).toHsv(); + col.v = (col.v + 20); + this._highlightFill = color.fromHsv(col); + return; + } + } + // did not found a range : unset color + this.unsetColor(); + } + } + }, + _setFillWith: function(color){ + var borders = (lang.isArray(this.shape.children)) ? this.shape.children : [this.shape.children]; + arr.forEach(borders, lang.hitch(this,function(item){ + if(this.parent.colorAnimationDuration > 0){ + var anim1 = fx.animateFill({ + shape: item, + color: { + start: item.getFill(), + end: color + }, + duration: this.parent.colorAnimationDuration + }); + anim1.play(); + }else{ + item.setFill(color); + } + })); + }, + _setStrokeWith: function(stroke){ + var borders = (lang.isArray(this.shape.children)) ? this.shape.children : [this.shape.children]; + arr.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,evt); + }, + _onmouseoutHandler: function(){ + this._setFillWith(this._defaultFill); + this.mapObj.marker.hide(); + html.style("mapZoomCursor", "display", "none"); + }, + _onmousemoveHandler: function(evt){ + if(this.mapObj.marker._needTooltipRefresh){ + this.mapObj.marker.show(this.id,evt); + } + if(this.isSelected){ + if (this.parent.enableFeatureZoom) { + evt = event.fix(evt || window.event); + html.style("mapZoomCursor", "left", evt.pageX + 12 + "px"); + html.style("mapZoomCursor", "top", evt.pageY + "px"); + html.byId("mapZoomCursor").className = this._isZoomIn ? "mapZoomOut":"mapZoomIn"; + html.style("mapZoomCursor", "display", "block"); + }else{ + html.style("mapZoomCursor", "display", "none"); + } + } + }, + _onclickHandler: function(evt){ + this.parent.onFeatureClick(this); + if(!this.isSelected){ + this.parent.deselectAll(); + this.select(true); + this._onmousemoveHandler(evt); + }else if(this.parent.enableFeatureZoom){ + if(this._isZoomIn){ + this._zoomOut(); + }else{ + this._zoomIn(); + } + } + }, + + select: function(selected) { + if(selected){ + this.shape.moveToFront(); + this._setStrokeWith({color:"black",width:this._normalizeStrokeWeight(2)}); + this._setFillWith(this._highlightFill); + this.isSelected = true; + this.parent.selectedFeature = this; + }else{ + this._setStrokeWith(this._defaultStroke); + this._setFillWith(this._defaultFill); + this.isSelected = false; + this._isZoomIn = false; + } + }, + + _zoomIn: function(){ + var marker = this.mapObj.marker; + marker.hide(); + this.parent.fitToMapArea(this._bbox, 15,true,lang.hitch(this,function(){ + this._setStrokeWith({color:"black",width:this._normalizeStrokeWeight(2)}); + marker._needTooltipRefresh = true; + this.parent.onZoomEnd(this); + })); + this._isZoomIn = true; + dom.byId("mapZoomCursor").className = ""; + }, + _zoomOut: function(){ + var marker = this.mapObj.marker; + marker.hide(); + this.parent.fitToMapContents(3,true,lang.hitch(this,function(){ + this._setStrokeWith({color:"black",width:this._normalizeStrokeWeight(2)}); + marker._needTooltipRefresh = true; + this.parent.onZoomEnd(this); + })); + this._isZoomIn = false; + dom.byId("mapZoomCursor").className = ""; + }, + + init: function(){ + this.shape.id = this.id; + this.tooltip = null; + } +}); +});
\ No newline at end of file |
