package magic.ui.screen.decks; import java.awt.Dimension; import java.nio.file.Path; import javax.swing.JPanel; import javax.swing.JSplitPane; import magic.data.DeckType; import magic.model.MagicCardDefinition; import magic.model.MagicDeck; import magic.ui.screen.interfaces.IDeckConsumer; import magic.ui.widget.cards.canvas.CardImageOverlay; import magic.ui.widget.deck.DeckStatusPanel; import magic.ui.widget.deck.stats.PwlWorker; import magic.ui.widget.duel.viewer.CardViewer; import magic.utility.DeckUtils; import net.miginfocom.swing.MigLayout; @SuppressWarnings("serial") class DecksScreenPanel extends JPanel implements IDeckConsumer, ICardsTableListener { private MagicDeck selectedDeck = null; private Path deckFilePath = null; private final CardViewer cardViewer = new CardViewer(); private final JSplitPane splitter = new JSplitPane(JSplitPane.VERTICAL_SPLIT); private final DeckStatusPanel deckStatusPanel; private final SidebarPanel sidebar; private final DeckViewsPanel viewsPanel; private PwlWorker pwlWorker; DecksScreenPanel(DeckStatusPanel deckStatusPanel) { this.deckStatusPanel = deckStatusPanel; setOpaque(false); selectedDeck = new MagicDeck(); sidebar = new SidebarPanel(this); viewsPanel = new DeckViewsPanel(); viewsPanel.setCardsTableListeners(this); setLayout(new MigLayout("insets 0", "[]0[fill, grow]", "fill, grow")); add(sidebar); add(getDeckDetailsPane()); } MagicDeck getDeck() { return selectedDeck; } Path getDeckPath() { return deckFilePath; } private JSplitPane getDeckDetailsPane() { splitter.setOneTouchExpandable(false); splitter.setLeftComponent(viewsPanel); splitter.setRightComponent(getCardDetailsPanel()); splitter.setDividerSize(14); splitter.setBorder(null); splitter.setOpaque(false); splitter.getRightComponent().setMinimumSize(new Dimension()); splitter.setResizeWeight(1.0); return splitter; } private JPanel getCardDetailsPanel() { final JPanel panel = new JPanel(); panel.setMinimumSize(new Dimension()); panel.setOpaque(false); panel.setLayout(new MigLayout("insets 0")); panel.add(cardViewer, "w 100%, h 0:100%"); return panel; } @Override public void setDeck(String deckName, DeckType deckType) { throw new UnsupportedOperationException("setDeck(" + deckName + ", " + deckType + ")"); } @Override public boolean setDeck(MagicDeck deck, Path deckPath) { if (deckPath != null) { selectedDeck = deck; deckFilePath = deckPath; sidebar.setDeck(deck); deckStatusPanel.setDeck(deck, deck.isValid() || deck.size() > 0); splitter.setVisible(deck.isValid() || deck.size() > 0); } else { selectedDeck = null; deckFilePath = null; sidebar.setDeck(selectedDeck); deckStatusPanel.setDeck(null, false); splitter.setVisible(false); } doPWLStatsQuery(deck); viewsPanel.setDeck(deck); return true; } @Override public void setDeck(MagicDeck deck) { setDeck(deck, DeckUtils.getDeckPath(deck)); } private void doPWLStatsQuery(MagicDeck deck) { pwlWorker = new PwlWorker(deck); pwlWorker.setListeners(sidebar, viewsPanel); pwlWorker.execute(); } @Override public void onCardSelected(MagicCardDefinition card) { cardViewer.setCard(card); } @Override public void onLeftClick(MagicCardDefinition card) { // not applicable. } @Override public void onRightClick(MagicCardDefinition card) { new CardImageOverlay(card); } }