/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
 *
 * This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this
 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */

#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(ac0639d5-f95b-4e2b-970c-9eab281fb6a5)]
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 XULListCell = 0x00001026;
  const long XULListHead = 0x00001024;
  const long XULListHeader = 0x00001025;
  const long XULListitem = 0x0000100C;
  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;

  /** Used for XUL tab element */
  const long XULTab = 0x00001017;
  /** Used for XUL tabs element, a container for tab elements */
  const long XULTabs = 0x00001018;
  /** Used for XUL tabpanels container element */
  const long XULTabpanels = 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 XFormsOutput = 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;
};
