]> git.proxmox.com Git - pve-manager.git/blob - www/manager6/qemu/MachineEdit.js
573a8c0f38e98de18da9f2b14af1536c03e277c8
[pve-manager.git] / www / manager6 / qemu / MachineEdit.js
1 Ext.define('PVE.qemu.MachineInputPanel', {
2 extend: 'Proxmox.panel.InputPanel',
3 xtype: 'pveMachineInputPanel',
4
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();
16 let type = value === 'q35' ? 'q35' : 'i440fx';
17 store.clearFilter();
18 store.addFilter(val => (val.data.id === 'latest' || val.data.type === type));
19 if (!me.getView().isWindows) {
20 version.setValue('latest');
21 } else {
22 store.isWindows = true;
23 }
24 },
25 },
26
27 onGetValues: function(values) {
28 if (values.version && values.version !== 'latest') {
29 values.machine = values.version;
30 delete values.delete;
31 }
32 delete values.version;
33 return values;
34 },
35
36 setValues: function(values) {
37 let me = this;
38
39 me.isWindows = values.isWindows;
40
41 if (values.machine !== '__default__' && values.machine !== 'q35') {
42 values.version = values.machine;
43 values.machine = values.version.match(/q35/) ? 'q35' : '__default__';
44
45 // avoid hiding a pinned version
46 me.setAdvancedVisible(true);
47 }
48
49 this.callParent(arguments);
50 },
51
52 items: {
53 xtype: 'proxmoxKVComboBox',
54 name: 'machine',
55 reference: 'machine',
56 fieldLabel: gettext('Machine'),
57 comboItems: [
58 ['__default__', PVE.Utils.render_qemu_machine('')],
59 ['q35', 'q35'],
60 ],
61 },
62
63 advancedItems: {
64 xtype: 'combobox',
65 name: 'version',
66 reference: 'version',
67 fieldLabel: gettext('Version'),
68 emptyText: gettext('Latest'),
69 value: 'latest',
70 editable: false,
71 valueField: 'id',
72 displayField: 'version',
73 queryParam: false,
74 store: {
75 autoLoad: true,
76 fields: ['id', 'type', 'version'],
77 proxy: {
78 type: 'proxmox',
79 url: "/api2/json/nodes/localhost/capabilities/qemu/machines",
80 },
81 listeners: {
82 load: function(records) {
83 if (!this.isWindows) {
84 this.insert(0, { id: 'latest', type: 'any', version: gettext('Latest') });
85 }
86 },
87 },
88 },
89 },
90 });
91
92 Ext.define('PVE.qemu.MachineEdit', {
93 extend: 'Proxmox.window.Edit',
94
95 subject: gettext('Machine'),
96
97 items: {
98 xtype: 'pveMachineInputPanel',
99 },
100
101 initComponent: function() {
102 let me = this;
103
104 me.callParent();
105
106 me.load({
107 success: function(response) {
108 let conf = response.result.data;
109 let values = {
110 machine: conf.machine || '__default__',
111 };
112 if (conf.ostype && conf.ostype.match(/^(win|wvista|wxp|w2k)/i)) {
113 values.isWindows = true;
114 }
115 me.setValues(values);
116 },
117 });
118 },
119 });