/* 
 * AT-SPI - Assistive Technology Service Provider Interface 
 * (Gnome Accessibility Project; http://developer.gnome.org/projects/gap)
 *
 * Copyright 2001 Sun Microsystems Inc.
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Library General Public
 * License as published by the Free Software Foundation; either
 * version 2 of the License, or (at your option) any later version.
 *
 * This library 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
 * Library General Public License for more details.
 *
 * You should have received a copy of the GNU Library General Public
 * License along with this library; if not, write to the
 * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
 * Boston, MA 02111-1307, USA.
 */

#ifndef _ACCESSIBILITY_ROLE_IDL
#define _ACCESSIBILITY_ROLE_IDL

module Accessibility {

  enum Role {
  /** A Role indicating an error condition, such as uninitialized Role data. */
  ROLE_INVALID,
  /** Object is a label indicating the keyboard accelerators for the parent  */
  ROLE_ACCELERATOR_LABEL,
  /** Object is used to alert the user about something */
  ROLE_ALERT,
  /** Object contains a dynamic or moving image of some kind */
  ROLE_ANIMATION,
  /** Object is a 2d directional indicator */
  ROLE_ARROW,
  /** Object contains one or more dates, usually arranged into a 2d list */
  ROLE_CALENDAR,
  /** Object that can be drawn into and is used to trap events */
  ROLE_CANVAS,
  /**
   * A choice that can be checked or unchecked and provides a separate
   * indicator for the current state.
   */
  ROLE_CHECK_BOX,
  /** A menu item that behaves like a check box (see ROLE_CHECK_BOX) */
  ROLE_CHECK_MENU_ITEM,
  /** A specialized dialog that lets the user choose a color. */
  ROLE_COLOR_CHOOSER,
  /** The header for a column of data */
  ROLE_COLUMN_HEADER,
  /** A list of choices the user can select from */
  ROLE_COMBO_BOX,
  /** An object which allows entry of a date */
  ROLE_DATE_EDITOR,
  /** An inconifed internal frame within a DESKTOP_PANE */
  ROLE_DESKTOP_ICON,
  /**
   * A pane that supports internal frames and iconified versions of those
   * internal frames.
   */
  ROLE_DESKTOP_FRAME,
  /** 
   * An object that allows a value to be changed via rotating a visual element,
   * or which displays a value via such a rotating element. 
   */
  ROLE_DIAL,
  /** A top level window with title bar and a border */
  ROLE_DIALOG,
  /**
   * A pane that allows the user to navigate through and select the contents
   * of a directory
   */
  ROLE_DIRECTORY_PANE,
  /**
   * A specialized dialog that displays the files in the directory and lets
   * the user select a file, browse a different directory, or specify a
   * filename.
   */
  ROLE_DRAWING_AREA,
  /**
   * An object used for drawing custom user interface elements.
   */
  ROLE_FILE_CHOOSER,
  /**
   * A object that fills up space in a user interface
   */
  ROLE_FILLER,
  /** XXX Don't use, reserved for future use. */
  ROLE_FOCUS_TRAVERSABLE,
  /** Allows selection of a display font */
  ROLE_FONT_CHOOSER,
  /** A top level window with a title bar, border, menubar, etc. */
  ROLE_FRAME,
  /** A pane that is guaranteed to be painted on top of all panes beneath it */
  ROLE_GLASS_PANE,
  /**
   * A document container for HTML, whose children
   * represent the document content.
   */
  ROLE_HTML_CONTAINER,
  /** A small fixed size picture, typically used to decorate components */
  ROLE_ICON,
  /** An image, typically static. */
  ROLE_IMAGE,
  /** A frame-like object that is clipped by a desktop pane. */
  ROLE_INTERNAL_FRAME,
  /** An object used to present an icon or short string in an interface */
  ROLE_LABEL,
  /**
   * A specialized pane that allows its children to be drawn in layers,
   * providing a form of stacking order.
   */
  ROLE_LAYERED_PANE,
  /**
   * An object that presents a list of objects to the user and allows the
   * user to select one or more of them.
   */
  ROLE_LIST,
  /** An object that represents an element of a list. */
  ROLE_LIST_ITEM,
  /**
   * An object usually found inside a menu bar that contains a list of
   * actions the user can choose from.
   */
  ROLE_MENU,
  /**
   * An object usually drawn at the top of the primary dialog box of an
   * application that contains a list of menus the user can choose from.
   */
  ROLE_MENU_BAR,
  /**
   * An object usually contained in a menu that presents an action the
   * user can choose.
   */
  ROLE_MENU_ITEM,
  /** A specialized pane whose primary use is inside a DIALOG */
  ROLE_OPTION_PANE,
  /** An object that is a child of a page tab list */
  ROLE_PAGE_TAB,
  /**
   * An object that presents a series of panels (or page tabs), one at a time,
   * through some mechanism provided by the object.
   */
  ROLE_PAGE_TAB_LIST,
  /** A generic container that is often used to group objects. */
  ROLE_PANEL,
  /**
   * A text object uses for passwords, or other places where the text
   * content is not shown visibly to the user.
   */
  ROLE_PASSWORD_TEXT,
  /**
   * A temporary window that is usually used to offer the user a list of
   * choices, and then hides when the user selects one of those choices.
   */
  ROLE_POPUP_MENU,
  /** An object used to indicate how much of a task has been completed. */
  ROLE_PROGRESS_BAR,
  /**
   * An object the user can manipulate to tell the application to do
   * something.
   */
  ROLE_PUSH_BUTTON,
  /**
   * A specialized check box that will cause other radio buttons in the
   * same group to become uncghecked when this one is checked.
   */
  ROLE_RADIO_BUTTON,
  /** Object is both a menu item and a "radio button" (see ROLE_RADIO_BUTTON) */
  ROLE_RADIO_MENU_ITEM,
  /**
   * A specialized pane that has a glass pane and a layered pane as its
   * children.
   */
  ROLE_ROOT_PANE,
  /** The header for a row of data */
  ROLE_ROW_HEADER,
  /**
   * An object usually used to allow a user to incrementally view a large
   * amount of data by moving the bounds of a viewport along a one-dimensional axis.
   */
  ROLE_SCROLL_BAR,
  /**
   * An object that allows a user to incrementally view a large amount
   * of information.  ROLE_SCROLL_PANE objects are usually accompanied by
   * ROLE_SCROLL_BAR controllers, on which the RELATION_CONTROLLER_FOR and
   * RELATION_CONTROLLED_BY reciprocal relations are set; \see 
   * Accessibility::RelationSet.
   */
  ROLE_SCROLL_PANE,
  /**
   * An object usually contained in a menu to provide a visible and
   * logical separation of the contents in a menu.
   */
  ROLE_SEPARATOR,
  /** An object that allows the user to select from a bounded range */
  ROLE_SLIDER,
  /** 
   * An object which allows one of a set of choices to be selected, 
   * and which displays the current choice.  Unlike ROLE_SCROLL_BAR,
   * ROLE_SLIDER objects need not control 'viewport'-like objects.
   */
  ROLE_SPIN_BUTTON,
  /** A specialized panel that presents two other panels at the same time. */
  ROLE_SPLIT_PANE,
  /** Object displays non-quantitative status information (c.f. ROLE_PROGRESS_BAR) */
  ROLE_STATUS_BAR,
  /** An object used to repesent information in terms of rows and columns. */
  ROLE_TABLE,
  /** A 'cell' or discrete child within a Table. \note Table cells need not have ROLE_TABLE_CELL, 
   * other RoleType values are valid as well.  */
  ROLE_TABLE_CELL,
  /** An object which labels a particular column in a Table. */
  ROLE_TABLE_COLUMN_HEADER,
  /** An object which labels a particular row in a Table. Table rows and columns may also be 
   * labelled via the RELATION_LABEL_FOR/RELATION_LABELLED_BY relationships; 
   * \see Accessibility::RelationSet. */
  ROLE_TABLE_ROW_HEADER,
  /** Object allows menu to be removed from menubar and shown in its own window. */
  ROLE_TEAROFF_MENU_ITEM,
  /** An object that emulates a terminal */
  ROLE_TERMINAL,
  /** An object that presents text to the user, of nonspecific type. */
  ROLE_TEXT,
  /**
   * A specialized push button that can be checked or unchecked, but does
   * not procide a separate indicator for the current state.
   */
  ROLE_TOGGLE_BUTTON,
  /**
   * A bar or palette usually composed of push buttons or toggle buttons
   */
  ROLE_TOOL_BAR,
  /**
   * An object that provides information about another object
   */
  ROLE_TOOL_TIP,
  /** An object used to repsent hierarchical information to the user. */
  ROLE_TREE,
  /** An object that presents both tabular and hierarchical info to the user */
  ROLE_TREE_TABLE,
  /**
   * The object contains some Accessible information, but its role is
   * not known.  
   */
  ROLE_UNKNOWN,
  /** An object usually used in a scroll pane, or to otherwise clip a larger object or 
   * content renderer to a specific onscreen viewport. */
  ROLE_VIEWPORT,
  /** A ¨top level window¨ with no title or border. */
  ROLE_WINDOW,
  /** 
   * means that the role for this item is known, but not included in the 
   * core enumeration 
   */
  ROLE_EXTENDED,
  /** An object that serves as a document header. */
  ROLE_HEADER,
  /** An object that serves as a document footer. */
  ROLE_FOOTER,
  /** An object which is contains a single paragraph of text content. \see also ROLE_TEXT. */
  ROLE_PARAGRAPH,
  /**
   * An object which describes margins and tab stops, etc. 
   * for text objects which it controls 
   * (should have CONTROLLER_FOR relation to such). 
   */
  ROLE_RULER,
  /**
   * An object corresponding to the toplevel accessible of an 
   * application, which may contain ROLE_FRAME objects or other
   * accessible objects.  Children of AccessibleDesktop objects 
   * are generally ROLE_APPLICATION objects.
   */
  ROLE_APPLICATION,
  /**
   * The object is a dialog or list containing items for insertion 
   * into an entry widget, for instance a list of words for completion 
   * of a text entry.
   */
  ROLE_AUTOCOMPLETE,
  /**
   * The object is an editable text object in a toolbar.
   */
  ROLE_EDITBAR,
  /**
   * The object is an embedded component container.  This role is a 
   * "grouping" hint that the contained objects share a context which is 
   * different from the container in which this accessible is embedded.
   * In particular, it is used for some kinds of document embedding, and
   * for embedding of out-of-process component, "panel applets", etc.
   */
  ROLE_EMBEDDED,

