[pve-devel] r6204 - in pve-manager/pve2: . www/manager www/manager/data www/manager/form www/manager/qemu

svn-commits at proxmox.com svn-commits at proxmox.com
Wed Jun 29 16:07:10 CEST 2011


Author: dietmar
Date: 2011-06-29 16:07:10 +0200 (Wed, 29 Jun 2011)
New Revision: 6204

Added:
   pve-manager/pve2/www/manager/form/CPUModelSelector.js
Modified:
   pve-manager/pve2/ChangeLog
   pve-manager/pve2/www/manager/Makefile.am
   pve-manager/pve2/www/manager/PVEUtils.js
   pve-manager/pve2/www/manager/data/DiffStore.js
   pve-manager/pve2/www/manager/form/BondModeSelector.js
   pve-manager/pve2/www/manager/qemu/HardwareView.js
Log:
impl. PVE.qemu.ProcessorEdit


Modified: pve-manager/pve2/ChangeLog
===================================================================
--- pve-manager/pve2/ChangeLog	2011-06-29 10:58:01 UTC (rev 6203)
+++ pve-manager/pve2/ChangeLog	2011-06-29 14:07:10 UTC (rev 6204)
@@ -1,5 +1,9 @@
 2011-06-29  Proxmox Support Team  <support at proxmox.com>
 
+	* www/manager/qemu/HardwareView.js: impl. PVE.qemu.ProcessorEdit
+
+	* www/manager/form/CPUModelSelector.js: impl.
+
 	* www/manager/form/RealmComboBox.js: use 'pam' as default realm
 
 	* bin/init.d/pvenetcommit: moved functionality from pvesetup

Modified: pve-manager/pve2/www/manager/Makefile.am
===================================================================
--- pve-manager/pve2/www/manager/Makefile.am	2011-06-29 10:58:01 UTC (rev 6203)
+++ pve-manager/pve2/www/manager/Makefile.am	2011-06-29 14:07:10 UTC (rev 6204)
@@ -25,7 +25,8 @@
 	form/NodeSelector.js				\
 	form/FileSelector.js				\
 	form/StorageSelector.js				\
-	dc/Tasks.js				\
+	form/CPUModelSelector.js			\
+	dc/Tasks.js					\
 	dc/Log.js					\
 	panel/StatusPanel.js				\
 	panel/RRDView.js				\

Modified: pve-manager/pve2/www/manager/PVEUtils.js
===================================================================
--- pve-manager/pve2/www/manager/PVEUtils.js	2011-06-29 10:58:01 UTC (rev 6203)
+++ pve-manager/pve2/www/manager/PVEUtils.js	2011-06-29 14:07:10 UTC (rev 6204)
@@ -44,6 +44,11 @@
    
 });
 
