]> git.proxmox.com Git - pve-manager.git/blame - www/manager6/qemu/MemoryEdit.js
update shipped appliance info index
[pve-manager.git] / www / manager6 / qemu / MemoryEdit.js
CommitLineData
e5bb8722 1Ext.define('PVE.qemu.MemoryInputPanel', {
ef4ef788 2 extend: 'Proxmox.panel.InputPanel',
42902182 3 alias: 'widget.pveQemuMemoryPanel',
c8802a60 4 onlineHelp: 'qm_memory',
e5bb8722
DM
5
6 insideWizard: false,
7
523bc167
TL
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
e5bb8722
DM
34 onGetValues: function(values) {
35 var me = this;
36
869f8053
DC
37 var res = {};
38
39 res.memory = values.memory;
40 res.balloon = values.balloon;
41
42 if (!values.ballooning) {
43 res.balloon = 0;
399ffa76 44 res.delete = 'shares';
869f8053
DC
45 } else if (values.memory === values.balloon) {
46 delete res.balloon;
399ffa76 47 res.delete = 'balloon,shares';
53e3ea84 48 } else if (Ext.isDefined(values.shares) && values.shares !== "") {
869f8053 49 res.shares = values.shares;
e5bb8722 50 } else {
399ffa76 51 res.delete = "shares";
e5bb8722
DM
52 }
53
54 return res;
55 },
56
869f8053 57 initComponent: function() {
e5bb8722
DM
58 var me = this;
59 var labelWidth = 160;
60
869f8053 61 me.items= [
e5bb8722
DM
62 {
63 xtype: 'pveMemoryField',
9a60a19b 64 labelWidth: labelWidth,
869f8053
DC
65 fieldLabel: gettext('Memory') + ' (MiB)',
66 name: 'memory',
523bc167 67 value: '512', // better defaults get set via the view controllers afterrender
869f8053 68 minValue: 1,
869f8053 69 step: 32,
e5bb8722 70 hotplug: me.hotplug,
e5bb8722 71 listeners: {
869f8053 72 change: function(f, value, old) {
b6450910
DC
73 var bf = me.down('field[name=balloon]');
74 var balloon = bf.getValue();
75 bf.setMaxValue(value);
869f8053 76 if (balloon === old) {
e5bb8722
DM
77 bf.setValue(value);
78 }
869f8053 79 bf.validate();
f6710aac
TL
80 },
81 },
82 },
869f8053
DC
83 ];
84
85 me.advancedItems= [
e5bb8722 86 {
869f8053 87 xtype: 'pveMemoryField',
e5bb8722 88 name: 'balloon',
869f8053 89 minValue: 1,
050d86a8 90 maxValue: me.insideWizard ? 2048 : 512,
523bc167 91 value: '512', // better defaults get set (indirectly) via the view controllers afterrender
e5bb8722 92 step: 32,
07de0118 93 fieldLabel: gettext('Minimum memory') + ' (MiB)',
869f8053 94 hotplug: me.hotplug,
e5bb8722 95 labelWidth: labelWidth,
869f8053
DC
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);
f6710aac
TL
102 },
103 },
e5bb8722
DM
104 },
105 {
bf96f60d 106 xtype: 'proxmoxintegerfield',
e5bb8722
DM
107 name: 'shares',
108 disabled: true,
109 minValue: 0,
110 maxValue: 50000,
111 value: '',
112 step: 10,
113 fieldLabel: gettext('Shares'),
e5bb8722
DM
114 labelWidth: labelWidth,
115 allowBlank: true,
e7ade592 116 emptyText: Proxmox.Utils.defaultText + ' (1000)',
f6710aac 117 submitEmptyText: false,
869f8053
DC
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);
53e3ea84 131 shares.setDisabled(!value || bf.getValue() === memory.getValue());
f6710aac
TL
132 },
133 },
134 },
e5bb8722
DM
135 ];
136
137 if (me.insideWizard) {
869f8053
DC
138 me.column1 = me.items;
139 me.items = undefined;
140 me.advancedColumn1 = me.advancedItems;
141 me.advancedItems = undefined;
e5bb8722 142 }
e5bb8722 143 me.callParent();
f6710aac 144 },
869f8053 145
e5bb8722
DM
146});
147
148Ext.define('PVE.qemu.MemoryEdit', {
9fccc702 149 extend: 'Proxmox.window.Edit',
e5bb8722 150
869f8053 151 initComponent: function() {
e5bb8722
DM
152 var me = this;
153
154 var memoryhotplug;
8058410f 155 if (me.hotplug) {
e5bb8722
DM
156 Ext.each(me.hotplug.split(','), function(el) {
157 if (el === 'memory') {
158 memoryhotplug = 1;
159 }
160 });
161 }
869f8053
DC
162
163 var ipanel = Ext.create('PVE.qemu.MemoryInputPanel', {
f6710aac 164 hotplug: memoryhotplug,
869f8053 165 });
e5bb8722
DM
166
167 Ext.apply(me, {
168 subject: gettext('Memory'),
8058410f 169 items: [ipanel],
e5bb8722 170 // uncomment the following to use the async configiguration API
2a4971d8 171 // backgroundDelay: 5,
f6710aac 172 width: 400,
e5bb8722
DM
173 });
174
175 me.callParent();
176
177 me.load({
178 success: function(response, options) {
179 var data = response.result.data;
180
181 var values = {
9a60a19b 182 ballooning: data.balloon === 0 ? '0' : '1',
e5bb8722 183 shares: data.shares,
869f8053 184 memory: data.memory || '512',
53e3ea84 185 balloon: data.balloon > 0 ? data.balloon : data.memory || '512',
e5bb8722 186 };
869f8053 187
e5bb8722 188 ipanel.setValues(values);
f6710aac 189 },
e5bb8722 190 });
f6710aac 191 },
e5bb8722 192});