You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

DefaultWidgetSet.java 4.5KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. /*
  2. @ITMillApache2LicenseForJavaFiles@
  3. */
  4. package com.vaadin.terminal.gwt.client;
  5. import com.google.gwt.core.client.GWT;
  6. import com.google.gwt.user.client.ui.Widget;
  7. import com.vaadin.terminal.gwt.client.ui.VButton;
  8. import com.vaadin.terminal.gwt.client.ui.VCheckBox;
  9. import com.vaadin.terminal.gwt.client.ui.VDateFieldCalendar;
  10. import com.vaadin.terminal.gwt.client.ui.VFilterSelect;
  11. import com.vaadin.terminal.gwt.client.ui.VListSelect;
  12. import com.vaadin.terminal.gwt.client.ui.VNativeSelect;
  13. import com.vaadin.terminal.gwt.client.ui.VOptionGroup;
  14. import com.vaadin.terminal.gwt.client.ui.VPasswordField;
  15. import com.vaadin.terminal.gwt.client.ui.VPopupCalendar;
  16. import com.vaadin.terminal.gwt.client.ui.VSplitPanelHorizontal;
  17. import com.vaadin.terminal.gwt.client.ui.VSplitPanelVertical;
  18. import com.vaadin.terminal.gwt.client.ui.VTextArea;
  19. import com.vaadin.terminal.gwt.client.ui.VTextField;
  20. import com.vaadin.terminal.gwt.client.ui.VTwinColSelect;
  21. import com.vaadin.terminal.gwt.client.ui.VUnknownComponent;
  22. import com.vaadin.terminal.gwt.client.ui.VView;
  23. import com.vaadin.terminal.gwt.client.ui.VWindow;
  24. public class DefaultWidgetSet implements WidgetSet {
  25. /**
  26. * DefaultWidgetSet (and its extensions) delegate instantiation of widgets
  27. * and client-server mathing to WidgetMap. The actual implementations are
  28. * generated with gwts deferred binding.
  29. */
  30. private WidgetMap map;
  31. /**
  32. * This is the entry point method. It will start the first
  33. */
  34. public void onModuleLoad() {
  35. ApplicationConfiguration.initConfigurations(this);
  36. ApplicationConfiguration.startNextApplication(); // start first app
  37. map = GWT.create(WidgetMap.class);
  38. }
  39. public Paintable createWidget(UIDL uidl, ApplicationConfiguration conf) {
  40. final Class<? extends Paintable> classType = resolveWidgetType(uidl,
  41. conf);
  42. if (classType == null) {
  43. return new VUnknownComponent();
  44. }
  45. return map.instantiate(classType);
  46. }
  47. protected Class<? extends Paintable> resolveWidgetType(UIDL uidl,
  48. ApplicationConfiguration conf) {
  49. final String tag = uidl.getTag();
  50. Class<? extends Paintable> widgetClass = conf
  51. .getWidgetClassByEncodedTag(tag);
  52. // TODO add our quirks
  53. if (widgetClass == VButton.class && uidl.hasAttribute("type")) {
  54. return VCheckBox.class;
  55. } else if (widgetClass == VView.class && uidl.hasAttribute("sub")) {
  56. return VWindow.class;
  57. } else if (widgetClass == VFilterSelect.class) {
  58. if (uidl.hasAttribute("type")) {
  59. // TODO check if all type checks are really neede
  60. final String type = uidl.getStringAttribute("type").intern();
  61. if (type == "twincol") {
  62. return VTwinColSelect.class;
  63. } else if (type == "optiongroup") {
  64. return VOptionGroup.class;
  65. } else if (type == "native") {
  66. return VNativeSelect.class;
  67. } else if (type == "list") {
  68. return VListSelect.class;
  69. } else if (uidl.hasAttribute("selectmode")
  70. && uidl.getStringAttribute("selectmode")
  71. .equals("multi")) {
  72. return VListSelect.class;
  73. }
  74. }
  75. } else if (widgetClass == VTextField.class) {
  76. if (uidl.hasAttribute("multiline")) {
  77. return VTextArea.class;
  78. } else if (uidl.hasAttribute("secret")) {
  79. return VPasswordField.class;
  80. }
  81. } else if (widgetClass == VPopupCalendar.class) {
  82. if (uidl.hasAttribute("type")
  83. && uidl.getStringAttribute("type").equals("inline")) {
  84. return VDateFieldCalendar.class;
  85. }
  86. } else if (widgetClass == VSplitPanelHorizontal.class
  87. && uidl.hasAttribute("vertical")) {
  88. return VSplitPanelVertical.class;
  89. }
  90. return widgetClass;
  91. }
  92. public boolean isCorrectImplementation(Widget currentWidget, UIDL uidl,
  93. ApplicationConfiguration conf) {
  94. return currentWidget.getClass() == resolveWidgetType(uidl, conf);
  95. }
  96. public Class<? extends Paintable> getImplementationByClassName(
  97. String fullyqualifiedName) {
  98. Class<? extends Paintable> implementationByServerSideClassName = map
  99. .getImplementationByServerSideClassName(fullyqualifiedName);
  100. return implementationByServerSideClassName;
  101. }
  102. }