/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
 *
 * ***** BEGIN LICENSE BLOCK *****
 * Version: MPL 1.1/GPL 2.0/LGPL 2.1
 *
 * The contents of this file are subject to the Mozilla Public License Version
 * 1.1 (the "License"); you may not use this file except in compliance with
 * the License. You may obtain a copy of the License at
 * http://www.mozilla.org/MPL/
 *
 * Software distributed under the License is distributed on an "AS IS" basis,
 * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
 * for the specific language governing rights and limitations under the
 * License.
 *
 * The Original Code is the Mozilla browser.
 *
 * The Initial Developer of the Original Code is
 * Netscape Communications Corporation.
 * Portions created by the Initial Developer are Copyright (C) 1999
 * the Initial Developer. All Rights Reserved.
 *
 * Contributor(s):
 *   John Gaunt
 *   Alexander Surkov <surkov.alexander@gmail.com>
 *
 * Alternatively, the contents of this file may be used under the terms of
 * either of the GNU General Public License Version 2 or later (the "GPL"),
 * or the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
 * in which case the provisions of the GPL or the LGPL are applicable instead
 * of those above. If you wish to allow use of your version of this file only
 * under the terms of either the GPL or the LGPL, and not to allow others to
 * use your version of this file under the terms of the MPL, indicate your
 * decision by deleting the provisions above and replace them with the notice
 * and other provisions required by the GPL or the LGPL. If you do not delete
 * the provisions above, a recipient may use your version of this file under
 * the terms of any one of the MPL, the GPL or the LGPL.
 *
 * ***** END LICENSE BLOCK ***** */

#include "nsISupports.idl"

/**
 * nsIAccessibleProvider interface is used to link element and accessible
   object. For that XBL binding of element should implement the interface.
 */

[scriptable, uuid(3f7f9194-c625-4a85-8148-6d92d34897fa)]
interface nsIAccessibleProvider : nsISupports
{
  /**
   * Constants set of common use.
   */

  /** Do not create an accessible for this object
   * This is useful if an ancestor binding already implements nsIAccessibleProvider,
   * but no accessible is desired for the inheriting binding
   */
  const long NoAccessible = 0;

  /** For elements that spawn a new document. For example now it is used by
    <xul:iframe>, <xul:browser> and <xul:editor>. */
  const long OuterDoc = 0x00000001;

  /**
   * Constants set is used by XUL controls.
   */

  const long XULAlert = 0x00001001;
  const long XULButton = 0x00001002;
  const long XULCheckbox = 0x00001003;
  const long XULColorPicker = 0x00001004;
  const long XULColorPickerTile = 0x00001005;
  const long XULCombobox = 0x00001006;
  const long XULDropmarker = 0x00001007;
  const long XULGroupbox = 0x00001008;
  const long XULImage = 0x00001009;
  const long XULLink = 0x0000100A;
  const long XULListbox = 0x0000100B;
  const long XULListitem = 0x0000100C;
  const long XULListHead = 0x00001024;
  const long XULListHeader = 0x00001025;
  const long XULMenubar = 0x0000100D;
  const long XULMenuitem = 0x0000100E;
  const long XULMenupopup = 0x0000100F;
  const long XULMenuSeparator = 0x00001010;
  const long XULPane    = 0x00001011;
  const long XULProgressMeter = 0x00001012;
  const long XULScale = 0x00001013;
  const long XULStatusBar = 0x00001014;
  const long XULRadioButton = 0x00001015;
  const long XULRadioGroup = 0x00001016;

  /** The single tab in a dialog or tabbrowser/editor interface */
  const long XULTab = 0x00001017;

  /** A combination of a tabs object and a tabpanels object */
  const long XULTabBox = 0x00001018;

  /** The collection of tab objects, useable in the TabBox and independant of
   as well */
  const long XULTabs = 0x00001019;

  const long XULText             = 0x0000101A;
  const long XULTextBox          = 0x0000101B;
  const long XULThumb            = 0x0000101C;
  const long XULTree             = 0x0000101D;
  const long XULTreeColumns      = 0x0000101E;
  const long XULTreeColumnItem   = 0x0000101F;
  const long XULToolbar          = 0x00001020;
  const long XULToolbarSeparator = 0x00001021;
  const long XULTooltip          = 0x00001022;
  const long XULToolbarButton    = 0x00001023;


  /**
   * Constants set is used by XForms elements.
   */

  /** Used for xforms elements that provide accessible object for itself as
   * well for anonymous content. This property are used for upload,
   * input[type="xsd:gDay"] and input[type="xsd:gMonth"] */
  const long XFormsContainer = 0x00002000;

  /** Used for label element */
  const long XFormsLabel = 0x00002001;
  /** Used for output element */
  const long XFormsOuput = 0x00002002;
  /** Used for trigger and submit elements */
  const long XFormsTrigger = 0x00002003;
  /** Used for input and textarea elements */
  const long XFormsInput = 0x00002004;
  /** Used for input[xsd:boolean] element */
  const long XFormsInputBoolean = 0x00002005;
  /** Used for input[xsd:date] element */
  const long XFormsInputDate = 0x00002006;
  /** Used for secret element */
  const long XFormsSecret = 0x00002007;
  /** Used for range element represented by slider */
  const long XFormsSliderRange = 0x00002008;

  /** Used for select and select1 that are implemented using host document's
   * native widget. For example, a select1 in a xhtml document may be
   * represented by the native html control html:select */
  const long XFormsSelect = 0x00002009;
  /** Used for xforms choices element */
  const long XFormsChoices = 0x00002010;
  /** Used for xforms full select/select1 elements that may be represented by
   * group of checkboxes and radiogroup */
  const long XFormsSelectFull = 0x00002011;
  /** Used for xforms item element that is used inside xforms select elements
   * represented by group of checkboxes */
  const long XFormsItemCheckgroup = 0x00002012;
  /** Used for xforms item element that is used inside xforms select1 elements
   * represented by radio group */
  const long XFormsItemRadiogroup = 0x00002013;
  /** Used for xforms select1 element that is represented by combobox */
  const long XFormsSelectCombobox = 0x00002014;
  /** Used for xforms item element that is used inside xforms select1
   * elements represented by combobox */
  const long XFormsItemCombobox = 0x00002015;

  /** Used for dropmarker widget that is used by xforms elements */
  const long XFormsDropmarkerWidget = 0x00002101;
  /** Used for calendar widget that is used by xforms elements */
  const long XFormsCalendarWidget = 0x00002102;
  /** Used for popup widget that is used by xforms minimal select1 elements */
  const long XFormsComboboxPopupWidget = 0x00002103;

  /**
   * Return one of constants declared above.
   */
  readonly attribute long accessibleType;
};
