]> git.proxmox.com Git - pve-manager.git/blame - www/manager6/qemu/OSTypeEdit.js
update shipped appliance info index
[pve-manager.git] / www / manager6 / qemu / OSTypeEdit.js
CommitLineData
d3ce36d9 1Ext.define('PVE.qemu.OSTypeInputPanel', {
ef4ef788 2 extend: 'Proxmox.panel.InputPanel',
42902182 3 alias: 'widget.pveQemuOSTypePanel',
c8802a60 4 onlineHelp: 'qm_os_settings',
6cc8cfb3
EK
5 insideWizard: false,
6
7 controller: {
8 xclass: 'Ext.app.ViewController',
9 control: {
e41bb8b9 10 'combobox[name=osbase]': {
f6710aac 11 change: 'onOSBaseChange',
e41bb8b9
TL
12 },
13 'combobox[name=ostype]': {
14 afterrender: 'onOSTypeChange',
f6710aac
TL
15 change: 'onOSTypeChange',
16 },
5b2e8bd4
DC
17 'checkbox[reference=enableSecondCD]': {
18 change: 'onSecondCDChange',
19 },
6cc8cfb3 20 },
e41bb8b9 21 onOSBaseChange: function(field, value) {
5b2e8bd4
DC
22 let me = this;
23 me.lookup('ostype').getStore().setData(PVE.Utils.kvm_ostypes[value]);
24 if (me.getView().insideWizard) {
25 let isWindows = value === 'Microsoft Windows';
26 let enableSecondCD = me.lookup('enableSecondCD');
27 enableSecondCD.setVisible(isWindows);
28 if (!isWindows) {
29 enableSecondCD.setValue(false);
30 }
31 }
e41bb8b9 32 },
0f421616
TL
33 onOSTypeChange: function(field) {
34 var me = this, ostype = field.getValue();
35 if (!me.getView().insideWizard) {
36 return;
37 }
38 var targetValues = PVE.qemu.OSDefaults.getDefaults(ostype);
39
40 me.setWidget('pveBusSelector', targetValues.busType);
41 me.setWidget('pveNetworkCardSelector', targetValues.networkCard);
4ab96328 42 me.setWidget('CPUModelSelector', targetValues.cputype);
471d03aa
DC
43 var scsihw = targetValues.scsihw || '__default__';
44 this.getViewModel().set('current.scsihw', scsihw);
e05c2d49 45 this.getViewModel().set('current.ostype', ostype);
0f421616 46 },
6cc8cfb3
EK
47 setWidget: function(widget, newValue) {
48 // changing a widget is safe only if ComponentQuery.query returns us
49 // a single value array
50 var widgets = Ext.ComponentQuery.query('pveQemuCreateWizard ' + widget);
51 if (widgets.length === 1) {
52 widgets[0].setValue(newValue);
53 } else {
eb7075d0 54 // ignore multiple disks, we only want to set the type if there is a single disk
6cc8cfb3 55 }
f6710aac 56 },
5b2e8bd4
DC
57 onSecondCDChange: function(widget, value, lastValue) {
58 let me = this;
59 let vm = me.getViewModel();
571bc9e2 60 let updateVMConfig = function() {
5b2e8bd4
DC
61 let widgets = Ext.ComponentQuery.query('pveMultiHDPanel');
62 if (widgets.length === 1) {
63 widgets[0].getController().updateVMConfig();
64 }
65 };
66 if (value) {
67 // only for windows
68 vm.set('current.ide0', "some");
69 vm.notify();
70 updateVMConfig();
71 me.setWidget('pveBusSelector', 'scsi');
72 me.setWidget('pveNetworkCardSelector', 'virtio');
73 } else {
74 vm.set('current.ide0', "");
75 vm.notify();
76 updateVMConfig();
77 me.setWidget('pveBusSelector', 'scsi');
78 let ostype = me.lookup('ostype').getValue();
79 var targetValues = PVE.qemu.OSDefaults.getDefaults(ostype);
80 me.setWidget('pveBusSelector', targetValues.busType);
81 }
82 },
83 },
84
85 setNodename: function(nodename) {
86 var me = this;
87 me.lookup('isoSelector').setNodename(nodename);
88 },
89
90 onGetValues: function(values) {
91 if (values.ide0) {
92 let drive = {
93 media: 'cdrom',
94 file: values.ide0,
95 };
96 values.ide0 = PVE.Parser.printQemuDrive(drive);
97 }
98 return values;
6cc8cfb3 99 },
d3ce36d9 100
8058410f 101 initComponent: function() {
d3ce36d9
DM
102 var me = this;
103
e41bb8b9 104 me.items = [
d3ce36d9 105 {
e41bb8b9
TL
106 xtype: 'displayfield',
107 value: gettext('Guest OS') + ':',
f6710aac 108 hidden: !me.insideWizard,
d3ce36d9
DM
109 },
110 {
e41bb8b9
TL
111 xtype: 'combobox',
112 submitValue: false,
113 name: 'osbase',
114 fieldLabel: gettext('Type'),
115 editable: false,
116 queryMode: 'local',
117 value: 'Linux',
f6710aac 118 store: Object.keys(PVE.Utils.kvm_ostypes),
d3ce36d9
DM
119 },
120 {
e41bb8b9 121 xtype: 'combobox',
d3ce36d9 122 name: 'ostype',
e41bb8b9
TL
123 reference: 'ostype',
124 fieldLabel: gettext('Version'),
125 value: 'l26',
8058410f 126 allowBlank: false,
e41bb8b9
TL
127 editable: false,
128 queryMode: 'local',
129 valueField: 'val',
130 displayField: 'desc',
131 store: {
132 fields: ['desc', 'val'],
133 data: PVE.Utils.kvm_ostypes.Linux,
134 listeners: {
8058410f 135 datachanged: function(store) {
e41bb8b9
TL
136 var ostype = me.lookup('ostype');
137 var old_val = ostype.getValue();
91a47a76 138 if (!me.insideWizard && old_val && store.find('val', old_val) !== -1) {
e41bb8b9
TL
139 ostype.setValue(old_val);
140 } else {
141 ostype.setValue(store.getAt(0));
142 }
f6710aac
TL
143 },
144 },
145 },
146 },
d3ce36d9 147 ];
d3ce36d9 148
5b2e8bd4
DC
149 if (me.insideWizard) {
150 me.items.push(
151 {
152 xtype: 'proxmoxcheckbox',
153 reference: 'enableSecondCD',
154 isFormField: false,
155 hidden: true,
156 checked: false,
76543c73 157 boxLabel: gettext('Add additional drive for VirtIO drivers'),
5b2e8bd4
DC
158 listeners: {
159 change: function(cb, value) {
160 me.lookup('isoSelector').setDisabled(!value);
161 me.lookup('isoSelector').setHidden(!value);
162 },
163 },
164 },
165 {
166 xtype: 'pveIsoSelector',
167 reference: 'isoSelector',
168 name: 'ide0',
169 nodename: me.nodename,
170 insideWizard: true,
171 hidden: true,
172 disabled: true,
173 },
174 );
175 }
176
d3ce36d9 177 me.callParent();
f6710aac 178 },
d3ce36d9
DM
179});
180
181Ext.define('PVE.qemu.OSTypeEdit', {
9fccc702 182 extend: 'Proxmox.window.Edit',
d3ce36d9 183
d24064e4
TL
184 subject: 'OS Type',
185
186 items: [{ xtype: 'pveQemuOSTypePanel' }],
187
8058410f 188 initComponent: function() {
d3ce36d9 189 var me = this;
e41bb8b9 190
d3ce36d9
DM
191 me.callParent();
192
193 me.load({
194 success: function(response, options) {
195 var value = response.result.data.ostype || 'other';
e41bb8b9
TL
196 var osinfo = PVE.Utils.get_kvm_osinfo(value);
197 me.setValues({ ostype: value, osbase: osinfo.base });
f6710aac 198 },
d3ce36d9 199 });
f6710aac 200 },
d3ce36d9 201});