source: Dev/trunk/src/client/dojox/dgauges/ScaleBase.js @ 529

Last change on this file since 529 was 483, checked in by hendrikvanantwerpen, 11 years ago

Added Dojo 1.9.3 release.

  • Property svn:executable set to *
File size: 6.7 KB
Line 
1define(["dojo/_base/lang", "dojo/_base/declare", "dojox/gfx", "dojo/_base/array", "dojox/widget/_Invalidating", "dojo/_base/sniff"],
2        function(lang, declare, gfx, array, _Invalidating, has){
3        return declare("dojox.dgauges.ScaleBase", _Invalidating, {
4                // summary:
5                //              The ScaleBase class is the base class for the circular and rectangular scales.
6                //              A scaler must be set to use this class. A scaler is responsible for
7                //              tick generation and various data-transform operations. 
8
9                // scaler: Object
10                //              The scaler used for tick generation and data-transform operations.
11                //              This property is mandatory for using the scale.
12                scaler: null,
13                // font: Object
14                //              The font used for the ticks labels.
15                //              This is null by default which means this scale use the font defined
16                //              on the gauge.
17                font: null,
18                // labelPosition: String
19                //              See CircularScale and RectangularScale for valid values.
20                labelPosition: null,
21                // labelGap: Number
22                //              The label gap between the ticks and their labels. Default value is 1.
23                labelGap: 1,
24                // tickStroke: Object
25                //              The GFX stroke used by the default tickShapeFunc implementation.
26                tickStroke: null,
27                _gauge: null,
28                _gfxGroup: null,
29                _bgGroup: null,
30                _fgGroup: null,
31                _indicators: null,
32                _indicatorsIndex: null,
33                _indicatorsRenderers: null,
34               
35                constructor: function(){
36                        this._indicators = [];
37                        this._indicatorsIndex = {};
38                        this._indicatorsRenderers = {};
39                        this._gauge = null;
40                        this._gfxGroup = null;
41                        // Fix for #1, IE<9 don't render correctly stroke with width<1
42                        this.tickStroke = {color: "black", width: has("ie") <= 8 ? 1 : 0.5};
43                       
44                        this.addInvalidatingProperties(["scaler", "font", "labelGap", "labelPosition", "tickShapeFunc", "tickLabelFunc", "tickStroke"]);
45                       
46                        this.watch("scaler", lang.hitch(this, this._watchScaler));
47                },
48
49                postscript: function(mixin){
50                        // summary:
51                        //              Internal method.
52                        // tags:
53                        //              private
54                        this.inherited(arguments);
55                        if(mixin && mixin.scaler){
56                                this._watchScaler("scaler", null, mixin.scaler);
57                        }
58                },
59               
60                _watchers: null,
61
62                _watchScaler: function(name, oldValue, newValue){
63                        // summary:
64                        //              Internal method.
65                        // tags:
66                        //              private
67                        array.forEach(this._watchers, lang.hitch(this, function(entry){
68                                entry.unwatch();
69                        }));
70
71                        // Get the properties declared by the watched object
72                        var props = newValue.watchedProperties;
73                        this._watchers = [];
74                        array.forEach(props, lang.hitch(this, function(entry){
75                                this._watchers.push(newValue.watch(entry, lang.hitch(this, this.invalidateRendering)));
76                        }));
77                },
78               
79                _getFont: function(){
80                        // summary:
81                        //              Internal method.
82                        // tags:
83                        //              private
84                        var font = this.font;
85                        if(!font){
86                                font = this._gauge.font;
87                        }
88                        if(!font){
89                                font = gfx.defaultFont;
90                        }
91                        return font;
92                },
93               
94                positionForValue: function(value){
95                        // summary:
96                        //              See CircularScale and Rectangular for more informations.
97                        // value: Number
98                        //              The value to convert.
99                        // returns: Number
100                        //              The position corresponding to the value.
101                        return 0;
102                },
103               
104                valueForPosition: function(position){
105                        // summary:
106                        //              See CircularScale and Rectangular for more informations.
107                        // position: Number
108                        //              The position to convert.
109                        // returns: Number
110                        //              The value corresponding to the position.
111                },
112               
113                tickLabelFunc: function(tickItem){
114                        // summary:
115                        //              Customize the text of ticks labels.
116                        // tickItem: Object
117                        //              An object containing the tick informations.
118                        // returns: String
119                        //              The text to be aligned with the tick. If null, the tick has no label.
120                        if(tickItem.isMinor){
121                                return null;
122                        }else{
123                                return String(tickItem.value);
124                        }
125                },
126               
127                tickShapeFunc: function(group, scale, tickItem){
128                        // summary:
129                        //              Customize the shape of ticks.
130                        // group: dojox/gfx/Group
131                        //              The GFX group used for drawing the tick.
132                        // scale: dojox/dgauges/ScaleBase
133                        //              The scale being processed.
134                        // tickItem: Object
135                        //              An object containing the tick informations.
136                        return group.createLine({
137                                x1: 0,
138                                y1: 0,
139                                x2: tickItem.isMinor ? 6 : 10,
140                                y2: 0
141                        }).setStroke(this.tickStroke);
142                },
143               
144                getIndicatorRenderer: function(name){
145                        // summary:
146                        //              Gets the GFX shape of an indicator.
147                        // name: String
148                        //              The name of the indicator as defined using addIndicator.
149                        // returns: dojox/gfx/canvas/Shape
150                        //              The GFX shape of the indicator.
151                        return this._indicatorsRenderers[name];
152                },
153               
154                removeIndicator: function(name){
155                        // summary:
156                        //              Removes an indicator.
157                        // name: String
158                        //              The name of the indicator as defined using addIndicator.
159                        // returns: IndicatorBase
160                        //              The removed indicator.
161                        var indicator = this._indicatorsIndex[name];
162                        if(indicator){
163                                indicator._gfxGroup.removeShape();
164                                var idx = this._indicators.indexOf(indicator);
165                                this._indicators.splice(idx, 1);
166                               
167                                indicator._disconnectListeners();
168                               
169                                delete this._indicatorsIndex[name];
170                                delete this._indicatorsRenderers[name];
171                        }
172                        if(this._gauge){
173                                this._gauge._resetMainIndicator();
174                        }
175                        this.invalidateRendering();
176                        return indicator;
177                },
178               
179                getIndicator: function(name){
180                        // summary:
181                        //              Get an indicator instance.
182                        // name: String
183                        //              The name of the indicator as defined using addIndicator.
184                        // returns: IndicatorBase
185                        //              The indicator associated with the name parameter.
186                        return this._indicatorsIndex[name];
187                },
188               
189                addIndicator: function(name, indicator, behindScale){
190                        // summary:
191                        //              Add an indicator to the scale. Before calling this function, ensure
192                        //              this scale has already been added to a gauge using the addElement method
193                        //              of the gauge.
194                        // name: String
195                        //              The name of the indicator to be added.
196                        // indicator: dojox/dgauges/IndicatorBase
197                        //              The indicator to add to this scale.
198                        // behindScale: Boolean
199                        //              If true, this indicator is drawn behind the scale. Default value is false.     
200                        if(this._indicatorsIndex[name] && this._indicatorsIndex[name] != indicator){
201                                this.removeIndicator(name);
202                        }
203                       
204                        this._indicators.push(indicator);
205                        this._indicatorsIndex[name] = indicator;
206                       
207                        if(!this._ticksGroup){
208                                this._createSubGroups();
209                        }
210                       
211                        var group = behindScale ? this._bgGroup : this._fgGroup;
212                        indicator._gfxGroup = group.createGroup();
213                       
214                        indicator.scale = this;
215                       
216                        return this.invalidateRendering();
217                },
218               
219                _createSubGroups: function(){
220                        // summary:
221                        //              Internal method.
222                        // tags:
223                        //              private
224                        if(!this._gfxGroup || this._ticksGroup){
225                                return;
226                        }
227                        this._bgGroup = this._gfxGroup.createGroup();
228                        this._ticksGroup = this._gfxGroup.createGroup();
229                        this._fgGroup = this._gfxGroup.createGroup();
230                },
231               
232                refreshRendering: function(){
233                        if(!this._ticksGroup){
234                                this._createSubGroups();
235                        }
236                }
237        });
238});
239
Note: See TracBrowser for help on using the repository browser.