]> git.proxmox.com Git - pve-manager.git/blob - www/manager6/qemu/MachineEdit.js
update shipped appliance info index
[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 oldRec = store.findRecord('id', version.getValue(), 0, false, false, true);
17 let type = value === 'q35' ? 'q35' : 'i440fx';
18 store.clearFilter();
19 store.addFilter(val => val.data.id === 'latest' || val.data.type === type);
20 if (!me.getView().isWindows) {
21 version.setValue('latest');
22 } else {
23 store.isWindows = true;
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 }
33 }
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
49 me.isWindows = values.isWindows;
50 if (values.machine === 'pc') {
51 values.machine = '__default__';
52 }
53
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 }
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
66 me.setAdvancedVisible(true);
67 }
68
69 this.callParent(arguments);
70 },
71
72 items: {
73 xtype: 'proxmoxKVComboBox',
74 name: 'machine',
75 reference: 'machine',
76 fieldLabel: gettext('Machine'),
77 comboItems: [
78 ['__default__', PVE.Utils.render_qemu_machine('')],
79 ['q35', 'q35'],
80 ],
81 },
82
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 },
108 },
109 },
110 },
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 ],
117 });
118
119 Ext.define('PVE.qemu.MachineEdit', {
120 extend: 'Proxmox.window.Edit',
121
122 subject: gettext('Machine'),
123
124 items: {
125 xtype: 'pveMachineInputPanel',
126 },
127
128 width: 400,
129
130 initComponent: function() {
131 let me = this;
132
133 me.callParent();
134
135 me.load({
136 success: function(response) {
137 let conf = response.result.data;
138 let values = {
139 machine: conf.machine || '__default__',
140 };
141 values.isWindows = PVE.Utils.is_windows(conf.ostype);
142 me.setValues(values);
143 },
144 });
145 },
146 });