/**
 * This class implements the form that allows changing the pivot matrix settings.
 */
Ext.define('Ext.pivot.plugin.configurator.Settings', {
    extend: 'Ext.form.Panel',
 
    requires: [
        'Ext.pivot.plugin.configurator.store.Select',
        'Ext.pivot.plugin.configurator.SettingsController',
        'Ext.form.FieldSet',
        'Ext.field.Select',
        'Ext.layout.VBox',
        'Ext.layout.HBox',
        'Ext.TitleBar'
    ],
 
    xtype: 'pivotsettings',
    
    /**
     * @cfg controller
     * @inheritdoc
     */
    controller: 'pivotsettings',
    
    /**
     * @cfg viewModel
     * @inheritdoc
     */
    viewModel: {
        stores: {
            sLayout: {
                type: 'pivotselect'
            },
            sPositions: {
                type: 'pivotselect'
            },
            sYesNo: {
                type: 'pivotselect'
            }
        }
    },
 
    eventedConfig: {
        matrixProperties: null
    },
 
    /**
     * @cfg listeners
     * @inheritdoc
     */
    listeners: {
        matrixpropertieschange: 'onMatrixPropertiesChanged'
    },
 
    /**
     * @cfg defaults
     * @inheritdoc
     */
    defaults: {
        xtype:      'fieldset',
        defaults: {
            labelAlign: 'top'
        }
    },
 
    /**
     * @cfg showAnimation
     * @inheritdoc
     */
    showAnimation: {
        type: 'slideIn',
        duration: 250,
        easing: 'ease-out',
        direction: 'left'
    },
 
    /**
     * @cfg hideAnimation
     * @inheritdoc
     */
    hideAnimation: {
        type: 'slideOut',
        duration: 250,
        easing: 'ease-in',
        direction: 'right'
    },
 
    titleText: 'Settings',
    okText: 'Ok',
    cancelText: 'Cancel',
    layoutText: 'Layout',
    outlineLayoutText: 'Outline',
    compactLayoutText: 'Compact',
    tabularLayoutText: 'Tabular',
    firstPositionText: 'First',
    hidePositionText: 'Hide',
    lastPositionText: 'Last',
    rowSubTotalPositionText: 'Row subtotal position',
    columnSubTotalPositionText: 'Column subtotal position',
    rowTotalPositionText: 'Row total position',
    columnTotalPositionText: 'Column total position',
    showZeroAsBlankText: 'Show zero as blank',
    yesText: 'Yes',
    noText: 'No',
 
    updateMatrixProperties: function(settings){
        var me = this,
            items;
 
        me.removeAll(true, true);
        if(!settings){
            return;
        }
 
        items = [{
            xtype:      'titlebar',
            docked:     'top',
            titleAlign: 'left',
            title:      me.titleText,
            items: [{
                text:   me.cancelText,
                align:  'right',
                ui:     'alt',
                handler:'cancelSettings'
            },{
                text:   me.okText,
                align:  'right',
                ui:     'alt',
                handler:'applySettings',
                margin: '0 0 0 5'
            }]
        },{
            label:          me.layoutText,
            xtype:          'selectfield',
            autoSelect:     false,
            useClearIcon:   true,
            name:           'viewLayoutType',
            bind: {
                store:      '{sLayout}',
                value:      '{form.viewLayoutType}'
            }
        },{
            label:          me.rowSubTotalPositionText,
            xtype:          'selectfield',
            autoSelect:     false,
            useClearIcon:   true,
            name:           'rowSubTotalsPosition',
            bind: {
                store:      '{sPositions}',
                value:      '{form.rowSubTotalsPosition}'
            }
        },{
            label:          me.columnSubTotalPositionText,
            xtype:          'selectfield',
            autoSelect:     false,
            useClearIcon:   true,
            name:           'colSubTotalsPosition',
            bind: {
                store:      '{sPositions}',
                value:      '{form.colSubTotalsPosition}'
            }
        },{
            label:          me.rowTotalPositionText,
            xtype:          'selectfield',
            autoSelect:     false,
            useClearIcon:   true,
            name:           'rowGrandTotalsPosition',
            bind: {
                store:      '{sPositions}',
                value:      '{form.rowGrandTotalsPosition}'
            }
        },{
            label:          me.columnTotalPositionText,
            xtype:          'selectfield',
            autoSelect:     false,
            useClearIcon:   true,
            name:           'colGrandTotalsPosition',
            bind: {
                store:      '{sPositions}',
                value:      '{form.colGrandTotalsPosition}'
            }
        },{
            label:          me.showZeroAsBlankText,
            xtype:          'selectfield',
            autoSelect:     false,
            useClearIcon:   true,
            name:           'showZeroAsBlank',
            bind: {
                store:      '{sYesNo}',
                value:      '{form.showZeroAsBlank}'
            }
        }];
 
        me.add(items);
    }
 
});