/* AccessibleRole.java -- the primary role 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 java.util.Locale;

/**
 * The role of an accessible object. For example, this could be "button" or
 * "table". This strongly typed "enumeration" supports localized strings. If
 * the constants of this class are not adequate, new ones may be added in a
 * similar matter, while avoiding a public constructor.
 *
 * @author Eric Blake (ebb9@email.byu.edu)
 * @since 1.2
 * @status updated to 1.4
 */
public class AccessibleRole extends AccessibleBundle
{
  /** The object alerts the user about something. */
  public static final AccessibleRole ALERT
    = new AccessibleRole("alert");

  /** The header for a column of data. */
  public static final AccessibleRole COLUMN_HEADER
    = new AccessibleRole("column header");

  /**
   * The object can be drawn into, and traps events.
   *
   * @see #FRAME
   * @see #GLASS_PANE
   * @see #LAYERED_PANE
   */
  public static final AccessibleRole CANVAS
    = new AccessibleRole("canvas");

  /**
   * A list of choices, which may optionally allow the user to create a new
   * choice.
   */
  public static final AccessibleRole COMBO_BOX
    = new AccessibleRole("combo box");

  /**
   * An iconified frame in a desktop.
   *
   * @see #DESKTOP_PANE
   * @see #INTERNAL_FRAME
   */
  public static final AccessibleRole DESKTOP_ICON
    = new AccessibleRole("desktop icon");

  /**
   * A frame-like object clipped by a desktop pane.
   *
   * @see #DESKTOP_ICON
   * @see #DESKTOP_PANE
   * @see #FRAME
   */
  public static final AccessibleRole INTERNAL_FRAME
    = new AccessibleRole("internal frame");

  /**
   * A pane which supports internal frames and their icons.
   *
   * @see #DESKTOP_ICON
   * @see #INTERNAL_FRAME
   */
  public static final AccessibleRole DESKTOP_PANE
    = new AccessibleRole("desktop pane");

  /**
   * A specialized pane for use in a dialog.
   *
   * @see #DIALOG
   */
  public static final AccessibleRole OPTION_PANE
    = new AccessibleRole("option pane");

  /**
   * A top level window with no title or border.
   *
   * @see #FRAME
   * @see #DIALOG
   */
  public static final AccessibleRole WINDOW
    = new AccessibleRole("window");

  /**
   * A top level window with title, menu bar, border, and so forth. It is
   * often the primary window of an application.
   *
   * @see #DIALOG
   * @see #CANVAS
   * @see #WINDOW
   */
  public static final AccessibleRole FRAME
    = new AccessibleRole("frame");

  /**
   * A top level window title bar and border. It is limited compared to a
   * frame, and is often a secondary window.
   *
   * @see #FRAME
   * @see #WINDOW
   */
  public static final AccessibleRole DIALOG
    = new AccessibleRole("dialog");

  /** A specialized dialog for choosing a color. */
  public static final AccessibleRole COLOR_CHOOSER
    = new AccessibleRole("color chooser");

  /**
   * A pane for navigating through directories.
   *
   * @see #FILE_CHOOSER
   */
  public static final AccessibleRole DIRECTORY_PANE
    = new AccessibleRole("directory pane");

  /**
   * A specialized dialog that allows a user to select a file.
   *
   * @see #DIRECTORY_PANE
   */
  public static final AccessibleRole FILE_CHOOSER
    = new AccessibleRole("file chooser");

  /** An object to fill space between other components. */
  public static final AccessibleRole FILLER
    = new AccessibleRole("filler");

  /** A hypertext anchor. */
  public static final AccessibleRole HYPERLINK
    = new AccessibleRole("hyperlink");

  /** A small picture to decorate components. */
  public static final AccessibleRole ICON
    = new AccessibleRole("icon");

  /** An object to label something in a graphic interface. */
  public static final AccessibleRole LABEL
    = new AccessibleRole("label");

  /**
   * A specialized pane with a glass pane and layered pane as children.
   *
   * @see #GLASS_PANE
   * @see #LAYERED_PANE
   */
  public static final AccessibleRole ROOT_PANE
    = new AccessibleRole("root pane");

  /**
   * A pane guaranteed to be painted on top of panes beneath it.
   *
   * @see #ROOT_PANE
   * @see #LAYERED_PANE
   */
  public static final AccessibleRole GLASS_PANE
    = new AccessibleRole("glass pane");

  /**
   * A specialized pane that allows drawing children in layers. This is often
   * used in menus and other visual components.
   *
   * @see #ROOT_PANE
   * @see #GLASS_PANE
   */
  public static final AccessibleRole LAYERED_PANE
    = new AccessibleRole("layered pane");

