/* -*- 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 mozilla.org code.
 *
 * The Initial Developer of the Original Code is
 * Netscape Communications Corporation.
 * Portions created by the Initial Developer are Copyright (C) 1998
 * the Initial Developer. All Rights Reserved.
 *
 * Contributor(s):
 *   Author: Aaron Leventhal (aaronl@netscape.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 ***** */

cpp_quote("///////////////////////////////////////////////////////////////////////////////////////////////////////")
cpp_quote("//")
cpp_quote("// ISimpleDOMNode")
cpp_quote("// ---------------------------------------------------------------------------------------------------=")
cpp_quote("// An interface that extends MSAA's IAccessible to provide readonly DOM node information via cross-process COM.")
cpp_quote("//")
cpp_quote("// @STATUS UNDER_REVIEW")
cpp_quote("//")
cpp_quote("// get_nodeInfo(")
cpp_quote("//  /* [out] */ BSTR  *nodeName,   // For elements, this is the tag name")
cpp_quote("//  /* [out] */ short  *nameSpaceID,")
cpp_quote("//  /* [out] */ BSTR  *nodeValue, ")
cpp_quote("//  /* [out] */ unsigned int    *numChildren); ") 
cpp_quote("//  /* [out] */ unsigned int    *uniqueID;  // In Win32 accessible events we generate, the target's childID matches to this")
cpp_quote("//  /* [out] */ unsigned short  *nodeType,")
cpp_quote("// ---------------------------------------------------------------------------------------------------=")
cpp_quote("// Get the basic information about a node.")
cpp_quote("// The namespace ID can be mapped to an URI using nsISimpleDOMDocument::get_nameSpaceURIForID()")
cpp_quote("//")
cpp_quote("// get_attributes(")
cpp_quote("//  /* [in]  */ unsigned short maxAttribs,")
cpp_quote("//  /* [out] */ unsigned short  *numAttribs,")
cpp_quote("//  /* [out] */ BSTR  *attribNames,")
cpp_quote("//  /* [out] */ short *nameSpaceID,")
cpp_quote("//  /* [out] */ BSTR  *attribValues);")
cpp_quote("// ---------------------------------------------------------------------------------------------------=")
cpp_quote("// Returns 3 arrays - the attribute names and values, and a namespace ID for each")
cpp_quote("// If the namespace ID is 0, it's the same namespace as the node's namespace")
cpp_quote("//")
cpp_quote("// get_attributesForNames(")
cpp_quote("//  /* [in] */ unsigned short numAttribs,")
cpp_quote("//  /* [in] */ BSTR   *attribNames,")
cpp_quote("//  /* [in] */ short  *nameSpaceID,")
cpp_quote("//  /* [out] */ BSTR  *attribValues);")
cpp_quote("// ---------------------------------------------------------------------------------------------------=")
cpp_quote("// Takes 2 arrays - the attribute names and namespace IDs, and returns an array of corresponding values")
cpp_quote("// If the namespace ID is 0, it's the same namespace as the node's namespace")
cpp_quote("//")
cpp_quote("// computedStyle(  ")
cpp_quote("//  /* [in]  */ unsigned short maxStyleProperties,")
cpp_quote("//  /* [out] */ unsigned short *numStyleProperties, ")
cpp_quote("//  /* [in]  */ boolean useAlternateView,  // If TRUE, returns properites for media as set in nsIDOMDocument::set_alternateViewMediaTypes")
cpp_quote("//  /* [out] */ BSTR *styleProperties, ")
cpp_quote("//  /* [out] */ BSTR *styleValues);")
cpp_quote("// ---------------------------------------------------------------------------------------------------=")
cpp_quote("// Returns 2 arrays -- the style properties and their values")
cpp_quote("//  useAlternateView=FALSE: gets properties for the default media type (usually screen)")
cpp_quote("//  useAlternateView=TRUE: properties for media types set w/ nsIDOMSimpleDocument::set_alternateViewMediaTypes()")
cpp_quote("//")
cpp_quote("// computedStyleForProperties(  ")
cpp_quote("//  /* [in] */  unsigned short numStyleProperties, ")
cpp_quote("//  /* [in] */  boolean useAlternateView,  // If TRUE, returns properites for media as set in nsIDOMDocument::set_alternateViewMediaTypes")
cpp_quote("//  /* [in] */  BSTR *styleProperties, ")
cpp_quote("//  /* [out] */ BSTR *styleValues);")
cpp_quote("// ---------------------------------------------------------------------------------------------------=")
cpp_quote("// Scroll the current view so that this dom node is visible.")
cpp_quote("//  placeTopLeft=TRUE: scroll until the top left corner of the dom node is at the top left corner of the view.")
cpp_quote("//  placeTopLeft=FALSE: scroll minimally to make the dom node visible. Don't scroll at all if already visible.")
cpp_quote("//")
cpp_quote("// scrollTo( ")
cpp_quote("//  /* [in] */ boolean placeTopLeft); ")
cpp_quote("// ---------------------------------------------------------------------------------------------------=")
cpp_quote("// Returns style property values for those properties in the styleProperties [in] array")
cpp_quote("// Returns 2 arrays -- the style properties and their values")
cpp_quote("//  useAlternateView=FALSE: gets properties for the default media type (usually screen)")
cpp_quote("//  useAlternateView=TRUE: properties for media types set w/ nsIDOMSimpleDocument::set_alternateViewMediaTypes()")
cpp_quote("//")
cpp_quote("// get_parentNode     (/* [out] */ ISimpleDOMNode **newNodePtr);")
cpp_quote("// get_firstChild     (/* [out] */ ISimpleDOMNode **newNodePtr);")
cpp_quote("// get_lastChild      (/* [out] */ ISimpleDOMNode **newNodePtr);")
cpp_quote("// get_previousSibling(/* [out] */ ISimpleDOMNode **newNodePtr);")
cpp_quote("// get_nextSibling    (/* [out] */ ISimpleDOMNode **newNodePtr);")
cpp_quote("// get_childAt        (/* [in] */ unsigned childIndex, /* [out] */ ISimpleDOMNode **newNodePtr);")
cpp_quote("// ---------------------------------------------------------------------------------------------------=")
cpp_quote("// DOM navigation - get a different node.")
cpp_quote("//")
cpp_quote("// get_innerHTML(/* [out] */ BSTR *htmlText);")
cpp_quote("// ---------------------------------------------------------------------------------------------------=")
cpp_quote("// Returns HTML of this DOM node's subtree. Does not include the start and end tag for this node/element.")
cpp_quote("//")
cpp_quote("//")
cpp_quote("// get_localInterface(/* [out] */ void **localInterface);")
cpp_quote("// ---------------------------------------------------------------------------------------------------=")
cpp_quote("// Only available in Gecko's process - casts to an XPCOM nsIAccessNode interface pointer")
cpp_quote("//")
cpp_quote("//")
cpp_quote("// get_language(/* [out] */ BSTR *htmlText);")
cpp_quote("// ---------------------------------------------------------------------------------------------------=")
cpp_quote("// Returns the computed language for this node, or empty string if unknown.")
cpp_quote("//")
cpp_quote("//")
cpp_quote("///////////////////////////////////////////////////////////////////////////////////////////////////////")
cpp_quote("")
cpp_quote("")

