package org.basex.gui.layout;
import org.basex.gui.GUIConstants;
import org.basex.gui.GUIConstants.Fill;
import org.basex.util.Util;
import javax.swing.*;
import javax.swing.border.EmptyBorder;
import java.awt.*;
import java.util.Map;
/**
* Panel background, extending the {@link JPanel}.
*
* @author BaseX Team 2005-12, BSD License
* @author Christian Gruen
*/
public class BaseXBack extends JPanel {
/** Desktop hints. */
private static final Map<?, ?> HINTS = (Map<?, ?>)
Toolkit.getDefaultToolkit().getDesktopProperty("awt.font.desktophints");
/** Flag for adding rendering hints. */
private static boolean hints = true;
/** Fill mode. */
private Fill mode;
/**
* Default constructor.
*/
public BaseXBack() {
this(Fill.PLAIN);
}
/**
* Constructor, specifying the fill mode.
* @param m visualization mode
*/
public BaseXBack(final Fill m) {
mode(m);
}
/**
* Constructor, specifying an empty border.
* @param t top distance
* @param l left distance
* @param b bottom distance
* @param r right distance
*/
public BaseXBack(final int t, final int l, final int b, final int r) {
this();
border(t, l, b, r);
}
/**
* Constructor, specifying a layout manager.
* @param lm layout manager
*/
public BaseXBack(final LayoutManager lm) {
this();
layout(lm);
}
/**
* Sets the specified fill mode.
* @param m visualization mode
* @return self reference
*/
public final BaseXBack mode(final Fill m) {
mode = m;
final boolean o = mode != Fill.NONE;
if(isOpaque() != o) setOpaque(o);
return this;
}
@Override
public void paintComponent(final Graphics g) {
if(mode == Fill.GRADIENT) {
final Color c1 = GUIConstants.WHITE;
final Color c2 = GUIConstants.color1;
BaseXLayout.fill(g, c1, c2, 0, 0, getWidth(), getHeight());
} else {
super.paintComponent(g);
}
// rendering hints are not supported by all platforms
if(hints) {
try {
((Graphics2D) g).addRenderingHints(HINTS);
} catch(final Exception ex) {
Util.debug(ex);
hints = false;
}
}
}
/**
* Sets an empty border with the specified margins.
* @param t top distance
* @param l left distance
* @param b bottom distance
* @param r right distance
* @return self reference
*/
public final BaseXBack border(final int t, final int l, final int b,
final int r) {
setBorder(new EmptyBorder(t, l, b, r));
return this;
}
/**
* Sets an empty border with the specified margin.
* @param m margin
* @return self reference
*/
public final BaseXBack border(final int m) {
return border(m, m, m, m);
}
/**
* Sets the layout manager for this container.
* @param lm layout manager
* @return self reference
*/
public final BaseXBack layout(final LayoutManager lm) {
setLayout(lm);
return this;
}
/**
* Activates graphics anti-aliasing.
* @param g graphics reference
*/
protected static final void smooth(final Graphics g) {
((Graphics2D) g).setRenderingHint(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
}
}