package magic.ui.deck.games;
import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Component;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.MouseInfo;
import java.awt.Point;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTable;
import javax.swing.SwingUtilities;
import javax.swing.table.DefaultTableCellRenderer;
import magic.data.DeckType;
import magic.ui.utility.MagicStyle;
import net.miginfocom.swing.MigLayout;
@SuppressWarnings("serial")
class DeckCellRenderer extends DefaultTableCellRenderer {
private static final int BORDER_WIDTH = 2;
private static final BasicStroke BORDER_STROKE = new BasicStroke(BORDER_WIDTH);
private static final Color BORDER_COLOR = MagicStyle.getRolloverColor();
private static final MigLayout layout = new MigLayout("flowy, gap 2, insets 2 2 2 2", "[grow, fill]");
@Override
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int col) {
final DeckInfo info = (DeckInfo) value;
JLabel deckLabel = new JLabel(info.deckName);
DeckColorLabel colorLabel = new DeckColorLabel(info.deckColor);
final JPanel panel = new JPanel(layout) {
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
if (showCellHighlight(table, row, col, info)) {
Graphics2D g2d = (Graphics2D) g;
g2d.setPaint(BORDER_COLOR);
g2d.setStroke(BORDER_STROKE);
g.drawRect(1, 1, getWidth()-3, getHeight()-3);
}
}
};
panel.add(deckLabel);
panel.add(colorLabel);
return panel;
}
private boolean showCellHighlight(JTable table, int row, int col, DeckInfo info) {
return isEnabled()
&& info.deckType != DeckType.Random
&& isMouseOverCell(table, row, col);
}
private boolean isMouseOverCell(JTable table, int row, int col) {
Point mp = MouseInfo.getPointerInfo().getLocation();
SwingUtilities.convertPointFromScreen(mp, table);
int mRow = table.rowAtPoint(mp);
int mCol = table.columnAtPoint(mp);
return row == mRow && col == mCol;
}
}