]>
Commit | Line | Data |
---|---|---|
9dbddec7 SR |
1 | Ext.define('PVE.qemu.MachineInputPanel', { |
2 | extend: 'Proxmox.panel.InputPanel', | |
3 | xtype: 'pveMachineInputPanel', | |
4 | ||
a51b2c33 SR |
5 | controller: { |
6 | xclass: 'Ext.app.ViewController', | |
7 | control: { | |
8 | 'combobox[name=machine]': { | |
9 | change: 'onMachineChange', | |
10 | }, | |
11 | }, | |
12 | onMachineChange: function(field, value) { | |
13 | let me = this; | |
14 | let version = me.lookup('version'); | |
15 | let store = version.getStore(); | |
6c2bc326 | 16 | let oldRec = store.findRecord('id', version.getValue(), 0, false, false, true); |
a51b2c33 SR |
17 | let type = value === 'q35' ? 'q35' : 'i440fx'; |
18 | store.clearFilter(); | |
cfdb6ac6 | 19 | store.addFilter(val => val.data.id === 'latest' || val.data.type === type); |
c0cb5eee TL |
20 | if (!me.getView().isWindows) { |
21 | version.setValue('latest'); | |
22 | } else { | |
23 | store.isWindows = true; | |
6c2bc326 TL |
24 | if (!oldRec) { |
25 | return; | |
26 | } | |
27 | let oldVers = oldRec.data.version; | |
28 | // we already filtered by correct type, so just check version property | |
29 | let rec = store.findRecord('version', oldVers, 0, false, false, true); | |
30 | if (rec) { | |
31 | version.select(rec); | |
32 | } | |
c0cb5eee | 33 | } |
a51b2c33 SR |
34 | }, |
35 | }, | |
36 | ||
37 | onGetValues: function(values) { | |
38 | if (values.version && values.version !== 'latest') { | |
39 | values.machine = values.version; | |
40 | delete values.delete; | |
41 | } | |
42 | delete values.version; | |
43 | return values; | |
44 | }, | |
45 | ||
46 | setValues: function(values) { | |
47 | let me = this; | |
48 | ||
c0cb5eee | 49 | me.isWindows = values.isWindows; |
34aec351 SR |
50 | if (values.machine === 'pc') { |
51 | values.machine = '__default__'; | |
52 | } | |
c0cb5eee | 53 | |
34aec351 SR |
54 | if (me.isWindows) { |
55 | if (values.machine === '__default__') { | |
56 | values.version = 'pc-i440fx-5.1'; | |
57 | } else if (values.machine === 'q35') { | |
58 | values.version = 'pc-q35-5.1'; | |
59 | } | |
60 | } | |
a51b2c33 SR |
61 | if (values.machine !== '__default__' && values.machine !== 'q35') { |
62 | values.version = values.machine; | |
63 | values.machine = values.version.match(/q35/) ? 'q35' : '__default__'; | |
64 | ||
65 | // avoid hiding a pinned version | |
aeb61a52 | 66 | me.setAdvancedVisible(true); |
a51b2c33 SR |
67 | } |
68 | ||
69 | this.callParent(arguments); | |
70 | }, | |
71 | ||
60cc233a TL |
72 | items: { |
73 | xtype: 'proxmoxKVComboBox', | |
9dbddec7 | 74 | name: 'machine', |
a51b2c33 | 75 | reference: 'machine', |
9dbddec7 SR |
76 | fieldLabel: gettext('Machine'), |
77 | comboItems: [ | |
78 | ['__default__', PVE.Utils.render_qemu_machine('')], | |
79 | ['q35', 'q35'], | |
80 | ], | |
60cc233a | 81 | }, |
a51b2c33 | 82 | |
432639a8 TL |
83 | advancedItems: [ |
84 | { | |
85 | xtype: 'combobox', | |
86 | name: 'version', | |
87 | reference: 'version', | |
88 | fieldLabel: gettext('Version'), | |
89 | emptyText: gettext('Latest'), | |
90 | value: 'latest', | |
91 | editable: false, | |
92 | valueField: 'id', | |
93 | displayField: 'version', | |
94 | queryParam: false, | |
95 | store: { | |
96 | autoLoad: true, | |
97 | fields: ['id', 'type', 'version'], | |
98 | proxy: { | |
99 | type: 'proxmox', | |
100 | url: "/api2/json/nodes/localhost/capabilities/qemu/machines", | |
101 | }, | |
102 | listeners: { | |
103 | load: function(records) { | |
104 | if (!this.isWindows) { | |
105 | this.insert(0, { id: 'latest', type: 'any', version: gettext('Latest') }); | |
106 | } | |
107 | }, | |
a51b2c33 SR |
108 | }, |
109 | }, | |
110 | }, | |
432639a8 TL |
111 | { |
112 | xtype: 'displayfield', | |
113 | fieldLabel: gettext('Note'), | |
114 | value: gettext('Machine version change may affect hardware layout and settings in the guest OS.'), | |
115 | }, | |
116 | ], | |
9dbddec7 SR |
117 | }); |
118 | ||
119 | Ext.define('PVE.qemu.MachineEdit', { | |
120 | extend: 'Proxmox.window.Edit', | |
121 | ||
122 | subject: gettext('Machine'), | |
123 | ||
60cc233a | 124 | items: { |
9dbddec7 | 125 | xtype: 'pveMachineInputPanel', |
60cc233a | 126 | }, |
9dbddec7 | 127 | |
432639a8 TL |
128 | width: 400, |
129 | ||
9dbddec7 SR |
130 | initComponent: function() { |
131 | let me = this; | |
132 | ||
133 | me.callParent(); | |
134 | ||
135 | me.load({ | |
136 | success: function(response) { | |
c0cb5eee TL |
137 | let conf = response.result.data; |
138 | let values = { | |
139 | machine: conf.machine || '__default__', | |
140 | }; | |
43798244 | 141 | values.isWindows = PVE.Utils.is_windows(conf.ostype); |
c0cb5eee | 142 | me.setValues(values); |
9dbddec7 SR |
143 | }, |
144 | }); | |
145 | }, | |
146 | }); |