]>
Commit | Line | Data |
---|---|---|
e5bb8722 | 1 | Ext.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 | ||
148 | Ext.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 | }); |