# Checkbox.js

    /**
     * @class Ext.form.Checkbox
     * @extends Ext.form.Field
     * Single checkbox field.  Can be used as a direct replacement for traditional checkbox fields.
     * @constructor
     * Creates a new Checkbox
     * @param {Object} config Configuration options
     */
    Ext.form.Checkbox = function(config){
        Ext.form.Checkbox.superclass.constructor.call(this, config);
        this.addEvents({
            /**
             * @event check
             * Fires when the checkbox is checked or unchecked.
    	     * @param {Ext.form.Checkbox} this This checkbox
    	     * @param {Boolean} checked The new checked value
    	     */
            check : true
        });
    };

    Ext.extend(Ext.form.Checkbox, Ext.form.Field,  {
        /**
         * @cfg {String} focusClass The CSS class to use when the checkbox receives focus (defaults to 'x-form-check-focus')
         */
        focusClass : "x-form-check-focus",
        /**
         * @cfg {String} fieldClass The default CSS class for the checkbox (defaults to "x-form-field")
         */
        fieldClass: "x-form-field",
        /**
         * @cfg {Boolean} checked True if the the checkbox should render already checked (defaults to false)
         */
        checked: false,

        // private
        defaultAutoCreate : { tag: "input", type: 'checkbox', autocomplete: "off"},
        /**
         * @cfg {String} boxLabel The text that appears beside the checkbox
         */
        boxLabel : undefined,
        /**
         * @cfg {String} inputValue The value that should go into the generated input element's value attribute
         */
        //
        onResize : function(){
            Ext.form.Checkbox.superclass.onResize.apply(this, arguments);
            if(!this.boxLabel){
                this.el.alignTo(this.wrap, 'c-c');
            }
        },

        initEvents : function(){
            Ext.form.Checkbox.superclass.initEvents.call(this);
            this.el.on("click", this.onClick,  this);
            this.el.on("change", this.onClick,  this);
        },

        getResizeEl : function(){
            return this.wrap;
        },

        getPositionEl : function(){
            return this.wrap;
        },

        // private
        onRender : function(ct, position){
            Ext.form.Checkbox.superclass.onRender.call(this, ct, position);
            if(this.inputValue !== undefined){
                this.el.dom.value = this.inputValue;
            }
            this.wrap = this.el.wrap({cls: "x-form-check-wrap"});
            if(this.boxLabel){
                this.wrap.createChild({tag: 'label', htmlFor: this.el.id, cls: 'x-form-cb-label', html: this.boxLabel});
            }
            if(this.checked){
                this.setValue(true);
            }else{
                this.checked = this.el.dom.checked;
            }
        },

        // private
        initValue : Ext.emptyFn,

        /**
         * Returns the checked state of the checkbox.
         * @return {Boolean} True if checked, else false
         */
        getValue : function(){
            if(this.rendered){
                return this.el.dom.checked;
            }
            return false;
        },

    	// private
        onClick : function(){
            if(this.el.dom.checked != this.checked){
                this.setValue(this.el.dom.checked);
            }
        },

        /**
         * Sets the checked state of the checkbox.
         * @param {Boolean/String} checked True, 'true', '1', or 'on' to check the checkbox, any other value will uncheck it.
         */
        setValue : function(v){
            this.checked = (v === true || v === 'true' || v == '1' || String(v).toLowerCase() == 'on');
            if(this.el && this.el.dom){
                this.el.dom.checked = this.checked;
            }
            this.fireEvent("check", this, this.checked);
        }
    });

Ext - Copyright © 2006-2007 Ext JS, LLC
All rights reserved.