]>
Commit | Line | Data |
---|---|---|
711c07d1 DM |
1 | Ext.define('PVE.form.ControllerSelector', { |
2 | extend: 'Ext.form.FieldContainer', | |
3 | alias: ['widget.PVE.form.ControllerSelector'], | |
4 | ||
5 | statics: { | |
6 | maxIds: { | |
7 | ide: 3, | |
8 | sata: 5, | |
9 | virtio: 15, | |
10 | scsi: 13 | |
11 | } | |
12 | }, | |
13 | ||
14 | noVirtIO: false, | |
15 | ||
16 | noScsi: false, | |
17 | ||
18 | vmconfig: {}, // used to check for existing devices | |
19 | ||
20 | setVMConfig: function(vmconfig, autoSelect) { | |
21 | var me = this; | |
22 | ||
23 | me.vmconfig = Ext.apply({}, vmconfig); | |
24 | if (autoSelect) { | |
25 | var clist = ['ide', 'virtio', 'scsi', 'sata']; | |
26 | if (autoSelect === 'cdrom') { | |
27 | clist = ['ide', 'scsi', 'sata']; | |
28 | if (!Ext.isDefined(me.vmconfig.ide2)) { | |
29 | me.down('field[name=controller]').setValue('ide'); | |
30 | me.down('field[name=deviceid]').setValue(2); | |
31 | return; | |
32 | } | |
33 | } else if (me.vmconfig.ostype === 'l26') { | |
34 | clist = ['virtio', 'ide', 'scsi', 'sata']; | |
35 | } | |
36 | ||
37 | Ext.Array.each(clist, function(controller) { | |
38 | var confid, i; | |
39 | if ((controller === 'virtio' && me.noVirtIO) || | |
40 | (controller === 'scsi' && me.noScsi)) { | |
41 | return; //continue | |
42 | } | |
43 | me.down('field[name=controller]').setValue(controller); | |
44 | for (i = 0; i <= PVE.form.ControllerSelector.maxIds[controller]; i++) { | |
45 | confid = controller + i.toString(); | |
46 | if (!Ext.isDefined(me.vmconfig[confid])) { | |
47 | me.down('field[name=deviceid]').setValue(i); | |
48 | return false; // break | |
49 | } | |
50 | } | |
51 | }); | |
52 | } | |
53 | me.down('field[name=deviceid]').validate(); | |
54 | }, | |
55 | ||
56 | initComponent: function() { | |
57 | var me = this; | |
58 | ||
59 | Ext.apply(me, { | |
60 | fieldLabel: gettext('Bus/Device'), | |
61 | layout: 'hbox', | |
62 | height: 22, // hack: set to same height as other fields | |
63 | defaults: { | |
64 | flex: 1, | |
65 | hideLabel: true | |
66 | }, | |
67 | items: [ | |
68 | { | |
69 | xtype: 'PVE.form.BusTypeSelector', | |
70 | name: 'controller', | |
71 | value: 'ide', | |
72 | noVirtIO: me.noVirtIO, | |
73 | noScsi: me.noScsi, | |
74 | allowBlank: false, | |
75 | listeners: { | |
76 | change: function(t, value) { | |
77 | if (!me.rendered || !value) { | |
78 | return; | |
79 | } | |
80 | var field = me.down('field[name=deviceid]'); | |
81 | field.setMaxValue(PVE.form.ControllerSelector.maxIds[value]); | |
82 | field.validate(); | |
83 | } | |
84 | } | |
85 | }, | |
86 | { | |
87 | xtype: 'numberfield', | |
88 | name: 'deviceid', | |
89 | minValue: 0, | |
90 | maxValue: PVE.form.ControllerSelector.maxIds.ide, | |
91 | value: '0', | |
92 | validator: function(value) { | |
93 | /*jslint confusion: true */ | |
94 | if (!me.rendered) { | |
95 | return; | |
96 | } | |
97 | var field = me.down('field[name=controller]'); | |
98 | var controller = field.getValue(); | |
99 | var confid = controller + value; | |
100 | if (Ext.isDefined(me.vmconfig[confid])) { | |
101 | return "This device is already in use."; | |
102 | } | |
103 | return true; | |
104 | } | |
105 | } | |
106 | ] | |
107 | }); | |
108 | ||
109 | me.callParent(); | |
110 | } | |
111 | }); |