]>
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 | ||
10 | var confid = me.confid || (values.controller + values.deviceid); | |
11 | ||
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 = {}; | |
22 | ||
23 | params[confid] = PVE.Parser.printQemuDrive(me.drive); | |
24 | ||
25 | return params; | |
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 | ||
65 | initComponent : function() { | |
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', { |
16041408 DM |
74 | noVirtIO: true |
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); | |
91 | me.down('field[name=cdimage]').setDisabled(!value); | |
92 | me.down('field[name=cdimage]').validate(); | |
93 | } | |
94 | } | |
95 | }); | |
96 | ||
97 | me.cdfilesel = Ext.create('PVE.form.FileSelector', { | |
98 | name: 'cdimage', | |
99 | nodename: me.nodename, | |
100 | storageContent: 'iso', | |
08090405 | 101 | fieldLabel: gettext('ISO image'), |
16041408 DM |
102 | labelAlign: 'right', |
103 | allowBlank: false | |
104 | }); | |
105 | ||
106 | me.cdstoragesel = Ext.create('PVE.form.StorageSelector', { | |
107 | name: 'cdstorage', | |
108 | nodename: me.nodename, | |
109 | fieldLabel: gettext('Storage'), | |
110 | labelAlign: 'right', | |
111 | storageContent: 'iso', | |
112 | allowBlank: false, | |
113 | autoSelect: me.insideWizard, | |
114 | listeners: { | |
115 | change: function(f, value) { | |
116 | me.cdfilesel.setStorage(value); | |
117 | } | |
118 | } | |
119 | }); | |
120 | ||
121 | items.push(me.cdstoragesel); | |
122 | items.push(me.cdfilesel); | |
123 | ||
124 | items.push({ | |
125 | xtype: 'radiofield', | |
126 | name: 'mediaType', | |
127 | inputValue: 'cdrom', | |
128 | boxLabel: gettext('Use physical CD/DVD Drive') | |
129 | }); | |
130 | ||
131 | items.push({ | |
132 | xtype: 'radiofield', | |
133 | name: 'mediaType', | |
134 | inputValue: 'none', | |
135 | boxLabel: gettext('Do not use any media') | |
136 | }); | |
137 | ||
5f38c3fc | 138 | me.items = items; |
16041408 DM |
139 | |
140 | me.callParent(); | |
141 | } | |
142 | }); | |
143 | ||
144 | Ext.define('PVE.qemu.CDEdit', { | |
9fccc702 | 145 | extend: 'Proxmox.window.Edit', |
16041408 DM |
146 | |
147 | initComponent : function() { | |
148 | var me = this; | |
149 | ||
150 | var nodename = me.pveSelNode.data.node; | |
151 | if (!nodename) { | |
152 | throw "no node name specified"; | |
153 | } | |
154 | ||
d5e771ce | 155 | me.isCreate = me.confid ? false : true; |
16041408 DM |
156 | |
157 | var ipanel = Ext.create('PVE.qemu.CDInputPanel', { | |
158 | confid: me.confid, | |
159 | nodename: nodename | |
160 | }); | |
161 | ||
162 | Ext.applyIf(me, { | |
163 | subject: 'CD/DVD Drive', | |
164 | items: [ ipanel ] | |
165 | }); | |
166 | ||
167 | me.callParent(); | |
168 | ||
169 | me.load({ | |
170 | success: function(response, options) { | |
171 | ipanel.setVMConfig(response.result.data); | |
172 | if (me.confid) { | |
173 | var value = response.result.data[me.confid]; | |
174 | var drive = PVE.Parser.parseQemuDrive(me.confid, value); | |
175 | if (!drive) { | |
176 | Ext.Msg.alert('Error', 'Unable to parse drive options'); | |
177 | me.close(); | |
178 | return; | |
179 | } | |
180 | ipanel.setDrive(drive); | |
181 | } | |
182 | } | |
183 | }); | |
184 | } | |
185 | }); |