]>
Commit | Line | Data |
---|---|---|
4546808c SR |
1 | Ext.define('PVE.data.CPUModel', { |
2 | extend: 'Ext.data.Model', | |
3 | fields: [ | |
8058410f TL |
4 | { name: 'name' }, |
5 | { name: 'vendor' }, | |
6 | { name: 'custom' }, | |
7 | { name: 'displayname' }, | |
f6710aac | 8 | ], |
4546808c SR |
9 | }); |
10 | ||
b1821bc1 | 11 | Ext.define('PVE.form.CPUModelSelector', { |
06dd1330 | 12 | extend: 'Proxmox.form.ComboGrid', |
b1821bc1 | 13 | alias: ['widget.CPUModelSelector'], |
04bd1b28 | 14 | |
4546808c SR |
15 | valueField: 'name', |
16 | displayField: 'displayname', | |
06dd1330 SR |
17 | |
18 | emptyText: Proxmox.Utils.defaultText + ' (kvm64)', | |
19 | allowBlank: true, | |
20 | ||
21 | editable: true, | |
22 | anyMatch: true, | |
23 | forceSelection: true, | |
24 | autoSelect: false, | |
25 | ||
26 | deleteEmpty: true, | |
27 | ||
28 | listConfig: { | |
29 | columns: [ | |
30 | { | |
31 | header: gettext('Model'), | |
4546808c | 32 | dataIndex: 'displayname', |
06dd1330 SR |
33 | hideable: false, |
34 | sortable: true, | |
f6710aac | 35 | flex: 3, |
06dd1330 SR |
36 | }, |
37 | { | |
38 | header: gettext('Vendor'), | |
39 | dataIndex: 'vendor', | |
40 | hideable: false, | |
41 | sortable: true, | |
f6710aac TL |
42 | flex: 2, |
43 | }, | |
06dd1330 | 44 | ], |
f6710aac | 45 | width: 360, |
06dd1330 SR |
46 | }, |
47 | ||
48 | store: { | |
4546808c SR |
49 | autoLoad: true, |
50 | model: 'PVE.data.CPUModel', | |
51 | proxy: { | |
52 | type: 'proxmox', | |
05d5446d | 53 | url: '/api2/json/nodes/localhost/capabilities/qemu/cpu', |
4546808c SR |
54 | }, |
55 | sorters: [ | |
56 | { | |
57 | sorterFn: function(recordA, recordB) { | |
58 | let a = recordA.data; | |
59 | let b = recordB.data; | |
60 | ||
61 | let vendorOrder = PVE.Utils.cpu_vendor_order; | |
399ffa76 TL |
62 | let orderA = vendorOrder[a.vendor] || vendorOrder._default_; |
63 | let orderB = vendorOrder[b.vendor] || vendorOrder._default_; | |
4546808c SR |
64 | |
65 | if (orderA > orderB) { | |
66 | return 1; | |
67 | } else if (orderA < orderB) { | |
68 | return -1; | |
69 | } | |
70 | ||
71 | // Within same vendor, sort alphabetically | |
72 | return a.name.localeCompare(b.name); | |
73 | }, | |
f6710aac TL |
74 | direction: 'ASC', |
75 | }, | |
4546808c SR |
76 | ], |
77 | listeners: { | |
78 | load: function(store, records, success) { | |
79 | if (success) { | |
80 | records.forEach(rec => { | |
81 | rec.data.displayname = rec.data.name.replace(/^custom-/, ''); | |
82 | ||
83 | let vendor = rec.data.vendor; | |
84 | ||
85 | if (rec.data.name === 'host') { | |
86 | vendor = 'Host'; | |
87 | } | |
88 | ||
89 | // We receive vendor names as given to QEMU as CPUID | |
90 | vendor = PVE.Utils.cpu_vendor_map[vendor] || vendor; | |
91 | ||
92 | if (rec.data.custom) { | |
93 | vendor = gettext('Custom') + ` (${vendor})`; | |
94 | } | |
95 | ||
96 | rec.data.vendor = vendor; | |
97 | }); | |
98 | ||
99 | store.sort(); | |
100 | } | |
f6710aac TL |
101 | }, |
102 | }, | |
103 | }, | |
b1821bc1 | 104 | }); |