Ext.require('Ext.chart.*'); Ext.require(['Ext.layout.container.Fit', 'Ext.window.MessageBox']); Ext.onReady(function () { store1.loadData(generateData(6, 20)); var donut = false, chart = Ext.create('Ext.chart.Chart', { xtype: 'chart', id: 'chartCmp', animate: true, store: store1, shadow: true, legend: { position: 'right' }, insetPadding: 60, theme: 'Base:gradients', series: [{ type: 'pie', field: 'data1', showInLegend: true, donut: donut, tips: { trackMouse: true, width: 140, height: 28, renderer: function(storeItem, item) { //calculate percentage. var total = 0; store1.each(function(rec) { total += rec.get('data1'); }); this.setTitle(storeItem.get('name') + ': ' + Math.round(storeItem.get('data1') / total * 100) + '%'); } }, highlight: { segment: { margin: 20 } }, label: { field: 'name', display: 'rotate', contrast: true, font: '18px Arial' } }] }); var panel1 = Ext.create('widget.panel', { width: 800, height: 600, title: 'Semester Trends', renderTo: Ext.getBody(), layout: 'fit', tbar: [{ text: 'Save Chart', handler: function() { Ext.MessageBox.confirm('Confirm Download', 'Would you like to download the chart as an image?', function(choice){ if(choice == 'yes'){ chart.save({ type: 'image/png' }); } }); } }, { text: 'Reload Data', handler: function() { store1.loadData(generateData(6, 20)); } }, { enableToggle: true, pressed: false, text: 'Donut', toggleHandler: function(btn, pressed) { var chart = Ext.getCmp('chartCmp'); chart.series.first().donut = pressed ? 35 : false; chart.refresh(); } }], items: chart }); });