/* GNU LESSER GENERAL PUBLIC LICENSE Copyright (C) 2006 The Lobo Project This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA Contact info: lobochief@users.sourceforge.net */ /* * Created on Jan 15, 2006 */ package org.lobobrowser.html.renderer; import javax.swing.ButtonGroup; import javax.swing.JRadioButton; import org.lobobrowser.html.domimpl.HTMLBaseInputElement; import org.lobobrowser.html.domimpl.HTMLElementImpl; import org.lobobrowser.util.gui.WrapperLayout; class InputRadioControl extends BaseInputControl { private static final long serialVersionUID = 8518656510826949865L; private final JRadioButton widget; public InputRadioControl(final HTMLBaseInputElement modelNode) { super(modelNode); this.setLayout(WrapperLayout.getInstance()); final JRadioButton radio = new JRadioButton(); radio.setOpaque(false); this.widget = radio; // Note: Value attribute cannot be set in reset() method. // Otherwise, layout revalidation causes typed values to // be lost (including revalidation due to hover.) final HTMLElementImpl controlElement = this.controlElement; final String name = controlElement.getAttribute("name"); final ButtonGroup prevGroup = this.buttonGroup; if (prevGroup != null) { prevGroup.remove(radio); } if (name != null) { final String key = "cobra.radio.group." + name; ButtonGroup group = (ButtonGroup) controlElement.getDocumentItem(key); if (group == null) { group = new ButtonGroup(); controlElement.setDocumentItem(key, group); } group.add(radio); this.buttonGroup = group; } else { this.buttonGroup = null; } radio.setSelected(controlElement.getAttributeAsBoolean("checked")); this.add(radio); } private ButtonGroup buttonGroup; @Override public void reset(final int availWidth, final int availHeight) { super.reset(availWidth, availHeight); } /* * (non-Javadoc) * * @see org.xamjwg.html.domimpl.InputContext#click() */ @Override public void click() { this.widget.doClick(); } /* * (non-Javadoc) * * @see org.xamjwg.html.domimpl.InputContext#getChecked() */ @Override public boolean getChecked() { return this.widget.isSelected(); } /* * (non-Javadoc) * * @see org.xamjwg.html.domimpl.InputContext#setChecked(boolean) */ @Override public void setChecked(final boolean checked) { this.widget.setSelected(checked); } /* * (non-Javadoc) * * @see org.xamjwg.html.domimpl.InputContext#setDisabled(boolean) */ @Override public void setDisabled(final boolean disabled) { super.setDisabled(disabled); this.widget.setEnabled(!disabled); } public void resetInput() { this.widget.setSelected(this.controlElement.getAttributeAsBoolean("checked")); } @Override public String getValue() { return this.controlElement.getAttribute("value"); } }