001    /*
002     *  Copyright 2012 GWT-Bootstrap
003     *
004     *  Licensed under the Apache License, Version 2.0 (the "License");
005     *  you may not use this file except in compliance with the License.
006     *  You may obtain a copy of the License at
007     *
008     *      http://www.apache.org/licenses/LICENSE-2.0
009     *
010     *  Unless required by applicable law or agreed to in writing, software
011     *  distributed under the License is distributed on an "AS IS" BASIS,
012     *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013     *  See the License for the specific language governing permissions and
014     *  limitations under the License.
015     */
016    package com.github.gwtbootstrap.client.ui;
017    
018    import com.github.gwtbootstrap.client.ui.base.TextBoxBase;
019    import com.google.gwt.dom.client.Document;
020    import com.google.gwt.dom.client.Element;
021    import com.google.gwt.dom.client.InputElement;
022    import com.google.gwt.user.client.ui.RootPanel;
023    import com.google.gwt.user.client.ui.Widget;
024    
025    /**
026     * A TextBox for Bootstrap form.
027     * 
028     * @since 2.0.4.0
029     * 
030     * @author Carlos Alexandro Becker
031     * @author ohashi keisuke
032     * 
033     */
034    public class TextBox extends TextBoxBase {
035    
036            /**
037             * Creates a TextBox widget that wraps an existing <input type='text'>
038             * element.
039             * 
040             * This element must already be attached to the document. If the element is
041             * removed from the document, you must call
042             * {@link RootPanel#detachNow(Widget)}.
043             * 
044             * @param element
045             *            the element to be wrapped
046             */
047            public static TextBox wrap(Element element) {
048                    // Assert that the element is attached.
049                    assert Document.get().getBody().isOrHasChild(element);
050    
051                    TextBox textBox = new TextBox(element);
052    
053                    // Mark it attached and remember it for cleanup.
054                    textBox.onAttach();
055                    RootPanel.detachOnWindowClose(textBox);
056    
057                    return textBox;
058            }
059    
060            /**
061             * Creates an empty text box.
062             */
063            public TextBox() {
064                    this(Document.get().createTextInputElement(), "gwt-TextBox");
065            }
066    
067            /**
068             * This constructor may be used by subclasses to explicitly use an existing
069             * element. This element must be an <input> element whose type is
070             * 'text'.
071             * 
072             * @param element
073             *            the element to be used
074             */
075            protected TextBox(Element element) {
076                    super(element);
077                    assert InputElement.as(element).getType().equalsIgnoreCase("text");
078            }
079    
080            TextBox(Element element,
081                    String styleName) {
082                    super(element);
083                    if (styleName != null) {
084                            setStyleName(styleName);
085                    }
086            }
087    
088            /**
089             * Gets the maximum allowable length of the text box.
090             * 
091             * @return the maximum length, in characters
092             */
093            public int getMaxLength() {
094                    return getInputElement().getMaxLength();
095            }
096    
097            /**
098             * Gets the number of visible characters in the text box.
099             * 
100             * @return the number of visible characters
101             */
102            public int getVisibleLength() {
103                    return getInputElement().getSize();
104            }
105    
106            /**
107             * Sets the maximum allowable length of the text box.
108             * 
109             * @param length
110             *            the maximum length, in characters
111             */
112            public void setMaxLength(int length) {
113                    getInputElement().setMaxLength(length);
114            }
115    
116            /**
117             * Sets the number of visible characters in the text box.
118             * 
119             * @param length
120             *            the number of visible characters
121             */
122            public void setVisibleLength(int length) {
123                    getInputElement().setSize(length);
124            }
125    
126            private InputElement getInputElement() {
127                    return getElement().cast();
128            }
129    
130    }