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 */
016package com.github.gwtbootstrap.client.ui;
017
018import com.github.gwtbootstrap.client.ui.base.HasAlternateSize;
019import com.github.gwtbootstrap.client.ui.base.HasId;
020import com.github.gwtbootstrap.client.ui.base.HasSize;
021import com.github.gwtbootstrap.client.ui.base.HasStyle;
022import com.github.gwtbootstrap.client.ui.base.IsResponsive;
023import com.github.gwtbootstrap.client.ui.base.IsSearchQuery;
024import com.github.gwtbootstrap.client.ui.base.ResponsiveHelper;
025import com.github.gwtbootstrap.client.ui.base.SearchQueryStyleHelper;
026import com.github.gwtbootstrap.client.ui.base.SizeHelper;
027import com.github.gwtbootstrap.client.ui.base.Style;
028import com.github.gwtbootstrap.client.ui.base.StyleHelper;
029import com.github.gwtbootstrap.client.ui.constants.AlternateSize;
030import com.github.gwtbootstrap.client.ui.constants.Constants;
031import com.github.gwtbootstrap.client.ui.constants.Device;
032import 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 */
042public 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}