001: /*
002: ItsNat Java Web Application Framework
003: Copyright (C) 2007 Innowhere Software Services S.L., Spanish Company
004: Author: Jose Maria Arranz Santamaria
005:
006: This program is free software: you can redistribute it and/or modify
007: it under the terms of the GNU Affero General Public License as published by
008: the Free Software Foundation, either version 3 of the License, or
009: (at your option) any later version. See the GNU Affero General Public
010: License for more details. See the copy of the GNU Affero General Public License
011: included in this program. If not, see <http://www.gnu.org/licenses/>.
012: */
013:
014: package org.itsnat.impl.comp.html;
015:
016: import org.itsnat.comp.ItsNatButtonGroup;
017: import org.itsnat.comp.html.ItsNatHTMLInputRadio;
018: import org.itsnat.comp.ui.ItsNatButtonRadioUI;
019: import org.itsnat.comp.ui.ItsNatComponentUI;
020: import org.itsnat.impl.comp.ItsNatButtonGroupImpl;
021: import org.itsnat.impl.comp.ItsNatButtonRadioBasedSharedImpl;
022: import org.itsnat.impl.comp.html.ui.ItsNatHTMLInputRadioUIImpl;
023: import javax.swing.ButtonGroup;
024: import javax.swing.ButtonModel;
025: import javax.swing.JToggleButton.ToggleButtonModel;
026: import org.itsnat.core.NameValue;
027: import org.itsnat.impl.comp.ItsNatButtonRadioInternal;
028: import org.w3c.dom.html.HTMLInputElement;
029:
030: /**
031: *
032: * @author jmarranz
033: */
034: public class ItsNatHTMLInputRadioImpl extends
035: ItsNatHTMLInputButtonToggleImpl implements
036: ItsNatHTMLInputRadio, ItsNatButtonRadioInternal {
037: protected ItsNatButtonGroupImpl itsNatButtonGroup;
038:
039: /**
040: * Creates a new instance of ItsNatHTMLInputRadioImpl
041: */
042: public ItsNatHTMLInputRadioImpl(HTMLInputElement element,
043: NameValue[] artifacts,
044: ItsNatHTMLComponentManagerImpl componentMgr) {
045: super (element, artifacts, componentMgr);
046:
047: init();
048: }
049:
050: public void init() {
051: super .init();
052:
053: // Después de la iniciación del data model
054:
055: String name = getHTMLInputElement().getName();
056: ItsNatButtonGroup buttonGroup = getItsNatComponentManager()
057: .getItsNatButtonGroup(name);
058: // itsNatButtonGroup será null si el elemento no tiene nombre (válido pues el grupo podrá imponerse después)
059: setItsNatButtonGroup(buttonGroup, true, false);
060: }
061:
062: public String getExpectedType() {
063: return "radio";
064: }
065:
066: public ItsNatButtonRadioUI getItsNatButtonRadioUI() {
067: return (ItsNatButtonRadioUI) compUI;
068: }
069:
070: public ItsNatButtonRadioUI createDefaultItsNatHTMLInputRadioUI() {
071: return new ItsNatHTMLInputRadioUIImpl(this );
072: }
073:
074: public ItsNatComponentUI createDefaultItsNatComponentUI() {
075: return createDefaultItsNatHTMLInputRadioUI();
076: }
077:
078: public void syncWithDataModel() {
079: super .syncWithDataModel();
080:
081: ItsNatButtonRadioBasedSharedImpl.syncWithDataModel(this );
082: }
083:
084: public ToggleButtonModel getToggleButtonModelNoUpdateButtonGroup() {
085: return super .getToggleButtonModel();
086: }
087:
088: public ButtonModel getButtonModel() {
089: return getToggleButtonModel();
090: }
091:
092: public void setButtonModel(ButtonModel dataModel) {
093: super .setButtonModel(dataModel);
094:
095: getToggleButtonModel(); // Para que se actualice el group del nuevo data model
096: }
097:
098: public ToggleButtonModel getToggleButtonModel() {
099: // Como el cambio de ButtonGroup en el data model no genera eventos hemos de sincronizar en cuanto se pueda
100: ToggleButtonModel model = super .getToggleButtonModel();
101: setButtonGroup(model.getGroup()); // Si no hay cambio no hace nada
102: return model;
103: }
104:
105: public void setToggleButtonModel(ToggleButtonModel dataModel) {
106: super .setToggleButtonModel(dataModel);
107:
108: getToggleButtonModel(); // Para que se actualice el group del nuevo data model
109: }
110:
111: public ItsNatButtonGroup getItsNatButtonGroup() {
112: // Como el cambio de ButtonGroup en el data model no genera eventos hemos de sincronizar en cuanto se pueda
113: getToggleButtonModel(); // Actualiza el ButtonGroup si ha cambiado
114:
115: return itsNatButtonGroup;
116: }
117:
118: public ItsNatButtonGroup setButtonGroup(ButtonGroup group) {
119: return ItsNatButtonRadioBasedSharedImpl.setButtonGroup(this ,
120: this .itsNatButtonGroup, group);
121: }
122:
123: public void setItsNatButtonGroup(ItsNatButtonGroup buttonGroup) {
124: setItsNatButtonGroup(buttonGroup, true);
125: }
126:
127: public void setItsNatButtonGroup(ItsNatButtonGroup buttonGroup,
128: boolean addToGroup) {
129: setItsNatButtonGroup(buttonGroup, addToGroup, true);
130: }
131:
132: public void setItsNatButtonGroup(ItsNatButtonGroup buttonGroup,
133: boolean addToGroup, boolean updateUI) {
134: this .itsNatButtonGroup = (ItsNatButtonGroupImpl) buttonGroup;
135:
136: ItsNatButtonRadioBasedSharedImpl.setItsNatButtonGroup(this,
137: this.itsNatButtonGroup, addToGroup, updateUI);
138: }
139: }
|