this is a major rework of the memory inputpanel previously we had to select fixed/variable and could set shares/ballooning, depending on what was selected
now the panel is much simpler: non advanced: memory: the target maximum memory advanced: min-memory: the minimum memory, if different from the memory field we have 'dynamic' memory shares, only if we have 'dynamic' memory ballooning-device: better naming, deactivates the ballooning device Signed-off-by: Dominik Csapak <d.csa...@proxmox.com> --- www/manager6/qemu/MemoryEdit.js | 173 ++++++++++++++++------------------------ 1 file changed, 68 insertions(+), 105 deletions(-) diff --git a/www/manager6/qemu/MemoryEdit.js b/www/manager6/qemu/MemoryEdit.js index 6fda271b..384351b0 100644 --- a/www/manager6/qemu/MemoryEdit.js +++ b/www/manager6/qemu/MemoryEdit.js @@ -8,124 +8,72 @@ Ext.define('PVE.qemu.MemoryInputPanel', { onGetValues: function(values) { var me = this; - var res; - - if (values.memoryType === 'fixed') { - res = { memory: values.memory }; - if (values.ballooning === '1') { - // if balloning is active if it is not explicitely set - res['delete'] = "balloon,shares"; - } else { - res['delete'] = "shares"; - res.balloon = 0; - } + var res = {}; + + res.memory = values.memory; + res.balloon = values.balloon; + + if (!values.ballooning) { + res.balloon = 0; + res['delete'] = 'shares'; + } else if (values.memory === values.balloon) { + delete res.balloon; + res['delete'] = 'balloon,shares'; + } else if (Ext.isDefined(values.shares) && (values.shares !== "")) { + res.shares = values.shares; } else { - res = { - memory: values.maxmemory, - balloon: values.balloon - }; - if (Ext.isDefined(values.shares) && (values.shares !== "")) { - res.shares = values.shares; - } else { - res['delete'] = "shares"; - } + res['delete'] = "shares"; } return res; }, - initComponent : function() { + 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=ballooning]').setDisabled(!value); - me.down('field[name=maxmemory]').setDisabled(value); - me.down('field[name=balloon]').setDisabled(value); - me.down('field[name=shares]').setDisabled(value); - } - } - }, + me.items= [ { xtype: 'pveMemoryField', - name: 'memory', - hotplug: me.hotplug, - fieldLabel: gettext('Memory') + ' (MiB)', - labelAlign: 'right', - labelWidth: labelWidth - }, - { - xtype: 'proxmoxcheckbox', - hotplug: me.hotplug, - name: 'ballooning', - value: '1', - labelAlign: 'right', labelWidth: labelWidth, - fieldLabel: gettext('Ballooning') - }, - { - 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', + fieldLabel: gettext('Memory') + ' (MiB)', + name: 'memory', + minValue: 1, + maxValue: 512*1024, + step: 32, hotplug: me.hotplug, - disabled: true, - value: '1024', - fieldLabel: gettext('Maximum memory') + ' (MiB)', - labelAlign: 'right', - labelWidth: labelWidth, listeners: { - change: function(f, value) { + change: function(f, value, old) { var bf = me.down('field[name=balloon]'); var balloon = bf.getValue(); bf.setMaxValue(value); - bf.validate(); - }, - blur: function(f) { - var value = f.getValue(); - var bf = me.down('field[name=balloon]'); - var balloon = bf.getValue(); - if (balloon > value) { + if (balloon === old) { bf.setValue(value); } + bf.validate(); } } - }, + } + ]; + + me.advancedItems= [ { - xtype: 'proxmoxintegerfield', + xtype: 'pveMemoryField', name: 'balloon', - disabled: true, - minValue: 0, + minValue: 1, maxValue: 512*1024, - value: '512', step: 32, fieldLabel: gettext('Minimum memory') + ' (MiB)', - labelAlign: 'right', + hotplug: me.hotplug, labelWidth: labelWidth, - allowBlank: false + allowBlank: false, + listeners: { + change: function(f, value) { + var memory = me.down('field[name=memory]').getValue(); + var shares = me.down('field[name=shares]'); + shares.setDisabled(value === memory); + } + } }, { xtype: 'proxmoxintegerfield', @@ -136,28 +84,44 @@ Ext.define('PVE.qemu.MemoryInputPanel', { value: '', step: 10, fieldLabel: gettext('Shares'), - labelAlign: 'right', labelWidth: labelWidth, allowBlank: true, emptyText: Proxmox.Utils.defaultText + ' (1000)', submitEmptyText: false + }, + { + xtype: 'proxmoxcheckbox', + labelWidth: labelWidth, + value: '1', + name: 'ballooning', + fieldLabel: gettext('Ballooning Device'), + listeners: { + change: function(f, value) { + var bf = me.down('field[name=balloon]'); + var shares = me.down('field[name=shares]'); + var memory = me.down('field[name=memory]'); + bf.setDisabled(!value); + shares.setDisabled(!value || (bf.getValue() === memory.getValue())); + } + } } ]; if (me.insideWizard) { - me.column1 = items; - } else { - me.items = items; + me.column1 = me.items; + me.items = undefined; + me.advancedColumn1 = me.advancedItems; + me.advancedItems = undefined; } - me.callParent(); } + }); Ext.define('PVE.qemu.MemoryEdit', { extend: 'Proxmox.window.Edit', - initComponent : function() { + initComponent: function() { var me = this; var memoryhotplug; @@ -168,10 +132,10 @@ Ext.define('PVE.qemu.MemoryEdit', { } }); } - - var ipanel = Ext.create('PVE.qemu.MemoryInputPanel', { - hotplug: memoryhotplug - }); + + var ipanel = Ext.create('PVE.qemu.MemoryInputPanel', { + hotplug: memoryhotplug + }); Ext.apply(me, { subject: gettext('Memory'), @@ -188,13 +152,12 @@ Ext.define('PVE.qemu.MemoryEdit', { var data = response.result.data; var values = { - memory: data.memory, - maxmemory: data.memory, - balloon: data.balloon, ballooning: data.balloon === 0 ? '0' : '1', shares: data.shares, - memoryType: data.balloon ? 'dynamic' : 'fixed' + memory: data.memory || '512', + balloon: data.balloon > 0 ? data.balloon : (data.memory || '512') }; + ipanel.setValues(values); } }); -- 2.11.0 _______________________________________________ pve-devel mailing list pve-devel@pve.proxmox.com https://pve.proxmox.com/cgi-bin/mailman/listinfo/pve-devel