/**
 * @private
 */
Ext.define('Ext.pivot.plugin.configurator.window.Window', {
    extend: 'Ext.window.Window',
 
    requires: [
        'Ext.form.Panel',
        'Ext.form.FieldContainer',
        'Ext.form.field.Text',
        'Ext.form.field.Hidden',
        'Ext.form.field.ComboBox',
        'Ext.layout.container.HBox'
    ],
 
    modal:          true,
    closeAction:    'destroy',
 
    initComponent: function(){
        var me = this;
 
        Ext.apply(me, {
            layout:     'fit',
 
            items: [
                me.getSettingsForm()
            ],
 
            buttons: [{
                text:       Ext.Msg.buttonText.ok,
                handler:    me.applySettings,
                scope:      me
            },{
                text:       Ext.Msg.buttonText.cancel,
                handler:    me.cancelSettings,
                scope:      me
            }]
        });
 
        return me.callParent(arguments);
    },
 
    /**
     * @method
     * Override to change settings before applying them. Return false to cancel changes.
     *
     * @param {Object} settings
     */
    beforeApplySettings: Ext.emptyFn,
 
    /**
     * Override to supply own form for settings
     */
    getSettingsForm: function(){
        return {
            xtype:      'form',
            bodyPadding:5,
            items:      []
        };
    },
 
    loadSettings: function(settings){
        var form = this.down('form');
 
        if(form){
            form.getForm().setValues(settings || {});
        }
    },
 
    applySettings: function(){
        var form = this.down('form'),
            settings;
 
        if(form && form.getForm().isValid()) {
            settings = form.getForm().getValues();
            if(this.beforeApplySettings(settings) !== false){
                if(this.fireEvent('applysettings', this, settings) !== false){
                    this.cancelSettings();
                }
            }
        }
    },
 
    cancelSettings: function(){
        this.close();
    }
});