001    package org.gwtbootstrap3.client.ui;
002    
003    /*
004     * #%L
005     * GwtBootstrap3
006     * %%
007     * Copyright (C) 2013 - 2014 GwtBootstrap3
008     * %%
009     * Licensed under the Apache License, Version 2.0 (the "License");
010     * you may not use this file except in compliance with the License.
011     * You may obtain a copy of the License at
012     * 
013     *      http://www.apache.org/licenses/LICENSE-2.0
014     * 
015     * Unless required by applicable law or agreed to in writing, software
016     * distributed under the License is distributed on an "AS IS" BASIS,
017     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
018     * See the License for the specific language governing permissions and
019     * limitations under the License.
020     * #L%
021     */
022    
023    import org.gwtbootstrap3.client.ui.constants.Styles;
024    
025    import com.google.gwt.dom.client.Document;
026    import com.google.gwt.i18n.client.HasDirection.Direction;
027    import com.google.gwt.i18n.shared.DirectionEstimator;
028    import com.google.gwt.safehtml.shared.SafeHtml;
029    import com.google.gwt.uibinder.client.UiConstructor;
030    import com.google.gwt.user.client.DOM;
031    
032    /**
033     * An inline radio button widget.
034     *
035     * @author Sven Jacobs
036     * @see org.gwtbootstrap3.client.ui.Radio
037     */
038    public class InlineRadio extends Radio {
039    
040        /**
041         * Creates a new radio associated with a particular group, and initialized
042         * with the given HTML label. All radio buttons associated with the same
043         * group name belong to a mutually-exclusive set.
044         * 
045         * Radio buttons are grouped by their name attribute, so changing their name
046         * using the setName() method will also change their associated group.
047         * 
048         * @param name
049         *            the group name with which to associate the radio button
050         * @param label
051         *            this radio button's html label
052         */
053        public InlineRadio(String name, SafeHtml label) {
054            this(name, label.asString(), true);
055        }
056    
057        /**
058         * @see #InlineRadio(String, SafeHtml)
059         * 
060         * @param name
061         *            the group name with which to associate the radio button
062         * @param label
063         *            this radio button's html label
064         * @param dir
065         *            the text's direction. Note that {@code DEFAULT} means
066         *            direction should be inherited from the widget's parent
067         *            element.
068         */
069        public InlineRadio(String name, SafeHtml label, Direction dir) {
070            this(name);
071            setHTML(label, dir);
072        }
073    
074        /**
075         * @see #InlineRadio(String, SafeHtml)
076         * 
077         * @param name
078         *            the group name with which to associate the radio button
079         * @param label
080         *            this radio button's html label
081         * @param directionEstimator
082         *            A DirectionEstimator object used for automatic direction
083         *            adjustment. For convenience,
084         *            {@link #DEFAULT_DIRECTION_ESTIMATOR} can be used.
085         */
086        public InlineRadio(String name, SafeHtml label, DirectionEstimator directionEstimator) {
087            this(name);
088            setDirectionEstimator(directionEstimator);
089            setHTML(label.asString());
090        }
091    
092        /**
093         * Creates a new radio associated with a particular group, and initialized
094         * with the given HTML label. All radio buttons associated with the same
095         * group name belong to a mutually-exclusive set.
096         * 
097         * Radio buttons are grouped by their name attribute, so changing their name
098         * using the setName() method will also change their associated group.
099         * 
100         * @param name
101         *            the group name with which to associate the radio button
102         * @param label
103         *            this radio button's label
104         */
105        public InlineRadio(String name, String label) {
106            this(name);
107            setText(label);
108        }
109    
110        /**
111         * @see #InlineRadio(String, SafeHtml)
112         * 
113         * @param name
114         *            the group name with which to associate the radio button
115         * @param label
116         *            this radio button's label
117         * @param dir
118         *            the text's direction. Note that {@code DEFAULT} means
119         *            direction should be inherited from the widget's parent
120         *            element.
121         */
122        public InlineRadio(String name, String label, Direction dir) {
123            this(name);
124            setText(label, dir);
125        }
126    
127        /**
128         * @see #InlineRadio(String, SafeHtml)
129         * 
130         * @param name
131         *            the group name with which to associate the radio button
132         * @param label
133         *            this radio button's label
134         * @param directionEstimator
135         *            A DirectionEstimator object used for automatic direction
136         *            adjustment. For convenience,
137         *            {@link #DEFAULT_DIRECTION_ESTIMATOR} can be used.
138         */
139        public InlineRadio(String name, String label, DirectionEstimator directionEstimator) {
140            this(name);
141            setDirectionEstimator(directionEstimator);
142            setText(label);
143        }
144    
145        /**
146         * Creates a new radio button associated with a particular group, and
147         * initialized with the given label (optionally treated as HTML). All radio
148         * buttons associated with the same group name belong to a
149         * mutually-exclusive set.
150         * 
151         * Radio buttons are grouped by their name attribute, so changing their name
152         * using the setName() method will also change their associated group.
153         * 
154         * @param name
155         *            name the group with which to associate the radio button
156         * @param label
157         *            this radio button's label
158         * @param asHTML
159         *            <code>true</code> to treat the specified label as HTML
160         */
161        public InlineRadio(String name, String label, boolean asHTML) {
162            this(name);
163            if (asHTML) {
164                setHTML(label);
165            } else {
166                setText(label);
167            }
168        }
169    
170        /**
171         * Creates a new radio associated with a particular group name. All radio
172         * buttons associated with the same group name belong to a
173         * mutually-exclusive set.
174         * 
175         * Radio buttons are grouped by their name attribute, so changing their name
176         * using the setName() method will also change their associated group.
177         * 
178         * @param name
179         *            the group name with which to associate the radio button
180         */
181        @UiConstructor
182        public InlineRadio(String name) {
183            super(DOM.createLabel(), Document.get().createRadioInputElement(name));
184            setStyleName(Styles.RADIO_INLINE);
185    
186            getElement().appendChild(inputElem);
187            getElement().appendChild(labelElem);
188        }
189    
190    }