summaryrefslogtreecommitdiff
path: root/js/dojo/dojox/gauges/GlossyCircularGaugeBase.js
diff options
context:
space:
mode:
Diffstat (limited to 'js/dojo/dojox/gauges/GlossyCircularGaugeBase.js')
-rw-r--r--js/dojo/dojox/gauges/GlossyCircularGaugeBase.js541
1 files changed, 541 insertions, 0 deletions
diff --git a/js/dojo/dojox/gauges/GlossyCircularGaugeBase.js b/js/dojo/dojox/gauges/GlossyCircularGaugeBase.js
new file mode 100644
index 0000000..60ea5a3
--- /dev/null
+++ b/js/dojo/dojox/gauges/GlossyCircularGaugeBase.js
@@ -0,0 +1,541 @@
+//>>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
+ });
+ }});
+});