package magic.ui.widget.duel.viewer;
import magic.ui.duel.viewerinfo.GameViewerInfo;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.AbstractAction;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.JPopupMenu;
import javax.swing.SwingUtilities;
import magic.data.MagicIcon;
import magic.ui.MagicImages;
import magic.translate.StringContext;
import magic.ui.utility.MagicStyle;
import magic.ui.screen.duel.game.SwingGameController;
import magic.translate.MText;
import magic.ui.screen.widget.ActionBarButton;
import magic.ui.theme.Theme;
import magic.utility.MagicSystem;
import net.miginfocom.swing.MigLayout;
@SuppressWarnings("serial")
public class TurnTitlePanel extends JPanel {
// translatable strings
private static final String _S1 = "Options Menu [ESC]";
private static final String _S2 = "Displays menu of common and screen specific options.";
private static final String _S3 = "First player to %d wins the duel.";
@StringContext(eg = "as in 'Game 2 of 3'")
private static final String _S4 = "Game %d / %d";
private static final String _S5 = "Turn %d";
private final MigLayout miglayout = new MigLayout();
private final JLabel scoreLabel = new JLabel();
private final JLabel gameLabel = new JLabel();
private final SwingGameController controller;
public TurnTitlePanel(final SwingGameController controller) {
this.controller = controller;
setLookAndFeel();
setLayout(miglayout);
refreshLayout();
}
private void setLookAndFeel() {
setOpaque(false);
//
final Color textColor = MagicStyle.getTheme().getColor(Theme.COLOR_TITLE_FOREGROUND);
scoreLabel.setForeground(textColor);
gameLabel.setForeground(textColor);
}
private void refreshLayout() {
miglayout.setLayoutConstraints("insets 0 3 0 2, gap 0, flowy, wrap 2");
miglayout.setColumnConstraints("[fill]push[]");
removeAll();
add(scoreLabel);
add(gameLabel);
add(getOptionsIconButton(), "spany 2, aligny top");
}
private JButton getOptionsIconButton() {
final JButton btn = new ActionBarButton(
MagicImages.getIcon(MagicIcon.MENU),
MText.get(_S1),
MText.get(_S2),
new AbstractAction() {
@Override
public void actionPerformed(final ActionEvent e) {
controller.showGameOptionsOverlay();
}
}
);
btn.setMaximumSize(new Dimension(18, 18));
if (MagicSystem.isDevMode()) {
btn.addMouseListener(new MouseAdapter() {
@Override
public void mouseReleased(MouseEvent e) {
if (e.getClickCount() == 1 && SwingUtilities.isRightMouseButton(e)) {
showDevPopupMenu(e);
} else {
super.mouseReleased(e);
}
}
});
}
return btn;
}
public void refresh(final GameViewerInfo gameInfo) {
scoreLabel.setText(getScoreString(gameInfo));
scoreLabel.setToolTipText(MText.get(_S3, gameInfo.getGamesRequiredToWinDuel()));
gameLabel.setText(String.format("%s • %s • %s",
MText.get(_S4, gameInfo.getGameNumber(), gameInfo.getMaxGames()),
MText.get(_S5, gameInfo.getTurn()),
gameInfo.getTurnPlayer().getName())
);
}
private String getScoreString(final GameViewerInfo gameInfo) {
return String.format("%s %d - %d %s",
gameInfo.getPlayerInfo(false).getName(),
gameInfo.getPlayerInfo(false).getGamesWon(),
gameInfo.getPlayerInfo(true).getGamesWon(),
gameInfo.getPlayerInfo(true).getName()
);
}
private void showDevPopupMenu(final MouseEvent e) {
final JPopupMenu menu = new JPopupMenu();
final JMenuItem item1 = new JMenuItem(new AbstractAction("Save Game") {
@Override
public void actionPerformed(ActionEvent e) {
controller.doSaveGame();
}
});
menu.add(item1);
menu.show(e.getComponent(), e.getX(), e.getY());
}
}