package magic.ui.screen.decks;
import java.awt.Component;
import java.awt.event.ActionEvent;
import javax.swing.AbstractAction;
import javax.swing.JPanel;
import javax.swing.JToggleButton;
import magic.data.GeneralConfig;
import magic.model.MagicCardDefinition;
import magic.model.MagicDeck;
import magic.translate.MText;
import magic.ui.helpers.MouseHelper;
import magic.ui.deck.games.DeckGamesPanel;
import magic.ui.widget.deck.legality.LegalityPanel;
import magic.ui.widget.deck.stats.IPwlWorkerListener;
import net.miginfocom.swing.MigLayout;
@SuppressWarnings("serial")
public class DeckViewsPanel extends JPanel implements IPwlWorkerListener {
// translatable strings
private static final String _S1 = "Deck";
private static final String _S4 = "Legality";
public static final int DECK_ACTION_PANEL_WIDTH = 40;
private final MigLayout miglayout = new MigLayout();
private final ToggleButtonsPanel toggleButtonsPanel = new ToggleButtonsPanel();
private final DeckPanel deckPanel;
private final LegalityPanel legalityPanel;
private final DeckGamesPanel statsPanel;
private JToggleButton statsToggleButton;
private IDeckView activeView;
private MagicDeck deck = new MagicDeck();
public DeckViewsPanel() {
deckPanel = new DeckPanel();
legalityPanel = new LegalityPanel();
statsPanel = new DeckGamesPanel(new MagicDeck());
legalityPanel.setVisible(false);
statsPanel.setVisible(false);
activeView = deckPanel;
setLookAndFeel();
refreshLayout();
addToggleButtons();
}
private void addToggleButtons() {
toggleButtonsPanel.addToggleButton(MText.get(_S1), new AbstractAction() {
@Override
public void actionPerformed(ActionEvent e) {
MouseHelper.showBusyCursor((Component) e.getSource());
setView(deckPanel);
MouseHelper.showHandCursor((Component) e.getSource());
}
});
toggleButtonsPanel.addToggleButton(MText.get(_S4), new AbstractAction() {
@Override
public void actionPerformed(ActionEvent e) {
MouseHelper.showBusyCursor((Component) e.getSource());
setView(legalityPanel);
MouseHelper.showHandCursor((Component) e.getSource());
}
});
statsToggleButton = toggleButtonsPanel.addToggleButton("", new AbstractAction() {
@Override
public void actionPerformed(ActionEvent e) {
MouseHelper.showBusyCursor((Component) e.getSource());
setView(statsPanel);
MouseHelper.showHandCursor((Component) e.getSource());
}
});
statsToggleButton.setVisible(GeneralConfig.getInstance().isGameStatsEnabled());
toggleButtonsPanel.setSelectedToggleButton(MText.get(_S1));
toggleButtonsPanel.refreshLayout();
}
private void refreshLayout() {
removeAll();
miglayout.setLayoutConstraints("insets 0, gap 0, flowy");
add(toggleButtonsPanel, "w 100%, h 34!");
add(deckPanel, "w 100%, h 100%, hidemode 3");
add(legalityPanel, "w 100%, h 100%, hidemode 3");
add(statsPanel, "w 100%, h 100%, hidemode 3");
revalidate();
}
private void setView(IDeckView aView) {
aView.notifyShowing();
if (activeView != null) {
activeView.setVisible(false);
}
aView.setVisible(true);
activeView = aView;
refreshLayout();
}
private void setLookAndFeel() {
setOpaque(false);
setLayout(miglayout);
}
private void doRefreshViews(MagicCardDefinition selectCard) {
deckPanel.setDeck(deck, selectCard);
legalityPanel.setDeck(deck);
statsPanel.setDeck(deck);
setView(activeView);
}
public void setDeck(MagicDeck deck, MagicCardDefinition selectCard) {
this.deck = deck;
doRefreshViews(selectCard);
}
public void setDeck(MagicDeck deck) {
setDeck(deck, null);
}
@Override
public void setPlayedWonLost(String pwl) {
statsToggleButton.setText(pwl);
}
public void setCardsTableListeners(ICardsTableListener... listeners) {
deckPanel.setCardsTableListeners(listeners);
legalityPanel.setCardsTableListeners(listeners);
}
public void setSelectedCard(MagicCardDefinition card) {
deckPanel.setSelectedCard(card);
}
public MagicCardDefinition getSelectedCard() {
return deckPanel.getSelectedCard();
}
}