package magic.ui.screen.widget; import java.awt.Color; import java.awt.Font; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import javax.swing.ImageIcon; import javax.swing.JLabel; import javax.swing.SwingConstants; import magic.data.DuelConfig; import magic.data.MagicFormat; import magic.data.MagicIcon; import magic.translate.MText; import magic.ui.FontsAndBorders; import magic.ui.MagicImages; import magic.ui.dialog.DuelPropertiesDialog; import magic.ui.helpers.MouseHelper; import magic.ui.screen.interfaces.IThemeStyle; import magic.ui.theme.Theme; import magic.ui.utility.MagicStyle; import magic.ui.widget.TexturedPanel; import net.miginfocom.swing.MigLayout; @SuppressWarnings("serial") public class DuelSettingsPanel extends TexturedPanel implements IThemeStyle { // translatable strings private static final String _S1 = "Duel Settings"; private static final String _S2 = "Initial Player life: %d"; private static final String _S3 = "Initial Hand size: %d"; private static final String _S4 = "Maximum games: %d (first to %d)"; private static final String _S5 = "Cube: %s"; public static final String CP_CONFIG_UPDATED = "298714cb-ba00-4356-9b6b-c70bb4a7367e"; private final DuelConfig config; private int startLife; private int handSize; private int maxGames = 7; private MagicFormat cube = MagicFormat.ALL; private final MouseAdapter mouseAdapter = getMouseAdapter(); public DuelSettingsPanel(final DuelConfig config) { this.config = config; startLife = config.getStartLife(); handSize = config.getHandSize(); maxGames = config.getNrOfGames(); cube = config.getCube(); refreshStyle(); addMouseListener(mouseAdapter); setLayout(new MigLayout("insets 0 5 0 0, gap 30, center")); refreshDisplay(); } @Override public void setEnabled(boolean enabled) { removeMouseListener(mouseAdapter); if (enabled) { addMouseListener(mouseAdapter); } else { setBorder(null); setBackground(FontsAndBorders.TEXTAREA_TRANSPARENT_COLOR_HACK); setToolTipText(String.format("<html><b>%s</b><br>%s<br>%s<br>%s<br>%s</html>", MText.get(_S1), MText.get(_S2, startLife), MText.get(_S3, handSize), MText.get(_S4, maxGames, getGamesRequiredToWinDuel()), MText.get(_S5, cube.getLabel()) )); } } private int getGamesRequiredToWinDuel() { return (int)Math.ceil(maxGames/2.0); } private void refreshDisplay() { removeAll(); add(getDuelSettingsLabel(MagicImages.getIcon(MagicIcon.LIFE), "" + startLife), "h 100%"); add(getDuelSettingsLabel(MagicImages.getIcon(MagicIcon.HAND_ICON), "" + handSize), "h 100%"); add(getDuelSettingsLabel(MagicImages.getIcon(MagicIcon.TARGET_ICON), "" + maxGames), "h 100%"); add(getDuelSettingsLabel(MagicImages.getIcon(MagicIcon.CUBE), " " + cube.getName()), "h 100%"); revalidate(); repaint(); } private MouseAdapter getMouseAdapter() { return new MouseAdapter() { @Override public void mouseReleased(MouseEvent e) { MouseHelper.showBusyCursor(); updateDuelSettings(); MouseHelper.showDefaultCursor(); } @Override public void mouseEntered(MouseEvent e) { MagicStyle.setHightlight(DuelSettingsPanel.this, true); } @Override public void mouseExited(MouseEvent e) { MagicStyle.setHightlight(DuelSettingsPanel.this, false); } }; } private JLabel getDuelSettingsLabel(final ImageIcon icon, final String text) { final JLabel lbl = new JLabel(text); lbl.setIcon(icon); lbl.setForeground(Color.WHITE); lbl.setFont(new Font("Dialog", Font.PLAIN, 18)); lbl.setHorizontalAlignment(SwingConstants.CENTER); return lbl; } public void updateDuelSettings() { final DuelPropertiesDialog dialog = new DuelPropertiesDialog( handSize, startLife, maxGames, cube ); if (!dialog.isCancelled()) { startLife = dialog.getStartLife(); handSize = dialog.getHandSize(); maxGames = dialog.getNrOfGames(); cube = dialog.getCube(); saveSettings(); refreshDisplay(); firePropertyChange(CP_CONFIG_UPDATED, false, true); } } private void saveSettings() { config.setStartLife(startLife); config.setHandSize(handSize); config.setNrOfGames(maxGames); config.setCube(cube); } public MagicFormat getCube() { return cube; } public int getStartLife() { return startLife; } public int getHandSize() { return handSize; } public int getNrOfGames() { return maxGames; } @Override public void refreshStyle() { final Color refBG = MagicStyle.getTheme().getColor(Theme.COLOR_TITLE_BACKGROUND); final Color thisBG = MagicStyle.getTranslucentColor(refBG, 220); setBackground(thisBG); setBorder(FontsAndBorders.BLACK_BORDER); } }