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.HasAlternateSize; 019 import com.github.gwtbootstrap.client.ui.base.HasId; 020 import com.github.gwtbootstrap.client.ui.base.HasSize; 021 import com.github.gwtbootstrap.client.ui.base.HasStyle; 022 import com.github.gwtbootstrap.client.ui.base.IsResponsive; 023 import com.github.gwtbootstrap.client.ui.base.IsSearchQuery; 024 import com.github.gwtbootstrap.client.ui.base.ResponsiveHelper; 025 import com.github.gwtbootstrap.client.ui.base.SearchQueryStyleHelper; 026 import com.github.gwtbootstrap.client.ui.base.SizeHelper; 027 import com.github.gwtbootstrap.client.ui.base.Style; 028 import com.github.gwtbootstrap.client.ui.base.StyleHelper; 029 import com.github.gwtbootstrap.client.ui.constants.AlternateSize; 030 import com.github.gwtbootstrap.client.ui.constants.Constants; 031 import com.github.gwtbootstrap.client.ui.constants.Device; 032 import com.google.gwt.dom.client.Element; 033 034 /** 035 * A ListBox for Bootstrap form. 036 * 037 * @since 2.0.4.0 038 * 039 * @author ohashi keisuke 040 * 041 */ 042 public class ListBox extends com.google.gwt.user.client.ui.ListBox implements HasSize, HasAlternateSize, IsSearchQuery, HasId , IsResponsive , HasStyle{ 043 044 { 045 setStyleName(""); 046 } 047 048 /** 049 * Creates an empty list box in single selection mode. 050 */ 051 public ListBox() { 052 super(); 053 } 054 055 /** 056 * Creates an empty list box. The preferred way to enable multiple 057 * selections is to use this constructor rather than 058 * {@link #setMultipleSelect(boolean)}. 059 * 060 * @param isMultipleSelect 061 * specifies if multiple selection is enabled 062 */ 063 public ListBox(boolean isMultipleSelect) { 064 super(isMultipleSelect); 065 } 066 067 /** 068 * This constructor may be used by subclasses to explicitly use an existing 069 * element. This element must be a <select> element. 070 * 071 * @param element 072 * the element to be used 073 */ 074 protected ListBox(Element element) { 075 super(element); 076 } 077 078 /** 079 * {@inheritDoc} 080 */ 081 @Override 082 public void setAlternateSize(AlternateSize size) { 083 StyleHelper.changeStyle(this, size, AlternateSize.class); 084 } 085 086 /** 087 * {@inheritDoc} 088 */ 089 @Override 090 public void setSize(int size) { 091 SizeHelper.setSize(this, size); 092 } 093 094 /** 095 * Get Selected Value. 096 * <p> 097 * If set multiple,return first selected value. 098 * @return Selected Value.(If there is nothing selected item,return null) 099 */ 100 public String getValue() { 101 102 if(getSelectedIndex() == -1) { 103 return null; 104 } 105 106 return getValue(getSelectedIndex()); 107 } 108 109 /** 110 * {@inheritDoc} 111 */ 112 @Override 113 public void setSearchQuery(boolean searchQuery) { 114 SearchQueryStyleHelper.setSearchQuery(this, searchQuery); 115 } 116 117 /** 118 * {@inheritDoc} 119 */ 120 @Override 121 public boolean isSearchQuery() { 122 return SearchQueryStyleHelper.isSearchQuery(this); 123 } 124 125 /** 126 * {@inheritDoc} 127 */ 128 @Override 129 public String getId() { 130 return getElement().getId(); 131 } 132 133 /** 134 * {@inheritDoc} 135 */ 136 @Override 137 public void setId(String id) { 138 getElement().setId(id); 139 } 140 141 /** 142 * {@inheritDoc} 143 */ 144 @Override 145 public void setEnabled(boolean enabled) { 146 super.setEnabled(enabled); 147 if(enabled) { 148 removeStyleName(Constants.DISABLED); 149 } else { 150 addStyleName(Constants.DISABLED); 151 } 152 } 153 154 /** 155 * Selects item which has the given value. If value 156 * is not found, nothing is done. 157 * @param value to be selected (<code>null</code>-safe) 158 */ 159 public void setSelectedValue(String value) { 160 if (value == null) { 161 value = ""; 162 } 163 for(int i = 0; i < getItemCount(); i++) { 164 if (getValue(i).equals(value)) { 165 setSelectedIndex(i); 166 return; 167 } 168 } 169 } 170 171 172 /** 173 * {@inheritDoc} 174 */ 175 @Override 176 public void setShowOn(Device device) { 177 ResponsiveHelper.setShowOn(this, device); 178 } 179 180 /** 181 * {@inheritDoc} 182 */ 183 @Override 184 public void setHideOn(Device device) { 185 ResponsiveHelper.setHideOn(this, device); 186 187 } 188 189 /** 190 * {@inheritDoc} 191 */ 192 @Override 193 public void setStyle(Style style) { 194 StyleHelper.setStyle(this, style); 195 } 196 197 /** 198 * {@inheritDoc} 199 */ 200 @Override 201 public void addStyle(Style style) { 202 StyleHelper.addStyle(this, style); 203 } 204 205 /** 206 * {@inheritDoc} 207 */ 208 @Override 209 public void removeStyle(Style style) { 210 StyleHelper.removeStyle(this, style); 211 212 } 213 }