X-Git-Url: http://git.ithinksw.org/extjs.git/blobdiff_plain/7a654f8d43fdb43d78b63d90528bed6e86b608cc..refs/heads/master:/docs/source/Label2.html diff --git a/docs/source/Label2.html b/docs/source/Label2.html index b69a3760..4fd77cd4 100644 --- a/docs/source/Label2.html +++ b/docs/source/Label2.html @@ -1,11 +1,28 @@ -Sencha Documentation Project
/**
+
+
+
+  
+  The source code
+  
+  
+  
+  
+
+
+  
/**
  * @class Ext.chart.Label
  *
- * Labels is a mixin whose methods are appended onto the Series class. Labels is an interface with methods implemented
- * in each of the Series (Pie, Bar, etc) for label creation and label placement.
+ * Labels is a mixin to the Series class. Labels methods are implemented
+ * in each of the Series (Pie, Bar, etc) for label creation and placement.
  *
  * The methods implemented by the Series are:
- *  
+ *
  * - **`onCreateLabel(storeItem, item, i, display)`** Called each time a new label is created.
  *   The arguments of the method are:
  *   - *`storeItem`* The element of the store that is related to the label sprite.
@@ -29,57 +46,59 @@ Ext.define('Ext.chart.Label', {
     /* Begin Definitions */
 
     requires: ['Ext.draw.Color'],
-    
-    /* End Definitions */
-
-    /**
-     * @cfg {String} display
-     * Specifies the presence and position of labels for each pie slice. Either "rotate", "middle", "insideStart",
-     * "insideEnd", "outside", "over", "under", or "none" to prevent label rendering.
-     * Default value: 'none'.
-     */
-
-    /**
-     * @cfg {String} color
-     * The color of the label text.
-     * Default value: '#000' (black).
-     */
-
-    /**
-     * @cfg {String} field
-     * The name of the field to be displayed in the label.
-     * Default value: 'name'.
-     */
-
-    /**
-     * @cfg {Number} minMargin
-     * Specifies the minimum distance from a label to the origin of the visualization.
-     * This parameter is useful when using PieSeries width variable pie slice lengths.
-     * Default value: 50.
-     */
-
-    /**
-     * @cfg {String} font
-     * The font used for the labels.
-     * Defautl value: "11px Helvetica, sans-serif".
-     */
 
-    /**
-     * @cfg {String} orientation
-     * Either "horizontal" or "vertical".
-     * Dafault value: "horizontal".
-     */
+    /* End Definitions */
 
