package com.hearthsim.gui;
import com.hearthsim.card.Card;
import com.hearthsim.card.Deck;
import com.hearthsim.card.ImplementedCardList.ImplementedCard;
import javax.swing.*;
import java.awt.*;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
import java.util.ArrayList;
import java.util.Iterator;
public class HSCardList extends JList<ImplementedCard> {
private static final long serialVersionUID = 1L;
private final org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger(this.getClass());
boolean editing_;
public HSCardList() {
super();
editing_ = false;
SortedListModel<ImplementedCard> model = new SortedListModel<>();
this.setModel(model);
this.addMouseListener(new MouseAdapter() {
@Override
public void mousePressed(MouseEvent evt) {
JList<?> list = (JList<?>)evt.getSource();
int index = list.locationToIndex(evt.getPoint());
String name = HSCardList.this.getModel().getElementAt(index).name_;
log.debug("clicked item " + index + ": " + name);
if (editing_ && list.getCellBounds(index, 100000).contains(evt.getPoint())) {
((SortedListModel<ImplementedCard>) HSCardList.this.getModel()).remove(index);
}
}
});
this.setCellRenderer(new CardCellRenderer());
}
public boolean getEditing() {
return editing_;
}
public void setEditing(boolean editing) {
editing_ = editing;
}
public Deck getDeck() {
ArrayList<Card> cards = new ArrayList<>();
Iterator<ImplementedCard> iter = ((SortedListModel<ImplementedCard>)this.getModel()).iterator();
while (iter.hasNext()) {
ImplementedCard ic = iter.next();
Constructor<?> ctor;
try {
ctor = ic.cardClass_.getConstructor();
Card card = (Card)ctor.newInstance();
cards.add(card);
} catch (NoSuchMethodException | SecurityException | InstantiationException | IllegalAccessException | IllegalArgumentException | InvocationTargetException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return new Deck(cards);
}
class CardCellRenderer extends JLabel implements ListCellRenderer<ImplementedCard> {
private static final long serialVersionUID = 1L;
public CardCellRenderer() {
setOpaque(false);
setIconTextGap(12);
this.setForeground(Color.WHITE);
}
@Override
public Component getListCellRendererComponent(JList<? extends ImplementedCard> list, ImplementedCard value, int index, boolean isSelected, boolean cellHasFocus) {
ImplementedCard entry = value;
switch (entry.rarity_) {
case "free":
this.setForeground(HSColors.CARD_FREE_COLOR);
break;
case "common":
this.setForeground(HSColors.CARD_COMMON_COLOR);
break;
case "rare":
this.setForeground(HSColors.CARD_RARE_COLOR);
break;
case "epic":
this.setForeground(HSColors.CARD_EPIC_COLOR);
break;
case "legendary":
this.setForeground(HSColors.CARD_LEGENDARY_COLOR);
break;
default:
this.setForeground(HSColors.CARD_FREE_COLOR);
break;
}
setText("[" + entry.mana_ + "] " + entry.name_);
return this;
}
}
}