we need to change memory field step dynamically, and also map values to dimm size.
Fixme : apply same behaviour for maxmemory field Signed-off-by: Alexandre Derumier <aderum...@odiso.com> --- www/manager/qemu/HardwareView.js | 4 ++ www/manager/qemu/MemoryEdit.js | 112 +++++++++++++++++++++++++++++++++++--- 2 files changed, 107 insertions(+), 9 deletions(-) diff --git a/www/manager/qemu/HardwareView.js b/www/manager/qemu/HardwareView.js index 99a7157..ba986c4 100644 --- a/www/manager/qemu/HardwareView.js +++ b/www/manager/qemu/HardwareView.js @@ -111,6 +111,9 @@ Ext.define('PVE.qemu.HardwareView', { }, balloon: { visible: false + }, + hotplug: { + visible: false } }; @@ -216,6 +219,7 @@ Ext.define('PVE.qemu.HardwareView', { var win = Ext.create(editor, { pveSelNode: me.pveSelNode, confid: rec.data.key, + hotplug: me.getObjectValue('hotplug'), url: '/api2/extjs/' + baseurl }); diff --git a/www/manager/qemu/MemoryEdit.js b/www/manager/qemu/MemoryEdit.js index 2ed6bb0..3bad580 100644 --- a/www/manager/qemu/MemoryEdit.js +++ b/www/manager/qemu/MemoryEdit.js @@ -29,9 +29,10 @@ Ext.define('PVE.qemu.MemoryInputPanel', { initComponent : function() { var me = this; - var labelWidth = 160; + var hotplug = me.hotplug; + var items = [ { xtype: 'radiofield', @@ -55,13 +56,94 @@ Ext.define('PVE.qemu.MemoryInputPanel', { xtype: 'numberfield', name: 'memory', minValue: 32, - maxValue: 512*1024, + maxValue: 4096*1024, value: '512', step: 32, fieldLabel: gettext('Memory') + ' (MB)', labelAlign: 'right', labelWidth: labelWidth, - allowBlank: false + allowBlank: false, + listeners: { + change: function(f, value, oldvalue) { + var me = this; + + if(!hotplug) { + return; + } + + //fill an array with dimms size + var dimmarray = new Array (255); + var dimm_size = 512; + var current_size = 1024; + var i; + var j; + var dimm_id = 0; + for (j = 0; j < 8; j++) { + for (i = 0; i < 32; i++) { + dimmarray[dimm_id] = current_size; + current_size += dimm_size; + dimm_id++; + } + dimm_size *= 2; + } + //find nearest value in array + var k = 0, closest, closestDiff, currentDiff + closest = dimmarray[0]; + for(k; k < dimmarray.length;k++) { + closestDiff = Math.abs(value - closest); + currentDiff = Math.abs(value - dimmarray[k]); + if(currentDiff < closestDiff) { + closest = dimmarray[k]; + } + closestDiff = null; + currentDiff = null; + } + if(value != closest){ + value = closest; + } + f.setValue(value); + + //dynamic step + if(value > oldvalue) { + if(value < 16384) { + me.step = 512; + } else if(value >= 16384 && value < 49152) { + me.step = 1024; + } else if (value >= 49152 && value < 114688) { + me.step = 2048; + } else if (value >= 114688 && value < 245760) { + me.step = 4096; + } else if (value >= 245760 && value < 507904) { + me.step = 8192; + } else if (value >= 507904 && value < 1032192) { + me.step = 16384; + } else if (value >= 1032192 && value < 2080768) { + me.step = 32768; + } else if (value >= 2080768 && value < 4177920) { + me.step = 65536; + } + } else if (value < oldvalue) { + if(value <= 16384) { + me.step = 512; + } else if(value > 16384 && value <= 49152) { + me.step = 1024; + } else if (value > 49152 && value <= 114688) { + me.step = 2048; + } else if (value > 114688 && value <= 245760) { + me.step = 4096; + } else if (value > 245760 && value <= 507904) { + me.step = 8192; + } else if (value > 507904 && value <= 1032192) { + me.step = 16384; + } else if (value > 1032192 && value <= 2080768) { + me.step = 32768; + } else if (value > 2080768 && value <= 4177920) { + me.step = 65536; + } + } + } + } + }, { xtype: 'radiofield', @@ -126,7 +208,7 @@ Ext.define('PVE.qemu.MemoryInputPanel', { allowBlank: true, emptyText: PVE.Utils.defaultText + ' (1000)', submitEmptyText: false - } + }, ]; if (me.insideWizard) { @@ -144,10 +226,23 @@ Ext.define('PVE.qemu.MemoryEdit', { 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: [ Ext.create('PVE.qemu.MemoryInputPanel') ], + items: ipanel, // uncomment the following to use the async configiguration API // backgroundDelay: 5, width: 400 @@ -164,11 +259,10 @@ Ext.define('PVE.qemu.MemoryEdit', { maxmemory: data.memory, balloon: data.balloon, shares: data.shares, - memoryType: data.balloon ? 'dynamic' : 'fixed' + memoryType: data.balloon ? 'dynamic' : 'fixed', }; - - me.setValues(values); + ipanel.setValues(values); } }); } -}); \ No newline at end of file +}); -- 1.7.10.4 _______________________________________________ pve-devel mailing list pve-devel@pve.proxmox.com http://pve.proxmox.com/cgi-bin/mailman/listinfo/pve-devel