package magic.ui.dialog.prefs; import java.awt.Component; import java.awt.event.MouseListener; import javax.swing.JPanel; import javax.swing.event.ChangeEvent; import magic.data.GeneralConfig; import magic.translate.MText; import magic.ui.widget.M.MCheckBox; import magic.ui.widget.SliderPanel; import net.miginfocom.swing.MigLayout; @SuppressWarnings("serial") class AnimationsPanel extends JPanel { // translatable strings. private static final String _S1 = "New turn delay:"; private static final String _S2 = "If the 'New turn message' option is switched on then this setting determines how long (in seconds) it should be displayed. Left-click or space key cancels the delay."; private static final String _S3 = "Non-land preview:"; private static final String _S4 = "When playing a non-land card, this setting determines how long (in seconds) it should be displayed at full size. Left-click or space key cancels preview."; private static final String _S5 = "Land preview:"; private static final String _S6 = "When playing a land card, this setting determines how long (in seconds) it should be displayed at full size. Left-click or space key cancels preview."; private static final String _S70 = "Play animations / effects"; private static final String _S71 = "Turning animations off will speed up gameplay but make it harder to follow the action."; private final static GeneralConfig CONFIG = GeneralConfig.getInstance(); private final MCheckBox animateCheckBox; private final JPanel subPanel; private final AnimationFlagsPanel flagsPanel; private final SliderPanel landPreviewSlider; private final SliderPanel nonlandPreviewSlider; private final SliderPanel newTurnAlertSlider; AnimationsPanel(final MouseListener aListener) { flagsPanel = new AnimationFlagsPanel(aListener); landPreviewSlider = getLandPreviewSlider(aListener); nonlandPreviewSlider = getNonLandPreviewSlider(aListener); newTurnAlertSlider = getNewTurnAlertSlider(aListener); subPanel = getAnimationSubPanel(); animateCheckBox = getAnimateCheckbox(aListener, subPanel); setLayout(new MigLayout("flowy, insets 16, gapy 6")); add(animateCheckBox.component()); add(subPanel, "w 100%"); } private JPanel getAnimationSubPanel() { final JPanel panel = new SubPanel(); panel.setEnabled(CONFIG.getAnimateGameplay()); return panel; } private MCheckBox getAnimateCheckbox(MouseListener aListener, JPanel panel) { final MCheckBox cb = new MCheckBox(MText.get(_S70), CONFIG.getAnimateGameplay()); cb.setToolTipText(MText.get(_S71)); cb.setFocusable(false); cb.addMouseListener(aListener); cb.addChangeListener((ChangeEvent e) -> { panel.setEnabled(animateCheckBox.isSelected()); }); return cb; } private SliderPanel getNewTurnAlertSlider(MouseListener aListener) { final SliderPanel sp = new SliderPanel(MText.get(_S1), 1, 10, 1, CONFIG.getNewTurnAlertDuration() / 1000); sp.setToolTipText(MText.get(_S2)); sp.addMouseListener(aListener); sp.setFontBold(false); return sp; } private SliderPanel getNonLandPreviewSlider(MouseListener aListener) { final SliderPanel sp = new SliderPanel(MText.get(_S3), 1, 20, 1, CONFIG.getNonLandPreviewDuration() / 1000); sp.setToolTipText(MText.get(_S4)); sp.addMouseListener(aListener); sp.setFontBold(false); return sp; } private SliderPanel getLandPreviewSlider(MouseListener aListener) { final SliderPanel sp = new SliderPanel(MText.get(_S5), 1, 20, 1, CONFIG.getLandPreviewDuration() / 1000); sp.setToolTipText(MText.get(_S6)); sp.addMouseListener(aListener); sp.setFontBold(false); return sp; } void saveSettings() { CONFIG.setAnimateGameplay(animateCheckBox.isSelected()); CONFIG.setNewTurnAlertDuration(newTurnAlertSlider.getValue() * 1000); CONFIG.setLandPreviewDuration(landPreviewSlider.getValue() * 1000); CONFIG.setNonLandPreviewDuration(nonlandPreviewSlider.getValue() * 1000); flagsPanel.saveSettings(); } private class SubPanel extends JPanel { SubPanel() { setLayout(new MigLayout("flowy, insets 4 20 0 0, gapy 6")); add(flagsPanel, "w 100%"); add(landPreviewSlider, "w 100%, gaptop 6"); add(nonlandPreviewSlider, "w 100%"); add(newTurnAlertSlider, "w 100%"); } @Override public void setEnabled(boolean b) { for (Component c : getComponents()) { c.setEnabled(b); } super.setEnabled(b); } } }