import "objidl.idl";
import "oaidl.idl";
        
const long DISPID_NODE_NODEINFO   = -5900;
const long DISPID_NODE_ATTRIBUTES = -5901;
const long DISPID_NODE_ATTRIBUTESFORNAMES = -5902;
const long DISPID_NODE_COMPSTYLE  = -5903;
const long DISPID_NODE_COMPSTYLEFORPROPS = -5904;
const long DISPID_NODE_LANGUAGE = -5905;

[object, uuid(1814ceeb-49e2-407f-af99-fa755a7d2607)]
interface ISimpleDOMNode : IUnknown
{
  const unsigned short NODETYPE_ELEMENT = 1;
  const unsigned short NODETYPE_ATTRIBUTE = 2;
  const unsigned short NODETYPE_TEXT = 3;
  const unsigned short NODETYPE_CDATA_SECTION = 4;
  const unsigned short NODETYPE_ENTITY_REFERENCE = 5;
  const unsigned short NODETYPE_ENTITY = 6;
  const unsigned short NODETYPE_PROCESSING_INSTRUCTION = 7;
  const unsigned short NODETYPE_COMMENT = 8;
  const unsigned short NODETYPE_DOCUMENT = 9;
  const unsigned short NODETYPE_DOCUMENT_TYPE = 10;
  const unsigned short NODETYPE_DOCUMENT_FRAGMENT = 11;
  const unsigned short NODETYPE_NOTATION = 12;

