package org.rstudio.core.client.cellview; import com.google.gwt.dom.client.Style; import com.google.gwt.user.client.ui.SplitLayoutPanel; import com.google.gwt.user.client.ui.Widget; // In the version of GWT currently used, the splitter doesn't hide when the // associated child is hidden. This is fixed in later releases of GWT. // http://gwt-code-reviews.appspot.com/1880804/patch/9001/10001 // // This class extends the stock GWT SplitLayoutPanel such that it hides the // splitter associated with a child widget when that widget is hidden. public class AutoHidingSplitLayoutPanel extends SplitLayoutPanel { public AutoHidingSplitLayoutPanel(int splitterSize) { super(splitterSize); } public AutoHidingSplitLayoutPanel(Style.Unit unit) { } @Override public void setWidgetHidden(Widget widget, boolean hidden) { LayoutData layoutData = (LayoutData)widget.getLayoutData(); if (layoutData.direction != Direction.CENTER) { Widget splitter = getAssociatedSplitter(widget); super.setWidgetHidden(splitter, hidden); } super.setWidgetHidden(widget, hidden); } // adapted from the private method of the same name in the parent class private Widget getAssociatedSplitter(Widget child) { int idx = getWidgetIndex(child); if (idx > -1 && idx < getWidgetCount() - 1) { return getWidget(idx + 1); } return null; } }