-    /**
-     * @cfg {Function} renderer
-     * Optional function for formatting the label into a displayable value.
-     * Default value: function(v) { return v; }
-     * @param v
+    /**
+     * @cfg {Object} label
+     * Object with the following properties:
+     *
+     * - **display** : String
+     *
+     *   Specifies the presence and position of labels for each pie slice. Either "rotate", "middle", "insideStart",
+     *   "insideEnd", "outside", "over", "under", or "none" to prevent label rendering.
+     *   Default value: 'none'.
+     *
+     * - **color** : String
+     *
+     *   The color of the label text.
+     *   Default value: '#000' (black).
+     *
+     * - **contrast** : Boolean
+     *
+     *   True to render the label in contrasting color with the backround.
+     *   Default value: false.
+     *
+     * - **field** : String
+     *
+     *   The name of the field to be displayed in the label.
+     *   Default value: 'name'.
+     *
+     * - **minMargin** : Number
+     *
+     *   Specifies the minimum distance from a label to the origin of the visualization.
+     *   This parameter is useful when using PieSeries width variable pie slice lengths.
+     *   Default value: 50.
+     *
+     * - **font** : String
+     *
+     *   The font used for the labels.
+     *   Default value: "11px Helvetica, sans-serif".
+     *
+     * - **orientation** : String
+     *
+     *   Either "horizontal" or "vertical".
+     *   Dafault value: "horizontal".
+     *
+     * - **renderer** : Function
+     *
+     *   Optional function for formatting the label into a displayable value.
+     *   Default value: function(v) { return v; }
      */
 
     //@private a regex to parse url type colors.
     colorStringRe: /url\s*\(\s*#([^\/)]+)\s*\)/,
-    
+
     //@private the mixin constructor. Used internally by Series.
     constructor: function(config) {
         var me = this;
@@ -106,7 +125,6 @@ Ext.define('Ext.chart.Label', {
         var me = this,
             chart = me.chart,
             gradients = chart.gradients,
-            gradient,
             items = me.items,
             animate = chart.animate,
             config = me.label,
@@ -114,84 +132,112 @@ Ext.define('Ext.chart.Label', {
             color = config.color,
             field = [].concat(config.field),
             group = me.labelsGroup,
+            groupLength = (group || 0) && group.length,
             store = me.chart.store,
             len = store.getCount(),
-            ratio = items.length / len,
-            i, count, j, 
-            k, gradientsCount = (gradients || 0) && gradients.length,
-            colorStopTotal, colorStopIndex, colorStop,
-            item, label, storeItem,
-            sprite, spriteColor, spriteBrightness, labelColor,
+            itemLength = (items || 0) && items.length,
+            ratio = itemLength / len,
+            gradientsCount = (gradients || 0) && gradients.length,
             Color = Ext.draw.Color,
-            colorString;
+            hides = [],
+            gradient, i, count, groupIndex, index, j, k, colorStopTotal, colorStopIndex, colorStop, item, label,
+            storeItem, sprite, spriteColor, spriteBrightness, labelColor, colorString;
 
         if (display == 'none') {
             return;
         }
+        // no items displayed, hide all labels
+        if(itemLength == 0){
+            while(groupLength--)
+                hides.push(groupLength);
+        }else{
+            for (i = 0, count = 0, groupIndex = 0; i < len; i++) {
+                index = 0;
+                for (j = 0; j < ratio; j++) {
+                    item = items[count];
+                    label = group.getAt(groupIndex);
+                    storeItem = store.getAt(i);
+                    //check the excludes
+                    while(this.__excludes && this.__excludes[index] && ratio > 1) {
+                        if(field[j]){
+                            hides.push(groupIndex);
+                        }
+                        index++;
 
-        for (i = 0, count = 0; i < len; i++) {
-            for (j = 0; j < ratio; j++) {
-                item = items[count];
-                label = group.getAt(count);
-                storeItem = store.getAt(i);
-
-                if (!item && label) {
-                    label.hide(true);
-                }
+                    }
 
-                if (item && field[j]) {
-                    if (!label) {
-                        label = me.onCreateLabel(storeItem, item, i, display, j, count);
+                    if (!item && label) {
+                        label.hide(true);
+                        groupIndex++;
                     }
-                    me.onPlaceLabel(label, storeItem, item, i, display, animate, j, count);
 
-                    //set contrast
-                    if (config.contrast && item.sprite) {
-                        sprite = item.sprite;
-                        colorString = sprite._to && sprite._to.fill || sprite.attr.fill;
-                        spriteColor = Color.fromString(colorString);
-                        //color wasn't parsed property maybe because it's a gradient id
-                        if (colorString && !spriteColor) {
-                            colorString = colorString.match(me.colorStringRe)[1];
-                            for (k = 0; k < gradientsCount; k++) {
-                                gradient = gradients[k];
-                                if (gradient.id == colorString) {
-                                    //avg color stops
-                                    colorStop = 0; colorStopTotal = 0;
-                                    for (colorStopIndex in gradient.stops) {
-                                        colorStop++;
-                                        colorStopTotal += Color.fromString(gradient.stops[colorStopIndex].color).getGrayscale();
+                    if (item && field[j]) {
+                        if (!label) {
+                            label = me.onCreateLabel(storeItem, item, i, display, j, index);
+                        }
+                        me.onPlaceLabel(label, storeItem, item, i, display, animate, j, index);
+                        groupIndex++;
+
+                        //set contrast
+                        if (config.contrast && item.sprite) {
+                            sprite = item.sprite;
+                            //set the color string to the color to be set.
+                            if (sprite._endStyle) {
+                                colorString = sprite._endStyle.fill;
+                            }
+                            else if (sprite._to) {
+                                colorString = sprite._to.fill;
+                            }
+                            else {
+                                colorString = sprite.attr.fill;
+                            }
+                            colorString = colorString || sprite.attr.fill;
+
+                            spriteColor = Color.fromString(colorString);
+                            //color wasn't parsed property maybe because it's a gradient id
+                            if (colorString && !spriteColor) {
+                                colorString = colorString.match(me.colorStringRe)[1];
+                                for (k = 0; k < gradientsCount; k++) {
+                                    gradient = gradients[k];
+                                    if (gradient.id == colorString) {
+                                        //avg color stops
+                                        colorStop = 0; colorStopTotal = 0;
+                                        for (colorStopIndex in gradient.stops) {
+                                            colorStop++;
+                                            colorStopTotal += Color.fromString(gradient.stops[colorStopIndex].color).getGrayscale();
+                                        }
+                                        spriteBrightness = (colorStopTotal / colorStop) / 255;
+                                        break;
                                     }
-                                    spriteBrightness = (colorStopTotal / colorStop) / 255;
-                                    break;
                                 }
                             }
+                            else {
+                                spriteBrightness = spriteColor.getGrayscale() / 255;
+                            }
+                            if (label.isOutside) {
+                                spriteBrightness = 1;
+                            }
+                            labelColor = Color.fromString(label.attr.color || label.attr.fill).getHSL();
+                            labelColor[2] = spriteBrightness > 0.5 ? 0.2 : 0.8;
+                            label.setAttributes({
+                                fill: String(Color.fromHSL.apply({}, labelColor))
+                            }, true);
                         }
-                        else {
-                            spriteBrightness = spriteColor.getGrayscale() / 255;
-                        }
-                        labelColor = Color.fromString(label.attr.color || label.attr.fill).getHSL();
-                        
-                        labelColor[2] = spriteBrightness > 0.5? 0.2 : 0.8;
-                        label.setAttributes({
-                            fill: String(Color.fromHSL.apply({}, labelColor))
-                        }, true);
+
                     }
+                    count++;
+                    index++;
                 }
-                count++;
             }
         }
-        me.hideLabels(count);
+        me.hideLabels(hides);
     },
-
-    //@private a method to hide labels.
-    hideLabels: function(index) {
-        var labelsGroup = this.labelsGroup, len;
-        if (labelsGroup) {
-            len = labelsGroup.getCount();
-            while (len-->index) {
-                labelsGroup.getAt(len).hide(true);
-            }
-        }
+    hideLabels: function(hides){
+        var labelsGroup = this.labelsGroup,
+            hlen = hides.length;
+        while(hlen--)
+            labelsGroup.getAt(hides[hlen]).hide(true);
     }
-});
\ No newline at end of file +});
+ +