package magic.ui.screen.duel.player;
import java.awt.Color;
import java.awt.Component;
import java.awt.Dimension;
import javax.swing.BorderFactory;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.ListCellRenderer;
import javax.swing.SwingConstants;
import magic.model.player.PlayerProfile;
import magic.ui.MagicImages;
import magic.ui.utility.MagicStyle;
import magic.ui.FontsAndBorders;
import net.miginfocom.swing.MigLayout;
@SuppressWarnings("serial")
abstract class PlayersJList extends JList<PlayerProfile> {
protected abstract String getPlayerSettingsLabelText(PlayerProfile aProfile);
PlayersJList() {
setOpaque(false);
setCellRenderer(new PlayersJListCellRenderer());
}
private class PlayersJListCellRenderer extends JLabel implements ListCellRenderer<PlayerProfile> {
private Color foreColor;
private PlayerProfile profile;
public PlayersJListCellRenderer() {
setOpaque(false);
}
@Override
public Component getListCellRendererComponent(
JList<? extends PlayerProfile> list,
PlayerProfile profile,
int index,
boolean isSelected,
boolean cellHasFocus) {
this.profile = profile;
foreColor = isSelected ? MagicStyle.getRolloverColor() : Color.WHITE;
final MigLayout migLayout = new MigLayout("insets 0, gap 0");
final JPanel panel = new JPanel(migLayout);
migLayout.setColumnConstraints("4[66][][align right]4");
panel.setPreferredSize(new Dimension(getWidth(), 70));
panel.setOpaque(false);
panel.setBorder(isSelected ? BorderFactory.createLineBorder(MagicStyle.getRolloverColor(), 1) : null);
panel.add(getAvatarPortrait(), "h 70!");
panel.add(getNamePanel(), "w 200!");
panel.add(new PlayerMiniStatsPanel(profile.getStats(), foreColor), "pushx");
return panel;
}
private JLabel getAvatarPortrait() {
return new JLabel(MagicImages.getPlayerAvatar(profile).getIcon(2));
}
private JPanel getNamePanel() {
final JPanel panel = new JPanel(new MigLayout("insets 0, gap 0, flowy"));
panel.setOpaque(false);
panel.setForeground(foreColor);
panel.add(getPlayerNameLabel());
panel.add(getPlayerSettingsLabel());
return panel;
}
private JLabel getPlayerSettingsLabel() {
final JLabel lbl = new JLabel(getPlayerSettingsLabelText(profile));
lbl.setForeground(foreColor);
lbl.setFont(FontsAndBorders.FONT0);
return lbl;
}
private JLabel getPlayerNameLabel() {
final JLabel lbl = new JLabel(profile.getPlayerName());
lbl.setFont(FontsAndBorders.FONT2);
lbl.setForeground(foreColor);
lbl.setVerticalAlignment(SwingConstants.TOP);
return lbl;
}
}
}