/* 
 * 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_STATE_IDL
#define _ACCESSIBILITY_STATE_IDL

module Accessibility {

  enum StateType {
  STATE_INVALID,
  /* Indicates a window is currently the active window */
  STATE_ACTIVE,
  /* Indicates that the object is armed */
  STATE_ARMED,
  /* Indicates the current object is busy */
  STATE_BUSY,
  /* Indicates this object is currently checked */
  STATE_CHECKED,
  /* Indicates this object is collapsed */
  STATE_COLLAPSED,
  /* Indicates that this object no longer contains a backing widget */
  STATE_DEFUNCT,
  /* Indicates the user can change the contents of this object */
  STATE_EDITABLE,
  /* Indicates that this object is enabled */
  STATE_ENABLED,
  /* Indicates this object allows progressive disclosure of its children */
  STATE_EXPANDABLE,
  /* Indicates this object its expanded */
  STATE_EXPANDED,
  /*
   * Indicates this object can accept keyboard focus, which means all
   * events resulting from typing on the keyboard will normally be passed
   * to it when it has focus
   */
  STATE_FOCUSABLE,
  /* Indicates this object currently has the keyboard focus */
  STATE_FOCUSED,
  /* Indicates that the object has an associated tooltip */
  STATE_HAS_TOOLTIP,
  /* Indicates the orientation of thsi object is horizontal */
  STATE_HORIZONTAL,
  /* Indicates this object is minimized and is represented only by an icon */
  STATE_ICONIFIED,
  /*
   * Indicates something must be done with this object before the user can
   * interact with an object in a different window.
   */
  STATE_MODAL,
  /* Indicates this (text) object can contain multiple lines of text */
  STATE_MULTI_LINE,
  /*
   * Indicates this object allows more than one of its children to be
   * selected at the same time
   */
  STATE_MULTISELECTABLE,
  /* Indicates this object paints every pixel within its rectangular region. */
  STATE_OPAQUE,
  /* Indicates this object is currently pressed */
  STATE_PRESSED,
  /* Indicates the size of this object is not fixed */
  STATE_RESIZABLE,
  /*
   * Indicates this object is the child of an object that allows its
   * children to be selected and that this child is one of those children
   * that can be selected.
   */
  STATE_SELECTABLE,
  /*
   * Indicates this object is the child of an object that allows its
   * children to be selected and that this child is one of those children
   * that has been selected.
   */
  STATE_SELECTED,
  /* Indicates this object is sensitive */
  STATE_SENSITIVE,
  /*
   * Indicates this object, the object's parent, the object's parent's
   * parent, and so on, are all visible
   */
  STATE_SHOWING,
  /* Indicates this (text) object can contain only a single line of text */
  STATE_SINGLE_LINE,
  /* Indicates that this object's index within parent information may be invalid */
  STATE_STALE,
  /* Indicates this object is transient */
  STATE_TRANSIENT,
  /* Indicates the orientation of this object is vertical */
  STATE_VERTICAL,
  /* Indicates this object is visible */
  STATE_VISIBLE,
  /*
   * Indicates that "active-descendant-changed" event is sent when children
   * become 'active' (i.e. are selected or navigated to onscreen).  Used to
   * prevent need to enumerate all children in very large containers, like
   * tables.
   */
  STATE_MANAGES_DESCENDANTS,
  /*
   * Indicates that a check box is in a state other than checked or not checked.
   */
  STATE_INDETERMINATE,

  STATE_LAST_DEFINED
  };

  typedef sequence <StateType> StateSeq;

  interface StateSet : Bonobo::Unknown {
    boolean 		contains (in StateType state);
    void		add (in StateType state);
    void 		remove (in StateType state);
    boolean		equals (in StateSet stateSet);
    /* returns a 'difference set' */
    StateSet            compare (in StateSet compareState);
    boolean		isEmpty ();

    /* Private */
    StateSeq getStates ();

    /**
     * unImplemented:
     *
     * placeholders for future expansion.
     */
    void unImplemented ();
    void unImplemented2 ();
    void unImplemented3 ();
    void unImplemented4 ();
  };
};

#endif
