pve-manager/www/manager/qemu/CreateWizard.js
2011-11-04 12:47:15 +01:00

166 lines
3.3 KiB
JavaScript

// fixme: howto avoid jslint type confusion?
/*jslint confusion: true */
Ext.define('PVE.qemu.CreateWizard', {
extend: 'PVE.window.Wizard',
requires: [
'Ext.form.*',
'PVE.data.ResourceStore'
],
initComponent: function() {
var me = this;
var nextvmid = PVE.data.ResourceStore.findNextVMID();
var summarystore = Ext.create('Ext.data.Store', {
model: 'KeyValue',
sorters: [
{
property : 'key',
direction: 'ASC'
}
]
});
var cdpanel = Ext.create('PVE.qemu.CDInputPanel', {
title: 'Installation Media',
confid: 'ide2',
insideWizard: true
});
var hdpanel = Ext.create('PVE.qemu.HDInputPanel', {
title: 'Harddisk',
create: true,
insideWizard: true
});
var networkpanel = Ext.create('PVE.qemu.NetworkInputPanel', {
title: 'Network',
insideWizard: true
});
Ext.applyIf(me, {
title: 'Create new virtual machine',
items: [
{
xtype: 'inputpanel',
title: 'General',
column1: [
{
xtype: 'PVE.form.NodeSelector',
name: 'nodename',
fieldLabel: 'Node',
allowBlank: false,
onlineValidator: true,
listeners: {
change: function(f, value) {
networkpanel.setNodename(value);
hdpanel.setNodename(value);
cdpanel.setNodename(value);
}
}
},
{
xtype: 'pveVMIDSelector',
name: 'vmid',
value: nextvmid,
validateExists: false
},
{
xtype: 'textfield',
name: 'name',
value: '',
fieldLabel: 'VM name',
allowBlank: true
}
],
onGetValues: function(values) {
if (!values.name) {
delete values.name;
}
return values;
}
},
{
title: 'OS Type',
xtype: 'PVE.qemu.OSTypeInputPanel'
},
cdpanel,
hdpanel,
{
xtype: 'PVE.qemu.ProcessorInputPanel',
title: 'CPU'
},
{
xtype: 'PVE.qemu.MemoryInputPanel',
insideWizard: true,
title: 'Memory'
},
networkpanel,
{
title: 'Confirm',
layout: 'fit',
items: [
{
title: 'Settings',
xtype: 'grid',
store: summarystore,
columns: [
{header: 'Key', width: 150, dataIndex: 'key'},
{header: 'Value', flex: 1, dataIndex: 'value'}
]
}
],
listeners: {
show: function(panel) {
var form = me.down('form').getForm();
var kv = me.getValues();
var data = [];
Ext.Object.each(kv, function(key, value) {
if (key === 'delete') { // ignore
return;
}
var html = Ext.htmlEncode(Ext.JSON.encode(value));
data.push({ key: key, value: value });
});
summarystore.suspendEvents();
summarystore.removeAll();
summarystore.add(data);
summarystore.sort();
summarystore.resumeEvents();
summarystore.fireEvent('datachanged', summarystore);
}
},
onSubmit: function() {
var kv = me.getValues();
delete kv['delete'];
var nodename = kv.nodename;
delete kv.nodename;
PVE.Utils.API2Request({
url: '/nodes/' + nodename + '/qemu',
waitMsgTarget: me,
method: 'POST',
params: kv,
success: function(response){
me.close();
},
failure: function(response, opts) {
Ext.Msg.alert('Error', response.htmlStatus);
}
});
}
}
]
});
me.callParent();
}
});