webui-aria2/js/libs/dojox/gauges/GlossyCircularGaugeBase.js.uncompressed.js
2012-05-01 19:52:07 +08:00

542 lines
14 KiB
JavaScript

//>>built
define("dojox/gauges/GlossyCircularGaugeBase", ["dojo/_base/declare","dojo/_base/lang","dojo/_base/connect","dojox/gfx","./AnalogGauge","./AnalogCircleIndicator","./TextIndicator","./GlossyCircularGaugeNeedle"],
function(declare, lang, connect, gfx, AnalogGauge, AnalogCircleIndicator, TextIndicator, GlossyCircularGaugeNeedle) {
/*=====
AnalogGauge = dojox.gauges.AnalogGauge;
=====*/
return declare("dojox.gauges.GlossyCircularGaugeBase", [AnalogGauge], {
// summary:
// The base class for GlossyCircularGauge and GlossySemiCircularGauge.
//_defaultIndicator : _Indicator
// the type of default indicator to create
_defaultIndicator: AnalogCircleIndicator,
// _needle: dojox.gauges.GlossyCircularGaugeNeedle
// the needle of this circular gauge
_needle: null,
// _textIndicator: dojox.gauges.TextIndicator
// the text displaying the gauge's value
_textIndicator: null,
_textIndicatorAdded: false,
// _range: Object
// the range of this gauge
_range: null,
// value: Number
// The value of the gauge.
value: 0,
// color: String
// The main color of the gauge.
color: 'black',
// needleColor: Color
// The main color of the needle.
needleColor: '#c4c4c4',
// textIndicatorFont: String
// The font of the text indicator
textIndicatorFont: "normal normal normal 20pt serif",
// textIndicatorVisible: Boolean
// Indicates if the text indicator is visible
textIndicatorVisible: true,
// textIndicatorColor: Color
// The color of the text indicator
textIndicatorColor: '#c4c4c4',
// _majorTicksOffset: Number
// Distance, at design, from gauge's center to major ticks
_majorTicksOffset: 130,
// majorTicksInterval: Number
// Interval between major ticks
majorTicksInterval: 10,
// _majorTicksLength: Number
// Major tick size, at design
_majorTicksLength: 5,
// majorTicksColor: Color
// Color of major tick marks
majorTicksColor: '#c4c4c4',
// majorTicksLabelPlacement: String
// Placement of major tick labels
majorTicksLabelPlacement: 'inside',
// _minorTicksOffset: Number
// Distance, at design, from gauge's center to minor ticks
_minorTicksOffset: 130,
// minorTicksInterval: Number
// Interval between minor ticks
minorTicksInterval: 5,
// _minorTicksLength: Number
// Minor tick size, at design
_minorTicksLength: 3,
// minorTicksColor: Color
// Color of minor tick marks
minorTicksColor: '#c4c4c4',
// noChange: Boolean
// Indicates if the gauge reacts to touch events
noChange: false,
// title: String
// The title displayed in the needle's tooltip
title: "",
// font: Object
// The font of the gauge
font: "normal normal normal 10pt serif",
// scalePrecision: Number
// The precision for the formatting of numbers in the scale (default is 0)
scalePrecision: 0,
// textIndicatorPrecision: Number
// The precision for the formatting of numbers in the text indicator (default is 0)
textIndicatorPrecision: 0,
_font: null,
constructor: function(){
this.startAngle = -135;
this.endAngle = 135;
this.min = 0;
this.max = 100;
},
startup: function(){
// summary:
// Overrides AnalogGauge.startup
this.inherited(arguments);
//just in case someone calls the startup twice.
if (this._needle) return;
var scale = Math.min((this.width / this._designWidth), (this.height / this._designHeight));
this.cx = scale * this._designCx + (this.width - scale * this._designWidth) / 2;
this.cy = scale * this._designCy + (this.height - scale * this._designHeight) / 2;
this._range = {
low: this.min ? this.min : 0,
high: this.max ? this.max : 100,
color: [255, 255, 255, 0]
};
this.addRange(this._range);
this._majorTicksOffset = this._minorTicksOffset = scale * this._majorTicksOffset;
this._majorTicksLength = scale * this._majorTicksLength;
this._minorTicksLength = scale * this._minorTicksLength;
// creates and add the major ticks
this.setMajorTicks({
fixedPrecision: true,
precision: this.scalePrecision,
font: this._font,
offset: this._majorTicksOffset,
interval: this.majorTicksInterval,
length: this._majorTicksLength,
color: this.majorTicksColor,
labelPlacement: this.majorTicksLabelPlacement
});
// creates and add the minor ticks
this.setMinorTicks({
offset: this._minorTicksOffset,
interval: this.minorTicksInterval,
length: this._minorTicksLength,
color: this.minorTicksColor
});
// creates and adds the needle
this._needle = new GlossyCircularGaugeNeedle({
hideValue: true,
title: this.title,
noChange: this.noChange,
color: this.needleColor,
value: this.value
});
this.addIndicator(this._needle);
// creates and add the text indicator
this._textIndicator = new TextIndicator({
x: scale * this._designTextIndicatorX + (this.width - scale * this._designWidth) / 2,
y: scale * this._designTextIndicatorY + (this.height - scale * this._designHeight) / 2,
fixedPrecision: true,
precision: this.textIndicatorPrecision,
color: this.textIndicatorColor,
value: this.value ? this.value : this.min,
align: "middle",
font: this._textIndicatorFont
});
if (this.textIndicatorVisible){
this.addIndicator(this._textIndicator);
this._textIndicatorAdded = true;
}
// connect needle and text
connect.connect(this._needle, "valueChanged", lang.hitch(this, function(){
this.value = this._needle.value;
this._textIndicator.update(this._needle.value);
this.onValueChanged();
}));
},
onValueChanged: function(){
// summary:
// Invoked when the value of the gauge has changed.
},
//*******************************************************************************************
//* Property getters and setters
//*******************************************************************************************
_setColorAttr: function(color){
// summary:
// Sets the main color of the gauge
// color: String
// The color
this.color = color ? color : 'black';
if (this._gaugeBackground && this._gaugeBackground.parent)
this._gaugeBackground.parent.remove(this._gaugeBackground);
if (this._foreground && this._foreground.parent)
this._foreground.parent.remove(this._foreground);
this._gaugeBackground = null;
this._foreground = null;
this.draw();
},
_setNeedleColorAttr: function(color){
// summary:
// Sets the main color of the needle
// color: String
// The color
this.needleColor = color;
if (this._needle){
this.removeIndicator(this._needle);
this._needle.color = this.needleColor;
this._needle.shape = null;
this.addIndicator(this._needle);
}
},
_setTextIndicatorColorAttr: function(color){
// summary:
// Sets the color of text indicator display the gauge's value
// color: String
// The color
this.textIndicatorColor = color;
if (this._textIndicator){
this._textIndicator.color = this.textIndicatorColor;
this.draw();
}
},
_setTextIndicatorFontAttr: function(font){
// summary:
// Sets the font of the text indicator
// font: String
// An string representing the font such as 'normal normal normal 10pt Helvetica,Arial,sans-serif'
//
this.textIndicatorFont = font;
this._textIndicatorFont = gfx.splitFontString(font);
if (this._textIndicator){
this._textIndicator.font = this._textIndicatorFont;
this.draw();
}
},
setMajorTicksOffset: function(offset){
// summary:
// Sets the distance from gauge's center to major ticks
this._majorTicksOffset = offset;
this._setMajorTicksProperty({
'offset': this._majorTicksOffset
});
return this;
},
getMajorTicksOffset: function(){
// summary:
// Return the distance from gauge's center to major ticks
return this._majorTicksOffset;
},
_setMajorTicksIntervalAttr: function(interval){
// summary:
// Sets the interval between major ticks
this.majorTicksInterval = interval;
this._setMajorTicksProperty({
'interval': this.majorTicksInterval
});
},
setMajorTicksLength: function(length){
// summary:
// Sets the size of the major ticks.
this._majorTicksLength = length;
this._setMajorTicksProperty({
'length': this._majorTicksLength
});
return this;
},
getMajorTicksLength: function(){
// summary:
// Returns the size of the major ticks.
return this._majorTicksLength;
},
_setMajorTicksColorAttr: function(color){
// summary:
// Sets the color of the major ticks.
this.majorTicksColor = color;
this._setMajorTicksProperty({
'color': this.majorTicksColor
});
},
_setMajorTicksLabelPlacementAttr: function(placement){
// summary:
// Sets the placement of labels relatively to major ticks.
// placement: String
// 'inside' or 'outside'
this.majorTicksLabelPlacement = placement;
this._setMajorTicksProperty({
'labelPlacement': this.majorTicksLabelPlacement
});
},
_setMajorTicksProperty: function(prop){
if (this.majorTicks){
lang.mixin(this.majorTicks, prop);
this.setMajorTicks(this.majorTicks);
}
},
setMinorTicksOffset: function(offset){
// summary:
// Sets the distance from gauge's center to minor ticks
this._minorTicksOffset = offset;
this._setMinorTicksProperty({
'offset': this._minorTicksOffset
});
return this;
},
getMinorTicksOffset: function(){
// summary:
// Returns the distance from gauge's center to minor ticks
return this._minorTicksOffset;
},
_setMinorTicksIntervalAttr: function(interval){
// summary:
// Sets the interval between minor ticks
this.minorTicksInterval = interval;
this._setMinorTicksProperty({
'interval': this.minorTicksInterval
});
},
setMinorTicksLength: function(length){
// summary:
// Sets the size of the minor ticks.
this._minorTicksLength = length;
this._setMinorTicksProperty({
'length': this._minorTicksLength
});
return this;
},
getMinorTicksLength: function(){
// summary:
// Return the size of the minor ticks.
return this._minorTicksLength;
},
_setMinorTicksColorAttr: function(color){
// summary:
// Sets the color of the minor ticks.
this.minorTicksColor = color;
this._setMinorTicksProperty({
'color': this.minorTicksColor
});
},
_setMinorTicksProperty: function(prop){
if (this.minorTicks){
lang.mixin(this.minorTicks, prop);
this.setMinorTicks(this.minorTicks);
}
},
_setMinAttr: function(min){
this.min = min;
if (this.majorTicks != null)
this.setMajorTicks(this.majorTicks);
if (this.minorTicks != null)
this.setMinorTicks(this.minorTicks);
this.draw();
this._updateNeedle();
},
_setMaxAttr: function(max){
this.max = max;
if (this.majorTicks != null)
this.setMajorTicks(this.majorTicks);
if (this.minorTicks != null)
this.setMinorTicks(this.minorTicks);
this.draw();
this._updateNeedle();
},
_setScalePrecisionAttr: function(value){
// summary:
// Changes precision of the numbers in the scale of the gauge
// value: Number
// The new value
this.scalePrecision = value;
this._setMajorTicksProperty({
'precision': value
});
},
_setTextIndicatorPrecisionAttr: function(value){
// summary:
// Changes precision of the numbers in the text indicator
// value: Number
// The new value
this.textIndicatorPrecision = value;
this._setMajorTicksProperty({
'precision': value
});
},
_setValueAttr: function(value){
// summary:
// Changes the value of the gauge
// value: Number
// The new value for the gauge.
value = Math.min(this.max, value);
value = Math.max(this.min, value);
this.value = value;
if (this._needle){
// update will not work if noChange is true.
var noChange = this._needle.noChange;
this._needle.noChange = false;
this._needle.update(value);
this._needle.noChange = noChange;
}
},
_setNoChangeAttr: function(value){
// summary:
// Indicates if the value of the gauge can be changed or not
// value: boolean
// true indicates that the gauge's value cannot be changed
this.noChange = value;
if (this._needle)
this._needle.noChange = this.noChange;
},
_setTextIndicatorVisibleAttr: function(value){
// summary:
// Changes the visibility of the text indicator displaying the gauge's value.
// value: boolean
// true to show the indicator, false to hide.
this.textIndicatorVisible = value;
if (this._textIndicator && this._needle){
if (this.textIndicatorVisible && !this._textIndicatorAdded){
this.addIndicator(this._textIndicator);
this._textIndicatorAdded = true;
this.moveIndicatorToFront(this._needle);
}
else
if (!this.textIndicatorVisible && this._textIndicatorAdded){
this.removeIndicator(this._textIndicator);
this._textIndicatorAdded = false;
}
}
},
_setTitleAttr: function(value){
// summary:
// Sets the title displayed by the needle's tooltip .
// value: String
// the title
this.title = value;
if (this._needle){
this._needle.title = this.title;
}
},
_setOrientationAttr: function(orientation){
// summary:
// Sets the orientation of the gauge
// orientation: String
// Either "clockwise" or "cclockwise"
this.orientation = orientation;
if (this.majorTicks != null)
this.setMajorTicks(this.majorTicks);
if (this.minorTicks != null)
this.setMinorTicks(this.minorTicks);
this.draw();
this._updateNeedle();
},
_updateNeedle: function(){
// updates the needle with no animation
this.value = Math.max(this.min, this.value);
this.value = Math.min(this.max, this.value);
if (this._needle){
// update will not work if noChange is true.
var noChange = this._needle.noChange;
this._needle.noChange = false;
this._needle.update(this.value, false);
this._needle.noChange = noChange;
} // to redraw the needle
},
_setFontAttr: function(font){
// summary:
// Sets the font of the gauge
// font: String
// An string representing the font such as 'normal normal normal 10pt Helvetica,Arial,sans-serif'
//
this.font = font;
this._font = gfx.splitFontString(font);
this._setMajorTicksProperty({
'font': this._font
});
}});
});