mirror of
https://git.proxmox.com/git/pve-manager
synced 2025-05-24 14:51:59 +00:00

this is ExtJS recommended practise, follows most of our conventions and is necessary for querying components with Ext.ComponentQuery.query() without escaping the dots in the component widget name.
180 lines
3.6 KiB
JavaScript
180 lines
3.6 KiB
JavaScript
Ext.define('PVE.qemu.MemoryInputPanel', {
|
|
extend: 'PVE.panel.InputPanel',
|
|
alias: 'widget.pveQemuMemoryPanel',
|
|
onlineHelp: 'chapter-qm.html#_memory',
|
|
|
|
insideWizard: false,
|
|
|
|
onGetValues: function(values) {
|
|
var me = this;
|
|
|
|
var res;
|
|
|
|
if (values.memoryType === 'fixed') {
|
|
res = { memory: values.memory };
|
|
res['delete'] = "balloon,shares";
|
|
} else {
|
|
res = {
|
|
memory: values.maxmemory,
|
|
balloon: values.balloon
|
|
};
|
|
if (Ext.isDefined(values.shares) && (values.shares !== "")) {
|
|
res.shares = values.shares;
|
|
} else {
|
|
res['delete'] = "shares";
|
|
}
|
|
}
|
|
|
|
return res;
|
|
},
|
|
|
|
initComponent : function() {
|
|
var me = this;
|
|
var labelWidth = 160;
|
|
|
|
var items = [
|
|
{
|
|
xtype: 'radiofield',
|
|
name: 'memoryType',
|
|
inputValue: 'fixed',
|
|
boxLabel: gettext('Use fixed size memory'),
|
|
checked: true,
|
|
listeners: {
|
|
change: function(f, value) {
|
|
if (!me.rendered) {
|
|
return;
|
|
}
|
|
me.down('field[name=memory]').setDisabled(!value);
|
|
me.down('field[name=maxmemory]').setDisabled(value);
|
|
me.down('field[name=balloon]').setDisabled(value);
|
|
me.down('field[name=shares]').setDisabled(value);
|
|
}
|
|
}
|
|
},
|
|
{
|
|
xtype: 'pveMemoryField',
|
|
name: 'memory',
|
|
hotplug: me.hotplug,
|
|
fieldLabel: gettext('Memory') + ' (MB)',
|
|
labelAlign: 'right',
|
|
labelWidth: labelWidth
|
|
},
|
|
{
|
|
xtype: 'radiofield',
|
|
name: 'memoryType',
|
|
inputValue: 'dynamic',
|
|
boxLabel: gettext('Automatically allocate memory within this range'),
|
|
listeners: {
|
|
change: function(f, value) {
|
|
if (!me.rendered) {
|
|
return;
|
|
}
|
|
}
|
|
}
|
|
},
|
|
{
|
|
xtype: 'pveMemoryField',
|
|
name: 'maxmemory',
|
|
hotplug: me.hotplug,
|
|
disabled: true,
|
|
value: '1024',
|
|
fieldLabel: gettext('Maximum memory') + ' (MB)',
|
|
labelAlign: 'right',
|
|
labelWidth: labelWidth,
|
|
listeners: {
|
|
change: function(f, value) {
|
|
var bf = me.down('field[name=balloon]');
|
|
var balloon = bf.getValue();
|
|
if (balloon > value) {
|
|
bf.setValue(value);
|
|
}
|
|
bf.setMaxValue(value);
|
|
}
|
|
}
|
|
},
|
|
{
|
|
xtype: 'numberfield',
|
|
name: 'balloon',
|
|
disabled: true,
|
|
minValue: 0,
|
|
maxValue: 512*1024,
|
|
value: '512',
|
|
step: 32,
|
|
fieldLabel: gettext('Minimum memory') + ' (MB)',
|
|
labelAlign: 'right',
|
|
labelWidth: labelWidth,
|
|
allowBlank: false
|
|
},
|
|
{
|
|
xtype: 'numberfield',
|
|
name: 'shares',
|
|
disabled: true,
|
|
minValue: 0,
|
|
maxValue: 50000,
|
|
value: '',
|
|
step: 10,
|
|
fieldLabel: gettext('Shares'),
|
|
labelAlign: 'right',
|
|
labelWidth: labelWidth,
|
|
allowBlank: true,
|
|
emptyText: PVE.Utils.defaultText + ' (1000)',
|
|
submitEmptyText: false
|
|
}
|
|
];
|
|
|
|
if (me.insideWizard) {
|
|
me.column1 = items;
|
|
} else {
|
|
me.items = items;
|
|
}
|
|
|
|
me.callParent();
|
|
}
|
|
});
|
|
|
|
Ext.define('PVE.qemu.MemoryEdit', {
|
|
extend: 'PVE.window.Edit',
|
|
|
|
initComponent : function() {
|
|
var me = this;
|
|
|
|
var memoryhotplug;
|
|
if(me.hotplug) {
|
|
Ext.each(me.hotplug.split(','), function(el) {
|
|
if (el === 'memory') {
|
|
memoryhotplug = 1;
|
|
}
|
|
});
|
|
}
|
|
|
|
var ipanel = Ext.create('PVE.qemu.MemoryInputPanel', {
|
|
hotplug: memoryhotplug
|
|
});
|
|
|
|
Ext.apply(me, {
|
|
subject: gettext('Memory'),
|
|
items: [ ipanel ],
|
|
// uncomment the following to use the async configiguration API
|
|
// backgroundDelay: 5,
|
|
width: 400
|
|
});
|
|
|
|
me.callParent();
|
|
|
|
me.load({
|
|
success: function(response, options) {
|
|
var data = response.result.data;
|
|
|
|
var values = {
|
|
memory: data.memory,
|
|
maxmemory: data.memory,
|
|
balloon: data.balloon,
|
|
shares: data.shares,
|
|
memoryType: data.balloon ? 'dynamic' : 'fixed'
|
|
};
|
|
ipanel.setValues(values);
|
|
}
|
|
});
|
|
}
|
|
});
|