+// we dont want that a display field set the form dirty flag! 
+Ext.override(Ext.form.field.Display, {
+    isDirty: function() { return false; }
+});
+
 Ext.define('PVE.Utils', {
     singleton: true,
 

Modified: pve-manager/pve2/www/manager/data/DiffStore.js
===================================================================
--- pve-manager/pve2/www/manager/data/DiffStore.js	2011-06-29 10:58:01 UTC (rev 6203)
+++ pve-manager/pve2/www/manager/data/DiffStore.js	2011-06-29 14:07:10 UTC (rev 6204)
@@ -51,7 +51,7 @@
 	    me.suspendEvents();
 
 	    // remove vanished items
-	    me.each(function(olditem) {
+	    (me.snapshot || me.data).each(function(olditem) {
 		var item = rstore.getById(olditem.getId());
 		if (!item)
 		    me.remove(olditem);

Modified: pve-manager/pve2/www/manager/form/BondModeSelector.js
===================================================================
--- pve-manager/pve2/www/manager/form/BondModeSelector.js	2011-06-29 10:58:01 UTC (rev 6203)
+++ pve-manager/pve2/www/manager/form/BondModeSelector.js	2011-06-29 14:07:10 UTC (rev 6204)
@@ -14,7 +14,7 @@
 		['broadcast', ''], 
 		['802.3ad', ''], 
 		['balance-tlb', ''], 
-		['balance-alb', ''], 
+		['balance-alb', '']
 	    ]
         });
 

Added: pve-manager/pve2/www/manager/form/CPUModelSelector.js
===================================================================
--- pve-manager/pve2/www/manager/form/CPUModelSelector.js	                        (rev 0)
+++ pve-manager/pve2/www/manager/form/CPUModelSelector.js	2011-06-29 14:07:10 UTC (rev 6204)
@@ -0,0 +1,57 @@
+Ext.define('PVE.form.CPUModelSelector', {
+    extend: 'Ext.form.field.ComboBox',
+    alias: ['widget.CPUModelSelector'],
+  
+    deleteEmpty: true,
+    
+    getSubmitData: function() {
+        var me = this,
+            data = null,
+            val;
+        if (!me.disabled && me.submitValue && !me.isFileUpload()) {
+            val = me.getSubmitValue();
+            if (val !== null && val != '') {
+                data = {};
+                data[me.getName()] = val;
+            } else if (me.deleteEmpty) {
+		data = {};
+                data['delete'] = me.getName();
+	    }
+        }
+        return data;
+    },
+
+    initComponent: function() {
+	var me = this;
+
+	var store = Ext.create('Ext.data.ArrayStore', {
+	    model: 'KeyValue',
+            data : [ 
+		['', 'Default (qemu64)'],
+		['486', '486'],
+		['athlon', 'athlon'],
+		['core2duo', 'core2duo'],
+		['coreduo', 'coreduo'],
+		['kvm32', 'kvm32'],
+		['kvm64', 'kvm64'],
+		['pentium', 'pentium'],
+		['pentium2', 'pentium2'],
+		['pentium3', 'pentium3'],
+		['phenom', 'phenom'],
+		['qemu32', 'qemu32'],
+		['qemu64', 'qemu64'],
+		['host', 'host']
+	    ]
+        });
+
+	Ext.apply(me, {
+	    store: store,
+	    queryMode: 'local',
+	    editable: false,
+	    displayField: 'value',
+	    valueField: 'key'
+	});
+
+	me.callParent();
+    }
+});

Modified: pve-manager/pve2/www/manager/qemu/HardwareView.js
===================================================================
--- pve-manager/pve2/www/manager/qemu/HardwareView.js	2011-06-29 10:58:01 UTC (rev 6203)
+++ pve-manager/pve2/www/manager/qemu/HardwareView.js	2011-06-29 14:07:10 UTC (rev 6204)
@@ -1,3 +1,145 @@
+Ext.define('PVE.qemu.ProcessorEdit', {
+    extend: 'Ext.window.Window',
+
+    initComponent : function() {
+	var me = this;
+
+	var nodename = me.pveSelNode.data.node;
+	if (!nodename) 
+	    throw "no node name specified";
+
+	if (!me.store) 
+	    throw "no store specified";
+	
+	var data = {};
+	var rec = me.store.getById('sockets');
+	data.sockets = rec && rec.data.value ? rec.data.value : 1;
+	rec = me.store.getById('cores');
+	data.cores = rec && rec.data.value ? rec.data.value : 1;
+	rec = me.store.getById('cpu');
+ 	data.cpu = rec && rec.data.value ? rec.data.value : '';
+
+	var formpanel = Ext.create('Ext.form.Panel', {
+	    url: me.url,
+	    method: 'PUT',
+	    trackResetOnLoad: true,
+	    bodyPadding: 10,
+	    border: false,	    
+	    fieldDefaults: {
+		labelWidth: 100,
+		anchor: '100%'
+            },
+	    layout: 'column',
+	    defaultType: 'container',
+	    items: [
+		{
+		    columnWidth: .5,
+		    items: [
+			{
+			    xtype: 'numberfield',
+			    name: 'sockets',
+			    minValue: 1,
+			    maxValue: 4,
+			    value: 1,
+			    fieldLabel: 'Sockets',
+			    allowBlank: false,
+			    listeners: {
+				change: function(f, value) {
+				    var sockets = me.down('field[name=sockets]').getValue();
+				    var cores = me.down('field[name=cores]').getValue();
+				    me.down('field[name=totalcores]').setValue(sockets*cores);
+				}
+			    }
+			},
+			{
+			    xtype: 'numberfield',
+			    name: 'cores',
+			    minValue: 1,
+			    maxValue: 32,
+			    value: 1,
+			    fieldLabel: 'Cores',
+			    allowBlank: false,
+			    listeners: {
+				change: function(f, value) {
+				    var sockets = me.down('field[name=sockets]').getValue();
+				    var cores = me.down('field[name=cores]').getValue();
+				    me.down('field[name=totalcores]').setValue(sockets*cores);
+				}
+			    }
+			},
+			{
+			    xtype: 'displayfield',
+			    fieldLabel: 'Total cores',
+			    name: 'totalcores',
+			    value: 1
+			}
+		    ]
+		},
+		{
+		    columnWidth: .5,
+		    items: [
+			{
+			    xtype: 'CPUModelSelector',
+			    name: 'cpu',
+			    fieldLabel: 'CPU type',
+			}
+		    ]
+		}
+	    ]
+	});
+
+	var form = formpanel.getForm();
+
+	var submitBtn = Ext.create('Ext.Button', {
+	    text: 'OK',
+	    disabled: true,
+	    handler: function() {
+		formpanel.submit({
+		    success: function() { 
+			me.close();
+		    },
+		    failure: function(form, action) {
+			Ext.Msg.alert('Error', PVE.Utils.extractFormActionError(action));
+		    }
+		});
+	    }
+	});
+
+	var resetBtn = Ext.create('Ext.Button', {
+	    text: 'Reset',
+	    disabled: true,
+	    handler: function(){
+		form.reset();
+	    }
+	});
+
+	var set_button_status = function() {
+	    var valid = form.isValid();
+	    var dirty = form.isDirty();
+	    submitBtn.setDisabled(!(valid && dirty));
+	    resetBtn.setDisabled(!dirty);
+	};
+
+	form.on('dirtychange', set_button_status);
+	form.on('validitychange', set_button_status);
+
+	Ext.applyIf(me, {
+	    title: "Edit processor settings",
+	    modal: true,
+            width: 600,
+	    height: 200,
+	    layout: 'fit',
+	    border: false,
+	    items: formpanel,
+	    buttons: [ submitBtn, resetBtn ]
+	});
+
+	me.callParent();
+
+	form.setValues(data);
+    }
+});
+
 Ext.define('PVE.qemu.HardwareView', {
     extend: 'PVE.grid.ObjectGrid',
     alias: ['widget.PVE.qemu.HardwareView'],
@@ -43,15 +185,20 @@
 	    sockets: {
 		header: 'Processors',
 		never_delete: true,
+		editor: 'PVE.qemu.ProcessorEdit',
 		tdCls: 'pve-itype-icon-processor',
 		defaultValue: 1,
 		renderer: function(value, metaData, record, rowIndex, colIndex, store) {
-		    var rec = (store.snapshot || store.data).get('cores');
-		    if (!rec || (rec.data.value <= 1))
+		    var model = me.getObjectValue('cpu');
+		    var cores = me.getObjectValue('cores');
+		    if (!cores || (cores <= 1))
 			return value;
 
-		    var cores = rec.data.value;
-		    return (value*cores) + ' (' + value + ' x ' + cores + ' cores)';
+		    var res = (value*cores) + ' (' + value + ' x ' + cores + ' cores)';
+		    if (model)
+			res += ' [' + model + ']';
+
+		    return res;
 		}
 	    },
 	    keyboard: {
@@ -68,8 +215,10 @@
 		defaultValue: 'default'		
 	    },
 	    cores: {
-		header: 'Cores',
 		visible: false
+	    },
+	    cpu: {
+		visible: false
 	    }
 	};
 
@@ -109,10 +258,25 @@
 	}
 
 	var run_editor = function() {
-	    
-	    console.log("TEST EDIT");
+	    var sm = me.getSelectionModel();
+	    var rec = sm.getSelection()[0];
+	    if (!rec)
+		return;
 
-	    me.rstore.load();
+	    var rowdef = rows[rec.data.key];
+	    if (!rowdef.editor)
+		return;
+
+	    var win = Ext.create(rowdef.editor, {
+		pveSelNode: me.pveSelNode,
+		url: me.url,
+		store: me.rstore
+	    });
+
+	    win.show();
+	    win.on('destroy', function() {
+		me.rstore.load();
+	    });
 	};
 
 	var edit_btn = new Ext.Button({
@@ -139,15 +303,15 @@
 		return;
 	    }
 
-	    edit_btn.enable();
-
 	    var rowdef = rows[rec.data.key];
 
+	    edit_btn.setDisabled(!rowdef.editor);
+
 	    remove_btn.setDisabled(rowdef.never_delete === true);
 	}
 
 	Ext.applyIf(me, {
-	    url: "/api2/json/nodes/" + nodename + "/qemu/" + vmid + "/config",
+	    url: "/api2/extjs/nodes/" + nodename + "/qemu/" + vmid + "/config",
 	    cwidth1: 150,
 	    tbar: [ 
 		{



More information about the pve-devel mailing list