]> git.proxmox.com Git - pve-manager.git/blame - www/manager6/qemu/CDEdit.js
ui: lxc/qemu: add disk reassign and action submenu
[pve-manager.git] / www / manager6 / qemu / CDEdit.js
CommitLineData
16041408 1Ext.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
149Ext.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});