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