]> git.proxmox.com Git - pve-manager.git/blob - www/manager6/qemu/MemoryEdit.js
update shipped appliance info index
[pve-manager.git] / www / manager6 / qemu / MemoryEdit.js
1 Ext.define('PVE.qemu.MemoryInputPanel', {
2 extend: 'Proxmox.panel.InputPanel',
3 alias: 'widget.pveQemuMemoryPanel',
4 onlineHelp: 'qm_memory',
5
6 insideWizard: false,
7
8 viewModel: {}, // inherit data from createWizard if insideWizard
9
10 controller: {
11 xclass: 'Ext.app.ViewController',
12
13 control: {
14 '#': {
15 afterrender: 'setMemory',
16 },
17 },
18
19 setMemory: function() {
20 let me = this;
21 let view = me.getView(), viewModel = me.getViewModel();
22 if (view.insideWizard) {
23 let memory = view.down('pveMemoryField[name=memory]');
24 // NOTE: we only set memory but that then sets balloon in its change handler
25 if (viewModel.get('current.ostype') === 'win11') {
26 memory.setValue('4096');
27 } else {
28 memory.setValue('2048');
29 }
30 }
31 },
32 },
33
34 onGetValues: function(values) {
35 var me = this;
36
37 var res = {};
38
39 res.memory = values.memory;
40 res.balloon = values.balloon;
41
42 if (!values.ballooning) {
43 res.balloon = 0;
44 res.delete = 'shares';
45 } else if (values.memory === values.balloon) {
46 delete res.balloon;
47 res.delete = 'balloon,shares';
48 } else if (Ext.isDefined(values.shares) && values.shares !== "") {
49 res.shares = values.shares;
50 } else {
51 res.delete = "shares";
52 }
53
54 return res;
55 },
56
57 initComponent: function() {
58 var me = this;
59 var labelWidth = 160;
60
61 me.items= [
62 {
63 xtype: 'pveMemoryField',
64 labelWidth: labelWidth,
65 fieldLabel: gettext('Memory') + ' (MiB)',
66 name: 'memory',
67 value: '512', // better defaults get set via the view controllers afterrender
68 minValue: 1,
69 step: 32,
70 hotplug: me.hotplug,
71 listeners: {
72 change: function(f, value, old) {
73 var bf = me.down('field[name=balloon]');
74 var balloon = bf.getValue();
75 bf.setMaxValue(value);
76 if (balloon === old) {
77 bf.setValue(value);
78 }
79 bf.validate();
80 },
81 },
82 },
83 ];
84
85 me.advancedItems= [
86 {
87 xtype: 'pveMemoryField',
88 name: 'balloon',
89 minValue: 1,
90 maxValue: me.insideWizard ? 2048 : 512,
91 value: '512', // better defaults get set (indirectly) via the view controllers afterrender
92 step: 32,
93 fieldLabel: gettext('Minimum memory') + ' (MiB)',
94 hotplug: me.hotplug,
95 labelWidth: labelWidth,
96 allowBlank: false,
97 listeners: {
98 change: function(f, value) {
99 var memory = me.down('field[name=memory]').getValue();
100 var shares = me.down('field[name=shares]');
101 shares.setDisabled(value === memory);
102 },
103 },
104 },
105 {
106 xtype: 'proxmoxintegerfield',
107 name: 'shares',
108 disabled: true,
109 minValue: 0,
110 maxValue: 50000,
111 value: '',
112 step: 10,
113 fieldLabel: gettext('Shares'),
114 labelWidth: labelWidth,
115 allowBlank: true,
116 emptyText: Proxmox.Utils.defaultText + ' (1000)',
117 submitEmptyText: false,
118 },
119 {
120 xtype: 'proxmoxcheckbox',
121 labelWidth: labelWidth,
122 value: '1',
123 name: 'ballooning',
124 fieldLabel: gettext('Ballooning Device'),
125 listeners: {
126 change: function(f, value) {
127 var bf = me.down('field[name=balloon]');
128 var shares = me.down('field[name=shares]');
129 var memory = me.down('field[name=memory]');
130 bf.setDisabled(!value);
131 shares.setDisabled(!value || bf.getValue() === memory.getValue());
132 },
133 },
134 },
135 ];
136
137 if (me.insideWizard) {
138 me.column1 = me.items;
139 me.items = undefined;
140 me.advancedColumn1 = me.advancedItems;
141 me.advancedItems = undefined;
142 }
143 me.callParent();
144 },
145
146 });
147
148 Ext.define('PVE.qemu.MemoryEdit', {
149 extend: 'Proxmox.window.Edit',
150
151 initComponent: function() {
152 var me = this;
153
154 var memoryhotplug;
155 if (me.hotplug) {
156 Ext.each(me.hotplug.split(','), function(el) {
157 if (el === 'memory') {
158 memoryhotplug = 1;
159 }
160 });
161 }
162
163 var ipanel = Ext.create('PVE.qemu.MemoryInputPanel', {
164 hotplug: memoryhotplug,
165 });
166
167 Ext.apply(me, {
168 subject: gettext('Memory'),
169 items: [ipanel],
170 // uncomment the following to use the async configiguration API
171 // backgroundDelay: 5,
172 width: 400,
173 });
174
175 me.callParent();
176
177 me.load({
178 success: function(response, options) {
179 var data = response.result.data;
180
181 var values = {
182 ballooning: data.balloon === 0 ? '0' : '1',
183 shares: data.shares,
184 memory: data.memory || '512',
185 balloon: data.balloon > 0 ? data.balloon : data.memory || '512',
186 };
187
188 ipanel.setValues(values);
189 },
190 });
191 },
192 });