package org.basex.gui.layout; import java.awt.Color; import java.awt.Graphics; import java.awt.Point; import java.awt.event.MouseEvent; import javax.swing.event.MouseInputAdapter; import org.basex.gui.GUIConstants; /** * This separator splits several panels and allows panel resizing. * * @author BaseX Team 2005-12, BSD License * @author Christian Gruen */ final class BaseXSplitSep extends BaseXBack { /** Size of splitter. */ static final int SIZE = 6; /** Color foreground. */ private final Color fore; /** Color background. */ private final Color back; /** Layout: horizontal = true, vertical = false. */ private final boolean l; /** * Constructor. * @param lay layout: horizontal = true, vertical = false */ BaseXSplitSep(final boolean lay) { setCursor(lay ? GUIConstants.CURSORMOVEH : GUIConstants.CURSORMOVEV); fore = getBackground(); back = fore.darker(); final MouseInputAdapter mouse = new MouseInputAdapter() { @Override public void mousePressed(final MouseEvent e) { ((BaseXSplit) getParent()).startDrag(pos(e)); } @Override public void mouseDragged(final MouseEvent e) { ((BaseXSplit) getParent()).drag(BaseXSplitSep.this, pos(e)); } }; addMouseListener(mouse); addMouseMotionListener(mouse); l = lay; } @Override public void paintComponent(final Graphics g) { super.paintComponent(g); final int w = getWidth(); final int h = getHeight(); g.setColor(fore); g.fillRect(0, 0, w, h); g.setColor(back); g.drawLine(0, 0, l ? 0 : w, l ? h : 0); g.drawLine(l ? w - 1 : 0, l ? 0 : h - 1, l ? w - 1 : w, l ? h : h - 1); } /** * Returns absolute cursor position. * @param e mouse event * @return absolute cursor position */ double pos(final MouseEvent e) { final Point p = getLocationOnScreen(); return l ? p.x + e.getX() : p.y + e.getY(); } }