UNPKG

dojox

Version:

Dojo eXtensions, a rollup of many useful sub-projects and varying states of maturity – from very stable and robust, to alpha and experimental. See individual projects contain README files for details.

145 lines (131 loc) 4.06 kB
define(["dojo/_base/lang", "dojo/_base/declare", "dojo/_base/sniff", "dojo/_base/array", "dojo/on", "dojox/gfx", "./IndicatorBase"], function(lang, declare, has, array, on, gfx, IndicatorBase){ return declare("dojox.dgauges.TextIndicator", IndicatorBase, { // summary: // This type of indicator is used to render text. // To render an arbitrary text, set the value property. // To render the value of a value indicator or a range indicator, set the indicator property. // Setting the indicator property takes precedence on setting the value property. // When the indicator property is set, the text is automatically updated on value changes. // font: Object // Font used by this element. font: null, // x: Number // The text anchor x-position. Default is 0. x: 0, // y: Number // The text anchor y-position. Default is 0. y: 0, // align: String // An alignment of a text in regards to the anchor position: // // - "start": A text's baseline starts at the anchor. // This is the default value of the align attribute. // - "middle": A text's baseline is centered on the anchor point. // - "end": A text's baseline ends at the anchor point. align: "middle", // color: Object // The color of the text. color: "black", // indicator: dojox/dgauges/IndicatorBase // If this property is set, the value of the indicator is automatically // rendered by this text element. indicator: null, // labelFunc: Object // If set, this method allows to format the value of this text indicator. // A label function takes the text to render as argument and returns a String. labelFunc: null, constructor: function(){ this.addInvalidatingProperties(["indicator"]); var resetProps = ["x", "y", "font", "align", "color", "labelFunc"]; array.forEach(resetProps, lang.hitch(this, function(entry){ this.watch(entry, this._resetText); })); this.watch("indicator", lang.hitch(this, this._indicatorChanged)); }, postscript: function(mixin){ // summary: // Internal method // tags: // private this.inherited(arguments); if(mixin && mixin.indicator){ this._indicatorChanged("indicator", null, mixin.indicator); } }, _resetText: function(){ // summary: // Internal method. // tags: // private this._textCreated = false; this.invalidateRendering(); }, _valueWatcher: null, _indicatorChanged: function(name, oldValue, newValue){ // summary: // Internal method. // tags: // private if(this._valueWatcher){ this._valueWatcher.unwatch(); } this._valueWatcher = newValue.watch("value", lang.hitch(this, this.refreshRendering)); }, _getFont: function(){ // summary: // Internal method. // tags: // private var font = this.font; if(!font && this._gauge){ font = this._gauge.font; } if(!font){ font = gfx.defaultFont; } return font; }, _textCreated: false, _textInstance: null, _createText: function(group, font, color, text, x, y, align){ // summary: // Internal method. // tags: // private var gfxText = group.createText({ x: x, y: y, text: text, align: align }).setFont(font).setFill(color); return gfxText; }, refreshRendering: function(){ if(this._gfxGroup == null){ return; } var text; if(this.indicator){ text = this.indicator.value; }else{ text = this.value; } if(this.labelFunc){ text = this.labelFunc(text); } var iOsVersion = has("iphone"); // Workaround for a bug on iOS version < 5.0: Recreate the text every times if(!this._textCreated || (iOsVersion != undefined && iOsVersion < 5)){ this._gfxGroup.clear(); var font = this._getFont(); this._textInstance = this._createText(this._gfxGroup, font, font.color ? font.color : this.color, "", this.x, this.y, this.align); this._textCreated = true; } this._textInstance.setShape({ text: text }); return this._textInstance; } }) });