]>
Commit | Line | Data |
---|---|---|
711c07d1 DM |
1 | Ext.define('PVE.form.ControllerSelector', { |
2 | extend: 'Ext.form.FieldContainer', | |
42902182 | 3 | alias: 'widget.pveControllerSelector', |
711c07d1 DM |
4 | |
5 | noVirtIO: false, | |
6 | ||
711c07d1 DM |
7 | vmconfig: {}, // used to check for existing devices |
8 | ||
ecfd8bcd TL |
9 | setToFree: function(controllers, busField, deviceIDField) { |
10 | let me = this; | |
2aa645da DC |
11 | let freeId = PVE.Utils.nextFreeDisk(controllers, me.vmconfig); |
12 | ||
13 | if (freeId !== undefined) { | |
14 | busField.setValue(freeId.controller); | |
15 | deviceIDField.setValue(freeId.id); | |
ecfd8bcd | 16 | } |
2aa645da | 17 | |
ecfd8bcd TL |
18 | }, |
19 | ||
711c07d1 | 20 | setVMConfig: function(vmconfig, autoSelect) { |
ecfd8bcd | 21 | let me = this; |
711c07d1 DM |
22 | |
23 | me.vmconfig = Ext.apply({}, vmconfig); | |
7206af4b | 24 | |
ecfd8bcd TL |
25 | let bussel = me.down('field[name=controller]'); |
26 | let deviceid = me.down('field[name=deviceid]'); | |
0e09929d | 27 | |
2aa645da | 28 | let clist; |
7206af4b | 29 | if (autoSelect === 'cdrom') { |
7206af4b | 30 | if (!Ext.isDefined(me.vmconfig.ide2)) { |
0e09929d EK |
31 | bussel.setValue('ide'); |
32 | deviceid.setValue(2); | |
7206af4b | 33 | return; |
711c07d1 | 34 | } |
c7139315 | 35 | clist = ['ide', 'scsi', 'sata']; |
8058410f | 36 | } else { |
ecfd8bcd | 37 | // in most cases we want to add a disk to the same controller we previously used |
2aa645da | 38 | clist = PVE.Utils.sortByPreviousUsage(me.vmconfig); |
7206af4b | 39 | } |
711c07d1 | 40 | |
ecfd8bcd TL |
41 | me.setToFree(clist, bussel, deviceid); |
42 | ||
0e09929d | 43 | deviceid.validate(); |
711c07d1 DM |
44 | }, |
45 | ||
46 | initComponent: function() { | |
47 | var me = this; | |
48 | ||
49 | Ext.apply(me, { | |
50 | fieldLabel: gettext('Bus/Device'), | |
51 | layout: 'hbox', | |
711c07d1 | 52 | defaults: { |
f6710aac | 53 | hideLabel: true, |
711c07d1 DM |
54 | }, |
55 | items: [ | |
56 | { | |
42902182 | 57 | xtype: 'pveBusSelector', |
711c07d1 | 58 | name: 'controller', |
39c06c69 | 59 | value: PVE.qemu.OSDefaults.generic.busType, |
711c07d1 | 60 | noVirtIO: me.noVirtIO, |
711c07d1 | 61 | allowBlank: false, |
a1fe04b6 | 62 | flex: 2, |
711c07d1 DM |
63 | listeners: { |
64 | change: function(t, value) { | |
369e3ecd | 65 | if (!value) { |
711c07d1 DM |
66 | return; |
67 | } | |
ecfd8bcd | 68 | let field = me.down('field[name=deviceid]'); |
3d0b402b | 69 | field.setMaxValue(PVE.Utils.diskControllerMaxIDs[value] - 1); |
711c07d1 | 70 | field.validate(); |
f6710aac TL |
71 | }, |
72 | }, | |
711c07d1 DM |
73 | }, |
74 | { | |
bf96f60d | 75 | xtype: 'proxmoxintegerfield', |
711c07d1 DM |
76 | name: 'deviceid', |
77 | minValue: 0, | |
3d0b402b | 78 | maxValue: PVE.Utils.diskControllerMaxIDs.ide - 1, |
711c07d1 | 79 | value: '0', |
a1fe04b6 | 80 | flex: 1, |
bf96f60d | 81 | allowBlank: false, |
711c07d1 | 82 | validator: function(value) { |
711c07d1 | 83 | if (!me.rendered) { |
ecfd8bcd | 84 | return undefined; |
711c07d1 | 85 | } |
ecfd8bcd TL |
86 | let controller = me.down('field[name=controller]').getValue(); |
87 | let confid = controller + value; | |
711c07d1 DM |
88 | if (Ext.isDefined(me.vmconfig[confid])) { |
89 | return "This device is already in use."; | |
90 | } | |
91 | return true; | |
f6710aac TL |
92 | }, |
93 | }, | |
94 | ], | |
711c07d1 DM |
95 | }); |
96 | ||
97 | me.callParent(); | |
f6710aac | 98 | }, |
711c07d1 | 99 | }); |