/**
* @class Ext.chart.Navigation
*
* Handles panning and zooming capabilities.
*
* Used as mixin by Ext.chart.Chart.
*/
Ext.define('Ext.chart.Navigation', {
constructor: function() {
this.originalStore = this.store;
},
//filters the store to the specified interval(s)
setZoom: function(zoomConfig) {
var me = this,
store = me.substore || me.store,
bbox = me.chartBBox,
len = store.getCount(),
from = (zoomConfig.x / bbox.width * len) >> 0,
to = Math.ceil(((zoomConfig.x + zoomConfig.width) / bbox.width * len)),
recFieldsLen, recFields = [], curField, json = [], obj;
store.each(function(rec, i) {
if (i < from || i > to) {
return;
}
obj = {};
//get all record field names in a simple array
if (!recFields.length) {
rec.fields.each(function(f) {
recFields.push(f.name);
});
recFieldsLen = recFields.length;
}
//append record values to an aggregation record
for (i = 0; i < recFieldsLen; i++) {
curField = recFields[i];
obj[curField] = rec.get(curField);
}
json.push(obj);
});
me.store = me.substore = Ext.create('Ext.data.JsonStore', {
fields: recFields,
data: json
});
me.redraw(true);
},
restoreZoom: function() {
this.store = this.substore = this.originalStore;
this.redraw(true);
}
});