- rendererAttributes, centerX, centerY, slice, slices, sprite, value,
- item, ln, record, i, j, startAngle, endAngle, middleAngle, sliceLength, path,
- p, spriteOptions, bbox, splitAngle, sliceA, sliceB;
-
- Ext.apply(seriesStyle, me.style || {});
-
- me.setBBox();
- bbox = me.bbox;
-
- //override theme colors
- if (me.colorSet) {
- colorArrayStyle = me.colorSet;
- colorArrayLength = colorArrayStyle.length;
- }
-
- //if not store or store is empty then there's nothing to draw
- if (!store || !store.getCount()) {
- return;
- }
-
- centerX = me.centerX = chartBBox.x + (chartBBox.width / 2);
- centerY = me.centerY = chartBBox.y + chartBBox.height;
- me.radius = Math.min(centerX - chartBBox.x, centerY - chartBBox.y);
- me.slices = slices = [];
- me.items = items = [];
-
- if (!me.value) {
- record = store.getAt(0);
- me.value = record.get(field);
- }
-
- value = me.value;
- if (me.needle) {
- sliceA = {
- series: me,
- value: value,
- startAngle: -180,
- endAngle: 0,
- rho: me.radius
- };
- splitAngle = -180 * (1 - (value - minimum) / (maximum - minimum));
- slices.push(sliceA);
- } else {
- splitAngle = -180 * (1 - (value - minimum) / (maximum - minimum));
- sliceA = {
- series: me,
- value: value,
- startAngle: -180,
- endAngle: splitAngle,
- rho: me.radius
- };
- sliceB = {
- series: me,
- value: me.maximum - value,
- startAngle: splitAngle,
- endAngle: 0,
- rho: me.radius
- };
- slices.push(sliceA, sliceB);
- }
-
- //do pie slices after.
- for (i = 0, ln = slices.length; i < ln; i++) {
- slice = slices[i];
- sprite = group.getAt(i);
- //set pie slice properties
- rendererAttributes = Ext.apply({
- segment: {
- startAngle: slice.startAngle,
- endAngle: slice.endAngle,
- margin: 0,
- rho: slice.rho,
- startRho: slice.rho * +donut / 100,
- endRho: slice.rho
- }
- }, Ext.apply(seriesStyle, colorArrayStyle && { fill: colorArrayStyle[i % colorArrayLength] } || {}));
-
- item = Ext.apply({},
- rendererAttributes.segment, {
- slice: slice,
- series: me,
- storeItem: record,
- index: i
- });
- items[i] = item;
- // Create a new sprite if needed (no height)
- if (!sprite) {
- spriteOptions = Ext.apply({
- type: "path",
- group: group
- }, Ext.apply(seriesStyle, colorArrayStyle && { fill: colorArrayStyle[i % colorArrayLength] } || {}));
- sprite = surface.add(Ext.apply(spriteOptions, rendererAttributes));
- }
- slice.sprite = slice.sprite || [];
- item.sprite = sprite;
- slice.sprite.push(sprite);
- if (animate) {
- rendererAttributes = me.renderer(sprite, record, rendererAttributes, i, store);
- sprite._to = rendererAttributes;
- me.onAnimate(sprite, {
- to: rendererAttributes
+ labelConf = this.label,
+ renderer = labelConf.renderer || function(v) { return v; };
+
+ if (!this.labelArray) {
+ //draw scale
+ for (i = 0; i <= steps; i++) {
+ // TODO Adjust for height of text / 2 instead
+ adjY = (i === 0 || i === steps) ? 7 : 0;
+ label = surface.add({
+ type: 'text',
+ text: renderer(round(i / steps * maxValue)),
+ x: centerX + rho * cos(i / steps * pi - pi),
+ y: centerY + rho * sin(i / steps * pi - pi) - adjY,
+ 'text-anchor': 'middle',
+ 'stroke-width': 0.2,
+ zIndex: 10,
+ stroke: '#333'