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.AddOn;
019 import com.github.gwtbootstrap.client.ui.base.DivWidget;
020 import com.github.gwtbootstrap.client.ui.constants.IconType;
021 import com.google.gwt.uibinder.client.UiChild;
022 import com.google.gwt.user.client.ui.IsWidget;
023
024 /**
025 * append/prepend {@link AddOn} for input tags.
026 * <p>
027 * If you want to append/prepend add-on,<br/>
028 * Set appendText/prependText or appendIcon/prependIcon attribute.
029 *
030 * <h3>UiBinder Usage:</h3>
031 *
032 * <pre>
033 * {@code
034 * <!-- append text -->
035 * <b:InputAddOn appendText="@">
036 * <g:TextBox/>
037 * </b:InputAddOn>
038 *
039 * <!-- above setting is same as blow -->
040 * <div class="input-append">
041 * <span class="add-on">@</span><input type="text">
042 * </div>
043 *
044 *
045 * <!-- prepend text-->
046 * <b:InputAddOn prependText="@">
047 * <g:TextBox/>
048 * </b:InputAddOn>
049 *
050 * <!-- above setting is same as blow -->
051 * <div class="input-prepend">
052 * <input type="text"><span class="add-on">@</span>
053 * </div>
054 *
055 * <!-- append icon and prepend text-->
056 * <b:InputAddOn appendIcon="STAR" prependText="@">
057 * <g:TextBox/>
058 * </b:InputAddOn>
059 *
060 * <!-- above setting is same as blow -->
061 * <div class="input-append input-prepend">
062 * <span class="add-on"><i class="icon-star"></i></span><input type="text"><span class="add-on">@</span>
063 * </div>
064 * }
065 * </pre>
066 *
067 * </p>
068 *
069 * @since 2.0.4.0
070 *
071 * @author ohashi keisuke
072 * @see AddOn
073 * @see http://twitter.github.com/bootstrap/base-css.html#forms
074 */
075 public class InputAddOn extends DivWidget {
076
077 /** prepend add-on */
078 private AddOn prependAddOn = new AddOn();
079
080 /** append-add-on */
081 private AddOn appendAddOn = new AddOn();
082
083 /** set append add-on */
084 private boolean append = false;
085
086 /**
087 * Creates an empty widget.
088 */
089 public InputAddOn() {
090 super();
091 }
092
093 /**
094 * set prepend text
095 *
096 * @param prependText
097 * prepend text
098 */
099 public void setPrependText(String prependText) {
100 setPrependStyle();
101
102 prependAddOn.setText(prependText);
103 }
104
105 /**
106 * set prepend icon
107 *
108 * @param prependIcon
109 * IconType
110 */
111 public void setPrependIcon(IconType prependIcon) {
112 setPrependStyle();
113
114 prependAddOn.setIcon(prependIcon);
115 }
116
117 private void setPrependStyle() {
118 this.setStyleName("input-prepend", true);
119 if (!prependAddOn.isAttached()) {
120 insert(prependAddOn, 0);
121 }
122 }
123
124 /**
125 * set append text
126 *
127 * @param appendText
128 * append text
129 */
130 public void setAppendText(String appendText) {
131 setAppendStyle();
132
133 appendAddOn.setText(appendText);
134 }
135
136 /**
137 * set append icon
138 *
139 * @param appendIcon
140 * append icon
141 */
142 public void setAppendIcon(IconType appendIcon) {
143 setAppendStyle();
144
145 appendAddOn.setIcon(appendIcon);
146 }
147
148 private void setAppendStyle() {
149 this.setStyleName("input-append", true);
150 append = true;
151
152 if (isAttached() && !appendAddOn.isAttached()) {
153 add(appendAddOn);
154 }
155
156 }
157
158 /**
159 * Add prepend widget. its method is for uibinder syntax.
160 * @param w Addred widget to prepend addon.
161 */
162 @UiChild(limit = 1, tagname = "prependWidget")
163 public void addPrependWidget(IsWidget w) {
164 setPrependStyle();
165 prependAddOn.addWidget(w);
166 }
167
168 /**
169 * Add append widget. its method is for uibinder syntax.
170 * @param w Addred widget to append addon.
171 */
172 @UiChild(limit = 1, tagname = "appendWidget")
173 public void addAppendWidget(IsWidget w) {
174 setAppendStyle();
175 appendAddOn.addWidget(w);
176 }
177
178
179 /**
180 * {@inheritDoc}
181 */
182 @Override
183 protected void onLoad() {
184
185 // if setup append add-on and it is not attached,add as last child.
186 if (append && !appendAddOn.isAttached()) {
187 add(appendAddOn);
188 }
189 super.onLoad();
190 }
191
192 }