/**
* @class Ext.chart.axis.Axis3D
* @extends Ext.chart.axis.Axis
* @xtype axis3d
*
* Defines a 3D axis for charts.
*
* A 3D axis has the same properties as the regular {@link Ext.chart.axis.Axis axis},
* plus a notion of depth. The depth of the 3D axis is determined automatically
* based on the depth of the bound series.
*
* This type of axis has the following limitations compared to the regular axis class:
* - supported {@link Ext.chart.axis.Axis#position positions} are 'left' and 'bottom' only;
* - floating axes are not supported.
*
* At the present moment only {@link Ext.chart.series.Bar3D} series can make use of the 3D axis.
*/
Ext.define('Ext.chart.axis.Axis3D', {
extend: 'Ext.chart.axis.Axis',
xtype: 'axis3d',
requires: [
'Ext.chart.axis.sprite.Axis3D'
],
config: {
/**
* @private
* The depth of the axis. Determined automatically.
*/
depth: 0
/**
* @cfg {String} position
* Where to set the axis. Available options are `left` and `bottom`.
*/
},
onSeriesChange: function(chart) {
var me = this,
eventName = 'depthchange',
listenerName = 'onSeriesDepthChange',
i, series;
function toggle(action) {
var boundSeries = me.boundSeries;
for (i = 0; i < boundSeries.length; i++) {
series = boundSeries[i];
series[action](eventName, listenerName, me);
}
}
// Remove 'depthchange' listeners from old bound series, if any.
toggle('un');
me.callParent(arguments);
// Add 'depthchange' listeners to new bound series.
toggle('on');
},
onSeriesDepthChange: function(series, depth) {
var me = this,
maxDepth = depth,
boundSeries = me.boundSeries,
i, item;
if (depth > me.getDepth()) {
maxDepth = depth;
}
else {
for (i = 0; i < boundSeries.length; i++) {
item = boundSeries[i];
if (item !== series && item.getDepth) {
depth = item.getDepth();
if (depth > maxDepth) {
maxDepth = depth;
}
}
}
}
me.setDepth(maxDepth);
},
updateDepth: function(depth) {
var me = this,
sprites = me.getSprites(),
attr = { depth: depth };
if (sprites && sprites.length) {
sprites[0].setAttributes(attr);
}
if (me.gridSpriteEven && me.gridSpriteOdd) {
me.gridSpriteEven.getTemplate().setAttributes(attr);
me.gridSpriteOdd.getTemplate().setAttributes(attr);
}
},
getGridAlignment: function() {
switch (this.getPosition()) {
case 'left':
case 'right':
return 'horizontal3d';
case 'top':
case 'bottom':
return 'vertical3d';
}
}
});