package magic.ui.screen.deck.tiled;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
import javax.swing.SwingUtilities;
import magic.model.MagicCardDefinition;
import magic.model.MagicDeck;
import magic.translate.MText;
import magic.ui.screen.HeaderFooterScreen;
import magic.ui.screen.widget.MenuButton;
import magic.ui.screen.widget.SampleHandActionButton;
@SuppressWarnings("serial")
public class DeckTiledCardsScreen extends HeaderFooterScreen {
// translatable strings
private static final String _S1 = "Deck image view";
private final MagicDeck deck;
private ContentPanel content;
private HeaderPanel headerPanel;
public DeckTiledCardsScreen(final MagicDeck aDeck) {
super(MText.get(_S1));
this.deck = aDeck;
useLoadingScreen(this::initUI);
}
private void initUI() {
assert SwingUtilities.isEventDispatchThread();
headerPanel = new HeaderPanel();
setHeaderContent(headerPanel);
content = new ContentPanel(deck);
setMainContent(content);
setFooterButtons();
showCards(CardTypeFilter.ALL);
}
private List<MagicCardDefinition> getFilteredDeck(MagicDeck deck, CardTypeFilter filterType) {
return deck.stream()
.filter(c -> filterType == CardTypeFilter.ALL || c.getCardType().contains(filterType.getMagicType()))
.sorted(MagicCardDefinition.SORT_BY_NAME)
.collect(Collectors.toList());
}
private void showCards(CardTypeFilter filter) {
final List<MagicCardDefinition> cards = getFilteredDeck(deck, filter);
content.refresh(cards);
headerPanel.setContent(deck, filter, cards);
}
private void setFilterButtons() {
final List<MenuButton> btns = new ArrayList<>();
for (CardTypeFilter f : CardTypeFilter.values()) {
if (f == CardTypeFilter.ALL) {
btns.add(MenuButton.build(() -> showCards(f), f.getTitle()));
} else if (deck.contains(f.getMagicType())) {
btns.add(MenuButton.build(() -> showCards(f), f.getIcon(), f.getTitle()));
}
}
addFooterGroup(btns.toArray(new MenuButton[btns.size()]));
}
private void setFooterButtons() {
setFilterButtons();
addToFooter(SampleHandActionButton.createInstance(deck));
}
}