  /**
   * The object is a component whose textual content may be entered or modified by the user,
   * provided STATE_EDITABLE is present.  
   * @note a readonly ROLE_ENTRY object (i.e. where STATE_EDITABLE is not present) implies a
   * read-only ¨text field¨ in a form, as opposed to a title, label, or caption.
   *
   * @since AT-SPI 1.7.0
   */
  ROLE_ENTRY,
  /**
   * The object is a graphical depiction of quantitative data.  It may contain multiple
   * subelements whose attributes and/or description may be queried to obtain both the
   * quantitative data and information about how the data is being presented.
   * The LABELLED_BY relation is particularly important in interpreting objects of this type,
   * as is the accessible-description property.  
   * @see ROLE_CAPTION
   *
   * @since AT-SPI 1.7.0
   */
  ROLE_CHART,
  /**
   * The object contains descriptive information, usually textual, about another user interface
   * element such as a table, chart, or image.
   *
   * @since AT-SPI 1.7.0
   */
  ROLE_CAPTION,
  /**
   * The object is a visual frame or container which contains a view of document content.  
   * Document frames may occur within another Document instance, in which case the second 
   * document may be said to be embedded in the containing instance.  HTML frames are
   * often ROLE_DOCUMENT_FRAME.  Either this object, or a singleton descendant, should implement
   * the Document interface.
   *
   * @since AT-SPI 1.7.0
   */
  ROLE_DOCUMENT_FRAME,
  /**
   * The object serves as a heading for content which follows it in a document.
   * The 'heading level' of the heading, if availabe,  may be obtained by
   * querying the object's attributes. 
   *
   * @since AT-SPI 1.7.0
   */
  ROLE_HEADING,
  /**
   * The object is a containing instance which encapsulates a page of 
   * information.  ROLE_PAGE is used in documents and content which support
   * a paginated navigation model.
   * 
   * @since AT-SPI 1.7.0
   */
  ROLE_PAGE,
  /**
   * The object is a containing instance of document content which constitutes
   * a particular 'logical' section of the document.  The type of content within
   * a section, and the nature of the section division itself, may be obtained
   * by querying the object's attributes.  Sections may be nested.
   *
   * @since AT-SPI 1.7.0
   */
  ROLE_SECTION,
  /**
   * The object is redundant with another object in the hierarchy, 
   * and is exposed for purely technical reasons.  Objects of this role 
   * should be ignored by clients, if they are encountered at all. 
   *
   * @since AT-SPI 1.7.6
   */
  ROLE_REDUNDANT_OBJECT,
  /**
   * The object is a containing instance of document content which
   * has within it components with which the user can interact in order to
   * input information; i.e. the object is a container for pushbuttons,
   * comboboxes, text input fields, and other 'GUI' components.
   * ROLE_FORM should not, in general, be used for toplevel GUI containers
   * or dialogs, but should be reserved for 'GUI' containers which occur within
   * document content, for instance within Web documents, presentations, or 
   * text documents.  Unlike other GUI containers and dialogs which occur inside
   * application instances, ROLE_FORM containers' components are associated with
   * the current document, rather than the current foreground application or
   * viewer instance.
   *
   * @since AT-SPI 1.7.6
   */
  ROLE_FORM,
  /**
   * The object is a hypertext anchor, i.e. a "link" in a
   * hypertext document.  Such objects are distinct from 'inline'
   * content which may also use the Hypertext/Hyperlink interfaces
   * to indicate the range/location within a text object where
   * an inline or embedded object lies.
   *
   * @since AT-SPI 1.7.6
   */
  ROLE_LINK,
  /**
   * The object is a window or similar viewport which is used
   * to allow composition or input of a 'complex character',
   * in other words it is an "input method window."
   *
   * @since AT-SPI 1.7.6
   */
  ROLE_INPUT_METHOD_WINDOW,

  /** not a valid role, used for finding end of enumeration. */
  ROLE_LAST_DEFINED
  };
};

#endif
