]>
Commit | Line | Data |
---|---|---|
d3ce36d9 | 1 | Ext.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(); | |
60 | let updateVMConfig = function () { | |
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, | |
157 | boxLabel: gettext('Add Second CD/DVD Image file (iso)'), | |
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 | ||
181 | Ext.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 | }); |