/**
* A simple progress bar widget.
*
* You are responsible for showing, updating (via {@link #setValue}) and clearing the
* progress bar as needed from your own code. This method is most appropriate when you
* want to show progress throughout an operation that has predictable points of interest
* at which you can update the control.
*/
Ext.define('Ext.Progress', {
extend: 'Ext.Gadget',
xtype: ['progress', 'progressbarwidget'],
alternateClassName: 'Ext.ProgressBarWidget',
mixins: [
'Ext.ProgressBase'
],
config: {
/**
* @cfg {String} [text]
* The background text
*/
text: null,
/**
* @cfg {Boolean} [animate=false]
* Specify as `true` to have this progress bar animate to new extent when updated.
*/
animate: false
},
cachedConfig: {
textCls: Ext.baseCSSPrefix + 'progress-text',
cls: null
},
baseCls: Ext.baseCSSPrefix + 'progress',
template: [{
reference: 'backgroundEl'
}, {
reference: 'barEl',
cls: Ext.baseCSSPrefix + 'progress-bar',
children: [{
reference: 'textEl'
}]
}],
defaultBindProperty: 'value',
updateCls: function(cls, oldCls) {
var el = this.element;
if (oldCls) {
el.removeCls(oldCls);
}
if (cls) {
el.addCls(cls);
}
},
updateUi: function(ui, oldUi) {
var element = this.element,
barEl = this.barEl,
baseCls = this.baseCls + '-';
this.callParent([ui, oldUi]);
if (oldUi) {
element.removeCls(baseCls + oldUi);
barEl.removeCls(baseCls + 'bar-' + oldUi);
}
element.addCls(baseCls + ui);
barEl.addCls(baseCls + 'bar-' + ui);
},
updateTextCls: function(textCls) {
this.backgroundEl.addCls(textCls + ' ' + textCls + '-back');
this.textEl.addCls(textCls);
},
updateValue: function(value, oldValue) {
var me = this,
textTpl = me.getTextTpl();
if (textTpl) {
me.setText(textTpl.apply({
value: value,
percent: Math.round(value * 100)
}));
}
if (!me.isConfiguring && me.getAnimate()) {
me.stopBarAnimation();
me.startBarAnimation(Ext.apply({
from: {
width: (oldValue * 100) + '%'
},
to: {
width: (value * 100) + '%'
}
}, me.animate));
}
else {
me.barEl.setStyle('width', (value * 100) + '%');
}
},
updateText: function(text) {
this.backgroundEl.setHtml(text);
this.textEl.setHtml(text);
},
doDestroy: function() {
this.stopBarAnimation();
this.callParent();
},
privates: {
startBarAnimation: Ext.privateFn,
stopBarAnimation: Ext.privateFn
}
});