]> git.proxmox.com Git - pve-manager.git/blob - www/manager6/qemu/CDEdit.js
update shipped appliance info index
[pve-manager.git] / www / manager6 / qemu / CDEdit.js
1 Ext.define('PVE.qemu.CDInputPanel', {
2 extend: 'Proxmox.panel.InputPanel',
3 alias: 'widget.pveQemuCDInputPanel',
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) {
73 me.bussel = Ext.create('PVE.form.ControllerSelector', {
74 withVirtIO: false,
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 var cdImageField = me.down('field[name=cdimage]');
92 cdImageField.setDisabled(!value);
93 if (value) {
94 cdImageField.validate();
95 } else {
96 cdImageField.reset();
97 }
98 },
99 },
100 });
101
102 me.cdfilesel = Ext.create('PVE.form.FileSelector', {
103 name: 'cdimage',
104 nodename: me.nodename,
105 storageContent: 'iso',
106 fieldLabel: gettext('ISO image'),
107 labelAlign: 'right',
108 allowBlank: false,
109 });
110
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);
122 },
123 },
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',
133 boxLabel: gettext('Use physical CD/DVD Drive'),
134 });
135
136 items.push({
137 xtype: 'radiofield',
138 name: 'mediaType',
139 inputValue: 'none',
140 boxLabel: gettext('Do not use any media'),
141 });
142
143 me.items = items;
144
145 me.callParent();
146 },
147 });
148
149 Ext.define('PVE.qemu.CDEdit', {
150 extend: 'Proxmox.window.Edit',
151
152 width: 400,
153
154 initComponent: function() {
155 var me = this;
156
157 var nodename = me.pveSelNode.data.node;
158 if (!nodename) {
159 throw "no node name specified";
160 }
161
162 me.isCreate = !me.confid;
163
164 var ipanel = Ext.create('PVE.qemu.CDInputPanel', {
165 confid: me.confid,
166 nodename: nodename,
167 });
168
169 Ext.applyIf(me, {
170 subject: 'CD/DVD Drive',
171 items: [ipanel],
172 });
173
174 me.callParent();
175
176 me.load({
177 success: function(response, options) {
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 }
189 },
190 });
191 },
192 });