Skip to content
Snippets Groups Projects
Commit c993b7a7 authored by Raphael GIRARDOT's avatar Raphael GIRARDOT
Browse files

ColoredSplitPaneDivider (ColoredSplitPaneUI) ensures taking maximum place for...

ColoredSplitPaneDivider (ColoredSplitPaneUI) ensures taking maximum place for arrow buttons (useful for FlyScanGUI)
parent ca0abf69
No related branches found
No related tags found
No related merge requests found
......@@ -14,8 +14,12 @@
*/
package fr.soleil.lib.project.swing.ui;
import java.awt.Component;
import java.awt.Container;
import java.awt.Cursor;
import java.awt.Dimension;
import java.awt.Insets;
import java.awt.LayoutManager;
import java.awt.event.MouseEvent;
import java.beans.PropertyChangeEvent;
......@@ -34,10 +38,21 @@ import fr.soleil.lib.project.swing.ArrowButton;
*/
public class ColoredSplitPaneDivider extends BasicSplitPaneDivider {
private static final long serialVersionUID = -6999132459882348352L;
private static final long serialVersionUID = -7296337603656709804L;
public ColoredSplitPaneDivider(BasicSplitPaneUI ui) {
super(ui);
setLayout(new AdaptedButtonsDividerLayout());
}
@Override
public void setDividerSize(int newSize) {
super.setDividerSize(newSize);
if (leftButton instanceof ArrowButton && rightButton instanceof ArrowButton) {
((ArrowButton) leftButton).setSize(newSize, newSize);
((ArrowButton) rightButton).setSize(newSize, newSize);
revalidateSplitPane();
}
}
/**
......@@ -125,4 +140,92 @@ public class ColoredSplitPaneDivider extends BasicSplitPaneDivider {
}
}
protected void revalidateSplitPane() {
invalidate();
if (splitPane != null) {
splitPane.revalidate();
}
}
// ///////////// //
// Inner classes //
// ///////////// //
/**
* A {@link LayoutManager} that always keeps maximum size for arrow buttons
*
* @author Raphaël GIRARDOT
*/
protected class AdaptedButtonsDividerLayout implements LayoutManager {
@Override
public void layoutContainer(Container c) {
if ((leftButton != null) && (rightButton != null) && (c == ColoredSplitPaneDivider.this)) {
if (splitPane.isOneTouchExpandable()) {
Insets insets = getInsets();
int margin, size;
if (orientation == JSplitPane.VERTICAL_SPLIT) {
margin = (insets == null) ? 0 : insets.left;
size = getHeight();
if (insets != null) {
size -= (insets.top + insets.bottom);
size = Math.max(size, 0);
}
int y = (c.getSize().height - size) / 2;
leftButton.setBounds(margin, y, size * 2, size);
rightButton.setBounds(margin + size * 2 + 2, y, size * 2, size);
} else {
margin = (insets == null) ? 0 : insets.top;
size = getWidth();
if (insets != null) {
size -= (insets.left + insets.right);
size = Math.max(size, 0);
}
int x = (c.getSize().width - size) / 2;
leftButton.setBounds(x, margin, size, size * 2);
rightButton.setBounds(x, margin + size * 2 + 2, size, size * 2);
}
} else {
leftButton.setBounds(-5, -5, 1, 1);
rightButton.setBounds(-5, -5, 1, 1);
}
}
}
@Override
public Dimension minimumLayoutSize(Container c) {
Dimension minimumSize;
if ((splitPane == null) || (c != ColoredSplitPaneDivider.this)) {
minimumSize = new Dimension(0, 0);
} else {
int size = getDividerSize();
if (orientation == JSplitPane.VERTICAL_SPLIT) {
minimumSize = new Dimension(size * 4 + 4, size);
} else {
minimumSize = new Dimension(size, size * 4 + 4);
}
}
return minimumSize;
}
@Override
public Dimension preferredLayoutSize(Container c) {
return minimumLayoutSize(c);
}
@Override
public void removeLayoutComponent(Component c) {
// not managed
}
@Override
public void addLayoutComponent(String string, Component c) {
// not managed
}
}
}
......@@ -33,10 +33,10 @@ public class ColoredSplitPaneUI extends BasicSplitPaneUI {
public ColoredSplitPaneUI() {
super();
this.setContinuousLayout(false);
JPanel divider = new JPanel();
divider.setOpaque(true);
this.setNonContinuousLayoutDivider(divider);
setContinuousLayout(false);
JPanel dividerPanel = new JPanel();
dividerPanel.setOpaque(true);
setNonContinuousLayoutDivider(dividerPanel);
}
/**
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment