]>
Commit | Line | Data |
---|---|---|
9f806bcf DM |
1 | Ext.define('PVE.form.MemoryField', { |
2 | extend: 'Ext.form.field.Number', | |
3 | alias: 'widget.pveMemoryField', | |
4 | ||
5 | allowBlank: false, | |
6 | ||
7 | hotplug: false, | |
8 | ||
9 | minValue: 32, | |
10 | ||
11 | maxValue: 4178944, | |
12 | ||
13 | step: 32, | |
14 | ||
63308ba7 | 15 | value: '512', // qm backend default |
9f806bcf | 16 | |
ecf9179f DC |
17 | allowDecimals: false, |
18 | ||
19 | allowExponential: false, | |
20 | ||
9f806bcf DM |
21 | computeUpDown: function(value) { |
22 | var me = this; | |
23 | ||
24 | if (!me.hotplug) { | |
25 | return { up: value + me.step, down: value - me.step }; | |
26 | } | |
2a4971d8 | 27 | |
9f806bcf DM |
28 | var dimm_size = 512; |
29 | var prev_dimm_size = 0; | |
30 | var min_size = 1024; | |
31 | var current_size = min_size; | |
32 | var value_up = min_size; | |
33 | var value_down = min_size; | |
34 | var value_start = min_size; | |
35 | ||
36 | var i, j; | |
37 | for (j = 0; j < 9; j++) { | |
38 | for (i = 0; i < 32; i++) { | |
53e3ea84 | 39 | if (value >= current_size && value < current_size + dimm_size) { |
a764c5f7 | 40 | value_start = current_size; |
9f806bcf | 41 | value_up = current_size + dimm_size; |
53e3ea84 | 42 | value_down = current_size - (i === 0 ? prev_dimm_size : dimm_size); |
9f806bcf | 43 | } |
2a4971d8 | 44 | current_size += dimm_size; |
9f806bcf DM |
45 | } |
46 | prev_dimm_size = dimm_size; | |
47 | dimm_size = dimm_size*2; | |
48 | } | |
49 | ||
50 | return { up: value_up, down: value_down, start: value_start }; | |
51 | }, | |
52 | ||
53 | onSpinUp: function() { | |
54 | var me = this; | |
55 | if (!me.readOnly) { | |
56 | var res = me.computeUpDown(me.getValue()); | |
57 | me.setValue(Ext.Number.constrain(res.up, me.minValue, me.maxValue)); | |
58 | } | |
59 | }, | |
60 | ||
61 | onSpinDown: function() { | |
62 | var me = this; | |
63 | if (!me.readOnly) { | |
64 | var res = me.computeUpDown(me.getValue()); | |
65 | me.setValue(Ext.Number.constrain(res.down, me.minValue, me.maxValue)); | |
66 | } | |
67 | }, | |
68 | ||
69 | initComponent: function() { | |
70 | var me = this; | |
71 | ||
72 | if (me.hotplug) { | |
73 | me.minValue = 1024; | |
74 | ||
75 | me.on('blur', function(field) { | |
68f8c765 | 76 | var value = me.getValue(); |
9f806bcf DM |
77 | var res = me.computeUpDown(value); |
78 | if (value === res.start || value === res.up || value === res.down) { | |
79 | return; | |
80 | } | |
81 | field.setValue(res.up); | |
82 | }); | |
83 | } | |
84 | ||
85 | me.callParent(); | |
f6710aac | 86 | }, |
9f806bcf | 87 | }); |