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.

VAbstractSplitPanelPaintable.java 5.0KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142
  1. /*
  2. @VaadinApache2LicenseForJavaFiles@
  3. */
  4. package com.vaadin.terminal.gwt.client.ui;
  5. import com.google.gwt.dom.client.NativeEvent;
  6. import com.google.gwt.event.dom.client.DomEvent.Type;
  7. import com.google.gwt.event.shared.EventHandler;
  8. import com.google.gwt.event.shared.HandlerRegistration;
  9. import com.google.gwt.user.client.Element;
  10. import com.google.gwt.user.client.Event;
  11. import com.google.gwt.user.client.ui.Widget;
  12. import com.vaadin.terminal.gwt.client.ApplicationConnection;
  13. import com.vaadin.terminal.gwt.client.UIDL;
  14. import com.vaadin.terminal.gwt.client.ConnectorMap;
  15. import com.vaadin.terminal.gwt.client.ComponentConnector;
  16. public abstract class VAbstractSplitPanelPaintable extends
  17. AbstractComponentContainerConnector implements SimpleManagedLayout {
  18. public static final String SPLITTER_CLICK_EVENT_IDENTIFIER = "sp_click";
  19. public void updateCaption(ComponentConnector component, UIDL uidl) {
  20. // TODO Implement caption handling
  21. }
  22. ClickEventHandler clickEventHandler = new ClickEventHandler(this,
  23. SPLITTER_CLICK_EVENT_IDENTIFIER) {
  24. @Override
  25. protected <H extends EventHandler> HandlerRegistration registerHandler(
  26. H handler, Type<H> type) {
  27. if ((Event.getEventsSunk(getWidget().splitter) & Event
  28. .getTypeInt(type.getName())) != 0) {
  29. // If we are already sinking the event for the splitter we do
  30. // not want to additionally sink it for the root element
  31. return getWidget().addHandler(handler, type);
  32. } else {
  33. return getWidget().addDomHandler(handler, type);
  34. }
  35. }
  36. @Override
  37. public void onContextMenu(
  38. com.google.gwt.event.dom.client.ContextMenuEvent event) {
  39. Element target = event.getNativeEvent().getEventTarget().cast();
  40. if (getWidget().splitter.isOrHasChild(target)) {
  41. super.onContextMenu(event);
  42. }
  43. };
  44. @Override
  45. protected void fireClick(NativeEvent event) {
  46. Element target = event.getEventTarget().cast();
  47. if (getWidget().splitter.isOrHasChild(target)) {
  48. super.fireClick(event);
  49. }
  50. }
  51. @Override
  52. protected Element getRelativeToElement() {
  53. return null;
  54. }
  55. };
  56. @Override
  57. public void updateFromUIDL(UIDL uidl, ApplicationConnection client) {
  58. getWidget().client = client;
  59. getWidget().id = uidl.getId();
  60. getWidget().immediate = getState().isImmediate();
  61. super.updateFromUIDL(uidl, client);
  62. if (!isRealUpdate(uidl)) {
  63. return;
  64. }
  65. getWidget().setEnabled(!getState().isDisabled());
  66. clickEventHandler.handleEventHandlerRegistration(client);
  67. if (getState().hasStyles()) {
  68. getWidget().componentStyleNames = getState().getStyle()
  69. .split(" ");
  70. } else {
  71. getWidget().componentStyleNames = new String[0];
  72. }
  73. getWidget().setLocked(uidl.getBooleanAttribute("locked"));
  74. getWidget().setPositionReversed(
  75. uidl.getBooleanAttribute("reversed"));
  76. getWidget().setStylenames();
  77. getWidget().position = uidl.getStringAttribute("position");
  78. final ComponentConnector newFirstChildPaintable = client
  79. .getPaintable(uidl.getChildUIDL(0));
  80. final ComponentConnector newSecondChildPaintable = client
  81. .getPaintable(uidl.getChildUIDL(1));
  82. Widget newFirstChild = newFirstChildPaintable.getWidget();
  83. Widget newSecondChild = newSecondChildPaintable.getWidget();
  84. if (getWidget().firstChild != newFirstChild) {
  85. if (getWidget().firstChild != null) {
  86. client.unregisterPaintable(ConnectorMap.get(client)
  87. .getConnector(getWidget().firstChild));
  88. }
  89. getWidget().setFirstWidget(newFirstChild);
  90. }
  91. if (getWidget().secondChild != newSecondChild) {
  92. if (getWidget().secondChild != null) {
  93. client.unregisterPaintable(ConnectorMap.get(client)
  94. .getConnector(getWidget().secondChild));
  95. }
  96. getWidget().setSecondWidget(newSecondChild);
  97. }
  98. newFirstChildPaintable.updateFromUIDL(uidl.getChildUIDL(0), client);
  99. newSecondChildPaintable.updateFromUIDL(uidl.getChildUIDL(1), client);
  100. // This is needed at least for cases like #3458 to take
  101. // appearing/disappearing scrollbars into account.
  102. client.runDescendentsLayout(getWidget());
  103. getLayoutManager().setNeedsUpdate(this);
  104. }
  105. public void layout() {
  106. VAbstractSplitPanel splitPanel = getWidget();
  107. splitPanel.setSplitPosition(splitPanel.position);
  108. splitPanel.updateSizes();
  109. }
  110. @Override
  111. public VAbstractSplitPanel getWidget() {
  112. return (VAbstractSplitPanel) super.getWidget();
  113. }
  114. @Override
  115. protected abstract VAbstractSplitPanel createWidget();
  116. }