From: <bur...@us...> - 2011-02-20 14:38:34
|
Revision: 8041 http://freecol.svn.sourceforge.net/freecol/?rev=8041&view=rev Author: burschik Date: 2011-02-20 14:38:28 +0000 (Sun, 20 Feb 2011) Log Message: ----------- Apply patch by Janet Hunt to prettify the AudioMixerOption. Modified Paths: -------------- freecol/trunk/src/net/sf/freecol/client/FreeColClient.java freecol/trunk/src/net/sf/freecol/client/gui/option/AudioMixerOptionUI.java Modified: freecol/trunk/src/net/sf/freecol/client/FreeColClient.java =================================================================== --- freecol/trunk/src/net/sf/freecol/client/FreeColClient.java 2011-02-20 13:52:33 UTC (rev 8040) +++ freecol/trunk/src/net/sf/freecol/client/FreeColClient.java 2011-02-20 14:38:28 UTC (rev 8041) @@ -88,7 +88,10 @@ public final class FreeColClient { private static final Logger logger = Logger.getLogger(FreeColClient.class.getName()); + private static FreeColClient instance; + public static FreeColClient get () {return instance;} + /** * The space not being used in windowed mode. */ @@ -316,6 +319,10 @@ }); } } + + // remember the first instance as (quasi) singleton + if ( instance == null ) + instance = this; } /** @@ -840,6 +847,11 @@ return client; } + public SoundPlayer getSoundPlayer () + { + return soundPlayer; + } + /** * Plays some sound. * Modified: freecol/trunk/src/net/sf/freecol/client/gui/option/AudioMixerOptionUI.java =================================================================== --- freecol/trunk/src/net/sf/freecol/client/gui/option/AudioMixerOptionUI.java 2011-02-20 13:52:33 UTC (rev 8040) +++ freecol/trunk/src/net/sf/freecol/client/gui/option/AudioMixerOptionUI.java 2011-02-20 14:38:28 UTC (rev 8041) @@ -19,17 +19,23 @@ package net.sf.freecol.client.gui.option; +import java.awt.BorderLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import java.util.logging.Logger; +import javax.sound.sampled.Mixer; import javax.swing.DefaultComboBoxModel; +import javax.swing.JButton; import javax.swing.JComboBox; import javax.swing.JLabel; +import javax.swing.JPanel; +import net.sf.freecol.client.FreeColClient; import net.sf.freecol.client.gui.i18n.Messages; +import net.sf.freecol.client.gui.sound.SoundPlayer; import net.sf.freecol.common.option.AudioMixerOption; import net.sf.freecol.common.option.Option; import net.sf.freecol.common.option.AudioMixerOption.MixerWrapper; @@ -39,50 +45,94 @@ * This class provides visualization for an {@link AudioMixerOption}. In order to * enable values to be both seen and changed. */ -public final class AudioMixerOptionUI extends JComboBox implements OptionUpdater, PropertyChangeListener { +public final class AudioMixerOptionUI extends JPanel implements OptionUpdater, PropertyChangeListener { @SuppressWarnings("unused") private static final Logger logger = Logger.getLogger(AudioMixerOptionUI.class.getName()); + private final FreeColClient client = FreeColClient.get(); private final AudioMixerOption option; private MixerWrapper originalValue; private JLabel label; + private JComboBox cbox; + private JButton button1, button2; + private JLabel currentMixerLabel; + ActionListener aHandler = new ActionListener () { + public void actionPerformed(ActionEvent e) { + if ( e.getSource() == button1 ) + client.playSound("sound.event.buildingComplete"); + else if ( e.getSource() == button2 ) + client.playSound("sound.intro.general"); + else if ( e.getSource() == cbox ) { +// if (option.isPreviewEnabled()) { + MixerWrapper value = (MixerWrapper) cbox.getSelectedItem(); + if (option.getValue() != value) { + option.setValue(value); + updateMixerLabel(); + } +// } + } + } + }; /** * Creates a new <code>AudioMixerOptionUI</code> for the given <code>AudioMixerOption</code>. * @param option The <code>AudioMixerOption</code> to make a user interface for. */ public AudioMixerOptionUI(final AudioMixerOption option, boolean editable) { - + super( new BorderLayout() ); + ((BorderLayout)this.getLayout()).setHgap(15); this.option = option; - this.originalValue = option.getValue(); + originalValue = option.getValue(); + cbox = new JComboBox(); + add(cbox, BorderLayout.WEST); + currentMixerLabel = new JLabel(); + add(currentMixerLabel, BorderLayout.EAST); + updateMixerLabel(); + + JPanel panel = new JPanel(); + add(panel); + button1 = new JButton( "Test" ); + panel.add(button1); + button1.addActionListener(aHandler); + + button2 = new JButton( "Music" ); + panel.add(button2); + button2.addActionListener(aHandler); + String name = Messages.getName(option); String description = Messages.getShortDescription(option); label = new JLabel(name, JLabel.LEFT); label.setToolTipText((description != null) ? description : name); - add(label); + cbox.add(label); - setModel(new DefaultComboBoxModel(option.getOptions())); + cbox.setModel(new DefaultComboBoxModel(option.getOptions())); reset(); - + setEnabled(editable); - addActionListener(new ActionListener () { - public void actionPerformed(ActionEvent e) { - if (option.isPreviewEnabled()) { - MixerWrapper value = (MixerWrapper) getSelectedItem(); - if (option.getValue() != value) { - option.setValue(value); - } - } - } - }); + cbox.addActionListener( aHandler ); option.addPropertyChangeListener(this); setOpaque(false); } + private void updateMixerLabel () + { + String text; + SoundPlayer soundPlayer = FreeColClient.get().getSoundPlayer(); + Mixer mixer = soundPlayer.getCurrentMixer(); + if ( mixer == null ) + text = "-- NO ADAPTER --"; + else + text = mixer.getMixerInfo().getName(); + currentMixerLabel.setText("Current: ".concat(text)); + // play a test sound +// FreeColClient.get().playSound("sound.intro.general"); + + } + /** * Get the <code>Label</code> value. * @@ -103,22 +153,22 @@ /** * Rollback to the original value. - * + * * This method gets called so that changes made to options with * {@link Option#isPreviewEnabled()} is rolled back - * when an option dialoag has been cancelled. + * when an option dialog has been cancelled. */ public void rollback() { option.setValue(originalValue); } - + /** * Unregister <code>PropertyChangeListener</code>s. */ public void unregister() { - option.removePropertyChangeListener(this); + option.removePropertyChangeListener(this); } - + /** * Updates this UI with the new data from the option. * @param event The event. @@ -126,24 +176,24 @@ public void propertyChange(PropertyChangeEvent event) { if (event.getPropertyName().equals("value")) { MixerWrapper value = (MixerWrapper) event.getNewValue(); - if (value != getSelectedItem()) { - setSelectedItem(value); + if (value != cbox.getSelectedItem()) { + cbox.setSelectedItem(value); originalValue = value; } } } - + /** * Updates the value of the {@link Option} this object keeps. */ public void updateOption() { - option.setValue((MixerWrapper) getSelectedItem()); + option.setValue((MixerWrapper) cbox.getSelectedItem()); } /** * Reset with the value from the option. */ public void reset() { - setSelectedItem(option.getValue()); + cbox.setSelectedItem(option.getValue()); } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |