[pve-devel] r6234 - in pve-manager/pve2: . www/manager/form www/manager/qemu
svn-commits at proxmox.com
svn-commits at proxmox.com
Tue Jul 5 12:59:30 CEST 2011
Author: dietmar
Date: 2011-07-05 12:59:30 +0200 (Tue, 05 Jul 2011)
New Revision: 6234
Modified:
pve-manager/pve2/ChangeLog
pve-manager/pve2/www/manager/form/ComboGrid.js
pve-manager/pve2/www/manager/form/FileSelector.js
pve-manager/pve2/www/manager/qemu/HardwareView.js
Log:
impl. PVE.qemu.CDEdit
Modified: pve-manager/pve2/ChangeLog
===================================================================
--- pve-manager/pve2/ChangeLog 2011-07-05 07:47:55 UTC (rev 6233)
+++ pve-manager/pve2/ChangeLog 2011-07-05 10:59:30 UTC (rev 6234)
@@ -1,5 +1,10 @@
2011-07-05 Proxmox Support Team <support at proxmox.com>
+ * www/manager/qemu/HardwareView.js: impl. PVE.qemu.CDEdit
+
+ * www/manager/form/ComboGrid.js: sync value with picker (make it
+ work when we call setValue before load is finished).
+
* www/manager/window/Edit.js: new getParams() function, used to
modify field values before submit (I found no clean way to do that
with ExtJS)
Modified: pve-manager/pve2/www/manager/form/ComboGrid.js
===================================================================
--- pve-manager/pve2/www/manager/form/ComboGrid.js 2011-07-05 07:47:55 UTC (rev 6233)
+++ pve-manager/pve2/www/manager/form/ComboGrid.js 2011-07-05 10:59:30 UTC (rev 6234)
@@ -84,13 +84,15 @@
var form = me.up('form');
if (success) {
var def = me.getValue();
+ if (def)
+ me.setValue(def, true); // sync with grid
if (!def || !store.findRecord(me.valueField, def)) {
var rec = me.store.first();
if (me.autoSelect && rec && rec.data) {
def = rec.data[me.valueField];
- me.setValue(def);
+ me.setValue(def, true);
} else {
- me.setValue('');
+ me.setValue('', true);
}
}
}
Modified: pve-manager/pve2/www/manager/form/FileSelector.js
===================================================================
--- pve-manager/pve2/www/manager/form/FileSelector.js 2011-07-05 07:47:55 UTC (rev 6233)
+++ pve-manager/pve2/www/manager/form/FileSelector.js 2011-07-05 10:59:30 UTC (rev 6234)
@@ -39,14 +39,17 @@
var me = this;
var store = Ext.create('Ext.data.Store', {
- fields: [ 'volid', 'format', 'size', 'used', 'vmid',
- { name: 'text',
- convert: function(value, record) {
- if (value)
- return value;
- return record.data.volid.replace(/^.*:.*\//,'');;
- }
- }],
+ fields: [
+ 'volid', 'format', 'size', 'used', 'vmid',
+ {
+ name: 'text',
+ convert: function(value, record) {
+ if (value)
+ return value;
+ return record.data.volid.replace(/^.*:.*\//,'');;
+ }
+ }
+ ]
});
Ext.apply(me, {
Modified: pve-manager/pve2/www/manager/qemu/HardwareView.js
===================================================================
--- pve-manager/pve2/www/manager/qemu/HardwareView.js 2011-07-05 07:47:55 UTC (rev 6233)
+++ pve-manager/pve2/www/manager/qemu/HardwareView.js 2011-07-05 10:59:30 UTC (rev 6234)
@@ -1,3 +1,129 @@
+Ext.define('PVE.qemu.CDEdit', {
+ extend: 'PVE.window.Edit',
+
+ getParams: function(values) {
+ var me = this;
+
+ var params = {};
+
+ if (values.mediaType === 'iso') {
+ me.drive.file = values.cdimage;
+ } else if (values.mediaType === 'cdrom') {
+ me.drive.file = 'cdrom';
+ } else {
+ me.drive.file = 'none';
+ }
+
+ params[me.confid] = PVE.Parser.printQemuDrive(me.drive);
+
+ return params;
+ },
+
+ initComponent : function() {
+ var me = this;
+
+ var nodename = me.pveSelNode.data.node;
+ if (!nodename)
+ throw "no node name specified";
+
+ if (!me.confid)
+ throw "create not implemented";
+
+ var cdfilesel = Ext.create('PVE.form.FileSelector', {
+ name: 'cdimage',
+ nodename: nodename,
+ storageContent: 'iso',
+ fieldLabel: 'ISO Image',
+ labelAlign: 'right',
+ allowBlank: false
+ });
+
+ var cdstoragesel = Ext.create('PVE.form.StorageSelector', {
+ name: 'storage',
+ nodename: nodename,
+ fieldLabel: 'Storage',
+ labelAlign: 'right',
+ storageContent: 'iso',
+ allowBlank: false,
+ autoSelect: false,
+ listeners: {
+ change: function(f, value) {
+ if (!value)
+ return;
+ cdfilesel.setStorage(value);
+ }
+ }
+ });
+
+ me.items = [
+ {
+ xtype: 'radiofield',
+ name: 'mediaType',
+ inputValue: 'iso',
+ boxLabel: 'Use CD/DVD disc image file (iso)',
+ checked: true,
+ listeners: {
+ change: function(f, value) {
+ if (!me.rendered)
+ return;
+ me.down('field[name=storage]').setDisabled(!value);
+ me.down('field[name=cdimage]').setDisabled(!value);
+ me.down('field[name=cdimage]').validate();
+ }
+ }
+ },
+ cdstoragesel,
+ cdfilesel,
+ {
+ xtype: 'radiofield',
+ name: 'mediaType',
+ inputValue: 'cdrom',
+ boxLabel: 'Use physical CD/DVD Drive'
+ },
+ {
+ xtype: 'radiofield',
+ name: 'mediaType',
+ inputValue: 'none',
+ boxLabel: 'Eject (no media).'
+ }
+ ];
+
+ Ext.applyIf(me, {
+ title: "Change CD/DVD settings (" + me.confid + ")"
+ });
+
+ me.callParent();
+
+ me.load({
+ success: function(form, action) {
+ var value = action.result.data[me.confid];
+ me.drive = PVE.Parser.parseQemuDrive(me.confid, value);
+ if (!me.drive) {
+ Ext.Msg.alert('Error', 'Unable to parse drive options');
+ me.close();
+ return;
+ }
+
+ var values = {};
+ if (me.drive.file === 'cdrom') {
+ values.mediaType = 'cdrom';
+ } else if (me.drive.file === 'none') {
+ values.mediaType = 'none';
+ } else {
+ values.mediaType = 'iso';
+ var match = me.drive.file.match(/^([^:]+):/);
+ if (match) {
+ values.storage = match[1];
+ values.cdimage = me.drive.file;
+ };
+ }
+
+ form.setValues(values);
+ }
+ });
+ }
+});
+
Ext.define('PVE.qemu.HDEdit', {
extend: 'PVE.window.Edit',
@@ -599,7 +725,14 @@
if (!rowdef.editor)
return;
- var win = Ext.create(rowdef.editor, {
+ var editor = rowdef.editor;
+ if (rowdef.tdCls == 'pve-itype-icon-storage') {
+ if (rec.data.value.match(/media=cdrom/)) {
+ editor = 'PVE.qemu.CDEdit';
+ }
+ }
+
+ var win = Ext.create(editor, {
pveSelNode: me.pveSelNode,
confid: rec.data.key,
url: '/api2/extjs/' + baseurl
More information about the pve-devel
mailing list