]> git.proxmox.com Git - pve-manager.git/blobdiff - www/manager6/form/CPUModelSelector.js
ui: enable gettext localisation for more user exposed strings
[pve-manager.git] / www / manager6 / form / CPUModelSelector.js
index 505d27c8c4ef991adf1b4abec850fab45e58f426..a30dd1fb6f93dc55abf6fc9c82284b1bf117f951 100644 (file)
+Ext.define('PVE.data.CPUModel', {
+    extend: 'Ext.data.Model',
+    fields: [
+       { name: 'name' },
+       { name: 'vendor' },
+       { name: 'custom' },
+       { name: 'displayname' },
+    ],
+});
+
 Ext.define('PVE.form.CPUModelSelector', {
-    extend: 'Proxmox.form.KVComboBox',
+    extend: 'Proxmox.form.ComboGrid',
     alias: ['widget.CPUModelSelector'],
-    comboItems: [
-       ['__default__', Proxmox.Utils.defaultText + ' (kvm64)'],
-       ['486', '486'],
-       ['athlon', 'athlon'],
-       ['core2duo', 'core2duo'],
-       ['coreduo', 'coreduo'],
-       ['kvm32', 'kvm32'],
-       ['kvm64', 'kvm64'],
-       ['pentium', 'pentium'],
-       ['pentium2', 'pentium2'],
-       ['pentium3', 'pentium3'],
-       ['phenom', 'phenom'],
-       ['qemu32', 'qemu32'],
-       ['qemu64', 'qemu64'],
-       ['Conroe', 'Conroe'],
-       ['Penryn', 'Penryn'],
-       ['Nehalem', 'Nehalem'],
-       ['Westmere', 'Westmere'],
-       ['SandyBridge', 'SandyBridge'],
-       ['IvyBridge', 'IvyBridge'],
-       ['Haswell', 'Haswell'],
-       ['Haswell-noTSX','Haswell-noTSX'],
-       ['Broadwell', 'Broadwell'],
-       ['Broadwell-noTSX','Broadwell-noTSX'],
-       ['Skylake-Client','Skylake-Client'],
-       ['Skylake-Server','Skylake-Server'],
-       ['Cascadelake-Server','Cascadelake-Server'],
-       ['KnightsMill','KnightsMill'],
-       ['Opteron_G1', 'Opteron_G1'],
-       ['Opteron_G2', 'Opteron_G2'],
-       ['Opteron_G3', 'Opteron_G3'],
-       ['Opteron_G4', 'Opteron_G4'],
-       ['Opteron_G5', 'Opteron_G5'],
-       ['EPYC', 'EPYC'],
-       ['host', 'host']
-
-    ]
+
+    valueField: 'name',
+    displayField: 'displayname',
+
+    emptyText: Proxmox.Utils.defaultText + ' (kvm64)',
+    allowBlank: true,
+
+    editable: true,
+    anyMatch: true,
+    forceSelection: true,
+    autoSelect: false,
+
+    deleteEmpty: true,
+
+    listConfig: {
+       columns: [
+           {
+               header: gettext('Model'),
+               dataIndex: 'displayname',
+               hideable: false,
+               sortable: true,
+               flex: 3,
+           },
+           {
+               header: gettext('Vendor'),
+               dataIndex: 'vendor',
+               hideable: false,
+               sortable: true,
+               flex: 2,
+           },
+       ],
+       width: 360,
+    },
+
+    store: {
+       autoLoad: true,
+       model: 'PVE.data.CPUModel',
+       proxy: {
+           type: 'proxmox',
+           url: '/api2/json/nodes/localhost/capabilities/qemu/cpu',
+       },
+       sorters: [
+           {
+               sorterFn: function(recordA, recordB) {
+                   let a = recordA.data;
+                   let b = recordB.data;
+
+                   let vendorOrder = PVE.Utils.cpu_vendor_order;
+                   let orderA = vendorOrder[a.vendor] || vendorOrder._default_;
+                   let orderB = vendorOrder[b.vendor] || vendorOrder._default_;
+
+                   if (orderA > orderB) {
+                       return 1;
+                   } else if (orderA < orderB) {
+                       return -1;
+                   }
+
+                   // Within same vendor, sort alphabetically
+                   return a.name.localeCompare(b.name);
+               },
+               direction: 'ASC',
+           },
+       ],
+       listeners: {
+           load: function(store, records, success) {
+               if (success) {
+                   records.forEach(rec => {
+                       rec.data.displayname = rec.data.name.replace(/^custom-/, '');
+
+                       let vendor = rec.data.vendor;
+
+                       if (rec.data.name === 'host') {
+                           vendor = 'Host';
+                       }
+
+                       // We receive vendor names as given to QEMU as CPUID
+                       vendor = PVE.Utils.cpu_vendor_map[vendor] || vendor;
+
+                       if (rec.data.custom) {
+                           vendor = gettext('Custom') + ` (${vendor})`;
+                       }
+
+                       rec.data.vendor = vendor;
+                   });
+
+                   store.sort();
+               }
+           },
+       },
+    },
 });