1 | package org.apollo.widgets;
|
---|
2 |
|
---|
3 | import javax.swing.event.ChangeEvent;
|
---|
4 | import javax.swing.event.ChangeListener;
|
---|
5 |
|
---|
6 | import org.apollo.audio.ApolloPlaybackMixer;
|
---|
7 | import org.apollo.audio.ApolloSubjectChangedEvent;
|
---|
8 | import org.apollo.gui.VolumeControlButton;
|
---|
9 | import org.apollo.mvc.Observer;
|
---|
10 | import org.apollo.mvc.Subject;
|
---|
11 | import org.apollo.mvc.SubjectChangedEvent;
|
---|
12 | import org.expeditee.items.ItemParentStateChangedEvent;
|
---|
13 | import org.expeditee.items.Text;
|
---|
14 | import org.expeditee.items.widgets.InteractiveWidget;
|
---|
15 |
|
---|
16 | /**
|
---|
17 | * Provides master volume control
|
---|
18 | *
|
---|
19 | * @author Brook Novak
|
---|
20 | *
|
---|
21 | */
|
---|
22 | public class MasterVolume extends InteractiveWidget implements Observer {
|
---|
23 |
|
---|
24 | private VolumeControlButton vcButton;
|
---|
25 |
|
---|
26 | public MasterVolume(Text source, String[] args) {
|
---|
27 | super(source, new VolumeControlButton("Master Volume"), 40, 40, 40, 40);
|
---|
28 | vcButton = (VolumeControlButton)super._swingComponent;
|
---|
29 |
|
---|
30 | vcButton.addVolumeChangeListener(new ChangeListener() {
|
---|
31 | public void stateChanged(ChangeEvent e) {
|
---|
32 | float f = (float)vcButton.getVolumeValue();
|
---|
33 | f /= 100.0f;
|
---|
34 | ApolloPlaybackMixer.getInstance().setMasterVolume(f);
|
---|
35 | if (f == 0.0f) { // auto-mute
|
---|
36 | ApolloPlaybackMixer.getInstance().setMasterMute(true);
|
---|
37 | // this will raise a mute event and thus will change the button to muted state
|
---|
38 | } else { // auto-un-mute
|
---|
39 | ApolloPlaybackMixer.getInstance().setMasterMute(false);
|
---|
40 | }
|
---|
41 | }
|
---|
42 | });
|
---|
43 |
|
---|
44 |
|
---|
45 | vcButton.setVolumeValue(
|
---|
46 | (int)(ApolloPlaybackMixer.getInstance().getMasterVolume() * 100.0f)
|
---|
47 | );
|
---|
48 | vcButton.setMuted(ApolloPlaybackMixer.getInstance().isMasterMuteOn());
|
---|
49 |
|
---|
50 | }
|
---|
51 |
|
---|
52 | @Override
|
---|
53 | protected String[] getArgs() {
|
---|
54 | return null;
|
---|
55 | }
|
---|
56 |
|
---|
57 | public Subject getObservedSubject() {
|
---|
58 | return ApolloPlaybackMixer.getInstance();
|
---|
59 | }
|
---|
60 |
|
---|
61 |
|
---|
62 | @Override
|
---|
63 | protected void onParentStateChanged(int eventType) {
|
---|
64 | super.onParentStateChanged(eventType);
|
---|
65 |
|
---|
66 | switch (eventType) {
|
---|
67 |
|
---|
68 | case ItemParentStateChangedEvent.EVENT_TYPE_REMOVED:
|
---|
69 | case ItemParentStateChangedEvent.EVENT_TYPE_REMOVED_VIA_OVERLAY:
|
---|
70 | case ItemParentStateChangedEvent.EVENT_TYPE_HIDDEN:
|
---|
71 | ApolloPlaybackMixer.getInstance().removeObserver(this);
|
---|
72 | break;
|
---|
73 |
|
---|
74 | case ItemParentStateChangedEvent.EVENT_TYPE_ADDED:
|
---|
75 | case ItemParentStateChangedEvent.EVENT_TYPE_ADDED_VIA_OVERLAY:
|
---|
76 | case ItemParentStateChangedEvent.EVENT_TYPE_SHOWN:
|
---|
77 | case ItemParentStateChangedEvent.EVENT_TYPE_SHOWN_VIA_OVERLAY:
|
---|
78 | ApolloPlaybackMixer.getInstance().addObserver(this);
|
---|
79 | break;
|
---|
80 |
|
---|
81 | }
|
---|
82 | }
|
---|
83 |
|
---|
84 | public void modelChanged(Subject source, SubjectChangedEvent event) {
|
---|
85 |
|
---|
86 | if (event.getID() == ApolloSubjectChangedEvent.VOLUME) {
|
---|
87 |
|
---|
88 | vcButton.setVolumeValue(
|
---|
89 | (int)(ApolloPlaybackMixer.getInstance().getMasterVolume() * 100.0f)
|
---|
90 | );
|
---|
91 |
|
---|
92 | } else if (event.getID() == ApolloSubjectChangedEvent.MUTE) {
|
---|
93 |
|
---|
94 | vcButton.setMuted(ApolloPlaybackMixer.getInstance().isMasterMuteOn());
|
---|
95 |
|
---|
96 | }
|
---|
97 |
|
---|
98 | }
|
---|
99 |
|
---|
100 | public void setObservedSubject(Subject parent) {
|
---|
101 | }
|
---|
102 |
|
---|
103 | }
|
---|