[pve-devel] [PATCH manager v2 10/11] OSType edit: switch to combobox

Thomas Lamprecht t.lamprecht at proxmox.com
Tue Aug 29 12:08:33 CEST 2017


Move from the radiogroup to two comboboxes, where the base OS and
then a specific Version can be chosen.

Avoids multiple occurrences of strings like "Microsoft Windows" and
saves a lot of space - which will be used to merge this panel with
the ISO selector panel in the create wizard.

Signed-off-by: Thomas Lamprecht <t.lamprecht at proxmox.com>
---

changes v1 -> v2:
 * move store change logic to store listener.
 * set l26 as initial default ostype

 www/manager6/qemu/OSTypeEdit.js | 131 ++++++++++++++++------------------------
 1 file changed, 51 insertions(+), 80 deletions(-)

diff --git a/www/manager6/qemu/OSTypeEdit.js b/www/manager6/qemu/OSTypeEdit.js
index 14a1245b..d7c27e99 100644
--- a/www/manager6/qemu/OSTypeEdit.js
+++ b/www/manager6/qemu/OSTypeEdit.js
@@ -7,10 +7,17 @@ Ext.define('PVE.qemu.OSTypeInputPanel', {
     controller: {
 	xclass: 'Ext.app.ViewController',
 	control: {
-	    'radiogroup': {
+	    'combobox[name=osbase]': {
+		change: 'onOSBaseChange'
+	    },
+	    'combobox[name=ostype]': {
+		afterrender: 'onOSTypeChange',
 		change: 'onOSTypeChange'
 	    }
 	},
+	onOSBaseChange: function(field, value) {
+	    this.lookup('ostype').getStore().setData(PVE.Utils.kvm_ostypes[value]);
+	},
 	onOSTypeChange: function(field) {
 	    var me = this, ostype = field.getValue();
 	    if (!me.getView().insideWizard) {
@@ -45,92 +52,55 @@ Ext.define('PVE.qemu.OSTypeInputPanel', {
     initComponent : function() {
 	var me = this;
 
-	me.column1 = [
-	    {
-		xtype: 'component', 
-		html: 'Microsoft Windows', 
-		cls:'x-form-check-group-label'
-	    },
-	    {
-		xtype: 'radiofield',
-		name: 'ostype',
-		inputValue: 'win10'
-	    },
-	    {
-		xtype: 'radiofield',
-		name: 'ostype',
-		inputValue: 'win8'
-	    },
-	    {
-		xtype: 'radiofield',
-		name: 'ostype',
-		inputValue: 'win7'
-	    },
-	    {
-		xtype: 'radiofield',
-		name: 'ostype',
-		inputValue: 'w2k8'
-	    },
-	    {
-		xtype: 'radiofield',
-		name: 'ostype',
-		inputValue: 'wxp'
-	    },
-	    {
-		xtype: 'radiofield',
-		name: 'ostype',
-		inputValue: 'w2k'
-	    }
-	];
-
-	me.column2 = [
+	/*jslint confusion: true */
+	me.items = [
 	    {
-		xtype: 'component', 
-		html: 'Linux/' + gettext('Other OS types'), 
-		cls:'x-form-check-group-label'
+		xtype: 'displayfield',
+		value: gettext('Guest OS') + ':',
+		hidden: !me.insideWizard
 	    },
 	    {
-		xtype: 'radiofield',
-		name: 'ostype',
-		inputValue: 'l26'
+		xtype: 'combobox',
+		submitValue: false,
+		name: 'osbase',
+		fieldLabel: gettext('Type'),
+		editable: false,
+		queryMode: 'local',
+		value: 'Linux',
+		store: Object.keys(PVE.Utils.kvm_ostypes)
 	    },
 	    {
-		xtype: 'radiofield',
+		xtype: 'combobox',
 		name: 'ostype',
-		inputValue: 'l24'
-	    },
-	    {
-		xtype: 'radiofield',
-		name: 'ostype',
-		inputValue: 'solaris'
-	    },
-	    {
-		xtype: 'radiofield',
-		name: 'ostype',
-		inputValue: 'other'
+		reference: 'ostype',
+		fieldLabel: gettext('Version'),
+		value: 'l26',
+		allowBlank : false,
+		editable: false,
+		queryMode: 'local',
+		valueField: 'val',
+		displayField: 'desc',
+		store: {
+		    fields: ['desc', 'val'],
+		    data: PVE.Utils.kvm_ostypes.Linux,
+		    listeners: {
+			datachanged: function (store) {
+			    var ostype = me.lookup('ostype');
+			    var old_val = ostype.getValue();
+			    if (!me.insideWizard && old_val && store.find('val', old_val) != -1) {
+				ostype.setValue(old_val);
+			    } else {
+				ostype.setValue(store.getAt(0));
+			    }
+			}
+		    }
+		}
 	    }
 	];
-
-	Ext.Array.each(me.column1, function(def) {
-	    if (def.inputValue) {
-		def.boxLabel = PVE.Utils.render_kvm_ostype(def.inputValue);
-	    }
-	});
-	Ext.Array.each(me.column2, function(def) {
-	    if (def.inputValue) {
-		def.boxLabel = PVE.Utils.render_kvm_ostype(def.inputValue);
-	    }
-	});
-
-	Ext.apply(me, {
-	    useFieldContainer: {
-		xtype: 'radiogroup',
-		allowBlank: false
-	    }
-	});
+	/*jslint confusion: false */
 
 	me.callParent();
-    }   
+    }
 });
 
 Ext.define('PVE.qemu.OSTypeEdit', {
@@ -138,10 +108,10 @@ Ext.define('PVE.qemu.OSTypeEdit', {
 
     initComponent : function() {
 	var me = this;
-	
+
 	Ext.apply(me, {
 	    subject: 'OS Type',
-	    items: Ext.create('PVE.qemu.OSTypeInputPanel')
+	    items: [{ xtype: 'pveQemuOSTypePanel' }]
 	});
 
 	me.callParent();
@@ -149,7 +119,8 @@ Ext.define('PVE.qemu.OSTypeEdit', {
 	me.load({
 	    success: function(response, options) {
 		var value = response.result.data.ostype || 'other';
-		me.setValues({ ostype: value});
+		var osinfo = PVE.Utils.get_kvm_osinfo(value);
+		me.setValues({ ostype: value, osbase: osinfo.base });
 	    }
 	});
     }
-- 
2.11.0




More information about the pve-devel mailing list