123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198 |
- 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 && evt){
- 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;
- }
- });
- });
|