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.

TabsheetBaseConnector.java 3.1KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  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.user.client.ui.Widget;
  8. import com.vaadin.terminal.gwt.client.ApplicationConnection;
  9. import com.vaadin.terminal.gwt.client.ComponentConnector;
  10. import com.vaadin.terminal.gwt.client.Paintable;
  11. import com.vaadin.terminal.gwt.client.UIDL;
  12. public abstract class TabsheetBaseConnector extends
  13. AbstractComponentContainerConnector implements Paintable {
  14. public static final String ATTRIBUTE_TAB_DISABLED = "disabled";
  15. public static final String ATTRIBUTE_TAB_DESCRIPTION = "description";
  16. public static final String ATTRIBUTE_TAB_ERROR_MESSAGE = "error";
  17. public static final String ATTRIBUTE_TAB_CAPTION = "caption";
  18. public static final String ATTRIBUTE_TAB_ICON = "icon";
  19. public void updateFromUIDL(UIDL uidl, ApplicationConnection client) {
  20. getWidget().client = client;
  21. if (!isRealUpdate(uidl)) {
  22. return;
  23. }
  24. // Update member references
  25. getWidget().id = uidl.getId();
  26. getWidget().disabled = !isEnabled();
  27. // Render content
  28. final UIDL tabs = uidl.getChildUIDL(0);
  29. // Widgets in the TabSheet before update
  30. ArrayList<Widget> oldWidgets = new ArrayList<Widget>();
  31. for (Iterator<Widget> iterator = getWidget().getWidgetIterator(); iterator
  32. .hasNext();) {
  33. oldWidgets.add(iterator.next());
  34. }
  35. // Clear previous values
  36. getWidget().tabKeys.clear();
  37. getWidget().disabledTabKeys.clear();
  38. int index = 0;
  39. for (final Iterator<Object> it = tabs.getChildIterator(); it.hasNext();) {
  40. final UIDL tab = (UIDL) it.next();
  41. final String key = tab.getStringAttribute("key");
  42. final boolean selected = tab.getBooleanAttribute("selected");
  43. final boolean hidden = tab.getBooleanAttribute("hidden");
  44. if (tab.getBooleanAttribute(ATTRIBUTE_TAB_DISABLED)) {
  45. getWidget().disabledTabKeys.add(key);
  46. }
  47. getWidget().tabKeys.add(key);
  48. if (selected) {
  49. getWidget().activeTabIndex = index;
  50. }
  51. getWidget().renderTab(tab, index, selected, hidden);
  52. index++;
  53. }
  54. int tabCount = getWidget().getTabCount();
  55. while (tabCount-- > index) {
  56. getWidget().removeTab(index);
  57. }
  58. for (int i = 0; i < getWidget().getTabCount(); i++) {
  59. ComponentConnector p = getWidget().getTab(i);
  60. // null for PlaceHolder widgets
  61. if (p != null) {
  62. oldWidgets.remove(p.getWidget());
  63. }
  64. }
  65. // Detach any old tab widget, should be max 1
  66. for (Iterator<Widget> iterator = oldWidgets.iterator(); iterator
  67. .hasNext();) {
  68. Widget oldWidget = iterator.next();
  69. if (oldWidget.isAttached()) {
  70. oldWidget.removeFromParent();
  71. }
  72. }
  73. }
  74. @Override
  75. public VTabsheetBase getWidget() {
  76. return (VTabsheetBase) super.getWidget();
  77. }
  78. }