package magic.ui.widget.duel.sidebar; import java.awt.BorderLayout; import java.awt.Color; import java.awt.Font; import java.awt.Rectangle; import java.util.Set; import javax.swing.JLabel; import javax.swing.JPanel; import magic.ui.FontsAndBorders; import magic.ui.IChoiceViewer; import magic.ui.duel.viewerinfo.StackViewerInfo; import magic.ui.screen.duel.game.SwingGameController; import magic.ui.theme.ThemeFactory; import magic.ui.widget.PanelButton; import magic.ui.widget.message.TextLabel; import net.miginfocom.swing.MigLayout; @SuppressWarnings("serial") class StackButton extends PanelButton implements IChoiceViewer { private final StackViewerInfo stackInfo; private final SwingGameController controller; StackButton(SwingGameController aController, StackViewerInfo stackInfo, int maxWidth, int itemNum) { this.controller = aController; this.stackInfo = stackInfo; final JPanel panel = new JPanel(); panel.setOpaque(false); panel.setBorder(FontsAndBorders.getPlayerBorder(stackInfo.visible)); panel.setLayout(new BorderLayout(0, 0)); setComponent(panel); final JLabel sourceLabel = new JLabel(stackInfo.name); sourceLabel.setIcon(stackInfo.icon); sourceLabel.setFont(sourceLabel.getFont().deriveFont(Font.BOLD | Font.ITALIC)); final JLabel itemLabel = new JLabel("#" + Integer.toString(itemNum)); itemLabel.setFont(sourceLabel.getFont().deriveFont(Font.BOLD | Font.ITALIC)); final JPanel headerPanel = new JPanel(new MigLayout("insets 0", "[fill, grow][]4")); headerPanel.setOpaque(false); headerPanel.add(sourceLabel); headerPanel.add(itemLabel); panel.add(headerPanel, BorderLayout.NORTH); final TextLabel textLabel = new TextLabel( stackInfo.description, LogStackViewer.MESSAGE_FONT, maxWidth, false, LogStackViewer.CHOICE_COLOR, aController ); panel.add(textLabel, BorderLayout.CENTER); setBackground(FontsAndBorders.TRANSLUCENT_WHITE_STRONG); } private void doShowCardImage() { final Rectangle rect = new Rectangle( getParent().getLocationOnScreen().x, getLocationOnScreen().y, getParent().getWidth(), getHeight()); controller.viewInfoRight(stackInfo.cardDefinition, 0, rect); } @Override public void mouseClicked() { controller.processClick(stackInfo.itemOnStack); } @Override public void mouseEntered() { doShowCardImage(); } @Override public void mouseExited() { controller.hideInfo(); } @Override public void showValidChoices(final Set<?> validChoices) { setValid(validChoices.contains(stackInfo.itemOnStack)); } @Override public Color getValidColor() { return ThemeFactory.getInstance().getCurrentTheme().getChoiceColor(); } }