]> git.proxmox.com Git - pve-manager.git/blobdiff - www/manager6/qemu/OSTypeEdit.js
api: add proxmox-firewall to versions pkg list
[pve-manager.git] / www / manager6 / qemu / OSTypeEdit.js
index d43d2aad09b71e710f0db0b84436550c63baa06a..d42cb2836fb8eb83172baa81f1997adc5427a7c3 100644 (file)
@@ -8,15 +8,27 @@ Ext.define('PVE.qemu.OSTypeInputPanel', {
        xclass: 'Ext.app.ViewController',
        control: {
            'combobox[name=osbase]': {
-               change: 'onOSBaseChange'
+               change: 'onOSBaseChange',
            },
            'combobox[name=ostype]': {
                afterrender: 'onOSTypeChange',
-               change: 'onOSTypeChange'
-           }
+               change: 'onOSTypeChange',
+           },
+           'checkbox[reference=enableSecondCD]': {
+               change: 'onSecondCDChange',
+           },
        },
        onOSBaseChange: function(field, value) {
-           this.lookup('ostype').getStore().setData(PVE.Utils.kvm_ostypes[value]);
+           let me = this;
+           me.lookup('ostype').getStore().setData(PVE.Utils.kvm_ostypes[value]);
+           if (me.getView().insideWizard) {
+               let isWindows = value === 'Microsoft Windows';
+               let enableSecondCD = me.lookup('enableSecondCD');
+               enableSecondCD.setVisible(isWindows);
+               if (!isWindows) {
+                   enableSecondCD.setValue(false);
+               }
+           }
        },
        onOSTypeChange: function(field) {
            var me = this, ostype = field.getValue();
@@ -27,8 +39,10 @@ Ext.define('PVE.qemu.OSTypeInputPanel', {
 
            me.setWidget('pveBusSelector', targetValues.busType);
            me.setWidget('pveNetworkCardSelector', targetValues.networkCard);
+           me.setWidget('CPUModelSelector', targetValues.cputype);
            var scsihw = targetValues.scsihw || '__default__';
            this.getViewModel().set('current.scsihw', scsihw);
+           this.getViewModel().set('current.ostype', ostype);
        },
        setWidget: function(widget, newValue) {
            // changing a widget is safe only if ComponentQuery.query returns us
@@ -37,20 +51,61 @@ Ext.define('PVE.qemu.OSTypeInputPanel', {
            if (widgets.length === 1) {
                widgets[0].setValue(newValue);
            } else {
-               throw 'non unique widget :' + widget + ' in Wizard';
+               // ignore multiple disks, we only want to set the type if there is a single disk
            }
+       },
+       onSecondCDChange: function(widget, value, lastValue) {
+           let me = this;
+           let vm = me.getViewModel();
+           let updateVMConfig = function() {
+               let widgets = Ext.ComponentQuery.query('pveMultiHDPanel');
+               if (widgets.length === 1) {
+                   widgets[0].getController().updateVMConfig();
+               }
+           };
+           if (value) {
+               // only for windows
+               vm.set('current.ide0', "some");
+               vm.notify();
+               updateVMConfig();
+               me.setWidget('pveBusSelector', 'scsi');
+               me.setWidget('pveNetworkCardSelector', 'virtio');
+           } else {
+               vm.set('current.ide0', "");
+               vm.notify();
+               updateVMConfig();
+               me.setWidget('pveBusSelector', 'scsi');
+               let ostype = me.lookup('ostype').getValue();
+               var targetValues = PVE.qemu.OSDefaults.getDefaults(ostype);
+               me.setWidget('pveBusSelector', targetValues.busType);
+           }
+       },
+    },
+
+    setNodename: function(nodename) {
+       var me = this;
+       me.lookup('isoSelector').setNodename(nodename);
+    },
+
+    onGetValues: function(values) {
+       if (values.ide0) {
+           let drive = {
+               media: 'cdrom',
+               file: values.ide0,
+           };
+           values.ide0 = PVE.Parser.printQemuDrive(drive);
        }
+       return values;
     },
 
-    initComponent : function() {
+    initComponent: function() {
        var me = this;
 
-       /*jslint confusion: true */
        me.items = [
            {
                xtype: 'displayfield',
                value: gettext('Guest OS') + ':',
-               hidden: !me.insideWizard
+               hidden: !me.insideWizard,
            },
            {
                xtype: 'combobox',
@@ -60,7 +115,7 @@ Ext.define('PVE.qemu.OSTypeInputPanel', {
                editable: false,
                queryMode: 'local',
                value: 'Linux',
-               store: Object.keys(PVE.Utils.kvm_ostypes)
+               store: Object.keys(PVE.Utils.kvm_ostypes),
            },
            {
                xtype: 'combobox',
@@ -68,7 +123,7 @@ Ext.define('PVE.qemu.OSTypeInputPanel', {
                reference: 'ostype',
                fieldLabel: gettext('Version'),
                value: 'l26',
-               allowBlank : false,
+               allowBlank: false,
                editable: false,
                queryMode: 'local',
                valueField: 'val',
@@ -77,23 +132,50 @@ Ext.define('PVE.qemu.OSTypeInputPanel', {
                    fields: ['desc', 'val'],
                    data: PVE.Utils.kvm_ostypes.Linux,
                    listeners: {
-                       datachanged: function (store) {
+                       datachanged: function(store) {
                            var ostype = me.lookup('ostype');
                            var old_val = ostype.getValue();
-                           if (!me.insideWizard && old_val && store.find('val', old_val) != -1) {
+                           if (!me.insideWizard && old_val && store.find('val', old_val) !== -1) {
                                ostype.setValue(old_val);
                            } else {
                                ostype.setValue(store.getAt(0));
                            }
-                       }
-                   }
-               }
-           }
+                       },
+                   },
+               },
+           },
        ];
-       /*jslint confusion: false */
+
+       if (me.insideWizard) {
+           me.items.push(
+               {
+                   xtype: 'proxmoxcheckbox',
+                   reference: 'enableSecondCD',
+                   isFormField: false,
+                   hidden: true,
+                   checked: false,
+                   boxLabel: gettext('Add additional drive for VirtIO drivers'),
+                   listeners: {
+                       change: function(cb, value) {
+                           me.lookup('isoSelector').setDisabled(!value);
+                           me.lookup('isoSelector').setHidden(!value);
+                       },
+                   },
+               },
+               {
+                   xtype: 'pveIsoSelector',
+                   reference: 'isoSelector',
+                   name: 'ide0',
+                   nodename: me.nodename,
+                   insideWizard: true,
+                   hidden: true,
+                   disabled: true,
+               },
+           );
+       }
 
        me.callParent();
-    }
+    },
 });
 
 Ext.define('PVE.qemu.OSTypeEdit', {
@@ -103,7 +185,7 @@ Ext.define('PVE.qemu.OSTypeEdit', {
 
     items: [{ xtype: 'pveQemuOSTypePanel' }],
 
-    initComponent : function() {
+    initComponent: function() {
        var me = this;
 
        me.callParent();
@@ -113,7 +195,7 @@ Ext.define('PVE.qemu.OSTypeEdit', {
                var value = response.result.data.ostype || 'other';
                var osinfo = PVE.Utils.get_kvm_osinfo(value);
                me.setValues({ ostype: value, osbase: osinfo.base });
-           }
+           },
        });
-    }
+    },
 });