]> git.proxmox.com Git - pve-manager.git/blob - www/manager6/qemu/OSTypeEdit.js
ui: vm: guest-agent network view: make text in grid selectable
[pve-manager.git] / www / manager6 / qemu / OSTypeEdit.js
1 Ext.define('PVE.qemu.OSTypeInputPanel', {
2 extend: 'Proxmox.panel.InputPanel',
3 alias: 'widget.pveQemuOSTypePanel',
4 onlineHelp: 'qm_os_settings',
5 insideWizard: false,
6
7 controller: {
8 xclass: 'Ext.app.ViewController',
9 control: {
10 'combobox[name=osbase]': {
11 change: 'onOSBaseChange',
12 },
13 'combobox[name=ostype]': {
14 afterrender: 'onOSTypeChange',
15 change: 'onOSTypeChange',
16 },
17 'checkbox[reference=enableSecondCD]': {
18 change: 'onSecondCDChange',
19 },
20 },
21 onOSBaseChange: function(field, value) {
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 }
32 },
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);
42 me.setWidget('CPUModelSelector', targetValues.cputype);
43 var scsihw = targetValues.scsihw || '__default__';
44 this.getViewModel().set('current.scsihw', scsihw);
45 this.getViewModel().set('current.ostype', ostype);
46 },
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 {
54 // ignore multiple disks, we only want to set the type if there is a single disk
55 }
56 },
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;
99 },
100
101 initComponent: function() {
102 var me = this;
103
104 me.items = [
105 {
106 xtype: 'displayfield',
107 value: gettext('Guest OS') + ':',
108 hidden: !me.insideWizard,
109 },
110 {
111 xtype: 'combobox',
112 submitValue: false,
113 name: 'osbase',
114 fieldLabel: gettext('Type'),
115 editable: false,
116 queryMode: 'local',
117 value: 'Linux',
118 store: Object.keys(PVE.Utils.kvm_ostypes),
119 },
120 {
121 xtype: 'combobox',
122 name: 'ostype',
123 reference: 'ostype',
124 fieldLabel: gettext('Version'),
125 value: 'l26',
126 allowBlank: false,
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: {
135 datachanged: function(store) {
136 var ostype = me.lookup('ostype');
137 var old_val = ostype.getValue();
138 if (!me.insideWizard && old_val && store.find('val', old_val) !== -1) {
139 ostype.setValue(old_val);
140 } else {
141 ostype.setValue(store.getAt(0));
142 }
143 },
144 },
145 },
146 },
147 ];
148
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 additional drive for VirtIO drivers'),
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
177 me.callParent();
178 },
179 });
180
181 Ext.define('PVE.qemu.OSTypeEdit', {
182 extend: 'Proxmox.window.Edit',
183
184 subject: 'OS Type',
185
186 items: [{ xtype: 'pveQemuOSTypePanel' }],
187
188 initComponent: function() {
189 var me = this;
190
191 me.callParent();
192
193 me.load({
194 success: function(response, options) {
195 var value = response.result.data.ostype || 'other';
196 var osinfo = PVE.Utils.get_kvm_osinfo(value);
197 me.setValues({ ostype: value, osbase: osinfo.base });
198 },
199 });
200 },
201 });