Ext.define('PVE.window.Wizard', { extend: 'Ext.window.Window', getValues: function(dirtyOnly) { var me = this; var values = {}; var form = me.down('form').getForm(); form.getFields().each(function(field) { if (!field.up('inputpanel') && (!dirtyOnly || field.isDirty())) { PVE.Utils.assemble_field_data(values, field.getSubmitData()); } }); Ext.Array.each(me.query('inputpanel'), function(panel) { PVE.Utils.assemble_field_data(values, panel.getValues(dirtyOnly)); }); return values; }, initComponent: function() { var me = this; var tabs = me.items || []; delete me.items; /* * Items may have the following functions: * validator(): per tab custom validation * onSubmit(): submit handler * onGetValues(): overwrite getValues results */ Ext.Array.each(tabs, function(tab) { tab.disabled = true; }); tabs[0].disabled = false; var check_card = function(card) { var valid = true; var fields = card.query('field, fieldcontainer'); if (card.isXType('fieldcontainer')) { fields.unshift(card); } Ext.Array.each(fields, function(field) { // Note: not all fielcontainer have isValid() if (Ext.isFunction(field.isValid) && !field.isValid()) { valid = false; } }); if (Ext.isFunction(card.validator)) { return card.validator(); } return valid; }; var tbar = Ext.create('Ext.toolbar.Toolbar', { ui: 'footer', region: 'south', margins: '0 5 5 5', items: [ '->', { text: gettext('Back'), disabled: true, itemId: 'back', minWidth: 60, handler: function() { var tp = me.down('#wizcontent'); var atab = tp.getActiveTab(); var prev = tp.items.indexOf(atab) - 1; if (prev < 0) { return; } var ntab = tp.items.getAt(prev); if (ntab) { tp.setActiveTab(ntab); } } }, { text: gettext('Next'), disabled: true, itemId: 'next', minWidth: 60, handler: function() { var form = me.down('form').getForm(); var tp = me.down('#wizcontent'); var atab = tp.getActiveTab(); if (!check_card(atab)) { return; } var next = tp.items.indexOf(atab) + 1; var ntab = tp.items.getAt(next); if (ntab) { ntab.enable(); tp.setActiveTab(ntab); } } }, { text: gettext('Finish'), minWidth: 60, hidden: true, itemId: 'submit', handler: function() { var tp = me.down('#wizcontent'); var atab = tp.getActiveTab(); atab.onSubmit(); } } ] }); var display_header = function(newcard) { var html = '