/* * Ext GWT - Ext for GWT * Copyright(c) 2007-2009, Ext JS, LLC. * licensing@extjs.com * * http://extjs.com/license */ package com.extjs.gxt.ui.client.widget.form; import com.extjs.gxt.ui.client.GXT; /** * A group of Radio's. * * <dl> * <dt>Events:</dt> * * <dd><b>Change</b> : FieldEvent(field, value, oldValue)<br> * <div>Fires after a child radio is selected.</div> * <ul> * <li>field : this the group, not the radio</li> * </ul> * </dd> * </dl> */ public class RadioGroup extends MultiField<Radio> { /** * TextField Messages. */ public class RadioGroupMessages extends FieldMessages { private String selectionRequired = GXT.MESSAGES.textField_blankText(); public String getSelectionRequired() { return selectionRequired; } public void setSelectionRequired(String selectionRequired) { this.selectionRequired = selectionRequired; } } private static int autoId = 0; private String groupName; private boolean selectionRequired; /** * Creates a new radio group. */ public RadioGroup() { this("gxt.RadioGroup." + (autoId++)); } /** * Creates a new radio group. * * @param name the group name */ public RadioGroup(String name) { this.groupName = name; messages = new RadioGroupMessages(); setSpacing(5); } public void add(Radio radio) { super.add(radio); radio.group = this; radio.setName(groupName); } @Override public RadioGroupMessages getMessages() { return (RadioGroupMessages) messages; } /** * Returns the selected radio. */ @Override public Radio getValue() { for (int i = 0; i < getAll().size(); i++) { Radio r = (Radio)getAll().get(i); if (r.getValue()) { return r; } } return null; } /** * Returns true if a selection is required. * * @return the selection required state */ public boolean isSelectionRequired() { return selectionRequired; } @Override public boolean isValid(boolean preventMark) { if (selectionRequired) { boolean sel = false; for (int i = 0; i < getAll().size(); i++) { Radio r = (Radio)getAll().get(i); if (r.getValue()) { sel = true; } } if (!sel) { boolean restore = this.preventMark; this.preventMark = preventMark; markInvalid(getMessages().getSelectionRequired()); this.preventMark = restore; return false; } } for (int i = 0; i < getAll().size(); i++) { Radio radio = (Radio)getAll().get(i); if (!radio.isValid(preventMark)) { return false; } } return true; } /** * Sets whether a selection is required when validating the group (defaults to * false). * * @param selectionRequired true to require a selection */ public void setSelectionRequired(boolean selectionRequired) { this.selectionRequired = selectionRequired; } @Override public void setValue(Radio value) { for (int i = 0; i < getAll().size(); i++) { Radio r = (Radio)getAll().get(i); if (r.equals(value)) { r.setValue(true); } } } protected void onRadioClick(Radio radio) { for (int i = 0; i < getAll().size(); i++) { Radio r = (Radio)getAll().get(i); if (r == radio) { r.setValue(true); } else { r.setValue(false); } } } protected void onRadioSelected(Radio radio) { for (int i = 0; i < getAll().size(); i++) { Radio r = (Radio)getAll().get(i); if (r != radio && r.getValue()) { r.setValue(false); } } clearInvalid(); } }