]>
Commit | Line | Data |
---|---|---|
aff192e6 DM |
1 | // fixme: howto avoid jslint type confusion? |
2 | /*jslint confusion: true */ | |
3 | Ext.define('PVE.qemu.CDInputPanel', { | |
4 | extend: 'PVE.panel.InputPanel', | |
5 | alias: 'widget.PVE.qemu.CDInputPanel', | |
6 | ||
7 | insideWizard: false, | |
8 | ||
9 | onGetValues: function(values) { | |
10 | var me = this; | |
11 | ||
12 | var confid = me.confid || (values.controller + values.deviceid); | |
13 | ||
14 | me.drive.media = 'cdrom'; | |
15 | if (values.mediaType === 'iso') { | |
16 | me.drive.file = values.cdimage; | |
17 | } else if (values.mediaType === 'cdrom') { | |
18 | me.drive.file = 'cdrom'; | |
19 | } else { | |
20 | me.drive.file = 'none'; | |
21 | } | |
22 | ||
23 | var params = {}; | |
24 | ||
25 | params[confid] = PVE.Parser.printQemuDrive(me.drive); | |
26 | ||
27 | return params; | |
28 | }, | |
29 | ||
30 | setVMConfig: function(vmconfig) { | |
31 | var me = this; | |
32 | ||
33 | if (me.bussel) { | |
34 | me.bussel.setVMConfig(vmconfig, 'cdrom'); | |
35 | } | |
36 | }, | |
37 | ||
38 | setDrive: function(drive) { | |
39 | var me = this; | |
40 | ||
41 | var values = {}; | |
42 | if (drive.file === 'cdrom') { | |
43 | values.mediaType = 'cdrom'; | |
44 | } else if (drive.file === 'none') { | |
45 | values.mediaType = 'none'; | |
46 | } else { | |
47 | values.mediaType = 'iso'; | |
48 | var match = drive.file.match(/^([^:]+):/); | |
49 | if (match) { | |
50 | values.cdstorage = match[1]; | |
51 | values.cdimage = drive.file; | |
52 | } | |
53 | } | |
54 | ||
55 | me.drive = drive; | |
56 | ||
57 | me.setValues(values); | |
58 | }, | |
59 | ||
60 | setNodename: function(nodename) { | |
61 | var me = this; | |
62 | ||
63 | me.cdstoragesel.setNodename(nodename); | |
64 | me.cdfilesel.setStorage(undefined, nodename); | |
65 | }, | |
66 | ||
67 | initComponent : function() { | |
68 | var me = this; | |
69 | ||
70 | me.drive = {}; | |
71 | ||
72 | var items = []; | |
73 | ||
74 | if (!me.confid) { | |
75 | me.bussel = Ext.createWidget('PVE.form.ControllerSelector', { | |
76 | noVirtIO: true | |
77 | }); | |
78 | items.push(me.bussel); | |
79 | } | |
80 | ||
81 | items.push({ | |
82 | xtype: 'radiofield', | |
83 | name: 'mediaType', | |
84 | inputValue: 'iso', | |
0070ee37 | 85 | boxLabel: gettext('Use CD/DVD disc image file (iso)'), |
aff192e6 DM |
86 | checked: true, |
87 | listeners: { | |
88 | change: function(f, value) { | |
89 | if (!me.rendered) { | |
90 | return; | |
91 | } | |
92 | me.down('field[name=cdstorage]').setDisabled(!value); | |
93 | me.down('field[name=cdimage]').setDisabled(!value); | |
94 | me.down('field[name=cdimage]').validate(); | |
95 | } | |
96 | } | |
97 | }); | |
98 | ||
99 | me.cdfilesel = Ext.create('PVE.form.FileSelector', { | |
100 | name: 'cdimage', | |
101 | nodename: me.nodename, | |
102 | storageContent: 'iso', | |
0070ee37 | 103 | fieldLabel: gettext('ISO Image'), |
aff192e6 DM |
104 | labelAlign: 'right', |
105 | allowBlank: false | |
106 | }); | |
107 | ||
108 | me.cdstoragesel = Ext.create('PVE.form.StorageSelector', { | |
109 | name: 'cdstorage', | |
110 | nodename: me.nodename, | |
6b21ab95 | 111 | fieldLabel: gettext('Storage'), |
aff192e6 DM |
112 | labelAlign: 'right', |
113 | storageContent: 'iso', | |
114 | allowBlank: false, | |
115 | autoSelect: me.insideWizard, | |
116 | listeners: { | |
117 | change: function(f, value) { | |
118 | me.cdfilesel.setStorage(value); | |
119 | } | |
120 | } | |
121 | }); | |
122 | ||
123 | items.push(me.cdstoragesel); | |
124 | items.push(me.cdfilesel); | |
125 | ||
126 | items.push({ | |
127 | xtype: 'radiofield', | |
128 | name: 'mediaType', | |
129 | inputValue: 'cdrom', | |
0070ee37 | 130 | boxLabel: gettext('Use physical CD/DVD Drive') |
aff192e6 DM |
131 | }); |
132 | ||
133 | items.push({ | |
134 | xtype: 'radiofield', | |
135 | name: 'mediaType', | |
136 | inputValue: 'none', | |
5a13abc1 | 137 | boxLabel: gettext('Do not use any media') |
aff192e6 DM |
138 | }); |
139 | ||
140 | if (me.insideWizard) { | |
141 | me.column1 = items; | |
142 | } else { | |
143 | me.items = items; | |
144 | } | |
145 | ||
146 | me.callParent(); | |
147 | } | |
148 | }); | |
149 | ||
150 | Ext.define('PVE.qemu.CDEdit', { | |
151 | extend: 'PVE.window.Edit', | |
152 | ||
153 | initComponent : function() { | |
154 | var me = this; | |
155 | ||
156 | var nodename = me.pveSelNode.data.node; | |
157 | if (!nodename) { | |
158 | throw "no node name specified"; | |
159 | } | |
160 | ||
161 | me.create = me.confid ? false : true; | |
162 | ||
163 | var ipanel = Ext.create('PVE.qemu.CDInputPanel', { | |
164 | confid: me.confid, | |
165 | nodename: nodename | |
166 | }); | |
167 | ||
168 | Ext.applyIf(me, { | |
6b21ab95 | 169 | subject: 'CD/DVD Drive', |
aff192e6 DM |
170 | items: [ ipanel ] |
171 | }); | |
172 | ||
173 | me.callParent(); | |
174 | ||
175 | me.load({ | |
176 | success: function(response, options) { | |
177 | ipanel.setVMConfig(response.result.data); | |
178 | if (me.confid) { | |
179 | var value = response.result.data[me.confid]; | |
180 | var drive = PVE.Parser.parseQemuDrive(me.confid, value); | |
181 | if (!drive) { | |
182 | Ext.Msg.alert('Error', 'Unable to parse drive options'); | |
183 | me.close(); | |
184 | return; | |
185 | } | |
186 | ipanel.setDrive(drive); | |
187 | } | |
188 | } | |
189 | }); | |
190 | } | |
191 | }); |