]>
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 | ||
15 | value: '512', // qm default | |
16 | ||
17 | computeUpDown: function(value) { | |
18 | var me = this; | |
19 | ||
20 | if (!me.hotplug) { | |
21 | return { up: value + me.step, down: value - me.step }; | |
22 | } | |
23 | ||
24 | var dimm_size = 512; | |
25 | var prev_dimm_size = 0; | |
26 | var min_size = 1024; | |
27 | var current_size = min_size; | |
28 | var value_up = min_size; | |
29 | var value_down = min_size; | |
30 | var value_start = min_size; | |
31 | ||
32 | var i, j; | |
33 | for (j = 0; j < 9; j++) { | |
34 | for (i = 0; i < 32; i++) { | |
35 | if ((value >= current_size) && (value < (current_size + dimm_size))) { | |
a764c5f7 | 36 | value_start = current_size; |
9f806bcf DM |
37 | value_up = current_size + dimm_size; |
38 | value_down = current_size - ((i === 0) ? prev_dimm_size : dimm_size); | |
39 | } | |
40 | current_size += dimm_size; | |
41 | } | |
42 | prev_dimm_size = dimm_size; | |
43 | dimm_size = dimm_size*2; | |
44 | } | |
45 | ||
46 | return { up: value_up, down: value_down, start: value_start }; | |
47 | }, | |
48 | ||
49 | onSpinUp: function() { | |
50 | var me = this; | |
51 | if (!me.readOnly) { | |
52 | var res = me.computeUpDown(me.getValue()); | |
53 | me.setValue(Ext.Number.constrain(res.up, me.minValue, me.maxValue)); | |
54 | } | |
55 | }, | |
56 | ||
57 | onSpinDown: function() { | |
58 | var me = this; | |
59 | if (!me.readOnly) { | |
60 | var res = me.computeUpDown(me.getValue()); | |
61 | me.setValue(Ext.Number.constrain(res.down, me.minValue, me.maxValue)); | |
62 | } | |
63 | }, | |
64 | ||
65 | initComponent: function() { | |
66 | var me = this; | |
67 | ||
68 | if (me.hotplug) { | |
69 | me.minValue = 1024; | |
70 | ||
71 | me.on('blur', function(field) { | |
72 | value = me.getValue(); | |
73 | var res = me.computeUpDown(value); | |
74 | if (value === res.start || value === res.up || value === res.down) { | |
75 | return; | |
76 | } | |
77 | field.setValue(res.up); | |
78 | }); | |
79 | } | |
80 | ||
81 | me.callParent(); | |
82 | } | |
83 | }); |