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