]>
Commit | Line | Data |
---|---|---|
9dbddec7 SR |
1 | Ext.define('PVE.qemu.MachineInputPanel', { |
2 | extend: 'Proxmox.panel.InputPanel', | |
3 | xtype: 'pveMachineInputPanel', | |
592d9172 | 4 | onlineHelp: 'qm_machine_type', |
9dbddec7 | 5 | |
10df2d5a MF |
6 | viewModel: { |
7 | data: { | |
8 | type: '__default__', | |
9 | }, | |
10 | formulas: { | |
11 | q35: get => get('type') === 'q35', | |
12 | }, | |
13 | }, | |
14 | ||
a51b2c33 SR |
15 | controller: { |
16 | xclass: 'Ext.app.ViewController', | |
17 | control: { | |
18 | 'combobox[name=machine]': { | |
19 | change: 'onMachineChange', | |
20 | }, | |
21 | }, | |
22 | onMachineChange: function(field, value) { | |
23 | let me = this; | |
24 | let version = me.lookup('version'); | |
25 | let store = version.getStore(); | |
6c2bc326 | 26 | let oldRec = store.findRecord('id', version.getValue(), 0, false, false, true); |
a51b2c33 SR |
27 | let type = value === 'q35' ? 'q35' : 'i440fx'; |
28 | store.clearFilter(); | |
cfdb6ac6 | 29 | store.addFilter(val => val.data.id === 'latest' || val.data.type === type); |
c0cb5eee TL |
30 | if (!me.getView().isWindows) { |
31 | version.setValue('latest'); | |
32 | } else { | |
33 | store.isWindows = true; | |
6c2bc326 TL |
34 | if (!oldRec) { |
35 | return; | |
36 | } | |
37 | let oldVers = oldRec.data.version; | |
38 | // we already filtered by correct type, so just check version property | |
39 | let rec = store.findRecord('version', oldVers, 0, false, false, true); | |
40 | if (rec) { | |
41 | version.select(rec); | |
42 | } | |
c0cb5eee | 43 | } |
a51b2c33 SR |
44 | }, |
45 | }, | |
46 | ||
47 | onGetValues: function(values) { | |
10df2d5a MF |
48 | if (values.delete === 'machine' && values.viommu) { |
49 | delete values.delete; | |
50 | values.machine = 'pc'; | |
51 | } | |
a51b2c33 SR |
52 | if (values.version && values.version !== 'latest') { |
53 | values.machine = values.version; | |
54 | delete values.delete; | |
55 | } | |
56 | delete values.version; | |
10df2d5a MF |
57 | if (values.delete === 'machine' && !values.viommu) { |
58 | return values; | |
59 | } | |
60 | let ret = {}; | |
61 | ret.machine = PVE.Parser.printPropertyString(values, 'machine'); | |
62 | return ret; | |
a51b2c33 SR |
63 | }, |
64 | ||
65 | setValues: function(values) { | |
66 | let me = this; | |
67 | ||
10df2d5a MF |
68 | let machineConf = PVE.Parser.parsePropertyString(values.machine, 'type'); |
69 | values.machine = machineConf.type; | |
70 | ||
c0cb5eee | 71 | me.isWindows = values.isWindows; |
34aec351 SR |
72 | if (values.machine === 'pc') { |
73 | values.machine = '__default__'; | |
74 | } | |
c0cb5eee | 75 | |
34aec351 SR |
76 | if (me.isWindows) { |
77 | if (values.machine === '__default__') { | |
78 | values.version = 'pc-i440fx-5.1'; | |
79 | } else if (values.machine === 'q35') { | |
80 | values.version = 'pc-q35-5.1'; | |
81 | } | |
82 | } | |
10df2d5a MF |
83 | |
84 | values.viommu = machineConf.viommu || '__default__'; | |
85 | ||
a51b2c33 SR |
86 | if (values.machine !== '__default__' && values.machine !== 'q35') { |
87 | values.version = values.machine; | |
88 | values.machine = values.version.match(/q35/) ? 'q35' : '__default__'; | |
89 | ||
90 | // avoid hiding a pinned version | |
aeb61a52 | 91 | me.setAdvancedVisible(true); |
a51b2c33 SR |
92 | } |
93 | ||
94 | this.callParent(arguments); | |
95 | }, | |
96 | ||
60cc233a TL |
97 | items: { |
98 | xtype: 'proxmoxKVComboBox', | |
9dbddec7 | 99 | name: 'machine', |
a51b2c33 | 100 | reference: 'machine', |
9dbddec7 SR |
101 | fieldLabel: gettext('Machine'), |
102 | comboItems: [ | |
103 | ['__default__', PVE.Utils.render_qemu_machine('')], | |
104 | ['q35', 'q35'], | |
105 | ], | |
10df2d5a MF |
106 | bind: { |
107 | value: '{type}', | |
108 | }, | |
60cc233a | 109 | }, |
a51b2c33 | 110 | |
432639a8 TL |
111 | advancedItems: [ |
112 | { | |
113 | xtype: 'combobox', | |
114 | name: 'version', | |
115 | reference: 'version', | |
116 | fieldLabel: gettext('Version'), | |
117 | emptyText: gettext('Latest'), | |
118 | value: 'latest', | |
119 | editable: false, | |
120 | valueField: 'id', | |
121 | displayField: 'version', | |
122 | queryParam: false, | |
123 | store: { | |
124 | autoLoad: true, | |
125 | fields: ['id', 'type', 'version'], | |
126 | proxy: { | |
127 | type: 'proxmox', | |
128 | url: "/api2/json/nodes/localhost/capabilities/qemu/machines", | |
129 | }, | |
130 | listeners: { | |
131 | load: function(records) { | |
132 | if (!this.isWindows) { | |
133 | this.insert(0, { id: 'latest', type: 'any', version: gettext('Latest') }); | |
134 | } | |
135 | }, | |
a51b2c33 SR |
136 | }, |
137 | }, | |
138 | }, | |
432639a8 TL |
139 | { |
140 | xtype: 'displayfield', | |
141 | fieldLabel: gettext('Note'), | |
142 | value: gettext('Machine version change may affect hardware layout and settings in the guest OS.'), | |
143 | }, | |
10df2d5a MF |
144 | { |
145 | xtype: 'proxmoxKVComboBox', | |
146 | name: 'viommu', | |
147 | fieldLabel: gettext('vIOMMU'), | |
148 | reference: 'viommu-q35', | |
149 | deleteEmpty: false, | |
150 | value: '__default__', | |
151 | comboItems: [ | |
152 | ['__default__', Proxmox.Utils.defaultText + ' (None)'], | |
21639845 | 153 | ['intel', gettext('Intel (AMD Compatible)')], |
10df2d5a MF |
154 | ['virtio', 'VirtIO'], |
155 | ], | |
156 | bind: { | |
157 | hidden: '{!q35}', | |
158 | disabled: '{!q35}', | |
159 | }, | |
160 | }, | |
161 | { | |
162 | xtype: 'proxmoxKVComboBox', | |
163 | name: 'viommu', | |
164 | fieldLabel: gettext('vIOMMU'), | |
165 | reference: 'viommu-i440fx', | |
166 | deleteEmpty: false, | |
167 | value: '__default__', | |
168 | comboItems: [ | |
169 | ['__default__', Proxmox.Utils.defaultText + ' (None)'], | |
170 | ['virtio', 'VirtIO'], | |
171 | ], | |
172 | bind: { | |
173 | hidden: '{q35}', | |
174 | disabled: '{q35}', | |
175 | }, | |
176 | }, | |
432639a8 | 177 | ], |
9dbddec7 SR |
178 | }); |
179 | ||
180 | Ext.define('PVE.qemu.MachineEdit', { | |
181 | extend: 'Proxmox.window.Edit', | |
182 | ||
183 | subject: gettext('Machine'), | |
184 | ||
60cc233a | 185 | items: { |
9dbddec7 | 186 | xtype: 'pveMachineInputPanel', |
60cc233a | 187 | }, |
9dbddec7 | 188 | |
432639a8 TL |
189 | width: 400, |
190 | ||
9dbddec7 SR |
191 | initComponent: function() { |
192 | let me = this; | |
193 | ||
194 | me.callParent(); | |
195 | ||
196 | me.load({ | |
197 | success: function(response) { | |
c0cb5eee TL |
198 | let conf = response.result.data; |
199 | let values = { | |
200 | machine: conf.machine || '__default__', | |
201 | }; | |
43798244 | 202 | values.isWindows = PVE.Utils.is_windows(conf.ostype); |
c0cb5eee | 203 | me.setValues(values); |
9dbddec7 SR |
204 | }, |
205 | }); | |
206 | }, | |
207 | }); |