  [propget, id(DISPID_NODE_NODEINFO)] HRESULT nodeInfo(
    [out] BSTR *nodeName,   // for performance returns NULL for text nodes (true nodeName would be "#text")
    [out] short *nameSpaceID,
    [out] BSTR *nodeValue,
    [out] unsigned int *numChildren,
    [out] unsigned int *uniqueID, // In Win32 accessible events we generate, the target's childID matches to this
    [out, retval] unsigned short *nodeType
  );

  [propget, id(DISPID_NODE_ATTRIBUTES)] HRESULT attributes(  
    [in] unsigned short maxAttribs,
    [out, size_is(maxAttribs), length_is(*numAttribs)] BSTR *attribNames, 
    [out, size_is(maxAttribs), length_is(*numAttribs)] short *nameSpaceID,  
    [out, size_is(maxAttribs), length_is(*numAttribs)] BSTR *attribValues,
    [out, retval] unsigned short *numAttribs
  );

  [propget, id(DISPID_NODE_ATTRIBUTESFORNAMES)] HRESULT attributesForNames(  
    [in] unsigned short numAttribs,
    [in, size_is(numAttribs), length_is(numAttribs)] BSTR *attribNames, 
    [in, size_is(numAttribs), length_is(numAttribs)] short *nameSpaceID,  
    [out, retval, size_is(numAttribs), length_is(numAttribs)] BSTR *attribValues
  );

  [propget, id(DISPID_NODE_COMPSTYLE)] HRESULT computedStyle(  
    [in] unsigned short maxStyleProperties,
    [in] boolean useAlternateView,  // If TRUE, returns properites for media as set in nsIDOMDocument::set_alternateViewMediaTypes
    [out, size_is(maxStyleProperties), length_is(*numStyleProperties)] BSTR *styleProperties, 
    [out, size_is(maxStyleProperties), length_is(*numStyleProperties)] BSTR *styleValues,
    [out, retval] unsigned short *numStyleProperties
  );

  [propget, id(DISPID_NODE_COMPSTYLEFORPROPS)] HRESULT computedStyleForProperties(  
    [in] unsigned short numStyleProperties, 
    [in] boolean useAlternateView,  // If TRUE, returns properites for media as set in nsIDOMDocument::set_alternateViewMediaTypes
    [in, size_is(numStyleProperties), length_is(numStyleProperties)] BSTR *styleProperties, 
    [out, retval, size_is(numStyleProperties), length_is(numStyleProperties)] BSTR *styleValues
  );

  HRESULT scrollTo([in] boolean placeTopLeft);

  [propget] HRESULT parentNode([out, retval] ISimpleDOMNode **node);
  [propget] HRESULT firstChild([out, retval] ISimpleDOMNode **node);
  [propget] HRESULT lastChild([out, retval] ISimpleDOMNode **node);
  [propget] HRESULT previousSibling([out, retval] ISimpleDOMNode **node);
  [propget] HRESULT nextSibling([out, retval] ISimpleDOMNode **node);
  [propget] HRESULT childAt([in] unsigned childIndex, 
                            [out, retval] ISimpleDOMNode **node);

  [propget] HRESULT innerHTML([out, retval] BSTR *innerHTML);

  [propget, local] HRESULT localInterface([out][retval] void **localInterface);

  [propget, id(DISPID_NODE_LANGUAGE)] HRESULT language([out, retval] BSTR *language);
}


