Upgrade to ExtJS 4.0.7 - Released 10/19/2011
[extjs.git] / docs / source / Cartesian.html
1 <!DOCTYPE html>
2 <html>
3 <head>
4   <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
5   <title>The source code</title>
6   <link href="../resources/prettify/prettify.css" type="text/css" rel="stylesheet" />
7   <script type="text/javascript" src="../resources/prettify/prettify.js"></script>
8   <style type="text/css">
9     .highlight { display: block; background-color: #ddd; }
10   </style>
11   <script type="text/javascript">
12     function highlight() {
13       document.getElementById(location.hash.replace(/#/, "")).className = "highlight";
14     }
15   </script>
16 </head>
17 <body onload="prettyPrint(); highlight();">
18   <pre class="prettyprint lang-js"><span id='Ext-chart-series-Cartesian'>/**
19 </span> * @class Ext.chart.series.Cartesian
20  * @extends Ext.chart.series.Series
21  *
22  * Common base class for series implementations which plot values using x/y coordinates.
23  */
24 Ext.define('Ext.chart.series.Cartesian', {
25
26     /* Begin Definitions */
27
28     extend: 'Ext.chart.series.Series',
29
30     alternateClassName: ['Ext.chart.CartesianSeries', 'Ext.chart.CartesianChart'],
31
32     /* End Definitions */
33
34 <span id='Ext-chart-series-Cartesian-property-xField'>    /**
35 </span>     * The field used to access the x axis value from the items from the data
36      * source.
37      *
38      * @cfg xField
39      * @type String
40      */
41     xField: null,
42
43 <span id='Ext-chart-series-Cartesian-property-yField'>    /**
44 </span>     * The field used to access the y-axis value from the items from the data
45      * source.
46      *
47      * @cfg yField
48      * @type String
49      */
50     yField: null,
51
52 <span id='Ext-chart-series-Cartesian-cfg-axis'>    /**
53 </span>     * @cfg {String} axis
54      * The position of the axis to bind the values to. Possible values are 'left', 'bottom', 'top' and 'right'.
55      * You must explicitly set this value to bind the values of the line series to the ones in the axis, otherwise a
56      * relative scale will be used.
57      */
58     axis: 'left',
59
60     getLegendLabels: function() {
61         var me = this,
62             labels = [],
63             combinations = me.combinations;
64
65         Ext.each([].concat(me.yField), function(yField, i) {
66             var title = me.title;
67             // Use the 'title' config if present, otherwise use the raw yField name
68             labels.push((Ext.isArray(title) ? title[i] : title) || yField);
69         });
70
71         // Handle yFields combined via legend drag-drop
72         if (combinations) {
73             Ext.each(combinations, function(combo) {
74                 var label0 = labels[combo[0]],
75                     label1 = labels[combo[1]];
76                 labels[combo[1]] = label0 + ' &amp; ' + label1;
77                 labels.splice(combo[0], 1);
78             });
79         }
80
81         return labels;
82     },
83
84 <span id='Ext-chart-series-Cartesian-method-eachYValue'>    /**
85 </span>     * @protected Iterates over a given record's values for each of this series's yFields,
86      * executing a given function for each value. Any yFields that have been combined
87      * via legend drag-drop will be treated as a single value.
88      * @param {Ext.data.Model} record
89      * @param {Function} fn
90      * @param {Object} scope
91      */
92     eachYValue: function(record, fn, scope) {
93         Ext.each(this.getYValueAccessors(), function(accessor, i) {
94             fn.call(scope, accessor(record), i);
95         });
96     },
97
98 <span id='Ext-chart-series-Cartesian-method-getYValueCount'>    /**
99 </span>     * @protected Returns the number of yField values, taking into account fields combined
100      * via legend drag-drop.
101      * @return {Number}
102      */
103     getYValueCount: function() {
104         return this.getYValueAccessors().length;
105     },
106
107     combine: function(index1, index2) {
108         var me = this,
109             accessors = me.getYValueAccessors(),
110             accessor1 = accessors[index1],
111             accessor2 = accessors[index2];
112
113         // Combine the yValue accessors for the two indexes into a single accessor that returns their sum
114         accessors[index2] = function(record) {
115             return accessor1(record) + accessor2(record);
116         };
117         accessors.splice(index1, 1);
118
119         me.callParent([index1, index2]);
120     },
121
122     clearCombinations: function() {
123         // Clear combined accessors, they'll get regenerated on next call to getYValueAccessors
124         delete this.yValueAccessors;
125         this.callParent();
126     },
127
128 <span id='Ext-chart-series-Cartesian-method-getYValueAccessors'>    /**
129 </span>     * @protected Returns an array of functions, each of which returns the value of the yField
130      * corresponding to function's index in the array, for a given record (each function takes the
131      * record as its only argument.) If yFields have been combined by the user via legend drag-drop,
132      * this list of accessors will be kept in sync with those combinations.
133      * @return {Array} array of accessor functions
134      */
135     getYValueAccessors: function() {
136         var me = this,
137             accessors = me.yValueAccessors;
138         if (!accessors) {
139             accessors = me.yValueAccessors = [];
140             Ext.each([].concat(me.yField), function(yField) {
141                 accessors.push(function(record) {
142                     return record.get(yField);
143                 });
144             });
145         }
146         return accessors;
147     },
148
149 <span id='Ext-chart-series-Cartesian-method-getMinMaxXValues'>    /**
150 </span>     * Calculate the min and max values for this series's xField.
151      * @return {Array} [min, max]
152      */
153     getMinMaxXValues: function() {
154         var me = this,
155             min, max,
156             xField = me.xField;
157
158         if (me.getRecordCount() &gt; 0) {
159             min = Infinity;
160             max = -min;
161             me.eachRecord(function(record) {
162                 var xValue = record.get(xField);
163                 if (xValue &gt; max) {
164                     max = xValue;
165                 }
166                 if (xValue &lt; min) {
167                     min = xValue;
168                 }
169             });
170         } else {
171             min = max = 0;
172         }
173         return [min, max];
174     },
175
176 <span id='Ext-chart-series-Cartesian-method-getMinMaxYValues'>    /**
177 </span>     * Calculate the min and max values for this series's yField(s). Takes into account yField
178      * combinations, exclusions, and stacking.
179      * @return {Array} [min, max]
180      */
181     getMinMaxYValues: function() {
182         var me = this,
183             stacked = me.stacked,
184             min, max,
185             positiveTotal, negativeTotal;
186
187         function eachYValueStacked(yValue, i) {
188             if (!me.isExcluded(i)) {
189                 if (yValue &lt; 0) {
190                     negativeTotal += yValue;
191                 } else {
192                     positiveTotal += yValue;
193                 }
194             }
195         }
196
197         function eachYValue(yValue, i) {
198             if (!me.isExcluded(i)) {
199                 if (yValue &gt; max) {
200                     max = yValue;
201                 }
202                 if (yValue &lt; min) {
203                     min = yValue;
204                 }
205             }
206         }
207
208         if (me.getRecordCount() &gt; 0) {
209             min = Infinity;
210             max = -min;
211             me.eachRecord(function(record) {
212                 if (stacked) {
213                     positiveTotal = 0;
214                     negativeTotal = 0;
215                     me.eachYValue(record, eachYValueStacked);
216                     if (positiveTotal &gt; max) {
217                         max = positiveTotal;
218                     }
219                     if (negativeTotal &lt; min) {
220                         min = negativeTotal;
221                     }
222                 } else {
223                     me.eachYValue(record, eachYValue);
224                 }
225             });
226         } else {
227             min = max = 0;
228         }
229         return [min, max];
230     },
231
232     getAxesForXAndYFields: function() {
233         var me = this,
234             axes = me.chart.axes,
235             axis = [].concat(me.axis),
236             xAxis, yAxis;
237
238         if (Ext.Array.indexOf(axis, 'top') &gt; -1) {
239             xAxis = 'top';
240         } else if (Ext.Array.indexOf(axis, 'bottom') &gt; -1) {
241             xAxis = 'bottom';
242         } else {
243             if (axes.get('top')) {
244                 xAxis = 'top';
245             } else if (axes.get('bottom')) {
246                 xAxis = 'bottom';
247             }
248         }
249
250         if (Ext.Array.indexOf(axis, 'left') &gt; -1) {
251             yAxis = 'left';
252         } else if (Ext.Array.indexOf(axis, 'right') &gt; -1) {
253             yAxis = 'right';
254         } else {
255             if (axes.get('left')) {
256                 yAxis = 'left';
257             } else if (axes.get('right')) {
258                 yAxis = 'right';
259             }
260         }
261
262         return {
263             xAxis: xAxis,
264             yAxis: yAxis
265         };
266     }
267
268
269 });
270 </pre>
271 </body>
272 </html>