| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238 | <!DOCTYPE html><html><head>  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />  <title>The source code</title>  <link href="../resources/prettify/prettify.css" type="text/css" rel="stylesheet" />  <script type="text/javascript" src="../resources/prettify/prettify.js"></script>  <style type="text/css">    .highlight { display: block; background-color: #ddd; }  </style>  <script type="text/javascript">    function highlight() {      document.getElementById(location.hash.replace(/#/, "")).className = "highlight";    }  </script></head><body onload="prettyPrint(); highlight();">  <pre class="prettyprint lang-js"><span id='Ext-chart-LegendItem'>/**</span> * @class Ext.chart.LegendItem * A single item of a legend (marker plus label) */Ext.define('Ext.chart.LegendItem', {    /* Begin Definitions */    extend: 'Ext.draw.CompositeSprite',    requires: ['Ext.chart.Shape'],    /* End Definitions */    // Position of the item, relative to the upper-left corner of the legend box    x: 0,    y: 0,    zIndex: 500,    // checks to make sure that a unit size follows the bold keyword in the font style value    boldRe: /bold\s\d{1,}.*/i,    constructor: function(config) {        this.callParent(arguments);        this.createLegend(config);    },<span id='Ext-chart-LegendItem-method-createLegend'>    /**</span>     * Creates all the individual sprites for this legend item     */    createLegend: function(config) {        var me = this,            index = config.yFieldIndex,            series = me.series,            seriesType = series.type,            idx = me.yFieldIndex,            legend = me.legend,            surface = me.surface,            refX = legend.x + me.x,            refY = legend.y + me.y,            bbox, z = me.zIndex,            markerConfig, label, mask,            radius, toggle = false,            seriesStyle = Ext.apply(series.seriesStyle, series.style);        function getSeriesProp(name) {            var val = series[name];            return (Ext.isArray(val) ? val[idx] : val);        }                label = me.add('label', surface.add({            type: 'text',            x: 20,            y: 0,            zIndex: (z || 0) + 2,            fill: legend.labelColor,            font: legend.labelFont,            text: getSeriesProp('title') || getSeriesProp('yField'),            style: {                'cursor': 'pointer'            }        }));        // Line series - display as short line with optional marker in the middle        if (seriesType === 'line' || seriesType === 'scatter') {            if(seriesType === 'line') {                me.add('line', surface.add({                    type: 'path',                    path: 'M0.5,0.5L16.5,0.5',                    zIndex: (z || 0) + 2,                    "stroke-width": series.lineWidth,                    "stroke-linejoin": "round",                    "stroke-dasharray": series.dash,                    stroke: seriesStyle.stroke || series.getLegendColor(index) || '#000',                    style: {                        cursor: 'pointer'                    }                }));            }            if (series.showMarkers || seriesType === 'scatter') {                markerConfig = Ext.apply(series.markerStyle, series.markerConfig || {}, {                    fill: series.getLegendColor(index)                });                me.add('marker', Ext.chart.Shape[markerConfig.type](surface, {                    fill: markerConfig.fill,                    x: 8.5,                    y: 0.5,                    zIndex: (z || 0) + 2,                    radius: markerConfig.radius || markerConfig.size,                    style: {                        cursor: 'pointer'                    }                }));            }        }        // All other series types - display as filled box        else {            me.add('box', surface.add({                type: 'rect',                zIndex: (z || 0) + 2,                x: 0,                y: 0,                width: 12,                height: 12,                fill: series.getLegendColor(index),                style: {                    cursor: 'pointer'                }            }));        }                me.setAttributes({            hidden: false        }, true);                bbox = me.getBBox();                mask = me.add('mask', surface.add({            type: 'rect',            x: bbox.x,            y: bbox.y,            width: bbox.width || 20,            height: bbox.height || 20,            zIndex: (z || 0) + 1,            fill: me.legend.boxFill,            style: {                'cursor': 'pointer'            }        }));        //add toggle listener        me.on('mouseover', function() {            label.setStyle({                'font-weight': 'bold'            });            mask.setStyle({                'cursor': 'pointer'            });            series._index = index;            series.highlightItem();        }, me);        me.on('mouseout', function() {            label.setStyle({                'font-weight': legend.labelFont && me.boldRe.test(legend.labelFont) ? 'bold' : 'normal'            });            series._index = index;            series.unHighlightItem();        }, me);                if (!series.visibleInLegend(index)) {            toggle = true;            label.setAttributes({               opacity: 0.5            }, true);        }        me.on('mousedown', function() {            if (!toggle) {                series.hideAll(index);                label.setAttributes({                    opacity: 0.5                }, true);            } else {                series.showAll(index);                label.setAttributes({                    opacity: 1                }, true);            }            toggle = !toggle;            me.legend.chart.redraw();        }, me);        me.updatePosition({x:0, y:0}); //Relative to 0,0 at first so that the bbox is calculated correctly    },<span id='Ext-chart-LegendItem-method-updatePosition'>    /**</span>     * Update the positions of all this item's sprites to match the root position     * of the legend box.     * @param {Object} relativeTo (optional) If specified, this object's 'x' and 'y' values will be used     *                 as the reference point for the relative positioning. Defaults to the Legend.     */    updatePosition: function(relativeTo) {        var me = this,            items = me.items,            ln = items.length,            i = 0,            item;        if (!relativeTo) {            relativeTo = me.legend;        }        for (; i < ln; i++) {            item = items[i];            switch (item.type) {                case 'text':                    item.setAttributes({                        x: 20 + relativeTo.x + me.x,                        y: relativeTo.y + me.y                    }, true);                    break;                case 'rect':                    item.setAttributes({                        translate: {                            x: relativeTo.x + me.x,                            y: relativeTo.y + me.y - 6                        }                    }, true);                    break;                default:                    item.setAttributes({                        translate: {                            x: relativeTo.x + me.x,                            y: relativeTo.y + me.y                        }                    }, true);            }        }    }});</pre></body></html>
 |