public IdeSplitter(LayoutElement first, LayoutElement second, Splitter splitter) { super(first, second, splitter.isVertical() ? horizontal : vertical); this.splitter = splitter; } }
public void setResizeEnabled(boolean resizeEnabled) { myResizeEnabled = resizeEnabled; if (!myResizeEnabled) { setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR)); } else { setCursor(isVertical() ? Cursor.getPredefinedCursor(Cursor.N_RESIZE_CURSOR) : Cursor.getPredefinedCursor(Cursor.W_RESIZE_CURSOR)); } }
@Override public Dimension getPreferredSize() { final int dividerWidth = getDividerWidth(); if (myFirstComponent != null && myFirstComponent.isVisible() && mySecondComponent != null && mySecondComponent.isVisible()) { final Dimension firstPrefSize = myFirstComponent.getPreferredSize(); final Dimension secondPrefSize = mySecondComponent.getPreferredSize(); return isVertical() ? new Dimension(Math.max(firstPrefSize.width, secondPrefSize.width), firstPrefSize.height + dividerWidth + secondPrefSize.height) : new Dimension(firstPrefSize.width + dividerWidth + secondPrefSize.width, Math.max(firstPrefSize.height, secondPrefSize.height)); } if (myFirstComponent != null && myFirstComponent.isVisible()) { // only first component is visible return myFirstComponent.getPreferredSize(); } if (mySecondComponent != null && mySecondComponent.isVisible()) { // only second component is visible return mySecondComponent.getPreferredSize(); } return super.getPreferredSize(); } public void skipNextLayouting() {
public void setOrientation(boolean isVerticalSplit) { removeAll(); setCursor(isVertical() ? Cursor.getPredefinedCursor(Cursor.N_RESIZE_CURSOR) : Cursor.getPredefinedCursor(Cursor.W_RESIZE_CURSOR));
@Override protected void processMouseMotionEvent(MouseEvent e) { super.processMouseMotionEvent(e); if (!myResizeEnabled) return; if (MouseEvent.MOUSE_DRAGGED == e.getID()) { myPoint = SwingUtilities.convertPoint(this, e.getPoint(), Splitter.this); float proportion; if (isVertical()) { if (getHeight() > 0) { proportion = Math.min(1.0f, Math.max(.0f, Math .min(Math.max(getMinProportion(true), (float)myPoint.y / (float)Splitter.this.getHeight()), 1 - getMinProportion(false)))); setProportion(proportion); } } else { if (getWidth() > 0) { proportion = Math.min(1.0f, Math.max(.0f, Math .min(Math.max(getMinProportion(true), (float)myPoint.x / (float)Splitter.this.getWidth()), 1 - getMinProportion(false)))); setProportion(proportion); } } } }
@Override public Dimension getMinimumSize() { final int dividerWidth = getDividerWidth(); if (myFirstComponent != null && myFirstComponent.isVisible() && mySecondComponent != null && mySecondComponent.isVisible()) { final Dimension firstMinSize = myFirstComponent.getMinimumSize(); final Dimension secondMinSize = mySecondComponent.getMinimumSize(); return isVertical() ? new Dimension(Math.max(firstMinSize.width, secondMinSize.width), firstMinSize.height + dividerWidth + secondMinSize.height) : new Dimension(firstMinSize.width + dividerWidth + secondMinSize.width, Math.max(firstMinSize.height, secondMinSize.height)); } if (myFirstComponent != null && myFirstComponent.isVisible()) { // only first component is visible return myFirstComponent.getMinimumSize(); } if (mySecondComponent != null && mySecondComponent.isVisible()) { // only second component is visible return mySecondComponent.getMinimumSize(); } return super.getMinimumSize(); }
public float getMinProportion(boolean first) { JComponent component = first? myFirstComponent : mySecondComponent; if (isHonorMinimumSize()) { if (component != null && myFirstComponent != null && myFirstComponent.isVisible() && mySecondComponent != null && mySecondComponent.isVisible()) { if (isVertical()) { return (float)component.getMinimumSize().height / (float)(getHeight() - getDividerWidth()); } else { return (float)component.getMinimumSize().width / (float)(getWidth() - getDividerWidth()); } } } return 0.0f; }
int height = getHeight(); int total = isVertical() ? height : width; if (total <= 0) return; double mSize1 = isVertical() ? myFirstComponent.getMinimumSize().getHeight() : myFirstComponent.getMinimumSize().getWidth(); double mSize2 = isVertical() ? mySecondComponent.getMinimumSize().getHeight() : mySecondComponent.getMinimumSize().getWidth(); int iSize2 = total - iSize1 - d; if (isVertical()) { firstRect.setBounds(0, 0, width, iSize1); dividerRect.setBounds(0, iSize1, width, d);