package magic.ui.deck.games;
import java.awt.Color;
import java.util.ArrayList;
import java.util.List;
import javax.swing.BorderFactory;
import magic.data.GeneralConfig;
import magic.model.MagicCardDefinition;
import magic.model.MagicDeck;
import magic.ui.FontsAndBorders;
import magic.ui.ScreenController;
import magic.ui.screen.deck.editor.IDeckEditorView;
import magic.ui.screen.decks.IDeckView;
import magic.ui.screen.stats.IPagination;
import magic.ui.screen.stats.PaginationPanel;
import magic.ui.screen.widget.ActionBarButton;
import magic.ui.widget.M.MScrollPane;
import magic.ui.widget.TexturedPanel;
import net.miginfocom.swing.MigLayout;
@SuppressWarnings("serial")
public class DeckGamesPanel extends TexturedPanel
implements IDeckEditorView, IDeckView, IPagination {
private DeckGamesTableModel tm;
private DeckGamesJTable table;
private final MScrollPane scrollpane = new MScrollPane();
private final PaginationPanel paginator;
private MagicDeck deck;
public DeckGamesPanel(MagicDeck deck) {
this.deck = deck;
setBackground(FontsAndBorders.TRANSLUCENT_WHITE_STRONG);
scrollpane.setOpaque(false);
scrollpane.setBorder(BorderFactory.createMatteBorder(1, 0, 0, 0, Color.BLACK));
paginator = new PaginationPanel(this);
paginator.setBorder(BorderFactory.createMatteBorder(1, 0, 0, 0, Color.GRAY));
setLayout(new MigLayout("flowy, insets 0", "[fill, grow]", "[fill, grow]0[]"));
add(scrollpane.component());
add(paginator);
}
private void refreshStatsTable() {
tm = new DeckGamesTableModel(deck);
}
private void refreshStatsTable(int page) {
tm = new DeckGamesTableModel(deck, page);
}
@Override
public void notifyShowing() {
if (GeneralConfig.getInstance().isGameStatsEnabled()) {
if (tm == null) {
refreshStatsTable();
}
if (tm != null) {
table = new DeckGamesJTable(tm, !ScreenController.isDeckScreenShowing());
scrollpane.setViewportView(table);
paginator.refresh();
}
}
}
void doShowFirstPage() {
refreshStatsTable(0);
if (table != null) {
table.setModel(tm);
}
}
void doShowPreviousPage() {
refreshStatsTable(tm.getPrevPageNum());
if (table != null) {
table.setModel(tm);
}
}
void doShowNextPage() {
refreshStatsTable(tm.getNextPageNum());
if (table != null) {
table.setModel(tm);
}
}
void doShowLastPage() {
refreshStatsTable(tm.getTotalPages() - 1);
if (table != null) {
table.setModel(tm);
}
}
@Override
public int getPageNum() {
return tm != null ? tm.getPageNum() : 0;
}
@Override
public int getTotalPages() {
return tm != null ? tm.getTotalPages() : 0;
}
@Override
public boolean hasPrevPage() {
return tm != null && tm.hasPrevPage();
}
@Override
public boolean hasNextPage() {
return tm != null && tm.hasNextPage();
}
@Override
public void doPlusButtonAction() {
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
}
@Override
public void doMinusButtonAction() {
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
}
@Override
public List<ActionBarButton> getActionButtons() {
return new ArrayList<>();
}
@Override
public MagicCardDefinition getSelectedCard() {
return MagicCardDefinition.UNKNOWN;
}
private void setTableModel() {
if (table != null) {
table.setModel(tm);
}
}
private int getPrevPageNum() {
return tm.getPrevPageNum();
}
private int getNextPageNum() {
return tm.getNextPageNum();
}
@Override
public void displayFirstPage() {
refreshStatsTable(1);
setTableModel();
}
@Override
public void displayPreviousPage() {
refreshStatsTable(getPrevPageNum());
setTableModel();
}
@Override
public void displayNextPage() {
refreshStatsTable(getNextPageNum());
setTableModel();
}
@Override
public void displayLastPage() {
refreshStatsTable(getTotalPages());
setTableModel();
}
public void setDeck(MagicDeck deck) {
this.deck = deck;
this.tm = null;
}
}