001 /*
002 * Copyright 1999-2002 Sun Microsystems, Inc. All Rights Reserved.
003 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
004 *
005 * This code is free software; you can redistribute it and/or modify it
006 * under the terms of the GNU General Public License version 2 only, as
007 * published by the Free Software Foundation. Sun designates this
008 * particular file as subject to the "Classpath" exception as provided
009 * by Sun in the LICENSE file that accompanied this code.
010 *
011 * This code is distributed in the hope that it will be useful, but WITHOUT
012 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
013 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
014 * version 2 for more details (a copy is included in the LICENSE file that
015 * accompanied this code).
016 *
017 * You should have received a copy of the GNU General Public License version
018 * 2 along with this work; if not, write to the Free Software Foundation,
019 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
020 *
021 * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
022 * CA 95054 USA or visit www.sun.com if you need additional information or
023 * have any questions.
024 */
025
026 package javax.sound.sampled;
027
028 /**
029 * {@link Line Lines} often have a set of controls, such as gain and pan, that affect
030 * the audio signal passing through the line. Java Sound's <code>Line</code> objects
031 * let you obtain a particular control object by passing its class as the
032 * argument to a {@link Line#getControl(Control.Type) getControl} method.
033 * <p>
034 * Because the various types of controls have different purposes and features,
035 * all of their functionality is accessed from the subclasses that define
036 * each kind of control.
037 *
038 * @author Kara Kytle
039 * @version 1.32, 07/05/05
040 *
041 * @see Line#getControls
042 * @see Line#isControlSupported
043 * @since 1.3
044 */
045 public abstract class Control {
046
047 // INSTANCE VARIABLES
048
049 /**
050 * The control type.
051 */
052 private final Type type;
053
054 // CONSTRUCTORS
055
056 /**
057 * Constructs a Control with the specified type.
058 * @param type the kind of control desired
059 */
060 protected Control(Type type) {
061 this .type = type;
062 }
063
064 // METHODS
065
066 /**
067 * Obtains the control's type.
068 * @return the control's type.
069 */
070 public Type getType() {
071 return type;
072 }
073
074 // ABSTRACT METHODS
075
076 /**
077 * Obtains a String describing the control type and its current state.
078 * @return a String representation of the Control.
079 */
080 public String toString() {
081 return new String(getType() + " Control");
082 }
083
084 /**
085 * An instance of the <code>Type</code> class represents the type of
086 * the control. Static instances are provided for the
087 * common types.
088 */
089 public static class Type {
090
091 // CONTROL TYPE DEFINES
092
093 // INSTANCE VARIABLES
094
095 /**
096 * Type name.
097 */
098 private String name;
099
100 // CONSTRUCTOR
101
102 /**
103 * Constructs a new control type with the name specified.
104 * The name should be a descriptive string appropriate for
105 * labelling the control in an application, such as "Gain" or "Balance."
106 * @param name the name of the new control type.
107 */
108 protected Type(String name) {
109 this .name = name;
110 }
111
112 // METHODS
113
114 /**
115 * Finalizes the equals method
116 */
117 public final boolean equals(Object obj) {
118 return super .equals(obj);
119 }
120
121 /**
122 * Finalizes the hashCode method
123 */
124 public final int hashCode() {
125 return super .hashCode();
126 }
127
128 /**
129 * Provides the <code>String</code> representation of the control type. This <code>String</code> is
130 * the same name that was passed to the constructor.
131 *
132 * @return the control type name
133 */
134 public final String toString() {
135 return name;
136 }
137 } // class Type
138
139 } // class Control
|