// License: GPL. For details, see LICENSE file.
package org.openstreetmap.josm.gui.widgets;
import java.awt.event.HierarchyBoundsListener;
import java.awt.event.HierarchyEvent;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import javax.swing.JSplitPane;
/**
* Auto adjusting split pane when parent is resized.
* @since 11772 (extracted from {@code CombinePrimitiveResolverDialog})
*/
public class AutoAdjustingSplitPane extends JSplitPane implements PropertyChangeListener, HierarchyBoundsListener {
private double dividerLocation;
/**
* Constructs a new {@code AutoAdjustingSplitPane}.
* @param newOrientation {@code JSplitPane.HORIZONTAL_SPLIT} or {@code JSplitPane.VERTICAL_SPLIT}
*/
public AutoAdjustingSplitPane(int newOrientation) {
super(newOrientation);
addPropertyChangeListener(JSplitPane.DIVIDER_LOCATION_PROPERTY, this);
addHierarchyBoundsListener(this);
}
@Override
public void ancestorResized(HierarchyEvent e) {
setDividerLocation((int) (dividerLocation * getHeight()));
}
@Override
public void ancestorMoved(HierarchyEvent e) {
// do nothing
}
@Override
public void propertyChange(PropertyChangeEvent evt) {
if (JSplitPane.DIVIDER_LOCATION_PROPERTY.equals(evt.getPropertyName())) {
int newVal = (Integer) evt.getNewValue();
if (getHeight() != 0) {
dividerLocation = (double) newVal / (double) getHeight();
}
}
}
}