blob: d00ae2c4affccbe425fc15c085133ad6b2fc90e8 [file] [log] [blame]
J. Duke319a3b92007-12-01 00:00:00 +00001/*
2 * Copyright 1999-2003 Sun Microsystems, Inc. All Rights Reserved.
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 *
5 * This code is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License version 2 only, as
7 * published by the Free Software Foundation. Sun designates this
8 * particular file as subject to the "Classpath" exception as provided
9 * by Sun in the LICENSE file that accompanied this code.
10 *
11 * This code is distributed in the hope that it will be useful, but WITHOUT
12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
14 * version 2 for more details (a copy is included in the LICENSE file that
15 * accompanied this code).
16 *
17 * You should have received a copy of the GNU General Public License version
18 * 2 along with this work; if not, write to the Free Software Foundation,
19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20 *
21 * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
22 * CA 95054 USA or visit www.sun.com if you need additional information or
23 * have any questions.
24 */
25
26package javax.sound.sampled;
27
28/**
29 * A <code>BooleanControl</code> provides the ability to switch between
30 * two possible settings that affect a line's audio. The settings are boolean
31 * values (<code>true</code> and <code>false</code>). A graphical user interface
32 * might represent the control by a two-state button, an on/off switch, two
33 * mutually exclusive buttons, or a checkbox (among other possibilities).
34 * For example, depressing a button might activate a
35 * <code>{@link BooleanControl.Type#MUTE MUTE}</code> control to silence
36 * the line's audio.
37 * <p>
38 * As with other <code>{@link Control}</code> subclasses, a method is
39 * provided that returns string labels for the values, suitable for
40 * display in the user interface.
41 *
42 * @author Kara Kytle
43 * @since 1.3
44 */
45public abstract class BooleanControl extends Control {
46
47
48 // INSTANCE VARIABLES
49
50 /**
51 * The <code>true</code> state label, such as "true" or "on."
52 */
53 private final String trueStateLabel;
54
55 /**
56 * The <code>false</code> state label, such as "false" or "off."
57 */
58 private final String falseStateLabel;
59
60 /**
61 * The current value.
62 */
63 private boolean value;
64
65
66 // CONSTRUCTORS
67
68
69 /**
70 * Constructs a new boolean control object with the given parameters.
71 *
72 * @param type the type of control represented this float control object
73 * @param initialValue the initial control value
74 * @param trueStateLabel the label for the state represented by <code>true</code>,
75 * such as "true" or "on."
76 * @param falseStateLabel the label for the state represented by <code>false</code>,
77 * such as "false" or "off."
78 */
79 protected BooleanControl(Type type, boolean initialValue, String trueStateLabel, String falseStateLabel) {
80
81 super(type);
82 this.value = initialValue;
83 this.trueStateLabel = trueStateLabel;
84 this.falseStateLabel = falseStateLabel;
85 }
86
87
88 /**
89 * Constructs a new boolean control object with the given parameters.
90 * The labels for the <code>true</code> and <code>false</code> states
91 * default to "true" and "false."
92 *
93 * @param type the type of control represented by this float control object
94 * @param initialValue the initial control value
95 */
96 protected BooleanControl(Type type, boolean initialValue) {
97 this(type, initialValue, "true", "false");
98 }
99
100
101 // METHODS
102
103
104 /**
105 * Sets the current value for the control. The default
106 * implementation simply sets the value as indicated.
107 * Some controls require that their line be open before they can be affected
108 * by setting a value.
109 * @param value desired new value.
110 */
111 public void setValue(boolean value) {
112 this.value = value;
113 }
114
115
116
117 /**
118 * Obtains this control's current value.
119 * @return current value.
120 */
121 public boolean getValue() {
122 return value;
123 }
124
125
126 /**
127 * Obtains the label for the specified state.
128 * @return the label for the specified state, such as "true" or "on"
129 * for <code>true</code>, or "false" or "off" for <code>false</code>.
130 */
131 public String getStateLabel(boolean state) {
132 return ((state == true) ? trueStateLabel : falseStateLabel);
133 }
134
135
136
137 // ABSTRACT METHOD IMPLEMENTATIONS: CONTROL
138
139
140 /**
141 * Provides a string representation of the control
142 * @return a string description
143 */
144 public String toString() {
145 return new String(super.toString() + " with current value: " + getStateLabel(getValue()));
146 }
147
148
149 // INNER CLASSES
150
151
152 /**
153 * An instance of the <code>BooleanControl.Type</code> class identifies one kind of
154 * boolean control. Static instances are provided for the
155 * common types.
156 *
157 * @author Kara Kytle
158 * @since 1.3
159 */
160 public static class Type extends Control.Type {
161
162
163 // TYPE DEFINES
164
165
166 /**
167 * Represents a control for the mute status of a line.
168 * Note that mute status does not affect gain.
169 */
170 public static final Type MUTE = new Type("Mute");
171
172 /**
173 * Represents a control for whether reverberation is applied
174 * to a line. Note that the status of this control not affect
175 * the reverberation settings for a line, but does affect whether
176 * these settings are used.
177 */
178 public static final Type APPLY_REVERB = new Type("Apply Reverb");
179
180
181 // CONSTRUCTOR
182
183
184 /**
185 * Constructs a new boolean control type.
186 * @param name the name of the new boolean control type
187 */
188 protected Type(String name) {
189 super(name);
190 }
191 } // class Type
192}