/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
 *
 * 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 Netscape are
 * Copyright (C) 1999 Netscape Communications Corporation. All
 * Rights Reserved.
 * 
 * Original Author: Eric Vaughan (evaughan@netscape.com)
 * 
 * Contributor(s): 
 */

#include "nsISupports.idl"
#include "domstubs.idl"
#include "nsIAtom.idl"
#include "domstubs.idl"
#include "nsIAccessible.idl"
#include "nsIAccessibleCaret.idl"

interface nsIWeakReference;
interface nsIAccessibleEventListener;
interface nsIDocument;
interface nsIPresShell;
interface nsIDOMWindow;
interface nsIAccessNode;
interface nsObjectFrame;

[scriptable, uuid(68D9720A-0984-42b6-A3F5-8237ED925727)]
interface nsIAccessibilityService : nsISupports
{
  nsIAccessible createOuterDocAccessible(in nsIDOMNode aNode);
  nsIAccessible createRootAccessible(in nsIPresShell aShell, in nsIDocument aDocument);
  nsIAccessibleCaret createCaretAccessible(in nsIDOMNode aNode, in nsIAccessible aRootAccessible);

  nsIAccessible createHTML4ButtonAccessible(in nsISupports aFrame);
  nsIAccessible createHTMLAreaAccessible(in nsIWeakReference aPresShell, in nsIDOMNode aDOMNode, in nsIAccessible aAccParent);
  nsIAccessible createHTMLBlockAccessible(in nsISupports aFrame);
  nsIAccessible createHTMLButtonAccessible(in nsISupports aFrame);
  nsIAccessible createHTMLButtonAccessibleXBL(in nsIDOMNode aNode);
  nsIAccessible createHTMLCheckboxAccessible(in nsISupports aFrame);
  nsIAccessible createHTMLCheckboxAccessibleXBL(in nsIDOMNode aNode);
  nsIAccessible createHTMLComboboxAccessible(in nsIDOMNode aNode, in nsISupports aPresShell);
  nsIAccessible createHTMLGroupboxAccessible(in nsISupports aFrame);
  nsIAccessible createHTMLHRAccessible(in nsISupports aFrame);
  nsIAccessible createHTMLImageAccessible(in nsISupports aFrame);
  nsIAccessible createHTMLLabelAccessible(in nsISupports aFrame);
  nsIAccessible createHTMLListboxAccessible(in nsIDOMNode aNode, in nsISupports aPresShell);
  nsIAccessible createHTMLObjectFrameAccessible(in nsObjectFrame aFrame);
  nsIAccessible createHTMLRadioButtonAccessible(in nsISupports aFrame);
  nsIAccessible createHTMLRadioButtonAccessibleXBL(in nsIDOMNode aNode);
  nsIAccessible createHTMLSelectOptionAccessible(in nsIDOMNode aNode, in nsIAccessible aAccParent, in nsISupports aPresShell);
  nsIAccessible createHTMLTableAccessible(in nsISupports aFrame);
  nsIAccessible createHTMLTableCellAccessible(in nsISupports aFrame);
  nsIAccessible createHTMLTableCaptionAccessible(in nsIDOMNode aDOMNode);
  nsIAccessible createHTMLTableHeadAccessible(in nsIDOMNode aDOMNode);
  nsIAccessible createHTMLTextAccessible(in nsISupports aFrame);
  nsIAccessible createHTMLTextFieldAccessible(in nsISupports aFrame);

  nsIAccessible createXULButtonAccessible(in nsIDOMNode aNode);
  nsIAccessible createXULCheckboxAccessible(in nsIDOMNode aNode);
  nsIAccessible createXULColorPickerAccessible(in nsIDOMNode aNode);
  nsIAccessible createXULColorPickerTileAccessible(in nsIDOMNode aNode);
  nsIAccessible createXULComboboxAccessible(in nsIDOMNode aNode);
  nsIAccessible createXULDropmarkerAccessible(in nsIDOMNode aNode);
  nsIAccessible createXULGroupboxAccessible(in nsIDOMNode aNode);
  nsIAccessible createXULImageAccessible(in nsIDOMNode aNode);
  nsIAccessible createXULListboxAccessible(in nsIDOMNode aNode);
  nsIAccessible createXULListitemAccessible(in nsIDOMNode aNode);
  nsIAccessible createXULMenubarAccessible(in nsIDOMNode aNode);
  nsIAccessible createXULMenuitemAccessible(in nsIDOMNode aNode);
  nsIAccessible createXULMenupopupAccessible(in nsIDOMNode aNode);
  nsIAccessible createXULMenuSeparatorAccessible(in nsIDOMNode aNode);
  nsIAccessible createXULProgressMeterAccessible(in nsIDOMNode aNode);
  nsIAccessible createXULStatusBarAccessible(in nsIDOMNode aNode);
  nsIAccessible createXULRadioButtonAccessible(in nsIDOMNode aNode);
  nsIAccessible createXULRadioGroupAccessible(in nsIDOMNode aNode);
  nsIAccessible createXULSelectOptionAccessible(in nsIDOMNode aNode);
  nsIAccessible createXULSelectListAccessible(in nsIDOMNode aNode);
  nsIAccessible createXULTabAccessible(in nsIDOMNode aNode);
  nsIAccessible createXULTabBoxAccessible(in nsIDOMNode aNode);
  nsIAccessible createXULTabPanelsAccessible(in nsIDOMNode aNode);
  nsIAccessible createXULTabsAccessible(in nsIDOMNode aNode);
  nsIAccessible createXULTextAccessible(in nsIDOMNode aNode);
  nsIAccessible createXULTreeAccessible(in nsIDOMNode aNode);
  nsIAccessible createXULTreeColumnsAccessible(in nsIDOMNode aNode);
  nsIAccessible createXULTreeColumnitemAccessible(in nsIDOMNode aNode);
  nsIAccessible createXULToolbarAccessible(in nsIDOMNode aNode);
  nsIAccessible createXULToolbarSeparatorAccessible(in nsIDOMNode aNode);
  nsIAccessible createXULTooltipAccessible(in nsIDOMNode aNode);

  nsIAccessible getAccessibleFor(in nsIDOMNode aNode);
  nsIAccessible getAccessibleInWindow(in nsIDOMNode aNode, in nsIDOMWindow aDOMWin);
  nsIAccessible getAccessibleInWeakShell(in nsIDOMNode aNode, in nsIWeakReference aPresShell);
  nsIAccessible getAccessibleInShell(in nsIDOMNode aNode, in nsIPresShell aPresShell);
  [noscript] nsIAccessNode getCachedAccessNode(in nsIDOMNode aNode, in nsIWeakReference aShell);
  [noscript] nsIAccessible getCachedAccessible(in nsIDOMNode aNode, in nsIWeakReference aShell);
};


%{ C++

// for component registration
// {DE401C37-9A7F-4278-A6F8-3DE2833989EF}
#define NS_ACCESSIBILITY_SERVICE_CID \
{ 0xde401c37, 0x9a7f, 0x4278, { 0xa6, 0xf8, 0x3d, 0xe2, 0x83, 0x39, 0x89, 0xef } }

extern nsresult
NS_NewAccessibilityService(nsIAccessibilityService** aResult);

%}
