polardbxengine/storage/ndb/mcc/frontend/dojo/dojox/dgauges/ScaleBase.js.uncompressed.js

239 lines
6.7 KiB
JavaScript

define("dojox/dgauges/ScaleBase", ["dojo/_base/lang", "dojo/_base/declare", "dojox/gfx", "dojo/_base/array", "dojox/widget/_Invalidating", "dojo/_base/sniff"],
function(lang, declare, gfx, array, _Invalidating, has){
return declare("dojox.dgauges.ScaleBase", _Invalidating, {
// summary:
// The ScaleBase class is the base class for the circular and rectangular scales.
// A scaler must be set to use this class. A scaler is responsible for
// tick generation and various data-transform operations.
// scaler: Object
// The scaler used for tick generation and data-transform operations.
// This property is mandatory for using the scale.
scaler: null,
// font: Object
// The font used for the ticks labels.
// This is null by default which means this scale use the font defined
// on the gauge.
font: null,
// labelPosition: String
// See CircularScale and RectangularScale for valid values.
labelPosition: null,
// labelGap: Number
// The label gap between the ticks and their labels. Default value is 1.
labelGap: 1,
// tickStroke: Object
// The GFX stroke used by the default tickShapeFunc implementation.
tickStroke: null,
_gauge: null,
_gfxGroup: null,
_bgGroup: null,
_fgGroup: null,
_indicators: null,
_indicatorsIndex: null,
_indicatorsRenderers: null,
constructor: function(){
this._indicators = [];
this._indicatorsIndex = {};
this._indicatorsRenderers = {};
this._gauge = null;
this._gfxGroup = null;
// Fix for #1, IE<9 don't render correctly stroke with width<1
this.tickStroke = {color: "black", width: has("ie") <= 8 ? 1 : 0.5};
this.addInvalidatingProperties(["scaler", "font", "labelGap", "labelPosition", "tickShapeFunc", "tickLabelFunc", "tickStroke"]);
this.watch("scaler", lang.hitch(this, this._watchScaler));
},
postscript: function(mixin){
// summary:
// Internal method.
// tags:
// private
this.inherited(arguments);
if(mixin && mixin.scaler){
this._watchScaler("scaler", null, mixin.scaler);
}
},
_watchers: null,
_watchScaler: function(name, oldValue, newValue){
// summary:
// Internal method.
// tags:
// private
array.forEach(this._watchers, lang.hitch(this, function(entry){
entry.unwatch();
}));
// Get the properties declared by the watched object
var props = newValue.watchedProperties;
this._watchers = [];
array.forEach(props, lang.hitch(this, function(entry){
this._watchers.push(newValue.watch(entry, lang.hitch(this, this.invalidateRendering)));
}));
},
_getFont: function(){
// summary:
// Internal method.
// tags:
// private
var font = this.font;
if(!font){
font = this._gauge.font;
}
if(!font){
font = gfx.defaultFont;
}
return font;
},
positionForValue: function(value){
// summary:
// See CircularScale and Rectangular for more informations.
// value: Number
// The value to convert.
// returns: Number
// The position corresponding to the value.
return 0;
},
valueForPosition: function(position){
// summary:
// See CircularScale and Rectangular for more informations.
// position: Number
// The position to convert.
// returns: Number
// The value corresponding to the position.
},
tickLabelFunc: function(tickItem){
// summary:
// Customize the text of ticks labels.
// tickItem: Object
// An object containing the tick informations.
// returns: String
// The text to be aligned with the tick. If null, the tick has no label.
if(tickItem.isMinor){
return null;
}else{
return String(tickItem.value);
}
},
tickShapeFunc: function(group, scale, tickItem){
// summary:
// Customize the shape of ticks.
// group: dojox/gfx/Group
// The GFX group used for drawing the tick.
// scale: dojox/dgauges/ScaleBase
// The scale being processed.
// tickItem: Object
// An object containing the tick informations.
return group.createLine({
x1: 0,
y1: 0,
x2: tickItem.isMinor ? 6 : 10,
y2: 0
}).setStroke(this.tickStroke);
},
getIndicatorRenderer: function(name){
// summary:
// Gets the GFX shape of an indicator.
// name: String
// The name of the indicator as defined using addIndicator.
// returns: dojox/gfx/canvas/Shape
// The GFX shape of the indicator.
return this._indicatorsRenderers[name];
},
removeIndicator: function(name){
// summary:
// Removes an indicator.
// name: String
// The name of the indicator as defined using addIndicator.
// returns: IndicatorBase
// The removed indicator.
var indicator = this._indicatorsIndex[name];
if(indicator){
indicator._gfxGroup.removeShape();
var idx = this._indicators.indexOf(indicator);
this._indicators.splice(idx, 1);
indicator._disconnectListeners();
delete this._indicatorsIndex[name];
delete this._indicatorsRenderers[name];
}
if(this._gauge){
this._gauge._resetMainIndicator();
}
this.invalidateRendering();
return indicator;
},
getIndicator: function(name){
// summary:
// Get an indicator instance.
// name: String
// The name of the indicator as defined using addIndicator.
// returns: IndicatorBase
// The indicator associated with the name parameter.
return this._indicatorsIndex[name];
},
addIndicator: function(name, indicator, behindScale){
// summary:
// Add an indicator to the scale. Before calling this function, ensure
// this scale has already been added to a gauge using the addElement method
// of the gauge.
// name: String
// The name of the indicator to be added.
// indicator: dojox/dgauges/IndicatorBase
// The indicator to add to this scale.
// behindScale: Boolean
// If true, this indicator is drawn behind the scale. Default value is false.
if(this._indicatorsIndex[name] && this._indicatorsIndex[name] != indicator){
this.removeIndicator(name);
}
this._indicators.push(indicator);
this._indicatorsIndex[name] = indicator;
if(!this._ticksGroup){
this._createSubGroups();
}
var group = behindScale ? this._bgGroup : this._fgGroup;
indicator._gfxGroup = group.createGroup();
indicator.scale = this;
return this.invalidateRendering();
},
_createSubGroups: function(){
// summary:
// Internal method.
// tags:
// private
if(!this._gfxGroup || this._ticksGroup){
return;
}
this._bgGroup = this._gfxGroup.createGroup();
this._ticksGroup = this._gfxGroup.createGroup();
this._fgGroup = this._gfxGroup.createGroup();
},
refreshRendering: function(){
if(!this._ticksGroup){
this._createSubGroups();
}
}
});
});