package magic.ui.widget.deck;
import magic.data.DeckGenerators;
import magic.ui.MagicImages;
import magic.model.MagicColor;
import magic.ui.FontsAndBorders;
import javax.swing.DefaultComboBoxModel;
import javax.swing.ImageIcon;
import javax.swing.JComboBox;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.ListCellRenderer;
import java.awt.Color;
import java.awt.Component;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.util.Vector;
import magic.data.MagicIcon;
import magic.model.MagicDeckProfile;
import net.miginfocom.swing.MigLayout;
@SuppressWarnings("serial")
public class RandomDecksComboBox extends JComboBox<String> implements ListCellRenderer<String> {
private static final String SEPARATOR = "----";
private String lastSelected;
public RandomDecksComboBox(final String colors) {
setRenderer(this);
final Vector<String> items = new Vector<String>();
items.add("bug");
items.add("bur");
items.add("buw");
items.add("bgr");
items.add("bgw");
items.add("brw");
items.add("ugw");
items.add("ugr");
items.add("urw");
items.add("grw");
items.add(MagicDeckProfile.ANY_THREE);
items.add("bu");
items.add("bg");
items.add("br");
items.add("bw");
items.add("ug");
items.add("ur");
items.add("uw");
items.add("gr");
items.add("gw");
items.add("rw");
items.add(MagicDeckProfile.ANY_TWO);
items.add("b");
items.add("u");
items.add("g");
items.add("r");
items.add("w");
items.add(MagicDeckProfile.ANY_ONE);
items.add(MagicDeckProfile.ANY_DECK);
if (DeckGenerators.getInstance().getNrGenerators() > 0) {
items.add(SEPARATOR);
for (final String generatorName : DeckGenerators.getInstance().getGeneratorNames()) {
items.add(generatorName);
}
}
setModel(new DefaultComboBoxModel<String>(items));
setSelectedItem(colors);
lastSelected = colors;
this.setFocusable(false);
addActionListener(this);
}
@Override
public String getSelectedItem() {
return getItemAt(getSelectedIndex());
}
@Override
public Component getListCellRendererComponent(
final JList<? extends String> list,
final String selectedVal,
final int index,
final boolean isSelected,
final boolean cellHasFocus
) {
if (selectedVal.equals(SEPARATOR)) {
return new javax.swing.JSeparator(javax.swing.JSeparator.HORIZONTAL);
} else if (DeckGenerators.getInstance().getGeneratorNames().contains(selectedVal)) {
final JPanel panel=new JPanel(new GridLayout(1,1));
panel.setBorder(FontsAndBorders.EMPTY_BORDER);
if (isSelected) {
panel.setBackground(Color.LIGHT_GRAY);
}
final JLabel label = new JLabel(selectedVal, JLabel.CENTER);
label.setFont(FontsAndBorders.FONT1);
panel.add(label);
return panel;
} else {
final JPanel panel = new JPanel(new MigLayout("insets 0, gapx 20, alignx center"));
panel.setBorder(FontsAndBorders.EMPTY_BORDER);
if (isSelected) {
panel.setBackground(Color.LIGHT_GRAY);
}
for (int i = 0; i < selectedVal.length(); i++) {
panel.add(new JLabel(getRandomDeckComboIcon(selectedVal.charAt(i))));
}
return panel;
}
}
private ImageIcon getRandomDeckComboIcon(final char ch) {
switch (ch) {
case '*':
return MagicImages.getIcon(MagicIcon.ANY);
case '@':
return MagicImages.getIcon(MagicIcon.FOLDER);
default:
return MagicImages.getIcon(MagicColor.getColor(ch));
}
}
@Override
public void actionPerformed(final ActionEvent e) {
final String tempItem = getSelectedItem();
if (SEPARATOR.equals(tempItem)) {
// don't select separator
setSelectedItem(lastSelected);
} else {
lastSelected = tempItem;
}
}
}