您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符

VNativeSelect.java 3.5KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. /*
  2. @VaadinApache2LicenseForJavaFiles@
  3. */
  4. package com.vaadin.terminal.gwt.client.ui;
  5. import java.util.ArrayList;
  6. import java.util.Iterator;
  7. import com.google.gwt.event.dom.client.ChangeEvent;
  8. import com.google.gwt.user.client.ui.Widget;
  9. import com.vaadin.terminal.gwt.client.UIDL;
  10. public class VNativeSelect extends VOptionGroupBase implements Field {
  11. public static final String CLASSNAME = "v-select";
  12. protected TooltipListBox select;
  13. private boolean firstValueIsTemporaryNullItem = false;
  14. public VNativeSelect() {
  15. super(new TooltipListBox(false), CLASSNAME);
  16. select = (TooltipListBox) optionsContainer;
  17. select.setSelect(this);
  18. select.setVisibleItemCount(1);
  19. select.addChangeHandler(this);
  20. select.setStyleName(CLASSNAME + "-select");
  21. }
  22. @Override
  23. protected void buildOptions(UIDL uidl) {
  24. select.setClient(client);
  25. select.setEnabled(!isDisabled() && !isReadonly());
  26. select.clear();
  27. firstValueIsTemporaryNullItem = false;
  28. if (isNullSelectionAllowed() && !isNullSelectionItemAvailable()) {
  29. // can't unselect last item in singleselect mode
  30. select.addItem("", (String) null);
  31. }
  32. boolean selected = false;
  33. for (final Iterator<?> i = uidl.getChildIterator(); i.hasNext();) {
  34. final UIDL optionUidl = (UIDL) i.next();
  35. select.addItem(optionUidl.getStringAttribute("caption"),
  36. optionUidl.getStringAttribute("key"));
  37. if (optionUidl.hasAttribute("selected")) {
  38. select.setItemSelected(select.getItemCount() - 1, true);
  39. selected = true;
  40. }
  41. }
  42. if (!selected && !isNullSelectionAllowed()) {
  43. // null-select not allowed, but value not selected yet; add null and
  44. // remove when something is selected
  45. select.insertItem("", (String) null, 0);
  46. select.setItemSelected(0, true);
  47. firstValueIsTemporaryNullItem = true;
  48. }
  49. }
  50. @Override
  51. protected String[] getSelectedItems() {
  52. final ArrayList<String> selectedItemKeys = new ArrayList<String>();
  53. for (int i = 0; i < select.getItemCount(); i++) {
  54. if (select.isItemSelected(i)) {
  55. selectedItemKeys.add(select.getValue(i));
  56. }
  57. }
  58. return selectedItemKeys.toArray(new String[selectedItemKeys.size()]);
  59. }
  60. @Override
  61. public void onChange(ChangeEvent event) {
  62. if (select.isMultipleSelect()) {
  63. client.updateVariable(id, "selected", getSelectedItems(),
  64. isImmediate());
  65. } else {
  66. client.updateVariable(id, "selected", new String[] { ""
  67. + getSelectedItem() }, isImmediate());
  68. }
  69. if (firstValueIsTemporaryNullItem) {
  70. // remove temporary empty item
  71. select.removeItem(0);
  72. firstValueIsTemporaryNullItem = false;
  73. }
  74. }
  75. @Override
  76. public void setHeight(String height) {
  77. select.setHeight(height);
  78. super.setHeight(height);
  79. }
  80. @Override
  81. public void setWidth(String width) {
  82. select.setWidth(width);
  83. super.setWidth(width);
  84. }
  85. @Override
  86. protected void setTabIndex(int tabIndex) {
  87. ((TooltipListBox) optionsContainer).setTabIndex(tabIndex);
  88. }
  89. public void focus() {
  90. select.setFocus(true);
  91. }
  92. public Widget getWidgetForPaintable() {
  93. return this;
  94. }
  95. }