| /* AccessibleStateSet.java -- the combined state of an accessible object |
| Copyright (C) 2002, 2005 Free Software Foundation |
| |
| This file is part of GNU Classpath. |
| |
| GNU Classpath is free software; you can redistribute it and/or modify |
| it under the terms of the GNU General Public License as published by |
| the Free Software Foundation; either version 2, or (at your option) |
| any later version. |
| |
| GNU Classpath is distributed in the hope that it will be useful, but |
| WITHOUT ANY WARRANTY; without even the implied warranty of |
| MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
| General Public License for more details. |
| |
| You should have received a copy of the GNU General Public License |
| along with GNU Classpath; see the file COPYING. If not, write to the |
| Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA |
| 02110-1301 USA. |
| |
| Linking this library statically or dynamically with other modules is |
| making a combined work based on this library. Thus, the terms and |
| conditions of the GNU General Public License cover the whole |
| combination. |
| |
| As a special exception, the copyright holders of this library give you |
| permission to link this library with independent modules to produce an |
| executable, regardless of the license terms of these independent |
| modules, and to copy and distribute the resulting executable under |
| terms of your choice, provided that you also meet, for each linked |
| independent module, the terms and conditions of the license of that |
| module. An independent module is a module which is not derived from |
| or based on this library. If you modify this library, you may extend |
| this exception to your version of the library, but you are not |
| obligated to do so. If you do not wish to do so, delete this |
| exception statement from your version. */ |
| |
| package javax.accessibility; |
| |
| import gnu.java.lang.CPStringBuilder; |
| |
| import java.util.Locale; |
| import java.util.Vector; |
| |
| /** |
| * Describes all elements of an accessible object's state. For example, an |
| * object may be enabled and have focus. |
| * |
| * @author Eric Blake (ebb9@email.byu.edu) |
| * @see AccessibleState |
| * @since 1.2 |
| * @status updated to 1.4 |
| */ |
| public class AccessibleStateSet |
| { |
| /** |
| * The list of states, should be instances of AccessibleState. Don't set |
| * this to null. |
| * |
| * @see #add(AccessibleState) |
| * @see #addAll(AccessibleState[]) |
| * @see #remove(AccessibleState) |
| * @see #contains(AccessibleState) |
| * @see #toArray() |
| * @see #clear() |
| */ |
| protected Vector<AccessibleState> states = new Vector<AccessibleState>(); |
| |
| /** |
| * Create an empty state set. |
| */ |
| public AccessibleStateSet() |
| { |
| } |
| |
| /** |
| * Create a state set initialized with the given states, duplicates are |
| * ignored. |
| * |
| * @param states the states to insert |
| * @throws NullPointerException if states is null |
| */ |
| public AccessibleStateSet(AccessibleState[] states) |
| { |
| addAll(states); |
| } |
| |
| /** |
| * Add a new state to the current set. Return true if the state was added, |
| * as duplicates are ignored. Entering a null state will cause problems |
| * later, so don't do it. |
| * |
| * @param state the state to add |
| * @return true if the state was added |
| */ |
| public boolean add(AccessibleState state) |
| { |
| return states.contains(state) ? false : states.add(state); |
| } |
| |
| /** |
| * Add all of the states to the current set. Duplicates are ignored. |
| * Entering a null state will cause problems later, so don't do it. |
| * |
| * @param array the array of states to add |
| * @throws NullPointerException if array is null |
| */ |
| public void addAll(AccessibleState[] array) |
| { |
| int i = array.length; |
| while (--i >= 0) |
| add(array[i]); |
| } |
| |
| /** |
| * Remove a state from the set. If a state was removed, return true. |
| * |
| * @param state the state to remove |
| * @return true if the set changed |
| */ |
| public boolean remove(AccessibleState state) |
| { |
| return states.remove(state); |
| } |
| |
| /** |
| * Clear all states in the set. |
| */ |
| public void clear() |
| { |
| states.clear(); |
| } |
| |
| /** |
| * Check if the current state is in the set. |
| * |
| * @param state the state to locate |
| * @return true if it is in the set |
| */ |
| public boolean contains(AccessibleState state) |
| { |
| return states.contains(state); |
| } |
| |
| /** |
| * Return the state set as an array. |
| * |
| * @return an array of the current states |
| */ |
| public AccessibleState[] toArray() |
| { |
| AccessibleState[] result = new AccessibleState[states.size()]; |
| states.toArray(result); |
| return result; |
| } |
| |
| /** |
| * Return a localized, comma-separated string representing all states |
| * in the set. This is in arbitrary order. |
| * |
| * @return the string representation |
| * @see AccessibleBundle#toDisplayString(String, Locale) |
| */ |
| public String toString() |
| { |
| int i = states.size(); |
| if (i == 0) |
| return ""; |
| // Pre-allocate an average of 10 chars per state. |
| CPStringBuilder b = new CPStringBuilder(i * 10); |
| while (--i >= 0) |
| b.append(states.get(i)).append(','); |
| return b.substring(0, b.length() - 1); |
| } |
| } // class AccessibleStateSet |