Du kan inte välja fler än 25 ämnen Ämnen måste starta med en bokstav eller siffra, kan innehålla bindestreck ('-') och vara max 35 tecken långa.

TabsheetBaseConnector.java 3.5KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. /*
  2. * Copyright 2000-2016 Vaadin Ltd.
  3. *
  4. * Licensed under the Apache License, Version 2.0 (the "License"); you may not
  5. * use this file except in compliance with the License. You may obtain a copy of
  6. * the License at
  7. *
  8. * http://www.apache.org/licenses/LICENSE-2.0
  9. *
  10. * Unless required by applicable law or agreed to in writing, software
  11. * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
  12. * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
  13. * License for the specific language governing permissions and limitations under
  14. * the License.
  15. */
  16. package com.vaadin.client.ui.tabsheet;
  17. import java.util.ArrayList;
  18. import java.util.Iterator;
  19. import com.google.gwt.user.client.ui.Widget;
  20. import com.vaadin.client.ComponentConnector;
  21. import com.vaadin.client.communication.StateChangeEvent;
  22. import com.vaadin.client.ui.AbstractComponentContainerConnector;
  23. import com.vaadin.client.ui.VTabsheetBase;
  24. import com.vaadin.shared.ui.tabsheet.TabState;
  25. import com.vaadin.shared.ui.tabsheet.TabsheetState;
  26. public abstract class TabsheetBaseConnector
  27. extends AbstractComponentContainerConnector {
  28. /*
  29. * (non-Javadoc)
  30. *
  31. * @see com.vaadin.client.ui.AbstractConnector#init()
  32. */
  33. @Override
  34. protected void init() {
  35. super.init();
  36. getWidget().setClient(getConnection());
  37. }
  38. /*
  39. * (non-Javadoc)
  40. *
  41. * @see
  42. * com.vaadin.client.ui.AbstractComponentConnector#onStateChanged(com.vaadin
  43. * .client.communication.StateChangeEvent)
  44. */
  45. @Override
  46. public void onStateChanged(StateChangeEvent stateChangeEvent) {
  47. super.onStateChanged(stateChangeEvent);
  48. // Update member references
  49. getWidget().setEnabled(isEnabled());
  50. // Widgets in the TabSheet before update
  51. ArrayList<Widget> oldWidgets = new ArrayList<>();
  52. for (Iterator<Widget> iterator = getWidget()
  53. .getWidgetIterator(); iterator.hasNext();) {
  54. oldWidgets.add(iterator.next());
  55. }
  56. // Clear previous values
  57. getWidget().clearTabKeys();
  58. int index = 0;
  59. for (TabState tab : getState().tabs) {
  60. final String key = tab.key;
  61. final boolean selected = key.equals(getState().selected);
  62. getWidget().addTabKey(key, !tab.enabled && tab.visible);
  63. if (selected) {
  64. getWidget().setActiveTabIndex(index);
  65. }
  66. getWidget().renderTab(tab, index);
  67. if (selected) {
  68. getWidget().selectTab(index);
  69. }
  70. index++;
  71. }
  72. int tabCount = getWidget().getTabCount();
  73. while (tabCount-- > index) {
  74. getWidget().removeTab(index);
  75. }
  76. for (int i = 0; i < getWidget().getTabCount(); i++) {
  77. ComponentConnector p = getWidget().getTab(i);
  78. // null for PlaceHolder widgets
  79. if (p != null) {
  80. oldWidgets.remove(p.getWidget());
  81. }
  82. }
  83. // Detach any old tab widget, should be max 1
  84. for (Iterator<Widget> iterator = oldWidgets.iterator(); iterator
  85. .hasNext();) {
  86. Widget oldWidget = iterator.next();
  87. if (oldWidget.isAttached()) {
  88. oldWidget.removeFromParent();
  89. }
  90. }
  91. }
  92. @Override
  93. public VTabsheetBase getWidget() {
  94. return (VTabsheetBase) super.getWidget();
  95. }
  96. @Override
  97. public TabsheetState getState() {
  98. return (TabsheetState) super.getState();
  99. }
  100. }