package games.strategy.sound;
import java.awt.event.KeyEvent;
import java.util.List;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JCheckBoxMenuItem;
import javax.swing.JComponent;
import javax.swing.JMenu;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import games.strategy.engine.data.properties.IEditableProperty;
import games.strategy.engine.framework.ui.PropertiesSelector;
/**
* Sound option window framework.
*/
public final class SoundOptions {
final ClipPlayer clipPlayer;
/**
* @param parentMenu
* menu where to add the menu item "Sound Options".
*/
public static void addToMenu(final JMenu parentMenu) {
final JMenuItem soundOptions = new JMenuItem("Sound Options");
soundOptions.setMnemonic(KeyEvent.VK_S);
soundOptions.addActionListener(e -> new SoundOptions(parentMenu));
parentMenu.add(soundOptions);
}
public static void addToPanel(final JPanel parentPanel) {
final JButton soundOptions = new JButton("Sound Options");
soundOptions.addActionListener(e -> new SoundOptions(parentPanel));
parentPanel.add(soundOptions);
}
public SoundOptions(final JComponent parent) {
clipPlayer = ClipPlayer.getInstance();
final String ok = "OK";
final String cancel = "Cancel";
final String selectAll = "All";
final String selectNone = "None";
final List<IEditableProperty> properties = SoundPath.getSoundOptions();
final Object pressedButton = PropertiesSelector.getButton(parent, "Sound Options", properties,
ok, selectAll, selectNone, cancel);
if (pressedButton == null || pressedButton.equals(cancel)) {
// do nothing
} else if (pressedButton.equals(ok)) {
for (final IEditableProperty property : properties) {
clipPlayer.setMute(((SoundOptionCheckBox) property).getClipName(), !(Boolean) property.getValue());
}
clipPlayer.saveSoundPreferences();
} else if (pressedButton.equals(selectAll)) {
for (final IEditableProperty property : properties) {
property.setValue(true);
clipPlayer.setMute(((SoundOptionCheckBox) property).getClipName(), false);
}
clipPlayer.saveSoundPreferences();
} else if (pressedButton.equals(selectNone)) {
for (final IEditableProperty property : properties) {
property.setValue(false);
clipPlayer.setMute(((SoundOptionCheckBox) property).getClipName(), true);
}
clipPlayer.saveSoundPreferences();
}
}
public static void addGlobalSoundSwitchMenu(final JMenu parentMenu) {
final JCheckBoxMenuItem soundCheckBox = new JCheckBoxMenuItem("Enable Sound");
soundCheckBox.setMnemonic(KeyEvent.VK_N);
soundCheckBox.setSelected(!ClipPlayer.getBeSilent());
soundCheckBox.addActionListener(e -> ClipPlayer.setBeSilent(!soundCheckBox.isSelected()));
parentMenu.add(soundCheckBox);
}
public static void addGlobalSoundSwitchCheckbox(final JPanel parentPanel) {
final JCheckBox soundCheckBox = new JCheckBox("Enable Sound");
soundCheckBox.setSelected(!ClipPlayer.getBeSilent());
soundCheckBox.addActionListener(e -> ClipPlayer.setBeSilent(!soundCheckBox.isSelected()));
parentPanel.add(soundCheckBox);
}
}