]> git.proxmox.com Git - pve-manager.git/blob - www/manager6/qemu/MemoryEdit.js
a8f877713a780ae09588f60465af8f702c20dc21
[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 onGetValues: function(values) {
9 var me = this;
10
11 var res = {};
12
13 res.memory = values.memory;
14 res.balloon = values.balloon;
15
16 if (!values.ballooning) {
17 res.balloon = 0;
18 res['delete'] = 'shares';
19 } else if (values.memory === values.balloon) {
20 delete res.balloon;
21 res['delete'] = 'balloon,shares';
22 } else if (Ext.isDefined(values.shares) && (values.shares !== "")) {
23 res.shares = values.shares;
24 } else {
25 res['delete'] = "shares";
26 }
27
28 return res;
29 },
30
31 initComponent: function() {
32 var me = this;
33 var labelWidth = 160;
34
35 me.items= [
36 {
37 xtype: 'pveMemoryField',
38 labelWidth: labelWidth,
39 fieldLabel: gettext('Memory') + ' (MiB)',
40 name: 'memory',
41 value: me.insideWizard ? '2048' : '512',
42 minValue: 1,
43 step: 32,
44 hotplug: me.hotplug,
45 listeners: {
46 change: function(f, value, old) {
47 var bf = me.down('field[name=balloon]');
48 var balloon = bf.getValue();
49 bf.setMaxValue(value);
50 if (balloon === old) {
51 bf.setValue(value);
52 }
53 bf.validate();
54 }
55 }
56 }
57 ];
58
59 me.advancedItems= [
60 {
61 xtype: 'pveMemoryField',
62 name: 'balloon',
63 minValue: 1,
64 maxValue: 512,
65 step: 32,
66 fieldLabel: gettext('Minimum memory') + ' (MiB)',
67 hotplug: me.hotplug,
68 labelWidth: labelWidth,
69 allowBlank: false,
70 listeners: {
71 change: function(f, value) {
72 var memory = me.down('field[name=memory]').getValue();
73 var shares = me.down('field[name=shares]');
74 shares.setDisabled(value === memory);
75 }
76 }
77 },
78 {
79 xtype: 'proxmoxintegerfield',
80 name: 'shares',
81 disabled: true,
82 minValue: 0,
83 maxValue: 50000,
84 value: '',
85 step: 10,
86 fieldLabel: gettext('Shares'),
87 labelWidth: labelWidth,
88 allowBlank: true,
89 emptyText: Proxmox.Utils.defaultText + ' (1000)',
90 submitEmptyText: false
91 },
92 {
93 xtype: 'proxmoxcheckbox',
94 labelWidth: labelWidth,
95 value: '1',
96 name: 'ballooning',
97 fieldLabel: gettext('Ballooning Device'),
98 listeners: {
99 change: function(f, value) {
100 var bf = me.down('field[name=balloon]');
101 var shares = me.down('field[name=shares]');
102 var memory = me.down('field[name=memory]');
103 bf.setDisabled(!value);
104 shares.setDisabled(!value || (bf.getValue() === memory.getValue()));
105 }
106 }
107 }
108 ];
109
110 if (me.insideWizard) {
111 me.column1 = me.items;
112 me.items = undefined;
113 me.advancedColumn1 = me.advancedItems;
114 me.advancedItems = undefined;
115 }
116 me.callParent();
117 }
118
119 });
120
121 Ext.define('PVE.qemu.MemoryEdit', {
122 extend: 'Proxmox.window.Edit',
123
124 initComponent: function() {
125 var me = this;
126
127 var memoryhotplug;
128 if(me.hotplug) {
129 Ext.each(me.hotplug.split(','), function(el) {
130 if (el === 'memory') {
131 memoryhotplug = 1;
132 }
133 });
134 }
135
136 var ipanel = Ext.create('PVE.qemu.MemoryInputPanel', {
137 hotplug: memoryhotplug
138 });
139
140 Ext.apply(me, {
141 subject: gettext('Memory'),
142 items: [ ipanel ],
143 // uncomment the following to use the async configiguration API
144 // backgroundDelay: 5,
145 width: 400
146 });
147
148 me.callParent();
149
150 me.load({
151 success: function(response, options) {
152 var data = response.result.data;
153
154 var values = {
155 ballooning: data.balloon === 0 ? '0' : '1',
156 shares: data.shares,
157 memory: data.memory || '512',
158 balloon: data.balloon > 0 ? data.balloon : (data.memory || '512')
159 };
160
161 ipanel.setValues(values);
162 }
163 });
164 }
165 });