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