package magic.ui.screen.card.explorer;
import magic.ui.widget.card.decks.CardDecksPanel;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import javax.swing.AbstractAction;
import javax.swing.BorderFactory;
import javax.swing.JPanel;
import magic.model.MagicCardDefinition;
import magic.translate.MText;
import magic.ui.widget.duel.viewer.CardViewer;
import magic.ui.dialog.prefs.ImageSizePresets;
import magic.ui.widget.M.MScrollPane;
import net.miginfocom.swing.MigLayout;
@SuppressWarnings("serial")
public class CardPanel extends JPanel {
// translatable strings
private static final String _S1 = "decks: %d";
private static final String _S2 = "List of decks containing this card";
private static final String _S3 = "Double-click deck name to view complete deck.";
private static final String _S4 = "searching...";
private final MigLayout layout = new MigLayout();
private final CardViewer cardViewer;
private final MScrollPane cardScrollPane;
private final CardDecksPanel decksPanel = new CardDecksPanel();
private final SplitterButton decksButton = new SplitterButton(MText.get(_S1, 0));
private boolean isImageVisible = true;
public CardPanel() {
setOpaque(false);
// card image viewer
cardViewer = new CardViewer();
// card image scroll pane
cardScrollPane = new MScrollPane();
cardScrollPane.setViewportView(cardViewer);
cardScrollPane.setBorder(BorderFactory.createMatteBorder(0, 0, 1, 0, Color.BLACK));
cardScrollPane.setOpaque(false);
cardScrollPane.setVScrollBarIncrement(10);
decksPanel.setOpaque(false);
decksPanel.addPropertyChangeListener(CardDecksPanel.CP_DECKS_UPDATED,
new PropertyChangeListener() {
@Override
public void propertyChange(PropertyChangeEvent evt) {
final int deckCount = (int) evt.getNewValue();
decksButton.setText(MText.get(_S1, deckCount));
decksButton.setForeground(deckCount > 0 ? Color.WHITE : Color.GRAY);
}
}
);
decksButton.setToolTipText(String.format("<html><b>%s</b><br>%s</html>",
MText.get(_S2),
MText.get(_S3)));
decksButton.addActionListener(new AbstractAction() {
@Override
public void actionPerformed(ActionEvent e) {
isImageVisible = !isImageVisible;
cardScrollPane.setVisible(isImageVisible);
decksButton.setIsArrowUp(isImageVisible);
refreshLayout();
}
});
setMinimumSize(new Dimension(cardViewer.getMinimumSize().width, 0));
setLayout(layout);
layout.setLayoutConstraints("flowy, insets 0, gap 0");
refreshLayout();
}
private void refreshLayout() {
removeAll();
final int minImageHeight = ImageSizePresets.SIZE_312x445.getSize().height + 1;
add(cardScrollPane.component(), "hmin " + minImageHeight + ", hidemode 3");
add(decksButton, "w 100%, h 16:24");
add(decksPanel, "w 100%, growy, pushy, hmin 0");
revalidate();
}
public void setCard(final MagicCardDefinition aCardDef) {
if (aCardDef == null) {
return;
}
decksButton.setForeground(Color.GRAY);
decksButton.setText(MText.get(_S4));
cardViewer.setCard(aCardDef);
decksPanel.setCard(aCardDef);
refreshLayout();
}
}