/**
 * Parent view for the 4 sliders seen on the color picker window.
 * @private
 */
Ext.define('Ext.ux.colorpick.Slider', {
    extend: 'Ext.container.Container',
    xtype: 'colorpickerslider',
    controller: 'colorpick-slidercontroller',

    afterRender: function() {
        var width, dragCt, dragWidth;

        this.callParent(arguments);

        width = this.width;
        dragCt = this.lookupReference('dragHandleContainer');
        dragWidth = dragCt.getWidth();

        dragCt.el.setStyle('left', ((width - dragWidth) / 2) + 'px');
    },

    baseCls: Ext.baseCSSPrefix + 'colorpicker-slider',

    requires: [
        'Ext.ux.colorpick.SliderController'
    ],

    referenceHolder: true,

    listeners: {
        element: 'el',
        mousedown: 'onMouseDown',
        mouseup: 'onMouseUp',
        dragstart: 'onDragStart'
    },

    // Container for the drag handle; needed since the slider
    // is of static size, while the parent container positions
    // it in the center; this is what receives the beautiful
    // color gradients for the visual
    items: {
        xtype: 'container',
        cls: Ext.baseCSSPrefix + 'colorpicker-draghandle-container',
        reference: 'dragHandleContainer',
        height: '100%',

        // This is the drag handle; note it's 100%x1 in size to allow full
        // vertical drag travel; the inner div has the bigger image
        items: {
            xtype: 'component',
            cls: Ext.baseCSSPrefix + 'colorpicker-draghandle-outer',
            reference: 'dragHandle',
            width: '100%',
            height: 1,
            draggable: true,
            html: '<div class="' + Ext.baseCSSPrefix + 'colorpicker-draghandle"></div>'
        }
    },

    //<debug>
    // Called via data binding whenever selectedColor.h changes;
    setHue: function() {
        Ext.raise('Must implement setHue() in a child class!');
    },
    //</debug>

    getDragHandle: function() {
        return this.lookupReference('dragHandle');
    },

    getDragContainer: function() {
        return this.lookupReference('dragHandleContainer');
    }
});