  /**
   * An object which presents a list of items for selection. Often contained
   * in a scroll pane.
   *
   * @see #SCROLL_PANE
   * @see #LIST_ITEM
   */
  public static final AccessibleRole LIST
    = new AccessibleRole("list");

  /**
   * An object which represents an item in a list. Often contained in a scroll
   * pane.
   *
   * @see #SCROLL_PANE
   * @see #LIST
   */
  public static final AccessibleRole LIST_ITEM
    = new AccessibleRole("list item");

  /**
   * An object usually at the top of a frame to list available menus.
   *
   * @see #MENU
   * @see #POPUP_MENU
   * @see #LAYERED_PANE
   */
  public static final AccessibleRole MENU_BAR
    = new AccessibleRole("menu bar");

  /**
   * A temporary window with a menu of options, which hides on selection.
   *
   * @see #MENU
   * @see #MENU_ITEM
   */
  public static final AccessibleRole POPUP_MENU
    = new AccessibleRole("popup menu");

  /**
   * An object usually in a menu bar which contains a list of actions to
   * perform. Such actions are usually associated with menu items or submenus.
   *
   * @see #MENU_BAR
   * @see #MENU_ITEM
   * @see #SEPARATOR
   * @see #RADIO_BUTTON
   * @see #CHECK_BOX
   * @see #POPUP_MENU
   */
  public static final AccessibleRole MENU
    = new AccessibleRole("menu");

  /**
   * An object usually in a menu with an action available for the user.
   *
   * @see #MENU_BAR
   * @see #SEPARATOR
   * @see #POPUP_MENU
   */
  public static final AccessibleRole MENU_ITEM
    = new AccessibleRole("menu item");

  /**
   * An object usually in a menu which separates logical sections of items.
   *
   * @see #MENU
   * @see #MENU_ITEM
   */
  public static final AccessibleRole SEPARATOR
    = new AccessibleRole("separator");

  /**
   * An object which presents a series of panels, usually via tabs along the
   * top. Children are all page tabs.
   *
   * @see #PAGE_TAB
   */
  public static final AccessibleRole PAGE_TAB_LIST
    = new AccessibleRole("page tab list");

  /**
   * An object in a page tab list, which contains the panel to display when
   * selected from the list.
   *
   * @see #PAGE_TAB_LIST
   */
  public static final AccessibleRole PAGE_TAB
    = new AccessibleRole("page tab");

  /** A generic container to group objects. */
  public static final AccessibleRole PANEL
    = new AccessibleRole("panel");

  /** An object used to track amount of a task that has completed. */
  public static final AccessibleRole PROGRESS_BAR
    = new AccessibleRole("progress bar");

  /** An object for passwords which should not be shown to the user. */
  public static final AccessibleRole PASSWORD_TEXT
    = new AccessibleRole("password text");

  /**
   * An object that can be manipulated to do something.
   *
   * @see #CHECK_BOX
   * @see #TOGGLE_BUTTON
   * @see #RADIO_BUTTON
   */
  public static final AccessibleRole PUSH_BUTTON
    = new AccessibleRole("push button");

  /**
   * A specialized button which can be on or off, with no separate indicator.
   *
   * @see #PUSH_BUTTON
   * @see #CHECK_BOX
   * @see #RADIO_BUTTON
   */
  public static final AccessibleRole TOGGLE_BUTTON
    = new AccessibleRole("toggle button");

  /**
   * A choice which can be on or off, and has a separate indicator.
   *
   * @see #PUSH_BUTTON
   * @see #TOGGLE_BUTTON
   * @see #RADIO_BUTTON
   */
  public static final AccessibleRole CHECK_BOX
    = new AccessibleRole("check box");

  /**
   * A specialized choice which toggles radio buttons in the group when it
   * is selected.
   *
   * @see #PUSH_BUTTON
   * @see #TOGGLE_BUTTON
   * @see #CHECK_BOX
   */
  public static final AccessibleRole RADIO_BUTTON
    = new AccessibleRole("radio button");

  /** The header for a row of data. */
  public static final AccessibleRole ROW_HEADER
    = new AccessibleRole("row header");

  /**
   * An object which allows an incremental view of a larger pane.
   *
   * @see #SCROLL_BAR
   * @see #VIEWPORT
   */
  public static final AccessibleRole SCROLL_PANE
    = new AccessibleRole("scroll pane");

  /**
   * An object which allows selection of the view in a scroll pane.
   *
   * @see #SCROLL_PANE
   */
  public static final AccessibleRole SCROLL_BAR
    = new AccessibleRole("scroll bar");

