]> git.proxmox.com Git - pve-manager.git/commitdiff
GUI: implement hotplug feature selector
authorDietmar Maurer <dietmar@proxmox.com>
Tue, 27 Jan 2015 11:19:54 +0000 (12:19 +0100)
committerDietmar Maurer <dietmar@proxmox.com>
Tue, 27 Jan 2015 11:19:54 +0000 (12:19 +0100)
www/manager/Makefile
www/manager/Utils.js
www/manager/form/HotplugFeatureSelector.js [new file with mode: 0644]
www/manager/qemu/Options.js

index ba6ca737e5dd5c60acc366580be4e6bbf7a9b742..6ff03cbecb7600c15d19ebdfa85676dd0bd3b9c7 100644 (file)
@@ -55,6 +55,7 @@ JSSRC=                                                        \
        form/CacheTypeSelector.js                       \
        form/SnapshotSelector.js                        \
        form/ContentTypeSelector.js                     \
+       form/HotplugFeatureSelector.js                  \
        form/iScsiProviderSelector.js                   \
        form/DayOfWeekSelector.js                       \
        form/BackupModeSelector.js                      \
index 8f460095bf4b48a2ec5eaf66d24018aaaa407ba0..761c4765b01e2164571e95640751d012383c044e 100644 (file)
@@ -93,6 +93,32 @@ Ext.define('PVE.Utils', { statics: {
        return value;
     },
 
+    render_hotplug_features: function (value) {
+       var fa = [];
+
+       if (!value || (value === '0')) {
+           return gettext('disabled');
+       }
+
+       Ext.each(value.split(','), function(el) {
+           if (el === 'disk') {
+               fa.push(gettext('Disk'));
+           } else if (el === 'network') {
+               fa.push(gettext('Network'));
+           } else if (el === 'usb') {
+               fa.push(gettext('USB'));
+           } else if (el === 'memory') {
+               fa.push(gettext('Memory'));
+           } else if (el === 'cpu') {
+               fa.push(gettext('CPU'));
+           } else {
+               fa.push(el);
+           }
+       });
+
+       return fa.join(', ');
+    },
+
     network_iface_types: {
        eth: gettext("Network Device"),
        bridge: 'Linux Bridge',
diff --git a/www/manager/form/HotplugFeatureSelector.js b/www/manager/form/HotplugFeatureSelector.js
new file mode 100644 (file)
index 0000000..e0dac4b
--- /dev/null
@@ -0,0 +1,57 @@
+Ext.define('PVE.form.HotplugFeatureSelector', {
+    extend: 'PVE.form.KVComboBox',
+    alias: ['widget.pveHotplugFeatureSelector'],
+
+    multiSelect: true,
+    allowBlank: true,
+    deleteEmpty: false,
+
+    setValue: function(value, doSelect) {
+       var me = this;
+
+       if (me.multiSelect && Ext.isString(value)) {
+           if (value === '0') {
+               value = [];
+           } else if (value === '1') {
+               value = ['disk', 'network', 'usb'];
+           } else {
+               value = value.split(',');
+           }
+       }
+
+       me.callParent([value, doSelect]);
+    },
+
+    getSubmitData: function() {
+        var me = this,
+            data = null,
+            val;
+        if (!me.disabled && me.submitValue) {
+            val = me.getSubmitValue();
+           if (Ext.isArray(val)) {
+               val = val.join(',') || '0';
+           }
+            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;
+
+       me.data = [['disk', gettext('Disk')], 
+                  ['network',  gettext('Network')], 
+                  ['usb',  gettext('USB')],
+                  ['memory',  gettext('Memory')],
+                  ['cpu',  gettext('CPU')]];
+       
+       me.callParent();
+    }
+});
index 98353081a08449597fe34ab79426896b444a9b21..ecab490f5c47acdaf947263675ea7f4ef4ed0c84 100644 (file)
@@ -123,18 +123,18 @@ Ext.define('PVE.qemu.Options', {
            },
            hotplug: {
                header: gettext('Hotplug'),
-               defaultValue: true,
-               renderer: PVE.Utils.format_boolean,
+               defaultValue: 'disk,network,usb',
+               renderer:  PVE.Utils.render_hotplug_features,
                editor: caps.vms['VM.Config.HWType'] ? {
                    xtype: 'pveWindowEdit',
                    subject: gettext('Hotplug'),
                    items: {
-                       xtype: 'pvecheckbox',
+                       xtype: 'pveHotplugFeatureSelector',
                        name: 'hotplug',
-                       uncheckedValue: 0,
-                       defaultValue: 1,
-                       deleteDefaultValue: true,
-                       fieldLabel: gettext('Hotplug')
+                       value: '',
+                       multiSelect: true,
+                       fieldLabel: gettext('Hotplug'),
+                       allowBlank: true
                    }
                } : undefined
            },