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