1 16 package com.google.gwt.user.client.ui; 17 18 import com.google.gwt.user.client.DOM; 19 import com.google.gwt.user.client.Element; 20 import com.google.gwt.user.client.Event; 21 22 40 public class ListBox extends FocusWidget implements SourcesChangeEvents, 41 HasName { 42 43 private static final int INSERT_AT_END = -1; 44 private ChangeListenerCollection changeListeners; 45 46 49 public ListBox() { 50 this(false); 51 } 52 53 59 public ListBox(boolean isMultipleSelect) { 60 super(DOM.createSelect(isMultipleSelect)); 61 sinkEvents(Event.ONCHANGE); 62 setStyleName("gwt-ListBox"); 63 } 64 65 public void addChangeListener(ChangeListener listener) { 66 if (changeListeners == null) { 67 changeListeners = new ChangeListenerCollection(); 68 } 69 changeListeners.add(listener); 70 } 71 72 81 public void addItem(String item) { 82 insertItem(item, INSERT_AT_END); 83 } 84 85 92 public void addItem(String item, String value) { 93 insertItem(item, value, INSERT_AT_END); 94 } 95 96 99 public void clear() { 100 Element h = getElement(); 101 while (DOM.getChildCount(h) > 0) { 102 DOM.removeChild(h, DOM.getChild(h, 0)); 103 } 104 } 105 106 111 public int getItemCount() { 112 return DOM.getChildCount(getElement()); 113 } 114 115 121 public String getItemText(int index) { 122 Element child = DOM.getChild(getElement(), index); 123 return DOM.getInnerText(child); 124 } 125 126 public String getName() { 127 return DOM.getElementProperty(getElement(), "name"); 128 } 129 130 137 public int getSelectedIndex() { 138 return DOM.getElementPropertyInt(getElement(), "selectedIndex"); 139 } 140 141 148 public String getValue(int index) { 149 checkIndex(index); 150 151 Element option = DOM.getChild(getElement(), index); 152 return DOM.getElementProperty(option, "value"); 153 } 154 155 161 public int getVisibleItemCount() { 162 return DOM.getElementPropertyInt(getElement(), "size"); 163 } 164 165 175 public void insertItem(String item, int index) { 176 insertItem(item, item, index); 177 } 178 179 188 public void insertItem(String item, String value, int index) { 189 DOM.insertListItem(getElement(), item, value, index); 190 } 191 192 198 public boolean isItemSelected(int index) { 199 checkIndex(index); 200 201 Element option = DOM.getChild(getElement(), index); 202 return DOM.getElementPropertyBoolean(option, "selected"); 203 } 204 205 210 public boolean isMultipleSelect() { 211 return DOM.getElementPropertyBoolean(getElement(), "multiple"); 212 } 213 214 public void onBrowserEvent(Event event) { 215 if (DOM.eventGetType(event) == Event.ONCHANGE) { 216 if (changeListeners != null) { 217 changeListeners.fireChange(this); 218 } 219 } else { 220 super.onBrowserEvent(event); 221 } 222 } 223 224 public void removeChangeListener(ChangeListener listener) { 225 if (changeListeners != null) { 226 changeListeners.remove(listener); 227 } 228 } 229 230 235 public void removeItem(int index) { 236 Element child = DOM.getChild(getElement(), index); 237 DOM.removeChild(getElement(), child); 238 } 239 240 251 public void setItemSelected(int index, boolean selected) { 252 checkIndex(index); 253 254 Element option = DOM.getChild(getElement(), index); 255 DOM.setElementPropertyBoolean(option, "selected", selected); 256 } 257 258 265 public void setItemText(int index, String text) { 266 checkIndex(index); 267 if (text == null) { 268 throw new NullPointerException ("Cannot set an option to have null text"); 269 } 270 DOM.setOptionText(getElement(), text, index); 271 } 272 273 281 public void setMultipleSelect(boolean multiple) { 282 DOM.setElementPropertyBoolean(getElement(), "multiple", multiple); 284 } 285 286 public void setName(String name) { 287 DOM.setElementProperty(getElement(), "name", name); 288 } 289 290 300 public void setSelectedIndex(int index) { 301 DOM.setElementPropertyInt(getElement(), "selectedIndex", index); 302 } 303 304 313 public void setValue(int index, String value) { 314 checkIndex(index); 315 Element option = DOM.getChild(getElement(), index); 316 DOM.setElementProperty(option, "value", value); 317 } 318 319 325 public void setVisibleItemCount(int visibleItems) { 326 DOM.setElementPropertyInt(getElement(), "size", visibleItems); 327 } 328 329 private void checkIndex(int index) { 330 Element elem = getElement(); 331 if ((index < 0) || (index >= DOM.getChildCount(elem))) { 332 throw new IndexOutOfBoundsException (); 333 } 334 } 335 } 336 | Popular Tags |