001package 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 023import java.util.List; 024 025import org.gwtbootstrap3.client.ui.base.HasId; 026import org.gwtbootstrap3.client.ui.base.HasPlaceholder; 027import org.gwtbootstrap3.client.ui.base.HasResponsiveness; 028import org.gwtbootstrap3.client.ui.base.HasSize; 029import org.gwtbootstrap3.client.ui.base.helper.StyleHelper; 030import org.gwtbootstrap3.client.ui.base.mixin.BlankValidatorMixin; 031import org.gwtbootstrap3.client.ui.base.mixin.ErrorHandlerMixin; 032import org.gwtbootstrap3.client.ui.base.mixin.IdMixin; 033import org.gwtbootstrap3.client.ui.constants.DeviceSize; 034import org.gwtbootstrap3.client.ui.constants.InputSize; 035import org.gwtbootstrap3.client.ui.form.error.ErrorHandler; 036import org.gwtbootstrap3.client.ui.form.error.ErrorHandlerType; 037import org.gwtbootstrap3.client.ui.form.error.HasErrorHandler; 038import org.gwtbootstrap3.client.ui.form.validator.HasBlankValidator; 039import org.gwtbootstrap3.client.ui.form.validator.HasValidators; 040import org.gwtbootstrap3.client.ui.form.validator.ValidationChangedEvent.ValidationChangedHandler; 041import org.gwtbootstrap3.client.ui.form.validator.Validator; 042 043import com.google.gwt.editor.client.EditorError; 044import com.google.gwt.editor.client.HasEditorErrors; 045import com.google.gwt.text.shared.Renderer; 046import com.google.gwt.user.client.ui.HasConstrainedValue; 047import com.google.gwt.user.client.ui.HasName; 048import com.google.gwt.user.client.ui.Widget; 049import com.google.gwt.view.client.ProvidesKey; 050import com.google.gwt.view.client.SimpleKeyProvider; 051import com.google.web.bindery.event.shared.HandlerRegistration; 052 053/** 054 * Implementation of {@link HasConstrainedValue} based on a 055 * {@link com.google.gwt.dom.client.SelectElement}. 056 * <p/> 057 * A {@link Renderer Renderer<T>} is used to get user-presentable strings to 058 * display in the select element. 059 * 060 * @param <T> 061 * the value type 062 */ 063public class ValueListBox<T> extends com.google.gwt.user.client.ui.ValueListBox<T> implements HasName, HasId, 064 HasResponsiveness, HasPlaceholder, HasSize<InputSize>, HasEditorErrors<T>, HasErrorHandler, HasValidators<T>, 065 HasBlankValidator<T> { 066 067 private final IdMixin<ValueListBox<T>> idMixin = new IdMixin<ValueListBox<T>>(this); 068 069 private final ErrorHandlerMixin<T> errorHandlerMixin = new ErrorHandlerMixin<T>(this); 070 071 private final BlankValidatorMixin<ValueListBox<T>, T> validatorMixin = new BlankValidatorMixin<ValueListBox<T>, T>( 072 this, errorHandlerMixin.getErrorHandler()); 073 074 public ValueListBox(final Renderer<T> renderer) { 075 this(renderer, new SimpleKeyProvider<T>()); 076 } 077 078 public ValueListBox(final Renderer<T> renderer, final ProvidesKey<T> keyProvider) { 079 super(renderer, keyProvider); 080 } 081 082 /** {@inheritDoc} */ 083 @Override 084 protected void initWidget(final Widget widget) { 085 super.initWidget(new ListBox()); 086 } 087 088 /** {@inheritDoc} */ 089 @Override 090 public void setName(String name) { 091 ((ListBox) getWidget()).setName(name); 092 } 093 094 /** {@inheritDoc} */ 095 @Override 096 public String getName() { 097 return ((ListBox) getWidget()).getName(); 098 } 099 100 /** {@inheritDoc} */ 101 @Override 102 public void setId(final String id) { 103 idMixin.setId(id); 104 } 105 106 /** {@inheritDoc} */ 107 @Override 108 public String getId() { 109 return idMixin.getId(); 110 } 111 112 /** {@inheritDoc} */ 113 @Override 114 public void setVisibleOn(final DeviceSize deviceSize) { 115 StyleHelper.setVisibleOn(this, deviceSize); 116 } 117 118 /** {@inheritDoc} */ 119 @Override 120 public void setHiddenOn(final DeviceSize deviceSize) { 121 StyleHelper.setHiddenOn(this, deviceSize); 122 } 123 124 /** {@inheritDoc} */ 125 @Override 126 public void setSize(InputSize size) { 127 StyleHelper.addUniqueEnumStyleName(this, InputSize.class, size); 128 } 129 130 /** {@inheritDoc} */ 131 @Override 132 public InputSize getSize() { 133 return InputSize.fromStyleName(getStyleName()); 134 } 135 136 /** {@inheritDoc} */ 137 @Override 138 public void setPlaceholder(final String placeHolder) { 139 getElement().setAttribute(PLACEHOLDER, placeHolder != null ? placeHolder : ""); 140 } 141 142 /** {@inheritDoc} */ 143 @Override 144 public String getPlaceholder() { 145 return getElement().getAttribute(PLACEHOLDER); 146 } 147 148 /** {@inheritDoc} */ 149 @Override 150 public HandlerRegistration addValidationChangedHandler(ValidationChangedHandler handler) { 151 return validatorMixin.addValidationChangedHandler(handler); 152 } 153 154 /** {@inheritDoc} */ 155 @Override 156 public boolean getAllowBlank() { 157 return validatorMixin.getAllowBlank(); 158 } 159 160 /** {@inheritDoc} */ 161 @Override 162 public void setAllowBlank(boolean allowBlank) { 163 validatorMixin.setAllowBlank(allowBlank); 164 } 165 166 /** {@inheritDoc} */ 167 @Override 168 public void addValidator(Validator<T> validator) { 169 validatorMixin.addValidator(validator); 170 } 171 172 /** {@inheritDoc} */ 173 @Override 174 public boolean removeValidator(Validator<T> validator) { 175 return validatorMixin.removeValidator(validator); 176 } 177 178 /** {@inheritDoc} */ 179 @Override 180 public boolean getValidateOnBlur() { 181 return validatorMixin.getValidateOnBlur(); 182 } 183 184 /** {@inheritDoc} */ 185 @Override 186 public void reset() { 187 setValue(null); 188 validatorMixin.reset(); 189 } 190 191 /** {@inheritDoc} */ 192 @Override 193 public void setValidateOnBlur(boolean validateOnBlur) { 194 validatorMixin.setValidateOnBlur(validateOnBlur); 195 } 196 197 /** {@inheritDoc} */ 198 @Override 199 public void setValidators(@SuppressWarnings("unchecked") Validator<T>... validators) { 200 validatorMixin.setValidators(validators); 201 } 202 203 /** {@inheritDoc} */ 204 @Override 205 public boolean validate() { 206 return validatorMixin.validate(); 207 } 208 209 /** {@inheritDoc} */ 210 @Override 211 public boolean validate(boolean show) { 212 return validatorMixin.validate(show); 213 } 214 215 /** {@inheritDoc} */ 216 @Override 217 public ErrorHandler getErrorHandler() { 218 return errorHandlerMixin.getErrorHandler(); 219 } 220 221 /** {@inheritDoc} */ 222 @Override 223 public void setErrorHandler(ErrorHandler handler) { 224 errorHandlerMixin.setErrorHandler(handler); 225 validatorMixin.setErrorHandler(handler); 226 } 227 228 /** {@inheritDoc} */ 229 @Override 230 public ErrorHandlerType getErrorHandlerType() { 231 return errorHandlerMixin.getErrorHandlerType(); 232 } 233 234 /** {@inheritDoc} */ 235 @Override 236 public void setErrorHandlerType(ErrorHandlerType type) { 237 errorHandlerMixin.setErrorHandlerType(type); 238 } 239 240 /** {@inheritDoc} */ 241 @Override 242 public void showErrors(List<EditorError> errors) { 243 errorHandlerMixin.showErrors(errors); 244 } 245 246}