a548bca990
Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
84 lines
1.8 KiB
JavaScript
84 lines
1.8 KiB
JavaScript
Ext.define('PVE.form.MemoryField', {
|
|
extend: 'Ext.form.field.Number',
|
|
alias: 'widget.pveMemoryField',
|
|
|
|
allowBlank: false,
|
|
|
|
hotplug: false,
|
|
|
|
minValue: 32,
|
|
|
|
maxValue: 4178944,
|
|
|
|
step: 32,
|
|
|
|
value: '512', // qm default
|
|
|
|
computeUpDown: function(value) {
|
|
var me = this;
|
|
|
|
if (!me.hotplug) {
|
|
return { up: value + me.step, down: value - me.step };
|
|
}
|
|
|
|
var dimm_size = 512;
|
|
var prev_dimm_size = 0;
|
|
var min_size = 1024;
|
|
var current_size = min_size;
|
|
var value_up = min_size;
|
|
var value_down = min_size;
|
|
var value_start = min_size;
|
|
|
|
var i, j;
|
|
for (j = 0; j < 9; j++) {
|
|
for (i = 0; i < 32; i++) {
|
|
if ((value >= current_size) && (value < (current_size + dimm_size))) {
|
|
value_start = current_size;
|
|
value_up = current_size + dimm_size;
|
|
value_down = current_size - ((i === 0) ? prev_dimm_size : dimm_size);
|
|
}
|
|
current_size += dimm_size;
|
|
}
|
|
prev_dimm_size = dimm_size;
|
|
dimm_size = dimm_size*2;
|
|
}
|
|
|
|
return { up: value_up, down: value_down, start: value_start };
|
|
},
|
|
|
|
onSpinUp: function() {
|
|
var me = this;
|
|
if (!me.readOnly) {
|
|
var res = me.computeUpDown(me.getValue());
|
|
me.setValue(Ext.Number.constrain(res.up, me.minValue, me.maxValue));
|
|
}
|
|
},
|
|
|
|
onSpinDown: function() {
|
|
var me = this;
|
|
if (!me.readOnly) {
|
|
var res = me.computeUpDown(me.getValue());
|
|
me.setValue(Ext.Number.constrain(res.down, me.minValue, me.maxValue));
|
|
}
|
|
},
|
|
|
|
initComponent: function() {
|
|
var me = this;
|
|
|
|
if (me.hotplug) {
|
|
me.minValue = 1024;
|
|
|
|
me.on('blur', function(field) {
|
|
var value = me.getValue();
|
|
var res = me.computeUpDown(value);
|
|
if (value === res.start || value === res.up || value === res.down) {
|
|
return;
|
|
}
|
|
field.setValue(res.up);
|
|
});
|
|
}
|
|
|
|
me.callParent();
|
|
}
|
|
});
|