X-Git-Url: http://git.ithinksw.org/extjs.git/blobdiff_plain/0494b8d9b9bb03ab6c22b34dae81261e3cd7e3e6..7a654f8d43fdb43d78b63d90528bed6e86b608cc:/src/chart/Tip.js diff --git a/src/chart/Tip.js b/src/chart/Tip.js new file mode 100644 index 00000000..500eaaa9 --- /dev/null +++ b/src/chart/Tip.js @@ -0,0 +1,85 @@ +/** + * @class Ext.chart.Tip + * @ignore + */ +Ext.define('Ext.chart.Tip', { + + /* Begin Definitions */ + + requires: ['Ext.tip.ToolTip', 'Ext.chart.TipSurface'], + + /* End Definitions */ + + constructor: function(config) { + var me = this, + surface, + sprites, + tipSurface; + if (config.tips) { + me.tipTimeout = null; + me.tipConfig = Ext.apply({}, config.tips, { + renderer: Ext.emptyFn, + constrainPosition: false + }); + me.tooltip = Ext.create('Ext.tip.ToolTip', me.tipConfig); + Ext.getBody().on('mousemove', me.tooltip.onMouseMove, me.tooltip); + if (me.tipConfig.surface) { + //initialize a surface + surface = me.tipConfig.surface; + sprites = surface.sprites; + tipSurface = Ext.create('Ext.chart.TipSurface', { + id: 'tipSurfaceComponent', + sprites: sprites + }); + if (surface.width && surface.height) { + tipSurface.setSize(surface.width, surface.height); + } + me.tooltip.add(tipSurface); + me.spriteTip = tipSurface; + } + } + }, + + showTip: function(item) { + var me = this; + if (!me.tooltip) { + return; + } + clearTimeout(me.tipTimeout); + var tooltip = me.tooltip, + spriteTip = me.spriteTip, + tipConfig = me.tipConfig, + trackMouse = tooltip.trackMouse, + sprite, surface, surfaceExt, pos, x, y; + if (!trackMouse) { + tooltip.trackMouse = true; + sprite = item.sprite; + surface = sprite.surface; + surfaceExt = Ext.get(surface.getId()); + if (surfaceExt) { + pos = surfaceExt.getXY(); + x = pos[0] + (sprite.attr.x || 0) + (sprite.attr.translation && sprite.attr.translation.x || 0); + y = pos[1] + (sprite.attr.y || 0) + (sprite.attr.translation && sprite.attr.translation.y || 0); + tooltip.targetXY = [x, y]; + } + } + if (spriteTip) { + tipConfig.renderer.call(tooltip, item.storeItem, item, spriteTip.surface); + } else { + tipConfig.renderer.call(tooltip, item.storeItem, item); + } + tooltip.show(); + tooltip.trackMouse = trackMouse; + }, + + hideTip: function(item) { + var tooltip = this.tooltip; + if (!tooltip) { + return; + } + clearTimeout(this.tipTimeout); + this.tipTimeout = setTimeout(function() { + tooltip.hide(); + }, 0); + } +}); \ No newline at end of file