]> git.proxmox.com Git - pve-manager.git/blame - www/manager6/qemu/USBEdit.js
ui: add support for adding TPM devices
[pve-manager.git] / www / manager6 / qemu / USBEdit.js
CommitLineData
f46721af 1Ext.define('PVE.qemu.USBInputPanel', {
ef4ef788 2 extend: 'Proxmox.panel.InputPanel',
8058410f 3 mixins: ['Proxmox.Mixin.CBind'],
f46721af
DC
4
5 autoComplete: false,
6 onlineHelp: 'qm_usb_passthrough',
7
4292a318 8 viewModel: {
f6710aac 9 data: {},
4292a318
TL
10 },
11
f46721af
DC
12 setVMConfig: function(vmconfig) {
13 var me = this;
14 me.vmconfig = vmconfig;
15 },
16
17 onGetValues: function(values) {
18 var me = this;
2e8f031f
TL
19 if (!me.confid) {
20 for (let i = 0; i < 6; i++) {
21 let id = 'usb' + i.toString();
22 if (!me.vmconfig[id]) {
23 me.confid = id;
f46721af
DC
24 break;
25 }
26 }
27 }
28 var val = "";
29 var type = me.down('radiofield').getGroupValue();
30 switch (type) {
31 case 'spice':
17f6a3f6
TL
32 val = 'spice';
33 break;
f46721af
DC
34 case 'hostdevice':
35 case 'port':
17f6a3f6
TL
36 val = 'host=' + values[type];
37 delete values[type];
f46721af
DC
38 break;
39 default:
40 throw "invalid type selected";
41 }
42
4d51f657
AL
43 if (values.usb3) {
44 delete values.usb3;
45 val += ',usb3=1';
46 }
f46721af
DC
47 values[me.confid] = val;
48 return values;
49 },
50
d49d0443
TL
51 items: [
52 {
53 xtype: 'fieldcontainer',
54 defaultType: 'radiofield',
d155bbc9
TL
55 layout: 'fit',
56 items: [
d49d0443
TL
57 {
58 name: 'usb',
59 inputValue: 'spice',
60 boxLabel: gettext('Spice Port'),
61 submitValue: false,
f6710aac 62 checked: true,
d49d0443
TL
63 },
64 {
65 name: 'usb',
66 inputValue: 'hostdevice',
67 boxLabel: gettext('Use USB Vendor/Device ID'),
4292a318 68 reference: 'hostdevice',
f6710aac 69 submitValue: false,
d49d0443
TL
70 },
71 {
72 xtype: 'pveUSBSelector',
73 disabled: true,
74 type: 'device',
75 name: 'hostdevice',
76 cbind: { pveSelNode: '{pveSelNode}' },
4292a318 77 bind: { disabled: '{!hostdevice.checked}' },
d49d0443 78 editable: true,
d49d0443 79 allowBlank: false,
cc9c5af4 80 fieldLabel: gettext('Choose Device'),
d49d0443 81 labelAlign: 'right',
d49d0443
TL
82 },
83 {
84 name: 'usb',
85 inputValue: 'port',
86 boxLabel: gettext('Use USB Port'),
4292a318 87 reference: 'port',
f6710aac 88 submitValue: false,
d49d0443
TL
89 },
90 {
91 xtype: 'pveUSBSelector',
92 disabled: true,
93 name: 'port',
94 cbind: { pveSelNode: '{pveSelNode}' },
4292a318 95 bind: { disabled: '{!port.checked}' },
d49d0443
TL
96 editable: true,
97 type: 'port',
d49d0443
TL
98 allowBlank: false,
99 fieldLabel: gettext('Choose Port'),
100 labelAlign: 'right',
d49d0443
TL
101 },
102 {
103 xtype: 'checkbox',
104 name: 'usb3',
4d51f657 105 inputValue: true,
0d077e81 106 checked: true,
d49d0443 107 reference: 'usb3',
f6710aac
TL
108 fieldLabel: gettext('Use USB3'),
109 },
110 ],
111 },
112 ],
f46721af
DC
113});
114
115Ext.define('PVE.qemu.USBEdit', {
9fccc702 116 extend: 'Proxmox.window.Edit',
f46721af
DC
117
118 vmconfig: undefined,
119
120 isAdd: true,
d155bbc9 121 width: 400,
f46721af
DC
122 subject: gettext('USB Device'),
123
8058410f 124 initComponent: function() {
f46721af
DC
125 var me = this;
126
127 me.isCreate = !me.confid;
128
129 var ipanel = Ext.create('PVE.qemu.USBInputPanel', {
130 confid: me.confid,
f6710aac 131 pveSelNode: me.pveSelNode,
f46721af
DC
132 });
133
134 Ext.apply(me, {
8058410f 135 items: [ipanel],
f46721af
DC
136 });
137
138 me.callParent();
139
140 me.load({
141 success: function(response, options) {
142 ipanel.setVMConfig(response.result.data);
2e8f031f
TL
143 if (me.isCreate) {
144 return;
145 }
f46721af 146
2e8f031f
TL
147 var data = response.result.data[me.confid].split(',');
148 var port, hostdevice, usb3 = false;
149 var type = 'spice';
150
151 for (let i = 0; i < data.length; i++) {
f1374bff 152 if (/^(host=)?(0x)?[a-zA-Z0-9]{4}:(0x)?[a-zA-Z0-9]{4}$/.test(data[i])) {
2e8f031f 153 hostdevice = data[i];
f6710aac 154 hostdevice = hostdevice.replace('host=', '').replace('0x', '');
2e8f031f 155 type = 'hostdevice';
f1374bff 156 } else if (/^(host=)?(\d+)-(\d+(\.\d+)*)$/.test(data[i])) {
2e8f031f
TL
157 port = data[i];
158 port = port.replace('host=', '');
159 type = 'port';
160 }
161
162 if (/^usb3=(1|on|true)$/.test(data[i])) {
163 usb3 = true;
f46721af 164 }
f46721af 165 }
2e8f031f 166 var values = {
8058410f 167 usb: type,
2e8f031f
TL
168 hostdevice: hostdevice,
169 port: port,
f6710aac 170 usb3: usb3,
2e8f031f
TL
171 };
172
173 ipanel.setValues(values);
f6710aac 174 },
f46721af 175 });
f6710aac 176 },
f46721af 177});