  /**
   * An object which represents the visual section in a scroll pane.
   *
   * @see #SCROLL_PANE
   */
  public static final AccessibleRole VIEWPORT
    = new AccessibleRole("viewport");

  /** An object which allows selection in a bounded range. */
  public static final AccessibleRole SLIDER
    = new AccessibleRole("slider");

  /**
   * A specialized pane which presents two other panels, and can often adjust
   * the divider between them.
   */
  public static final AccessibleRole SPLIT_PANE
    = new AccessibleRole("split pane");

  /** An object for presenting data in rows and columns. */
  public static final AccessibleRole TABLE
    = new AccessibleRole("table");

  /**
   * An object which represents text, usually editable by the user.
   *
   * @see #LABEL
   */
  public static final AccessibleRole TEXT
    = new AccessibleRole("text");

  /**
   * An object which represents a hierachical view of data. Subnodes can
   * often be expanded or collapsed.
   */
  public static final AccessibleRole TREE
    = new AccessibleRole("tree");

  /** A bar or pallete with buttons for common actions in an application. */
  public static final AccessibleRole TOOL_BAR
    = new AccessibleRole("tool bar");

  /**
   * An object which provides information about another object. This is often
   * displayed as a "help bubble" when a mouse hovers over the other object.
   */
  public static final AccessibleRole TOOL_TIP
    = new AccessibleRole("tool tip");

  /**
   * An AWT component with nothing else known about it.
   *
   * @see #SWING_COMPONENT
   * @see #UNKNOWN
   */
  public static final AccessibleRole AWT_COMPONENT
    = new AccessibleRole("AWT component");

  /**
   * A swing component with nothing else known about it.
   *
   * @see #AWT_COMPONENT
   * @see #UNKNOWN
   */
  public static final AccessibleRole SWING_COMPONENT
    = new AccessibleRole("SWING component");

  /**
   * An accessible object whose role is unknown.
   *
   * @see #AWT_COMPONENT
   * @see #SWING_COMPONENT
   */
  public static final AccessibleRole UNKNOWN
    = new AccessibleRole("unknown");

  /** A component with multiple labels of status information. */
  public static final AccessibleRole STATUS_BAR
    = new AccessibleRole("statusbar");

  /** A component which allows editing of Date and Time objects. */
  public static final AccessibleRole DATE_EDITOR
    = new AccessibleRole("dateeditor");

  /** A component with spinner arrows for simple numbers. */
  public static final AccessibleRole SPIN_BOX
    = new AccessibleRole("spinbox");

  /** A component for choosing fonts and their attributes. */
  public static final AccessibleRole FONT_CHOOSER
    = new AccessibleRole("fontchooser");

  /** A component with a border to group other components. */
  public static final AccessibleRole GROUP_BOX
    = new AccessibleRole("groupbox");

  /**
   * A formula for creating a value.
   *
   * @since 1.5
   */
  public static final AccessibleRole EDITBAR
    = new AccessibleRole("editbar");

  /**
   * A text-based footer.
   *
   * @since 1.5
   */
  public static final AccessibleRole FOOTER
    = new AccessibleRole("footer");

  /**
   * A text-based header.
   *
   * @since 1.5
   */
  public static final AccessibleRole HEADER
    = new AccessibleRole("header");


  /**
   * A text-based paragraph.
   *
   * @since 1.5
   */
  public static final AccessibleRole PARAGRAPH
    = new AccessibleRole("paragraph");

  /**
   * Represents the current level of progress on a particular task.
   *
   * @since 1.5
   */
  public static final AccessibleRole PROGRESS_MONITOR
    = new AccessibleRole("progress monitor");

  /**
   * A ruler is a method of measuring the distance between two
   * points.
   *
   * @since 1.5
   */
  public static final AccessibleRole RULER
    = new AccessibleRole("ruler");

  /**
   * A HTML container is an accessible object which contains other
   * accessible objects that together form some HTML content.  For example,
   * the content may be a sequence of text containing a link, which
   * would be represent as two children, one an {@link AccessibleText}
   * object holding the normal text and the other an
   * {@link AccessibleHypertext} object representing the link.
   *
   * @since 1.6
   */
  public static final AccessibleRole HTML_CONTAINER
    = new AccessibleRole("HTML container");

  /**
   * Create a new constant with a locale independent key. Follow the example,
   * keep the constructor private and make public constants instead.
   *
   * @param key the name of the role
   * @see #toDisplayString(String, Locale)
   */
  protected AccessibleRole(String key)
  {
    this.key = key;
  }
} // class AccessibleRole
