]> git.proxmox.com Git - pve-manager.git/blob - www/manager/qemu/CreateWizard.js
add balloon GUI
[pve-manager.git] / www / manager / qemu / CreateWizard.js
1 // fixme: howto avoid jslint type confusion?
2 /*jslint confusion: true */
3 Ext.define('PVE.qemu.CreateWizard', {
4 extend: 'PVE.window.Wizard',
5
6 initComponent: function() {
7 var me = this;
8
9 var summarystore = Ext.create('Ext.data.Store', {
10 model: 'KeyValue',
11 sorters: [
12 {
13 property : 'key',
14 direction: 'ASC'
15 }
16 ]
17 });
18
19 var cdpanel = Ext.create('PVE.qemu.CDInputPanel', {
20 title: 'CD/DVD',
21 confid: 'ide2',
22 fieldDefaults: {
23 labelWidth: 160
24 },
25 insideWizard: true
26 });
27
28 var hdpanel = Ext.create('PVE.qemu.HDInputPanel', {
29 title: gettext('Hard Disk'),
30 create: true,
31 insideWizard: true
32 });
33
34 var networkpanel = Ext.create('PVE.qemu.NetworkInputPanel', {
35 title: gettext('Network'),
36 insideWizard: true
37 });
38
39 Ext.applyIf(me, {
40 subject: gettext('Virtual Machine'),
41 items: [
42 {
43 xtype: 'inputpanel',
44 title: gettext('General'),
45 column1: [
46 {
47 xtype: 'PVE.form.NodeSelector',
48 name: 'nodename',
49 fieldLabel: gettext('Node'),
50 allowBlank: false,
51 onlineValidator: true,
52 listeners: {
53 change: function(f, value) {
54 networkpanel.setNodename(value);
55 hdpanel.setNodename(value);
56 cdpanel.setNodename(value);
57 }
58 }
59 },
60 {
61 xtype: 'pveVMIDSelector',
62 name: 'vmid',
63 value: '',
64 loadNextFreeVMID: true,
65 validateExists: false
66 },
67 {
68 xtype: 'textfield',
69 name: 'name',
70 value: '',
71 fieldLabel: gettext('Name'),
72 allowBlank: true
73 }
74 ],
75 column2: [
76 {
77 xtype: 'pvePoolSelector',
78 fieldLabel: gettext('Resource Pool'),
79 name: 'pool',
80 value: '',
81 allowBlank: true
82 }
83 ],
84 onGetValues: function(values) {
85 if (!values.name) {
86 delete values.name;
87 }
88 if (!values.pool) {
89 delete values.pool;
90 }
91 return values;
92 }
93 },
94 {
95 title: 'OS',
96 xtype: 'PVE.qemu.OSTypeInputPanel'
97 },
98 cdpanel,
99 hdpanel,
100 {
101 xtype: 'PVE.qemu.ProcessorInputPanel',
102 title: 'CPU'
103 },
104 {
105 xtype: 'PVE.qemu.MemoryInputPanel',
106 insideWizard: true,
107 title: gettext('Memory')
108 },
109 networkpanel,
110 {
111 title: gettext('Confirm'),
112 layout: 'fit',
113 items: [
114 {
115 title: gettext('Settings'),
116 xtype: 'grid',
117 store: summarystore,
118 columns: [
119 {header: 'Key', width: 150, dataIndex: 'key'},
120 {header: 'Value', flex: 1, dataIndex: 'value'}
121 ]
122 }
123 ],
124 listeners: {
125 show: function(panel) {
126 var form = me.down('form').getForm();
127 var kv = me.getValues();
128 var data = [];
129 Ext.Object.each(kv, function(key, value) {
130 if (key === 'delete') { // ignore
131 return;
132 }
133 var html = Ext.htmlEncode(Ext.JSON.encode(value));
134 data.push({ key: key, value: value });
135 });
136 summarystore.suspendEvents();
137 summarystore.removeAll();
138 summarystore.add(data);
139 summarystore.sort();
140 summarystore.resumeEvents();
141 summarystore.fireEvent('datachanged', summarystore);
142
143 }
144 },
145 onSubmit: function() {
146 var kv = me.getValues();
147 delete kv['delete'];
148
149 var nodename = kv.nodename;
150 delete kv.nodename;
151
152 PVE.Utils.API2Request({
153 url: '/nodes/' + nodename + '/qemu',
154 waitMsgTarget: me,
155 method: 'POST',
156 params: kv,
157 success: function(response){
158 me.close();
159 },
160 failure: function(response, opts) {
161 Ext.Msg.alert(gettext('Error'), response.htmlStatus);
162 }
163 });
164 }
165 }
166 ]
167 });
168
169 me.callParent();
170 }
171 });
172
173
174
175