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.

VTabsheetPaintable.java 3.2KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. /*
  2. @VaadinApache2LicenseForJavaFiles@
  3. */
  4. package com.vaadin.terminal.gwt.client.ui;
  5. import com.google.gwt.core.client.GWT;
  6. import com.google.gwt.user.client.DOM;
  7. import com.google.gwt.user.client.ui.Widget;
  8. import com.vaadin.terminal.gwt.client.ApplicationConnection;
  9. import com.vaadin.terminal.gwt.client.UIDL;
  10. import com.vaadin.terminal.gwt.client.ComponentConnector;
  11. public class VTabsheetPaintable extends VTabsheetBasePaintable implements
  12. SimpleManagedLayout {
  13. @Override
  14. public void updateFromUIDL(UIDL uidl, ApplicationConnection client) {
  15. if (isRealUpdate(uidl)) {
  16. // Handle stylename changes before generics (might affect size
  17. // calculations)
  18. getWidget().handleStyleNames(uidl, getState());
  19. }
  20. super.updateFromUIDL(uidl, client);
  21. if (!isRealUpdate(uidl)) {
  22. return;
  23. }
  24. // tabs; push or not
  25. if (!isUndefinedWidth()) {
  26. // FIXME: This makes tab sheet tabs go to 1px width on every update
  27. // and then back to original width
  28. // update width later, in updateTabScroller();
  29. DOM.setStyleAttribute(getWidget().tabs, "width", "1px");
  30. DOM.setStyleAttribute(getWidget().tabs, "overflow",
  31. "hidden");
  32. } else {
  33. getWidget().showAllTabs();
  34. DOM.setStyleAttribute(getWidget().tabs, "width", "");
  35. DOM.setStyleAttribute(getWidget().tabs, "overflow",
  36. "visible");
  37. getWidget().updateDynamicWidth();
  38. }
  39. if (!isUndefinedHeight()) {
  40. // Must update height after the styles have been set
  41. getWidget().updateContentNodeHeight();
  42. getWidget().updateOpenTabSize();
  43. }
  44. getWidget().iLayout();
  45. // Re run relative size update to ensure optimal scrollbars
  46. // TODO isolate to situation that visible tab has undefined height
  47. try {
  48. client.handleComponentRelativeSize(getWidget().tp
  49. .getWidget(getWidget().tp.getVisibleWidget()));
  50. } catch (Exception e) {
  51. // Ignore, most likely empty tabsheet
  52. }
  53. getWidget().waitingForResponse = false;
  54. }
  55. @Override
  56. protected Widget createWidget() {
  57. return GWT.create(VTabsheet.class);
  58. }
  59. @Override
  60. public VTabsheet getWidget() {
  61. return (VTabsheet) super.getWidget();
  62. }
  63. public void updateCaption(ComponentConnector component, UIDL uidl) {
  64. /* Tabsheet does not render its children's captions */
  65. }
  66. public void layout() {
  67. VTabsheet tabsheet = getWidget();
  68. tabsheet.updateContentNodeHeight();
  69. if (isUndefinedWidth()) {
  70. tabsheet.contentNode.getStyle().setProperty("width", "");
  71. } else {
  72. int contentWidth = tabsheet.getOffsetWidth()
  73. - tabsheet.getContentAreaBorderWidth();
  74. if (contentWidth < 0) {
  75. contentWidth = 0;
  76. }
  77. tabsheet.contentNode.getStyle().setProperty("width",
  78. contentWidth + "px");
  79. }
  80. tabsheet.updateOpenTabSize();
  81. tabsheet.iLayout();
  82. }
  83. }