X-Git-Url: http://git.ithinksw.org/extjs.git/blobdiff_plain/ee06f37b0f6f6d94cd05a6ffae556660f7c4a2bc..c930e9176a5a85509c5b0230e2bff5c22a591432:/src/widgets/form/RadioGroup.js diff --git a/src/widgets/form/RadioGroup.js b/src/widgets/form/RadioGroup.js new file mode 100644 index 00000000..af1c1f5f --- /dev/null +++ b/src/widgets/form/RadioGroup.js @@ -0,0 +1,116 @@ +/*! + * Ext JS Library 3.0.0 + * Copyright(c) 2006-2009 Ext JS, LLC + * licensing@extjs.com + * http://www.extjs.com/license + */ +/** + * @class Ext.form.RadioGroup + * @extends Ext.form.CheckboxGroup + * A grouping container for {@link Ext.form.Radio} controls. + * @constructor + * Creates a new RadioGroup + * @param {Object} config Configuration options + * @xtype radiogroup + */ +Ext.form.RadioGroup = Ext.extend(Ext.form.CheckboxGroup, { + /** + * @cfg {Boolean} allowBlank True to allow every item in the group to be blank (defaults to true). + * If allowBlank = false and no items are selected at validation time, {@link @blankText} will + * be used as the error text. + */ + allowBlank : true, + /** + * @cfg {String} blankText Error text to display if the {@link #allowBlank} validation fails + * (defaults to 'You must select one item in this group') + */ + blankText : 'You must select one item in this group', + + // private + defaultType : 'radio', + + // private + groupCls : 'x-form-radio-group', + + /** + * @event change + * Fires when the state of a child radio changes. + * @param {Ext.form.RadioGroup} this + * @param {Ext.form.Radio} checked The checked radio + */ + + /** + * Gets the selected {@link Ext.form.Radio} in the group, if it exists. + * @return {Ext.form.Radio} The selected radio. + */ + getValue : function(){ + var out = null; + this.eachItem(function(item){ + if(item.checked){ + out = item; + return false; + } + }); + return out; + }, + + /** + * Sets the checked radio in the group. + * @param {String/Ext.form.Radio} id The radio to check. + * @param {Boolean} value The value to set the radio. + * @return {Ext.form.RadioGroup} this + */ + setValue : function(id, value){ + if(this.rendered){ + if(arguments.length > 1){ + var f = this.getBox(id); + if(f){ + f.setValue(value); + if(f.checked){ + this.eachItem(function(item){ + if (item !== f){ + item.setValue(false); + } + }); + } + } + }else{ + this.setValueForItem(id); + } + }else{ + this.values = arguments; + } + return this; + }, + + // private + fireChecked : function(){ + if(!this.checkTask){ + this.checkTask = new Ext.util.DelayedTask(this.bufferChecked, this); + } + this.checkTask.delay(10); + }, + + // private + bufferChecked : function(){ + var out = null; + this.eachItem(function(item){ + if(item.checked){ + out = item; + return false; + } + }); + this.fireEvent('change', this, out); + }, + + onDestroy : function(){ + if(this.checkTask){ + this.checkTask.cancel(); + this.checkTask = null; + } + Ext.form.RadioGroup.superclass.onDestroy.call(this); + } + +}); + +Ext.reg('radiogroup', Ext.form.RadioGroup);