linuxwindowsinboxwhatsappicloudtweetdeckhipchattelegramhangoutsslackgmailskypefacebook-workplaceoutlookemailmicrosoft-teamsdiscordmessengercustom-servicesmacos
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
182 lines
4.8 KiB
182 lines
4.8 KiB
/** |
|
* An update-able progress bar widget. |
|
* |
|
* In manual mode, 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. |
|
* |
|
* @example |
|
* var store = Ext.create('Ext.data.Store', { |
|
* fields: ['name', 'progress'], |
|
* data: [ |
|
* { name: 'Lisa', progress: .159 }, |
|
* { name: 'Bart', progress: .216 }, |
|
* { name: 'Homer', progress: .55 }, |
|
* { name: 'Maggie', progress: .167 }, |
|
* { name: 'Marge', progress: .145 } |
|
* ] |
|
* }); |
|
* |
|
* Ext.create('Ext.grid.Panel', { |
|
* title: 'Simpsons', |
|
* store: store, |
|
* columns: [ |
|
* { text: 'Name', dataIndex: 'name' }, |
|
* { |
|
* text: 'Progress', |
|
* xtype: 'widgetcolumn', |
|
* width: 120, |
|
* dataIndex: 'progress', |
|
* widget: { |
|
* xtype: 'progressbarwidget' |
|
* } |
|
* } |
|
* ], |
|
* height: 200, |
|
* width: 400, |
|
* renderTo: Ext.getBody() |
|
* }); |
|
* |
|
*/ |
|
Ext.define('Ext.ProgressBarWidget', { |
|
extend: 'Ext.Widget', |
|
alias: 'widget.progressbarwidget', |
|
|
|
// Required to pull in the styles |
|
requires: [ |
|
'Ext.ProgressBar' |
|
], |
|
|
|
config: { |
|
/** |
|
* @cfg {String} [text] |
|
* The background text |
|
*/ |
|
text: null, |
|
|
|
/** |
|
* @cfg {Number} [value=0] |
|
* A floating point value between 0 and 1 (e.g., .5) |
|
*/ |
|
value: 0, |
|
|
|
/** |
|
* @cfg {Boolean} [animate=false] |
|
* Specify as `true` to have this progress bar animate to new extent when updated. |
|
*/ |
|
animate: false, |
|
|
|
/** |
|
* @cfg {String/Ext.XTemplate} [textTpl] |
|
* A template used to create this ProgressBar's background text given two values: |
|
* |
|
* `value ' - The raw progress value between 0 and 1 |
|
* 'percent' - The value as a percentage between 0 and 100 |
|
*/ |
|
textTpl: null |
|
}, |
|
|
|
cachedConfig: { |
|
/** |
|
* @cfg {String} [baseCls='x-progress'] |
|
* The base CSS class to apply to the progress bar's wrapper element. |
|
*/ |
|
baseCls: Ext.baseCSSPrefix + 'progress', |
|
|
|
textCls: Ext.baseCSSPrefix + 'progress-text', |
|
|
|
ui: 'default' |
|
}, |
|
|
|
template: [{ |
|
reference: 'backgroundEl' |
|
}, { |
|
reference: 'barEl', |
|
children: [{ |
|
reference: 'textEl' |
|
}] |
|
}], |
|
|
|
defaultBindProperty: 'value', |
|
|
|
doSetWidth: function(width) { |
|
var me = this; |
|
|
|
me.callParent([width]); |
|
width -= me.element.getBorderWidth('lr'); |
|
me.backgroundEl.setWidth(width); |
|
me.textEl.setWidth(width); |
|
}, |
|
|
|
updateUi: function(ui, oldUi) { |
|
var element = this.element, |
|
barEl = this.barEl, |
|
baseCls = this.getBaseCls() + '-'; |
|
|
|
if (oldUi) { |
|
element.removeCls(baseCls + oldUi); |
|
barEl.removeCls(baseCls + 'bar-' + oldUi); |
|
} |
|
|
|
element.addCls(baseCls + ui); |
|
barEl.addCls(baseCls + 'bar-' + ui); |
|
}, |
|
|
|
updateBaseCls: function(baseCls, oldBaseCls) { |
|
//<debug> |
|
if (oldBaseCls) { |
|
Ext.Error.raise('You cannot configure baseCls - use a subclass'); |
|
} |
|
//</debug> |
|
this.element.addCls(baseCls); |
|
this.barEl.addCls(baseCls + '-bar'); |
|
}, |
|
|
|
updateTextCls: function(textCls) { |
|
this.backgroundEl.addCls(textCls + ' ' + textCls + '-back'); |
|
this.textEl.addCls(textCls); |
|
}, |
|
|
|
applyValue: function(value) { |
|
return value || 0; |
|
}, |
|
|
|
updateValue: function(value, oldValue) { |
|
var me = this, |
|
barEl = me.barEl, |
|
textTpl = me.getTextTpl(); |
|
|
|
if (textTpl) { |
|
me.setText(textTpl.apply({ |
|
value: value, |
|
percent: Math.round(value * 100) |
|
})); |
|
} |
|
if (me.getAnimate()) { |
|
barEl.stopAnimation(); |
|
barEl.animate(Ext.apply({ |
|
from: { |
|
width: (oldValue * 100) + '%' |
|
}, |
|
to: { |
|
width: (value * 100) + '%' |
|
} |
|
}, me.animate)); |
|
} else { |
|
barEl.setStyle('width', (value * 100) + '%'); |
|
} |
|
}, |
|
|
|
updateText: function(text) { |
|
this.backgroundEl.setHtml(text); |
|
this.textEl.setHtml(text); |
|
}, |
|
|
|
applyTextTpl: function(textTpl) { |
|
if (!textTpl.isTemplate) { |
|
textTpl = new Ext.XTemplate(textTpl); |
|
} |
|
return textTpl; |
|
} |
|
});
|
|
|