]> git.proxmox.com Git - pve-manager.git/blob - www/manager/qemu/CDEdit.js
159002869748e06624ec95cfa0103bbc7bdeffa5
[pve-manager.git] / www / manager / qemu / CDEdit.js
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',
85 boxLabel: 'Use CD/DVD disc image file (iso)',
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',
103 fieldLabel: 'ISO Image',
104 labelAlign: 'right',
105 allowBlank: false
106 });
107
108 me.cdstoragesel = Ext.create('PVE.form.StorageSelector', {
109 name: 'cdstorage',
110 nodename: me.nodename,
111 fieldLabel: gettext('Storage'),
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',
130 boxLabel: 'Use physical CD/DVD Drive'
131 });
132
133 items.push({
134 xtype: 'radiofield',
135 name: 'mediaType',
136 inputValue: 'none',
137 boxLabel: 'Do not use any media'
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, {
169 subject: 'CD/DVD Drive',
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 });