You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openoffice.apache.org by st...@apache.org on 2013/11/04 06:23:37 UTC

svn commit: r1538506 [2/2] - /openoffice/branches/ia2/main/winaccessibility/source/UAccCOMIDL/ia2_api_all.idl

Added: openoffice/branches/ia2/main/winaccessibility/source/UAccCOMIDL/ia2_api_all.idl
URL: http://svn.apache.org/viewvc/openoffice/branches/ia2/main/winaccessibility/source/UAccCOMIDL/ia2_api_all.idl?rev=1538506&view=auto
==============================================================================
--- openoffice/branches/ia2/main/winaccessibility/source/UAccCOMIDL/ia2_api_all.idl (added)
+++ openoffice/branches/ia2/main/winaccessibility/source/UAccCOMIDL/ia2_api_all.idl Mon Nov  4 05:23:37 2013
@@ -0,0 +1,5473 @@
+/*************************************************************************
+ *
+ *  File Name (api_all_headers.idl)
+ * 
+ *  IAccessible2 IDL Specification 
+ * 
+ *  Copyright (c) 2013 Linux Foundation 
+ *  All rights reserved. 
+ *   
+ *   
+ *  Redistribution and use in source and binary forms, with or without 
+ *  modification, are permitted provided that the following conditions 
+ *  are met: 
+ *   
+ *   1. Redistributions of source code must retain the above copyright 
+ *      notice, this list of conditions and the following disclaimer. 
+ *   
+ *   2. Redistributions in binary form must reproduce the above 
+ *      copyright notice, this list of conditions and the following 
+ *      disclaimer in the documentation and/or other materials 
+ *      provided with the distribution. 
+ *
+ *   3. Neither the name of the Linux Foundation nor the names of its 
+ *      contributors may be used to endorse or promote products 
+ *      derived from this software without specific prior written 
+ *      permission. 
+ *   
+ *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
+ *  CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, 
+ *  INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 
+ *  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 
+ *  DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR 
+ *  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 
+ *  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 
+ *  NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 
+ *  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 
+ *  HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 
+ *  CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 
+ *  OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, 
+ *  EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
+ *   
+ *  This BSD License conforms to the Open Source Initiative "Simplified 
+ *  BSD License" as published at: 
+ *  http://www.opensource.org/licenses/bsd-license.php 
+ *   
+ *  IAccessible2 is a trademark of the Linux Foundation. The IAccessible2 
+ *  mark may be used in accordance with the Linux Foundation Trademark 
+ *  Policy to indicate compliance with the IAccessible2 specification. 
+ * 
+ ************************************************************************/ 
+
+import "objidl.idl";
+import "oaidl.idl";
+import "oleacc.idl";
+
+/*************************************************************************
+ *
+ *  File Name (IA2CommonTypes.idl)
+ * 
+ *  IAccessible2 IDL Specification 
+ * 
+ *  Copyright (c) 2007, 2013 Linux Foundation 
+ *  Copyright (c) 2006 IBM Corporation 
+ *  Copyright (c) 2000, 2006 Sun Microsystems, Inc. 
+ *  All rights reserved. 
+ *   
+ *   
+ *  Redistribution and use in source and binary forms, with or without 
+ *  modification, are permitted provided that the following conditions 
+ *  are met: 
+ *   
+ *   1. Redistributions of source code must retain the above copyright 
+ *      notice, this list of conditions and the following disclaimer. 
+ *   
+ *   2. Redistributions in binary form must reproduce the above 
+ *      copyright notice, this list of conditions and the following 
+ *      disclaimer in the documentation and/or other materials 
+ *      provided with the distribution. 
+ *
+ *   3. Neither the name of the Linux Foundation nor the names of its 
+ *      contributors may be used to endorse or promote products 
+ *      derived from this software without specific prior written 
+ *      permission. 
+ *   
+ *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
+ *  CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, 
+ *  INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 
+ *  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 
+ *  DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR 
+ *  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 
+ *  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 
+ *  NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 
+ *  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 
+ *  HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 
+ *  CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 
+ *  OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, 
+ *  EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
+ *   
+ *  This BSD License conforms to the Open Source Initiative "Simplified 
+ *  BSD License" as published at: 
+ *  http://www.opensource.org/licenses/bsd-license.php 
+ *   
+ *  IAccessible2 is a trademark of the Linux Foundation. The IAccessible2 
+ *  mark may be used in accordance with the Linux Foundation Trademark 
+ *  Policy to indicate compliance with the IAccessible2 specification. 
+ * 
+ ************************************************************************/ 
+
+ /** These constants control the scrolling of an object or substring into a window.
+
+ This enum is used in IAccessible2::scrollTo and IAccessibleText::scrollSubstringTo.
+*/
+enum IA2ScrollType {
+
+  /** Scroll the top left corner of the object or substring such that the top left
+   corner (and as much as possible of the rest of the object or substring) is within
+   the top level window.  In cases where the entire object or substring fits within 
+   the top level window, the placement of the object or substring is dependent on 
+   the application.  For example, the object or substring may be scrolled to the 
+   closest edge, the furthest edge, or midway between those two edges.  In cases
+   where there is a hierarchy of nested scrollable controls, more than one control
+   may have to be scrolled.
+  */
+  IA2_SCROLL_TYPE_TOP_LEFT, 		
+
+  /** Scroll the bottom right corner of the object or substring such that the bottom right
+   corner (and as much as possible of the rest of the object or substring) is within
+   the top level window.  In cases where the entire object or substring fits within 
+   the top level window, the placement of the object or substring is dependent on 
+   the application.  For example, the object or substring may be scrolled to the 
+   closest edge, the furthest edge, or midway between those two edges.  In cases
+   where there is a hierarchy of nested scrollable controls, more than one control
+   may have to be scrolled.
+  */
+  IA2_SCROLL_TYPE_BOTTOM_RIGHT,
+
+  /** Scroll the top edge of the object or substring such that the top edge 
+   (and as much as possible of the rest of the object or substring) is within the
+   top level window.  In cases where the entire object or substring fits within 
+   the top level window, the placement of the object or substring is dependent on 
+   the application.  For example, the object or substring may be scrolled to the 
+   closest edge, the furthest edge, or midway between those two edges.  In cases
+   where there is a hierarchy of nested scrollable controls, more than one control
+   may have to be scrolled.
+  */
+  IA2_SCROLL_TYPE_TOP_EDGE,
+
+  /** Scroll the bottom edge of the object or substring such that the bottom edge 
+   (and as much as possible of the rest of the object or substring) is within the
+   top level window.  In cases where the entire object or substring fits within 
+   the top level window, the placement of the object or substring is dependent on 
+   the application.  For example, the object or substring may be scrolled to the 
+   closest edge, the furthest edge, or midway between those two edges.  In cases
+   where there is a hierarchy of nested scrollable controls, more than one control
+   may have to be scrolled.
+  */
+  IA2_SCROLL_TYPE_BOTTOM_EDGE, 
+
+  /** Scroll the left edge of the object or substring such that the left edge 
+   (and as much as possible of the rest of the object or substring) is within the
+   top level window.  In cases where the entire object or substring fits within 
+   the top level window, the placement of the object or substring is dependent on 
+   the application.  For example, the object or substring may be scrolled to the 
+   closest edge, the furthest edge, or midway between those two edges.  In cases
+   where there is a hierarchy of nested scrollable controls, more than one control
+   may have to be scrolled.
+  */
+  IA2_SCROLL_TYPE_LEFT_EDGE, 
+
+  /** Scroll the right edge of the object or substring such that the right edge 
+   (and as much as possible of the rest of the object or substring) is within the
+   top level window.  In cases where the entire object or substring fits within 
+   the top level window, the placement of the object or substring is dependent on 
+   the application.  For example, the object or substring may be scrolled to the 
+   closest edge, the furthest edge, or midway between those two edges.  In cases
+   where there is a hierarchy of nested scrollable controls, more than one control
+   may have to be scrolled.
+  */
+  IA2_SCROLL_TYPE_RIGHT_EDGE,
+
+  /** Scroll the object or substring such that as much as possible of the 
+   object or substring is within the top level window.  The placement of 
+   the object is dependent on the application.  For example, the object or
+   substring may be scrolled to to closest edge, the furthest edge, or midway
+   between those two edges.
+  */
+  IA2_SCROLL_TYPE_ANYWHERE
+};
+
+/** These constants define which coordinate system a point is located in.
+ 
+ This enum is used in IAccessible2::scrollToPoint, IAccessibleImage::imagePosition,
+ IAccessibleText::characterExtents, and IAccessibleText::offsetAtPoint, and 
+ IAccessibleText::scrollSubstringToPoint.
+*/
+enum IA2CoordinateType {
+
+  /// The coordinates are relative to the screen.
+  IA2_COORDTYPE_SCREEN_RELATIVE, 
+
+  /** The coordinates are relative to the upper left corner of the bounding box
+   of the immediate parent.
+  */
+  IA2_COORDTYPE_PARENT_RELATIVE  
+
+};
+
+/** Special offsets for use in IAccessibleText and IAccessibleEditableText methods
+  
+  Refer to @ref _specialOffsets 
+  "Special Offsets for use in the IAccessibleText and IAccessibleEditableText Methods" 
+  for more information.
+*/
+enum IA2TextSpecialOffsets {
+  IA2_TEXT_OFFSET_LENGTH = -1,	/**< This offset is equivalent to the length of the string.  It eliminates
+								 the need to call IAccessibleText::nCharacters. */
+  IA2_TEXT_OFFSET_CARET = -2	/**< This offset signifies that the text related to the physical location
+								 of the caret should be used. */
+};
+
+/** These constants specify the kind of change made to a table.
+
+   This enum is used in the IA2TableModelChange struct which in turn is used by
+   IAccessibleTable::modelChange and IAccessibleTable2::modelChange.
+*/
+enum IA2TableModelChangeType {
+  IA2_TABLE_MODEL_CHANGE_INSERT,  // = 0;
+  IA2_TABLE_MODEL_CHANGE_DELETE,
+  IA2_TABLE_MODEL_CHANGE_UPDATE
+};
+
+/** A structure defining the type of and extents of changes made to a table
+ 
+ IAccessibleTable::modelChange and IAccessibleTable2::modelChange return this struct.
+ In the case of an insertion or change the row and column offsets define the boundaries
+ of the inserted or changed subtable after the operation.  In the case of a deletion
+ the row and column offsets define the boundaries of the subtable being removed before
+ the removal.
+*/
+typedef struct IA2TableModelChange {
+  enum IA2TableModelChangeType type;	// insert, delete, update
+  long firstRow;		///< 0 based, inclusive
+  long lastRow;			///< 0 based, inclusive
+  long firstColumn;		///< 0 based, inclusive
+  long lastColumn;		///< 0 based, inclusive
+} IA2TableModelChange;
+/*************************************************************************
+ *
+ *  File Name (AccessibleRelation.idl)
+ * 
+ *  IAccessible2 IDL Specification 
+ * 
+ *  Copyright (c) 2007, 2013 Linux Foundation 
+ *  Copyright (c) 2006 IBM Corporation 
+ *  Copyright (c) 2000, 2006 Sun Microsystems, Inc. 
+ *  All rights reserved. 
+ *   
+ *   
+ *  Redistribution and use in source and binary forms, with or without 
+ *  modification, are permitted provided that the following conditions 
+ *  are met: 
+ *   
+ *   1. Redistributions of source code must retain the above copyright 
+ *      notice, this list of conditions and the following disclaimer. 
+ *   
+ *   2. Redistributions in binary form must reproduce the above 
+ *      copyright notice, this list of conditions and the following 
+ *      disclaimer in the documentation and/or other materials 
+ *      provided with the distribution. 
+ *
+ *   3. Neither the name of the Linux Foundation nor the names of its 
+ *      contributors may be used to endorse or promote products 
+ *      derived from this software without specific prior written 
+ *      permission. 
+ *   
+ *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
+ *  CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, 
+ *  INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 
+ *  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 
+ *  DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR 
+ *  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 
+ *  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 
+ *  NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 
+ *  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 
+ *  HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 
+ *  CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 
+ *  OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, 
+ *  EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
+ *   
+ *  This BSD License conforms to the Open Source Initiative "Simplified 
+ *  BSD License" as published at: 
+ *  http://www.opensource.org/licenses/bsd-license.php 
+ *   
+ *  IAccessible2 is a trademark of the Linux Foundation. The IAccessible2 
+ *  mark may be used in accordance with the Linux Foundation Trademark 
+ *  Policy to indicate compliance with the IAccessible2 specification. 
+ * 
+ ************************************************************************/ 
+
+
+
+
+
+/** @defgroup grpRelations Relations 
+  Use the following constants to compare against the BSTRs returned by 
+  IAccessibleRelation::relationType.
+*/ 
+///@{
+
+/** The target object is the containing application object. */
+const WCHAR *const IA2_RELATION_CONTAINING_APPLICATION = L"containingApplication";
+
+/** The target object is the containing document object. The target object implements
+ the IAccessibleDocument interface.
+*/
+const WCHAR *const IA2_RELATION_CONTAINING_DOCUMENT = L"containingDocument";
+
+/** The target object is the containing tab pane object. */
+const WCHAR *const IA2_RELATION_CONTAINING_TAB_PANE = L"containingTabPane";
+
+/** The target object is the containing window object. */
+const WCHAR *const IA2_RELATION_CONTAINING_WINDOW = L"containingWindow";
+
+/** Some attribute of this object is affected by a target object. */
+const WCHAR *const IA2_RELATION_CONTROLLED_BY = L"controlledBy";
+
+/** This object is interactive and controls some attribute of a target object. */
+const WCHAR *const IA2_RELATION_CONTROLLER_FOR = L"controllerFor";
+
+/** This object is described by the target object. */
+const WCHAR *const IA2_RELATION_DESCRIBED_BY = L"describedBy";
+
+/** This object is describes the target object. */
+const WCHAR *const IA2_RELATION_DESCRIPTION_FOR = L"descriptionFor";
+
+/** This object is embedded by a target object. */
+const WCHAR *const IA2_RELATION_EMBEDDED_BY = L"embeddedBy";
+
+/** This object embeds a target object. This relation can be used on the
+ OBJID_CLIENT accessible for a top level window to show where the content 
+ areas are.
+*/
+const WCHAR *const IA2_RELATION_EMBEDS = L"embeds";
+
+/** Content flows to this object from a target object. 
+ This relation and IA2_RELATION_FLOWS_TO are useful to tie text and non-text
+ objects together in order to allow assistive technology to follow the
+ intended reading order.
+*/
+const WCHAR *const IA2_RELATION_FLOWS_FROM = L"flowsFrom";
+
+/** Content flows from this object to a target object. */
+const WCHAR *const IA2_RELATION_FLOWS_TO = L"flowsTo";
+
+/** This object is label for a target object. */
+const WCHAR *const IA2_RELATION_LABEL_FOR = L"labelFor";
+
+/** This object is labelled by a target object. Note that the double L spelling
+ which follows is preferred.  Please use it instead.  This single L version may
+ be removed in a later version.
+*/
+const WCHAR *const IA2_RELATION_LABELED_BY = L"labelledBy";
+
+/** This object is labelled by a target object. */
+const WCHAR *const IA2_RELATION_LABELLED_BY = L"labelledBy";
+
+/** This object is a member of a group of one or more objects. When 
+ there is more than one object in the group each member may have one and the 
+ same target, e.g. a grouping object.  It is also possible that each member has 
+ multiple additional targets, e.g. one for every other member in the group.
+*/
+const WCHAR *const IA2_RELATION_MEMBER_OF = L"memberOf";
+
+/** The target object is the next object in the tab order. */
+const WCHAR *const IA2_RELATION_NEXT_TABBABLE = L"nextTabbable";
+
+/** This object is a logical child of a target object.  This relation is the reciprocal
+ of the IA2_RELATION_NODE_PARENT_OF relation. In some cases an application's accessible
+ tree is such that objects can be in a logical parent-child relationship which is
+ different from the hierarchy of the accessible tree. */
+const WCHAR *const IA2_RELATION_NODE_CHILD_OF = L"nodeChildOf";
+
+/** This object is a logical parent of a target object. This relation is the reciprocal
+ of the IA2_RELATION_NODE_CHILD_OF relation. In some cases an application's accessible
+ tree is such that objects can be in a logical parent-child relationship which is
+ different from the hierarchy of the accessible tree. */
+const WCHAR *const IA2_RELATION_NODE_PARENT_OF = L"nodeParentOf";
+
+/** This object is a parent window of the target object. */
+const WCHAR *const IA2_RELATION_PARENT_WINDOW_OF = L"parentWindowOf";
+
+/** This object is a transient component related to the target object. 
+ When this object is activated the target object doesn't lose focus.
+*/
+const WCHAR *const IA2_RELATION_POPUP_FOR = L"popupFor";
+
+/** The target object is the previous object in the tab order. */
+const WCHAR *const IA2_RELATION_PREVIOUS_TABBABLE = L"previousTabbable";
+
+/** This object is a sub window of a target object. */
+const WCHAR *const IA2_RELATION_SUBWINDOW_OF = L"subwindowOf";
+
+///@}
+
+/** This interface gives access to an object's set of relations.
+*/
+[object, uuid(7CDF86EE-C3DA-496a-BDA4-281B336E1FDC)]
+interface IAccessibleRelation : IUnknown
+{
+  /** @brief Returns the type of the relation.
+   @param [out] relationType
+    The strings returned are defined @ref grpRelations "in this section of the documentation".
+   @retval S_OK
+  */
+  [propget] HRESULT relationType
+    (
+     [out, retval] BSTR *relationType
+    );
+
+  /** @brief Returns a localized version of the relation type.
+   @param [out] localizedRelationType
+   @retval S_OK
+  */
+  [propget] HRESULT localizedRelationType
+    (
+     [out, retval] BSTR *localizedRelationType
+    );
+
+  /** @brief Returns the number of targets for this relation.
+   @param [out] nTargets
+   @retval S_OK
+  */
+  [propget] HRESULT nTargets
+    (
+     [out, retval] long *nTargets
+    );
+
+  /** @brief Returns one accessible relation target.
+   @param [in] targetIndex
+    0 based index
+   @param [out] target
+   @retval S_OK
+   @retval E_INVALIDARG if bad [in] passed
+   @note Use QueryInterface to get IAccessible2.
+  */
+  [propget] HRESULT target
+    (
+     [in] long targetIndex,
+     [out, retval] IUnknown **target 
+    );
+
+  /** @brief Returns multiple accessible relation targets
+   @param [in] maxTargets
+    maximum size of the array allocated by the client
+   @param [out] targets
+    The array of target objects.  Note that this array is to be allocated by the
+	client and freed when no longer needed.  Refer to @ref _arrayConsideration 
+	"Special Consideration when using Arrays" for more details.  You will need to use 
+	QueryInterface on the IUnknown to get the IAccessible2.
+   @param [out] nTargets
+	actual number of targets in the returned array (not more than maxTargets)
+   @retval S_OK
+   @retval E_INVALIDARG if bad [in] passed, e.g. a negative value
+  */
+  [propget] HRESULT targets
+    (
+     [in] long maxTargets, 
+     [out, size_is(maxTargets), length_is(*nTargets)]
+       IUnknown **targets, 
+     [out, retval] long *nTargets 
+    );
+
+}
+/*************************************************************************
+ *
+ *  File Name (AccessibleAction.idl)
+ *
+ *  IAccessible2 IDL Specification 
+ * 
+ *  Copyright (c) 2007, 2013 Linux Foundation 
+ *  Copyright (c) 2006 IBM Corporation 
+ *  Copyright (c) 2000, 2006 Sun Microsystems, Inc. 
+ *  All rights reserved. 
+ *   
+ *   
+ *  Redistribution and use in source and binary forms, with or without 
+ *  modification, are permitted provided that the following conditions 
+ *  are met: 
+ *   
+ *   1. Redistributions of source code must retain the above copyright 
+ *      notice, this list of conditions and the following disclaimer. 
+ *   
+ *   2. Redistributions in binary form must reproduce the above 
+ *      copyright notice, this list of conditions and the following 
+ *      disclaimer in the documentation and/or other materials 
+ *      provided with the distribution. 
+ *
+ *   3. Neither the name of the Linux Foundation nor the names of its 
+ *      contributors may be used to endorse or promote products 
+ *      derived from this software without specific prior written 
+ *      permission. 
+ *   
+ *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
+ *  CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, 
+ *  INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 
+ *  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 
+ *  DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR 
+ *  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 
+ *  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 
+ *  NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 
+ *  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 
+ *  HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 
+ *  CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 
+ *  OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, 
+ *  EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
+ *   
+ *  This BSD License conforms to the Open Source Initiative "Simplified 
+ *  BSD License" as published at: 
+ *  http://www.opensource.org/licenses/bsd-license.php 
+ *   
+ *  IAccessible2 is a trademark of the Linux Foundation. The IAccessible2 
+ *  mark may be used in accordance with the Linux Foundation Trademark 
+ *  Policy to indicate compliance with the IAccessible2 specification. 
+ * 
+ ************************************************************************/ 
+
+
+
+
+
+/** This enum defines values which are predefined actions for use when implementing
+ support for media.
+
+ This enum is used when specifying an action for IAccessibleAction::doAction.
+*/
+
+enum IA2Actions {
+  IA2_ACTION_OPEN = -1,         /**< Used to inform the server that the client will
+                                signal via IA2_ACTION_COMPLETE when it has consumed
+                                the content provided by the object.  This action
+                                allows the object's server to wait for all clients
+                                to signal their readiness for additional content.
+                                Any form of content generation that requires
+                                synchronization with an AT would require use of this
+                                action.  One example is the generation of text describing
+                                visual content not obvious from a video's sound track.
+                                In this scenario the Text to Speech or Braille output
+                                may take more time than the related length of silence
+                                in the video's sound track. */
+  IA2_ACTION_COMPLETE = -2,  	/**< Used by the client to inform the server that it has
+                                consumed the most recent content provided by this object. */
+  IA2_ACTION_CLOSE = -3         /**< Used to inform the server that the client no longer
+                                requires synchronization. */
+};
+        
+/** @brief This interface gives access to actions that can be executed
+  for accessible objects.
+
+ Every accessible object that can be manipulated via the native GUI beyond the 
+  methods available either in the MSAA IAccessible interface or in the set of 
+  IAccessible2 interfaces (other than this IAccessibleAction interface) should 
+  support the IAccessibleAction interface in order to provide Assistive Technology
+  access to all the actions that can be performed by the object.  Each action can 
+  be performed or queried for a name, description or associated key bindings.  
+  Actions are needed more for ATs that assist the mobility impaired, such as
+  on-screen keyboards and voice command software.  By providing actions directly,
+  the AT can present them to the user without the user having to perform the extra
+  steps to navigate a context menu.
+
+ The first action should be equivalent to the MSAA default action.  If there is 
+  only one action, %IAccessibleAction should also be implemented.
+*/
+[object, uuid(B70D9F59-3B5A-4dba-AB9E-22012F607DF5)]
+interface IAccessibleAction : IUnknown
+{
+
+  /** @brief Returns the number of accessible actions available in this object.
+    
+   If there are more than one, the first one is considered the
+    "default" action of the object.
+   @param [out] nActions
+    The returned value of the number of actions is zero if there are
+    no actions.
+   @retval S_OK
+   @note This method is missing a [propget] prefix in the IDL.  The result is the
+    method is named nActions in generated C++ code instead of get_nActions.
+  */
+  HRESULT nActions
+    (
+     [out,retval] long* nActions
+    );
+
+  /** @brief Performs the specified Action on the object.
+   @param [in] actionIndex
+    0 based index specifying the action to perform.  If it lies outside
+    the valid range no action is performed.
+   @retval S_OK
+   @retval S_FALSE if action could not be performed
+   @retval E_INVALIDARG if bad [in] passed
+   @note If implementing support for media, refer to the predefined constants in the ::IA2Actions enum.
+    */
+  HRESULT doAction
+    (
+     [in] long actionIndex
+    );
+
+  /** @brief Returns a description of the specified action of the object.
+   @param [in] actionIndex
+    0 based index specifying which action's description to return.
+    If it lies outside the valid range an empty string is returned.
+   @param [out] description
+    The returned value is a localized string of the specified action.
+   @retval S_OK
+   @retval S_FALSE if there is nothing to return, [out] value is NULL 
+   @retval E_INVALIDARG if bad [in] passed
+    */
+  [propget] HRESULT description
+    (
+     [in] long actionIndex,
+     [out, retval] BSTR *description
+    );
+
+  /** @brief Returns an array of BSTRs describing one or more key bindings, if
+   there are any, associated with the specified action.
+
+   The returned strings are the localized human readable key sequences to be
+   used to activate each action, e.g. "Ctrl+Shift+D".  Since these key
+   sequences are to be used when the object has focus, they are like
+   mnemonics (access keys), and not like shortcut (accelerator) keys.
+
+   There is no need to implement this method for single action controls since
+   that would be redundant with the standard MSAA programming practice of
+   getting the mnemonic from get_accKeyboardShortcut.
+
+   An AT such as an On Screen Keyboard might not expose these bindings but
+   provide alternative means of activation.
+
+   Note: the client allocates and passes in an array of pointers.  The server
+   allocates the BSTRs and passes back one or more pointers to these BSTRs into
+   the array of pointers allocated by the client.  The client is responsible 
+   for deallocating the BSTRs.
+
+   @param [in] actionIndex
+    0 based index specifying which action's key bindings should be returned.
+   @param [in] nMaxBindings
+    This parameter is ignored. Refer to @ref _arrayConsideration
+	"Special Consideration when using Arrays" for more details.
+   @param [out] keyBindings
+    An array of BSTRs, allocated by the server, one for each key binding.
+	The client must free it with CoTaskMemFree.
+   @param [out] nBindings
+    The number of key bindings returned; the size of the returned array.
+   @retval S_OK
+   @retval S_FALSE if there are no key bindings, [out] values are NULL and 0 respectively 
+   @retval E_INVALIDARG if bad [in] passed
+	*/
+  [propget] HRESULT keyBinding
+    (
+     [in] long actionIndex,
+     [in] long nMaxBindings,
+     [out, size_is(,nMaxBindings), length_is(,*nBindings)] BSTR **keyBindings,
+	 [out, retval] long *nBindings
+    );
+
+  /** @brief Returns the non-localized name of specified action.
+   @param [in] actionIndex
+    0 based index specifying which action's non-localized name should be returned.
+   @param [out] name
+   @retval S_OK
+   @retval S_FALSE if there is nothing to return, [out] value is NULL 
+   @retval E_INVALIDARG if bad [in] passed
+   */
+  [propget] HRESULT name
+    (
+     [in] long actionIndex,
+     [out, retval] BSTR *name
+    );
+
+  /** @brief Returns the localized name of specified action.
+   @param [in] actionIndex
+    0 based index specifying which action's localized name should be returned.
+   @param [out] localizedName
+   @retval S_OK
+   @retval S_FALSE if there is nothing to return, [out] value is NULL 
+   @retval E_INVALIDARG if bad [in] passed
+   */
+  [propget] HRESULT localizedName
+    (
+     [in] long actionIndex,
+     [out, retval] BSTR *localizedName
+    );
+
+}
+/*************************************************************************
+ *
+ *  File Name (AccessibleRole.idl)
+ * 
+ *  IAccessible2 IDL Specification 
+ * 
+ *  Copyright (c) 2007, 2013 Linux Foundation 
+ *  Copyright (c) 2006 IBM Corporation 
+ *  Copyright (c) 2000, 2006 Sun Microsystems, Inc. 
+ *  All rights reserved. 
+ *   
+ *   
+ *  Redistribution and use in source and binary forms, with or without 
+ *  modification, are permitted provided that the following conditions 
+ *  are met: 
+ *   
+ *   1. Redistributions of source code must retain the above copyright 
+ *      notice, this list of conditions and the following disclaimer. 
+ *   
+ *   2. Redistributions in binary form must reproduce the above 
+ *      copyright notice, this list of conditions and the following 
+ *      disclaimer in the documentation and/or other materials 
+ *      provided with the distribution. 
+ *
+ *   3. Neither the name of the Linux Foundation nor the names of its 
+ *      contributors may be used to endorse or promote products 
+ *      derived from this software without specific prior written 
+ *      permission. 
+ *   
+ *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
+ *  CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, 
+ *  INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 
+ *  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 
+ *  DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR 
+ *  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 
+ *  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 
+ *  NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 
+ *  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 
+ *  HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 
+ *  CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 
+ *  OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, 
+ *  EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
+ *   
+ *  This BSD License conforms to the Open Source Initiative "Simplified 
+ *  BSD License" as published at: 
+ *  http://www.opensource.org/licenses/bsd-license.php 
+ *   
+ *  IAccessible2 is a trademark of the Linux Foundation. The IAccessible2 
+ *  mark may be used in accordance with the Linux Foundation Trademark 
+ *  Policy to indicate compliance with the IAccessible2 specification. 
+ * 
+ ************************************************************************/ 
+
+
+
+/** Collection of roles
+
+  This enumerator defines an extended set of accessible roles of objects implementing
+  the %IAccessible2 interface. These roles are in addition to the MSAA roles obtained
+  through the MSAA get_accRole method.  Examples are 'footnote', 'heading', and 
+  'label'. You obtain an object's %IAccessible2 roles by calling IAccessible2::role.
+*/
+enum IA2Role {
+
+  /** Unknown role. The object contains some Accessible information, but its 
+   role is not known.
+  */
+  IA2_ROLE_UNKNOWN = 0,
+
+  /** An object that can be drawn into and to manage events from the objects
+   drawn into it.  Also refer to ::IA2_ROLE_FRAME,
+   ::IA2_ROLE_GLASS_PANE, and ::IA2_ROLE_LAYERED_PANE. 
+  */
+  IA2_ROLE_CANVAS = 0x401,
+
+  /// A caption describing another object.
+  IA2_ROLE_CAPTION,
+
+  /// Used for check buttons that are menu items.
+  IA2_ROLE_CHECK_MENU_ITEM,
+
+  /// A specialized dialog that lets the user choose a color.
+  IA2_ROLE_COLOR_CHOOSER,
+
+  /// A date editor.
+  IA2_ROLE_DATE_EDITOR,
+
+  /** An iconified internal frame in an ::IA2_ROLE_DESKTOP_PANE. 
+   Also refer to ::IA2_ROLE_INTERNAL_FRAME.
+  */
+  IA2_ROLE_DESKTOP_ICON,
+
+  /** A desktop pane. A pane that supports internal frames and iconified 
+   versions of those internal frames.  Also refer to ::IA2_ROLE_INTERNAL_FRAME.
+  */
+  IA2_ROLE_DESKTOP_PANE,
+
+  /** A directory pane. A pane that allows the user to navigate through 
+   and select the contents of a directory. May be used by a file chooser.   
+   Also refer to ::IA2_ROLE_FILE_CHOOSER.
+  */
+  IA2_ROLE_DIRECTORY_PANE,
+
+  /** An editable text object in a toolbar. <b>Deprecated.</b>
+   The edit bar role was meant for a text area in a tool bar. However, to detect
+   a text area in a tool bar the AT can query the parent.
+  */
+  IA2_ROLE_EDITBAR,
+
+  /// Embedded (OLE) object.
+  IA2_ROLE_EMBEDDED_OBJECT,
+
+  /// Text that is used as an endnote (footnote at the end of a chapter or section).
+  IA2_ROLE_ENDNOTE,
+
+  /** A file chooser. A specialized dialog that displays the files in the 
+   directory and lets the user select a file, browse a different directory, 
+   or specify a filename. May use the directory pane to show the contents of 
+   a directory.  
+   Also refer to ::IA2_ROLE_DIRECTORY_PANE.
+  */
+  IA2_ROLE_FILE_CHOOSER,
+
+  /** A font chooser. A font chooser is a component that lets the user pick 
+   various attributes for fonts.
+  */
+  IA2_ROLE_FONT_CHOOSER,
+
+  /** Footer of a document page.
+   Also refer to ::IA2_ROLE_HEADER.
+  */
+  IA2_ROLE_FOOTER,
+
+  /// Text that is used as a footnote.  Also refer to ::IA2_ROLE_ENDNOTE.
+  IA2_ROLE_FOOTNOTE,
+
+  /** A container of form controls.  An example of the use of this role is to
+   represent an HTML FORM tag.
+  */
+  IA2_ROLE_FORM,
+
+  /** Frame role. A top level window with a title bar, border, menu bar, etc.  
+   It is often used as the primary window for an application.  Also refer to
+   ::IA2_ROLE_CANVAS and the MSAA roles of dialog and window.
+  */
+  IA2_ROLE_FRAME,
+
+  /** A glass pane. A pane that is guaranteed to be painted on top of all panes
+   beneath it.  Also refer to ::IA2_ROLE_CANVAS, ::IA2_ROLE_INTERNAL_FRAME, and
+   ::IA2_ROLE_ROOT_PANE.
+  */
+  IA2_ROLE_GLASS_PANE,
+
+  /** Header of a document page.
+   Also refer to ::IA2_ROLE_FOOTER.
+  */
+  IA2_ROLE_HEADER,
+
+  /// Heading.  Use the IAccessible2::attributes level attribute to determine the heading level.
+  IA2_ROLE_HEADING,
+
+  /// A small fixed size picture, typically used to decorate components.
+  IA2_ROLE_ICON,
+
+  /** An image map object.  Usually a graphic with multiple hotspots, where 
+   each hotspot can be activated resulting in the loading of another document
+   or section of a document.
+  */
+  IA2_ROLE_IMAGE_MAP,
+
+  /** An object which is used to allow input of characters not found on a keyboard,
+   such as the input of Chinese characters on a Western keyboard.
+  */
+  IA2_ROLE_INPUT_METHOD_WINDOW,
+
+  /** An internal frame. A frame-like object that is clipped by a desktop pane.  
+   The desktop pane, internal frame, and desktop icon objects are often used to 
+   create multiple document interfaces within an application.
+   Also refer to ::IA2_ROLE_DESKTOP_ICON, ::IA2_ROLE_DESKTOP_PANE, and ::IA2_ROLE_FRAME.
+  */
+  IA2_ROLE_INTERNAL_FRAME,
+
+  /// An object used to present an icon or short string in an interface.
+  IA2_ROLE_LABEL,
+
+  /** A layered pane. A specialized pane that allows its children to be drawn 
+   in layers, providing a form of stacking order. This is usually the pane that 
+   holds the menu bar as  well as the pane that contains most of the visual 
+   components in a window.
+   Also refer to ::IA2_ROLE_CANVAS, ::IA2_ROLE_GLASS_PANE, and ::IA2_ROLE_ROOT_PANE.
+  */
+  IA2_ROLE_LAYERED_PANE,
+
+  /** A section whose content is parenthetic or ancillary to the main content
+   of the resource.
+  */
+  IA2_ROLE_NOTE,
+
+ /** A specialized pane whose primary use is inside a dialog.
+   Also refer to MSAA's dialog role.
+  */
+  IA2_ROLE_OPTION_PANE,
+
+  /** An object representing a page of document content.  It is used in documents
+   which are accessed by the user on a page by page basis.
+  */
+  IA2_ROLE_PAGE,
+
+  /// A paragraph of text.
+  IA2_ROLE_PARAGRAPH,
+
+  /** A radio button that is a menu item.
+   Also refer to MSAA's button and menu item roles.
+  */
+  IA2_ROLE_RADIO_MENU_ITEM,
+
+  /** An object which is redundant with another object in the accessible hierarchy.
+   ATs typically ignore objects with this role.
+  */
+  IA2_ROLE_REDUNDANT_OBJECT,
+
+  /** A root pane. A specialized pane that has a glass pane and a layered pane 
+   as its children.
+   Also refer to ::IA2_ROLE_GLASS_PANE and ::IA2_ROLE_LAYERED_PANE
+  */
+  IA2_ROLE_ROOT_PANE,
+
+  /** A ruler such as those used in word processors.
+  */
+  IA2_ROLE_RULER,
+
+  /** A scroll pane. An object that allows a user to incrementally view a large 
+   amount of information.  Its children can include scroll bars and a viewport.
+   Also refer to ::IA2_ROLE_VIEW_PORT and MSAA's scroll bar role.
+  */
+  IA2_ROLE_SCROLL_PANE,
+
+  /** A container of document content.  An example of the use of this role is to
+   represent an HTML DIV tag.  A section may be used as a region.  A region is a 
+   group of elements that together form a perceivable unit.  A region does not 
+   necessarily follow the logical structure of the content, but follows the 
+   perceivable structure of the page.  A region may have an attribute in the set 
+   of IAccessible2::attributes which indicates that it is "live".  A live region 
+   is content that is likely to change in response to a timed change, a user 
+   event, or some other programmed logic or event.
+  */
+  IA2_ROLE_SECTION,
+
+  /// Object with graphical representation used to represent content on draw pages.
+  IA2_ROLE_SHAPE,
+
+  /** A split pane. A specialized panel that presents two other panels at the 
+   same time. Between the two panels is a divider the user can manipulate to make 
+   one panel larger and the other panel smaller.
+  */
+  IA2_ROLE_SPLIT_PANE,
+
+  /** An object that forms part of a menu system but which can be "undocked" 
+   from or "torn off" the menu system to exist as a separate window.
+  */
+  IA2_ROLE_TEAR_OFF_MENU,
+
+  /// An object used as a terminal emulator.
+  IA2_ROLE_TERMINAL,
+
+  /// Collection of objects that constitute a logical text entity.
+  IA2_ROLE_TEXT_FRAME,
+
+  /** A toggle button. A specialized push button that can be checked or unchecked, 
+   but does not provide a separate indicator for the current state.
+   Also refer to MSAA's roles of push button, check box, and radio button.
+   <BR><B>Note:</B> IA2_ROLE_TOGGLE_BUTTON should not be used.  Instead, use MSAA's 
+   ROLE_SYSTEM_PUSHBUTTON and STATE_SYSTEM_PRESSED.
+  */
+  IA2_ROLE_TOGGLE_BUTTON,
+
+  /** A viewport. An object usually used in a scroll pane. It represents the 
+   portion of the entire data that the user can see. As the user manipulates 
+   the scroll bars, the contents of the viewport can change.
+   Also refer to ::IA2_ROLE_SCROLL_PANE.
+  */
+  IA2_ROLE_VIEW_PORT,
+
+  /** An object containing content which is complementary to the main content of
+   a document, but remains meaningful when separated from the main content.  There
+   are various types of content that would appropriately have this role.  For example,
+   in the case where content is delivered via a web portal to a web browser, this may
+   include but not be limited to show times, current weather, related articles, or
+   stocks to watch.  The complementary role indicates that contained content is relevant
+   to the main content.  If the complementary content is completely separable main
+   content, it may be appropriate to use a more general role.
+  */
+  IA2_ROLE_COMPLEMENTARY_CONTENT
+  
+};
+/*************************************************************************
+ *
+ *  File Name (AccessibleStates.idl)
+ * 
+ *  IAccessible2 IDL Specification 
+ * 
+ *  Copyright (c) 2007, 2010 Linux Foundation 
+ *  Copyright (c) 2006 IBM Corporation 
+ *  Copyright (c) 2000, 2006 Sun Microsystems, Inc. 
+ *  All rights reserved. 
+ *   
+ *   
+ *  Redistribution and use in source and binary forms, with or without 
+ *  modification, are permitted provided that the following conditions 
+ *  are met: 
+ *   
+ *   1. Redistributions of source code must retain the above copyright 
+ *      notice, this list of conditions and the following disclaimer. 
+ *   
+ *   2. Redistributions in binary form must reproduce the above 
+ *      copyright notice, this list of conditions and the following 
+ *      disclaimer in the documentation and/or other materials 
+ *      provided with the distribution. 
+ *
+ *   3. Neither the name of the Linux Foundation nor the names of its 
+ *      contributors may be used to endorse or promote products 
+ *      derived from this software without specific prior written 
+ *      permission. 
+ *   
+ *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
+ *  CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, 
+ *  INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 
+ *  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 
+ *  DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR 
+ *  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 
+ *  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 
+ *  NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 
+ *  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 
+ *  HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 
+ *  CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 
+ *  OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, 
+ *  EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
+ *   
+ *  This BSD License conforms to the Open Source Initiative "Simplified 
+ *  BSD License" as published at: 
+ *  http://www.opensource.org/licenses/bsd-license.php 
+ *   
+ *  IAccessible2 is a trademark of the Linux Foundation. The IAccessible2 
+ *  mark may be used in accordance with the Linux Foundation Trademark 
+ *  Policy to indicate compliance with the IAccessible2 specification. 
+ * 
+ ************************************************************************/ 
+
+
+
+typedef long AccessibleStates;
+
+/** %IAccessible2 specific state bit constants
+
+  This enum defines the state bits returned by IAccessible2::states.  The 
+  %IAccessible2 state bits are in addition to those returned by MSAA.
+*/
+enum IA2States {
+
+/** Indicates a window is currently the active window, or is an active subelement 
+  within a container or table.
+
+ This state can be used to indicate the current active item in a container, even 
+  if the container itself is not currently active. In other words this would indicate
+  the item that will get focus if you tab to the container.
+
+ This information is important for knowing what to report for trees and potentially 
+  other containers in a virtual buffer.
+
+ Also, see ::IA2_STATE_MANAGES_DESCENDANTS for more information.
+*/
+IA2_STATE_ACTIVE =					0x1,
+
+/** Indicates that the object is armed.
+
+ Used to indicate that the control is "pressed" and will be invoked when the 
+  actuator, e.g. a mouse button, is "released".  An AT which either monitors the 
+  mouse or synthesizes mouse events might need to know that, and possibly a talking
+  interface would even let the user know about it.  It could also potentially be
+  useful to on screen keyboards or test tools since the information does indicate
+  something about the state of the interface, for example, code operating asynchronously
+  might need to wait for the armed state to change before doing something else.
+
+*/
+IA2_STATE_ARMED =					0x2,
+
+/** Indicates the user interface object corresponding to this object no longer exists. */
+IA2_STATE_DEFUNCT =					0x4,
+
+/** An object with this state has a caret and implements the IAccessibleText interface.
+  
+ Such fields may be read-only, so STATE_SYSTEM_READONLY is valid in combination
+  with IA2_STATE_EDITABLE.
+
+*/
+IA2_STATE_EDITABLE =				0x8,
+
+/** Indicates the orientation of this object is horizontal. */
+IA2_STATE_HORIZONTAL =				0x10,
+
+/** Indicates this object is minimized and is represented only by an icon. */
+IA2_STATE_ICONIFIED =				0x20,
+
+/** Indicates an input validation failure. */
+IA2_STATE_INVALID_ENTRY =			0x40,
+
+/** Indicates that this object manages its children.
+
+ Note: Due to the fact that MSAA's WinEvents don't allow the active child index
+  to be passed on the IA2_EVENT_ACTIVE_DESCENDANT_CHANGED event, the manages
+  descendants	scheme can't be used.  Instead the active child object has to fire
+  MSAA's EVENT_OBJECT_FOCUS.  In a future release a new event mechanism may be
+  added to provide for event specific data to be passed with the event.  At that
+  time the IA2_EVENT_ACTIVE_DECENDENT_CHANGED event and
+  IA2_STATE_MANAGES_DESCENDANTS state would be useful.
+*/
+IA2_STATE_MANAGES_DESCENDANTS =		0x80,
+
+/** Indicates that an object is modal.
+
+ Modal objects have the behavior that something must be done with the object 
+  before the user can interact with an object in a different window.
+*/
+IA2_STATE_MODAL =					0x100,
+
+/** Indicates this text object can contain multiple lines of text. */
+IA2_STATE_MULTI_LINE =				0x200,
+
+/** Indicates this object paints every pixel within its rectangular region. */
+IA2_STATE_OPAQUE =					0x400,
+
+/** Indicates that user interaction is required.
+
+ An example of when this state is used is when a field in a form must be filled 
+  before a form can be processed.
+*/
+IA2_STATE_REQUIRED =				0x800,
+
+/** Indicates an object which supports text selection.
+
+ Note: This is different than MSAA STATE_SYSTEM_SELECTABLE.
+*/
+IA2_STATE_SELECTABLE_TEXT =			0x1000,
+
+/** Indicates that this text object can contain only a single line of text. */
+IA2_STATE_SINGLE_LINE =				0x2000,
+
+/** Indicates that the accessible object is stale.
+
+ This state is used when the accessible object no longer accurately 
+  represents the state of the object which it is representing such as when an
+  object is transient or when an object has been or is in the process of being
+  destroyed or when the object's index in its parent has changed.
+*/
+IA2_STATE_STALE =					0x4000,
+
+/** Indicates that the object implements autocompletion.
+
+ This state indicates that a text control will respond to the input of 
+ one ore more characters and cause a sub-item to become selected.  The 
+ selection may also result in events fired on the parent object.
+*/
+IA2_STATE_SUPPORTS_AUTOCOMPLETION =	0x8000,
+
+/** Indicates this object is transient.
+
+ An object has this state when its parent object has the state ::IA2_STATE_MANAGES_DESCENDANTS.
+ For example, a list item object may be managed by its parent list object and may only 
+ exist as long as the object is actually rendered.  Similarly a table cell's accessible 
+ object may exist only while the cell has focus.  However, from the perspective of an 
+ assistive technology a transient object behaves like a non-transient object.  As a 
+ result it is likely that this state is not of use to an assistive technology, but it 
+ is provided in case an assistive technology determines that knowledge of the transient 
+ nature of the object is useful and also for harmony with the Linux accessibility API.
+
+ Also, see ::IA2_STATE_MANAGES_DESCENDANTS for more information.
+ */
+IA2_STATE_TRANSIENT =				0x10000,
+
+/** Indicates the orientation of this object is vertical. */
+IA2_STATE_VERTICAL =				0x20000,
+
+/** Indicates this object is checkable.
+
+ The standard checkable objects are check boxes, radio buttons, check box menu
+ items, radio menu items, and toggle buttons.  Since assistive technology will
+ determine that these objects are checkable via the object's role the checkable
+ state is not required.  However, this state is necessary in those cases where
+ an object has a role which is not one of the previously mentioned roles.  An
+ example is a table cell which indicates whether or not an email has an attachment,
+ whether or not an mail is considered spam, and whether or not an email has been read.
+ */
+IA2_STATE_CHECKABLE =				0x40000,
+
+/** Indicates this object is pinned.
+
+ This state indicates that an object is fixed at a certain location.  One example
+ is a browser tab that when pinned cannot be moved until unpinned.  Another example
+ is a movable or floating object that when pinned remains in its pinned location
+ until being unpinned.
+ */
+IA2_STATE_PINNED =					0x80000
+
+};
+/*************************************************************************
+ *
+ *  File Name (Accessible2.idl)
+ * 
+ *  IAccessible2 IDL Specification 
+ * 
+ *  Copyright (c) 2007, 2013 Linux Foundation 
+ *  Copyright (c) 2006 IBM Corporation 
+ *  Copyright (c) 2000, 2006 Sun Microsystems, Inc. 
+ *  All rights reserved. 
+ *   
+ *   
+ *  Redistribution and use in source and binary forms, with or without 
+ *  modification, are permitted provided that the following conditions 
+ *  are met: 
+ *   
+ *   1. Redistributions of source code must retain the above copyright 
+ *      notice, this list of conditions and the following disclaimer. 
+ *   
+ *   2. Redistributions in binary form must reproduce the above 
+ *      copyright notice, this list of conditions and the following 
+ *      disclaimer in the documentation and/or other materials 
+ *      provided with the distribution. 
+ *
+ *   3. Neither the name of the Linux Foundation nor the names of its 
+ *      contributors may be used to endorse or promote products 
+ *      derived from this software without specific prior written 
+ *      permission. 
+ *   
+ *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
+ *  CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, 
+ *  INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 
+ *  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 
+ *  DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR 
+ *  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 
+ *  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 
+ *  NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 
+ *  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 
+ *  HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 
+ *  CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 
+ *  OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, 
+ *  EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
+ *   
+ *  This BSD License conforms to the Open Source Initiative "Simplified 
+ *  BSD License" as published at: 
+ *  http://www.opensource.org/licenses/bsd-license.php 
+ *   
+ *  IAccessible2 is a trademark of the Linux Foundation. The IAccessible2 
+ *  mark may be used in accordance with the Linux Foundation Trademark 
+ *  Policy to indicate compliance with the IAccessible2 specification. 
+ * 
+ ************************************************************************/ 
+
+/** @mainpage
+
+ @section _interfaces Interfaces
+  IAccessible2\n
+  IAccessible2_2\n
+  IAccessibleAction\n
+  IAccessibleApplication\n
+  IAccessibleComponent\n
+  IAccessibleDocument\n
+  IAccessibleEditableText\n
+  IAccessibleHypertext\n
+  IAccessibleHypertext2\n
+  IAccessibleHyperlink\n
+  IAccessibleImage\n
+  IAccessibleRelation\n
+  IAccessibleTable [Deprecated]\n
+  IAccessibleTable2\n
+  IAccessibleTableCell\n
+  IAccessibleText\n
+  IAccessibleText2\n
+  IAccessibleValue
+
+ @section _structs Structs
+  IA2Locale\n
+  IA2TableModelChange\n
+  IA2TextSegment
+
+ @section _enums Enums
+  ::IA2Actions values are predefined actions for use when implementing support for HTML5 media.\n
+  ::IA2CoordinateType values define the requested coordinate type (screen or parent window).\n
+  ::IA2EventID values identify events.\n
+  ::IA2Role values defines roles which are in addition to the existing MSAA roles.\n
+  ::IA2ScrollType values define where to place an object or substring on the screen.\n
+  ::IA2States values define states which are in addition to the existing MSAA states.\n
+  ::IA2TableModelChangeType values describe the kinds of changes made to a table (insert, delete, update).\n
+  ::IA2TextBoundaryType values define the requested text unit (character, word, sentence, line, paragraph).\n
+  ::IA2TextSpecialOffsets values define special offsets for use in the text interfaces.
+
+ @section _constants Constants
+  @ref grpRelations
+
+ @section _misc Miscellaneous
+  @ref _licensePage "BSD License"\n
+  @ref _generalInfo "General Information"\n
+
+ @page _licensePage BSD License
+  %IAccessible2 IDL Specification
+
+  Copyright (c) 2007, 2013 Linux Foundation\n
+  Copyright (c) 2006 IBM Corporation\n
+  Copyright (c) 2000, 2006 Sun Microsystems, Inc.\n
+  All rights reserved.
+
+  Redistribution and use in source and binary forms, with or without 
+  modification, are permitted provided that the following conditions 
+  are met: 
+    
+   1. Redistributions of source code must retain the above copyright 
+      notice, this list of conditions and the following disclaimer. 
+ 
+   2. Redistributions in binary form must reproduce the above 
+      copyright notice, this list of conditions and the following 
+      disclaimer in the documentation and/or other materials 
+      provided with the distribution. 
+ 
+   3. Neither the name of the Linux Foundation nor the names of its 
+      contributors may be used to endorse or promote products 
+      derived from this software without specific prior written 
+      permission. 
+ 
+  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
+  CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, 
+  INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 
+  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 
+  DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR 
+  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 
+  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 
+  NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 
+  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 
+  HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 
+  CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 
+  OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, 
+  EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
+ 
+  This BSD License conforms to the Open Source Initiative "Simplified 
+  BSD License" as published at: 
+  http://www.opensource.org/licenses/bsd-license.php 
+ 
+  %IAccessible2 is a trademark of the Linux Foundation. The %IAccessible2 
+  mark may be used in accordance with the
+  <a href="http://www.linuxfoundation.org/collaborate/workgroups/accessibility/trademark-policy">
+  Linux Foundation Trademark Policy</a> to indicate compliance with the %IAccessible2 specification. 
+
+ @page _generalInfo General Information 
+  The following information is applicable to two or more interfaces.
+
+ @ref _errors\n
+ @ref _memory\n
+ &nbsp;&nbsp;@ref _arrayConsideration\n
+ @ref _indexes\n
+ @ref _enumBase\n
+ @ref _specialOffsets\n
+ @ref _dicoveringInterfaces\n
+ @ref _changingInterfaces\n
+ @ref _applicationInfo\n
+ @ref _childIDs\n
+ @ref _variants\n
+ @ref _iaaction-iahyperlink\n
+ @ref _trademark
+
+ @section _errors Error Handling
+  HRESULT values are defined by the Microsoft&reg; Win32&reg; API.  For more information, refer to
+  <a href="http://msdn.microsoft.com/en-us/library/windows/desktop/aa378137%28v=vs.85%29.aspx">
+  Interpreting HRESULT Values</a> in MSDN&reg;.
+
+  Note that the S_FALSE return value is considered a non-error value and the 
+  SUCCEEDED macro will return TRUE.  S_FALSE is used when there is no failure
+  but there was nothing valid to return, e.g. in IAccessible2::attributes when
+  there are no attributes.  When S_FALSE is returned [out] pointer types should 
+  be NULL and [out] longs should generally be 0, but sometimes -1 is used such
+  as IAccessible2::indexInParent, IAccessibleText::caretOffset, and
+  IAccessibleHypertext::hyperlinkIndex.
+
+  Note that for BSTR [out] variables common COM practice is that the server does 
+  the SysAllocString and the client does the SysFreeString.  Also note that when
+  NULL is returned there is no need for the client to call SysFreeString.  Please
+  refer to the documentation for each method for more details regarding error handling.
+
+ @section _memory Memory Management
+  The following memory management issues should be considered:
+  @li Although [out] BSTR variables are declared by the client, their space is 
+   allocated by the server.  They need to be freed with SysFreeString by the 
+   client at end of life; the same is true when BSTRs are used in structs or 
+   arrays which are passed to the server.
+  @li If there is no valid [out] BSTR to return, the server should return S_FALSE and 
+   assign NULL to the output, e.g. *theOutBSTR = NULL;. 
+  @li COM interfaces need to be referenced with AddRef when used and dereferenced
+   with Release at end of life.
+  @li Single [out] longs, HWNDs, booleans, and structs are declared by the caller
+   and passed by reference. The marshaller does all the memory management.
+  
+  The following articles may be helpful for understanding memory management issues:
+  @li An article by Don Box in a
+   <a href="http://www.microsoft.com/msj/1196/activex1196.aspx">Q & A section</a>
+   of the November 1996 edition of the Microsoft Systems Journal.
+  @li A posting to a CodeGuru forum, 
+   <a href="http://www.codeguru.com/forum/showthread.php?t=364511">Windows SDK 
+   String: What are the rules for BSTR allocation and deallocation?</a>
+
+ @subsection _arrayConsideration Special Consideration when using Arrays
+  There are several methods which return arrays.  In the case of IAccessible2::relations
+  and IAccessibleRelation::targets the client must allocate and free the arrays.
+
+  For the remaining methods which return arrays, the server must allocate the array
+  and the client must free the array when no longer needed.  These methods are
+  IAccessible2::extendedStates, IAccessible2::localizedExtendedStates,
+  IAccessible2_2::relationTargetsOfType, IAccessibleAction::keyBinding, 
+  IAccessibleHypertext2::hyperlinks, IAccessibleTable::selectedChildren, 
+  IAccessibleTable::selectedColumns, IAccessibleTable::selectedRows,
+  IAccessibleTable2::selectedCells, IAccessibleTable2::selectedColumns,
+  IAccessibleTable2::selectedRows, IAccessibleTableCell::columnHeaderCells,
+  and IAccessibleTableCell::rowHeaderCells.
+  For those methods, the server must allocate both the top level array and any storage 
+  associated with it, e.g. for BSTRs.  The server must allocate the arrays with 
+  CoTaskMemAlloc and any BSTRs with SysAllocString.  The client must use CoTaskMemFree
+  to free the array and any BSTRs must be freed with SysFreeString.  
+  
+  Also, the IDL for IAccessible2::extendedStates, IAccessible2::localizedExtendedStates, 
+  IAccessibleAction::keyBinding, IAccessibleTable::selectedChildren, 
+  IAccessibleTable::selectedColumns, and IAccessibleTable::selectedRows includes an
+  extraneous [in] parameter for the caller to specify the max size of the array.
+  This parameter will be ignored by the COM server.
+
+ @section _indexes Zero and One Based Indexes
+  Unless otherwise specified all offsets and indexes are 0 based. 
+
+ @section _enumBase Enum Base
+  Note that enums start at 0.
+
+ @section _specialOffsets Special Offsets for use in the IAccessibleText and IAccessibleEditableText Methods
+  IAccessibleText and IAccessibleEditableText can use one or more of the following
+  special offset values.  They are defined in the ::IA2TextSpecialOffsets enum.
+  @li Using ::IA2_TEXT_OFFSET_LENGTH (-1) as an offset in any of the IAccessibleText or
+   IAccessibleEditableText methods is the same as specifying the length of the string.
+  @li Using ::IA2_TEXT_OFFSET_CARET (-2) as an offset for IAccessibleText::textBeforeOffset, 
+   IAccessibleText::textAtOffset, and IAccessibleText::textAfterOffset indicates that the 
+   text related to the physical location of the caret should be used.  This is needed for 
+   applications that consider the character offset of the end of one line (as reached by 
+   pressing the End key) the same as the offset of the first character on the next line.
+   Since the same offset is associated with two different lines a special means is needed 
+   to fetch text from the line where the caret is physically located.
+
+ @section _dicoveringInterfaces Discovery of Interfaces
+  In general AT (Assistive Technology) should try IAccessible2 interfaces, followed by using 
+  the MSAA (Microsoft&reg; Active Accessibility&reg;) interfaces.  (In cases where the an application
+  is known to have custom interfaces which provide information not supplied by IAccessible2
+  or MSAA, then those custom interfaces can be used.)  The AT can then, by default, support
+  unknown IAccessible2/MSAA applications, without the application developers having to request
+  AT vendors for support on an individual application by application basis.
+
+  When you have a reference to an IAccessible and require a reference to an IAccessible2 use 
+  QueryService as follows:
+  @code
+  // pAcc is a reference to the accessible object's IAccessible interface. 
+  IServiceProvider *pService = NULL; 
+  hr = pAcc->QueryInterface(IID_IServiceProvider, (void **)&pService); 
+  if(SUCCEEDED(hr)) { 
+    IAccessible2 *pIA2 = NULL; 
+    hr = pService->QueryService(IID_IAccessible, IID_IAccessible2, (void**)&pIA2); 
+    if (SUCCEEDED(hr) && pIA2) { 
+      // The control supports IAccessible2. 
+      // pIA2 is the reference to the accessible object's IAccessible2 interface.
+    } 
+  } 
+  @endcode
+
+  @section _changingInterfaces Changing between Accessible Interfaces
+  Note that developers must always implement MSAA's IAccessible and, if needed, some
+  of the interfaces in the set of IAccessible2 interfaces.  Although the IAccessible2
+  IDL is coded such that IAccessible2 is a subclass of MSAA's IAccessible, none of
+  MSAA's IAccessible methods are redefined by IAccessible2.
+
+  QueryService must be used to switch from a reference to an MSAA IAccessible interface 
+  to another interface.  This has been 
+  <a href="http://www.atia.org/files/public/Introducing_IAccessibleEx.doc">
+  documented</a> and the pertinent facts have been extracted below: 
+
+  @par 
+   Why use QueryService instead of just using QueryInterface to get IAccessibleEx 
+   directly? The reason is that since MSAA 2.0, clients don't talk to a server's 
+   IAccessible interface directly; instead they talk to an intermediate MSAA-provided 
+   wrapper that calls through to the original IAccessible. This wrapper provides services 
+   such as implementing IDispatch, supplying information from MSAA 2.0's Dynamic Annotation 
+   service, and scaling locations when running on Windows Vista with DPI scaling enabled. 
+   QueryService is the supported way to expose additional interfaces from an existing 
+   IAccessible and was originally used by MSHTML to expose IHTMLElement objects corresponding 
+   to IAccessibles. QueryService is often more convenient for servers to implement than 
+   QueryInterface because it does not have the same requirements for preserving object 
+   identity or symmetry/transitivity as QueryInterface, so QueryService allows servers to 
+   easily implement the interface on the same object or a separate object. The latter is 
+   often hard to do with QueryInterface unless the original object supports aggregation. 
+
+  Two related references in MSDN&reg; are: 
+  @li <a href="http://msdn.microsoft.com/en-us/library/ms696078(VS.85).aspx">
+  "Using QueryService to expose a native object model interface for an IAccessible object"</a>
+  @li <a href="http://msdn.microsoft.com/en-us/library/ms528415.aspx#acc_obj"> 
+  "Accessing the Internet Explorer Object Associated with an Accessible Object"</a>
+
+  Based on this information from Microsoft, QueryService must be used to switch back and forth 
+  between a reference to an MSAA IAccessible interface and any of the IAccessible2 interfaces. 
+
+  Regarding switching between any of the IAccessible2 interfaces, applications implementing
+  IAccessible2 should implement the IAccessible2 interfaces on a single object since ATs
+  will be using QueryInterface to switch between the IAccessilbe2 interfaces.  Implementing
+  the IAccessible2 interfaces on separate objects would require the use of QueryService.
+  There is one exception, IAccessibleApplication can be implemented on a separate object so
+  its common code doesn't have to be included in each accessible object.  ATs should use
+  QueryService to access IAccessibleApplication.
+
+ @section _applicationInfo Access to Information about the Application
+  Servers implementing IAccessible2 should provide access to the IAccessibleApplication 
+  interface via QueryService from any object so that ATs can easily determine specific 
+  information about the application such as its name or version.
+
+ @section _childIDs Child IDs
+  The IAccessible2 interfaces do not support child IDs, i.e. simple child elements.
+  Full accessible objects must be created for each object that supports IAccessible2.
+  Therefore MSAA's get_accChild should never return a child ID (other than CHILDID_SELF)
+  for an object that implements any of the IAccessible2 interfaces.
+
+  Microsoft's UI Automation specification has the same limitation and this was resolved
+  in the UI Automation Express specification by adding IAccessibleEx::GetObjectForChild
+  and IAccessibleEx::GetIAccessiblePair.  These methods allow mapping back and forth 
+  between an IAccessibleEx and an {IAccessible, Child ID} pair.  A future version of 
+  IAccessible2 may include similar methods to map back and forth between an IAccessible2
+  and an {IAccessible, Child ID} pair.
+
+ @section _variants VARIANTs
+  Some methods return a VARIANT.  Implementers need to make sure that the return type is 
+  specified, i.e. VT_I4, VT_IDISPATCH, etc.  The methods that return VARIANTs are 
+  IAccessibleHyperlink::anchor, IAccessibleHyperlink::anchorTarget, IAccessibleValue::currentValue,
+  IAccessibleValue::maximumValue, IAccessibleValue::minimumValue.
+
+ @section _iaaction-iahyperlink IAccessibleHyperlink as subclass of IAccessibleAction
+  In this version of the IDL, IAccessibleHyperlink is a subclass of IAccessibleAction.  
+  However, there is no practical need for that inheritance and in some cases, such as
+  an image map of smart tags, it doesn't make sense because such an image map doesn't 
+  have actionable objects; it's the secondary smart tags that are actionable.  As a 
+  result, implementations should not rely on the inheritance as it may be removed in 
+  a later version of the IDL.
+
+ @section _trademark Trademark Attribution
+  The names of actual companies and products mentioned herein may be the trademarks of
+  their respective owners.  In particular, Active Accessibility, Microsoft, MSDN, and Win32
+  are trademarks of the Microsoft group of companies in the U.S.A. and/or other countries.
+
+**/
+
+
+
+
+
+
+
+
+/** A structure defining the locale of an accessible object.
+ 
+IAccessible2::locale returns this struct.
+*/
+typedef struct IA2Locale {
+  BSTR language; ///< ISO 639-1 Alpha-2 two character language code
+  BSTR country;  ///< ISO 3166-1 Alpha-2 two character country code
+  BSTR variant;  ///< Application specific variant of the locale
+} IA2Locale;
+
+/** @brief This interface exposes the primary set of information about an
+ IAccessible2 enabled accessible object.
+
+ This interface must always be provided for objects that support some
+ portion of the collection of the %IAccessible2 interfaces.
+
+ Please refer to @ref _changingInterfaces "Changing between Accessible Interfaces"
+ for special considerations related to use of the MSAA IAccessible interface and 
+ the set of %IAccessible2 interfaces.
+ */
+[object, uuid(E89F726E-C4F4-4c19-BB19-B647D7FA8478)]
+interface IAccessible2 : IAccessible
+{
+
+  /** @brief Returns the number of accessible relations for this object.
+   @param [out] nRelations
+   @retval S_OK
+  */
+  [propget] HRESULT nRelations
+    (
+     [out, retval] long *nRelations
+    );
+
+  /** @brief Returns one accessible relation for this object.
+   @param [in] relationIndex
+     0 based
+   @param [out] relation
+   @retval S_OK
+   @retval E_INVALIDARG if bad [in] passed
+  */
+  [propget] HRESULT relation
+    (
+     [in] long relationIndex,
+     [out, retval] IAccessibleRelation **relation
+    );
+
+  /** @brief Returns multiple accessible relations for this object.
+   @param [in] maxRelations
+     maximum size of the array allocated by the client
+   @param [out] relations
+    The array of accessible relation objects.  Note that this array is to be
+	allocated by the client and freed when no longer needed.  Refer to @ref 
+	_arrayConsideration "Special Consideration when using Arrays" for more details.
+   @param [out] nRelations 
+    actual number of relations in the returned array (not more than maxRelations)
+   @retval S_OK
+   @retval S_FALSE if there are no relations, nRelations is set to 0
+   @note As a performant alternative, client code should consider using IAccessible2_2::relationTargetsOfType.
+  */
+  [propget] HRESULT relations
+    (
+     [in] long maxRelations, 
+     [out, size_is(maxRelations), length_is(*nRelations)]
+       IAccessibleRelation **relations, 
+     [out, retval] long *nRelations 
+    );
+
+  /** @brief Returns the role of an %IAccessible2 object.
+   @param [out] role
+    The role of an %IAccessible2 object.
+   @retval S_OK
+   @note 
+   @li For convenience MSAA roles are also passed through this method so the
+    AT doesn't have to also fetch roles through MSAA's get_accRole.
+   @li %IAccessible2 roles should not be passed through MSAA's get_accRole.
+   @li For compatibility with non IAccessible2 enabled ATs, IAccessible2 
+    applications should also add support to get_accRole to return the closest 
+	MSAA role or ROLE_SYSTEM_CLIENT (the MSAA defined default role) if there 
+	is not a good match.  
+   @li This method is missing a [propget] prefix in the IDL.  The result is the
+    method is named role in generated C++ code instead of get_role.
+  */
+  HRESULT role
+    (
+     [out, retval] long *role
+    );
+
+  /** @brief Makes an object visible on the screen.
+   @param [in] scrollType
+    Defines where the object should be placed on the screen.
+   @retval S_OK
+   @retval E_INVALIDARG if bad [in] passed
+  */
+  HRESULT scrollTo
+    (
+     [in] enum IA2ScrollType scrollType 
+    );
+
+  /** @brief Moves the top left of an object to a specified location.
+
+   @param [in] coordinateType
+    Specifies whether the coordinates are relative to the screen or the parent object.
+   @param [in] x
+    Defines the x coordinate.
+   @param [in] y
+    Defines the y coordinate.
+   @retval S_OK
+   @retval E_INVALIDARG if bad [in] passed
+  */
+  HRESULT scrollToPoint
+    (
+     [in] enum IA2CoordinateType coordinateType,
+	 [in] long x,
+	 [in] long y 
+    );
+
+  /** @brief Returns grouping information.
+   
+   Used for tree items, list items, tab panel labels, radio buttons, etc.
+   Also used for collections of non-text objects.
+
+   @param [out] groupLevel
+    1 based, 0 indicates that this value is not applicable
+   @param [out] similarItemsInGroup
+    1 based, 0 indicates that this value is not applicable
+   @param [out] positionInGroup
+    1 based, 0 indicates that this value is not applicable. This is an index
+    into the objects in the current group, not an index into all the objects
+    at the same group level.
+   @retval S_OK if at least one value is valid
+   @retval S_FALSE if no values are valid, [out] values are 0s
+   @note This method is meant to describe the nature of an object's containment
+    structure.  It's exposed by trees, tree grids, nested lists, nested menus,
+    but not headings, which uses the level object attribute.  It is also exposed
+    by radio buttons (with groupLevel == 0).
+   @note This is normally not implemented on a combo box to describe the nature
+    of its contents.  Normally an AT will get that information from its child list 
+    object.  However, in some cases when non-edit combo boxes are not able to be structured
+    such that the list is a child of the combo box, this method is implemented on
+    the combo box itself. ATs can use this interface if a child list is not found.
+	*/
+  [propget] HRESULT groupPosition
+    (
+     [out] long *groupLevel,
+     [out] long *similarItemsInGroup,
+     [out, retval] long *positionInGroup 
+    );
+
+  /** @brief Returns the bit strip containing any IAccessible2 states.
+  
+   The IAccessible2 states are in addition to the MSAA states and are defined in
+   the IA2States enum.
+
+   @param [out] states
+   @retval S_OK
+  */
+  [propget] HRESULT states
+    (
+	 [out, retval] AccessibleStates *states
+    );
+
+  /** @brief Returns the extended role.
+   
+   An extended role is a role which is dynamically generated by the application.
+   It is not predefined by the %IAccessible2 specification.
+   
+   @param [out] extendedRole
+   @retval S_OK
+   @retval S_FALSE if there is nothing to return, [out] value is NULL
+  */
+  [propget] HRESULT extendedRole
+    (
+	 [out, retval] BSTR *extendedRole
+    );
+
+  /** @brief Returns the localized extended role.
+   @param [out] localizedExtendedRole
+   @retval S_OK
+   @retval S_FALSE if there is nothing to return, [out] value is NULL
+  */
+  [propget] HRESULT localizedExtendedRole
+    (
+	 [out, retval] BSTR *localizedExtendedRole
+    );
+
+  /** @brief Returns the number of extended states.
+   @param [out] nExtendedStates
+   @retval S_OK
+  */
+  [propget] HRESULT nExtendedStates
+    (
+     [out, retval] long *nExtendedStates
+    );
+
+  /** @brief Returns the extended states (array of strings).
+
+   An extended state is a state which is dynamically generated by the application.
+   It is not predefined by the %IAccessible2 specification.
+
+   @param [in] maxExtendedStates
+    This parameter is ignored. Refer to @ref _arrayConsideration 
+	"Special Consideration when using Arrays" for more details.
+   @param [out] extendedStates
+    This array is allocated by the server.  The client must free it with CoTaskMemFree.
+   @param [out] nExtendedStates
+    The number of extended states returned; the size of the returned array.
+   @retval S_OK
+   @retval S_FALSE if there are no states, [out] values are NULL and 0 respectively
+  */
+  [propget] HRESULT extendedStates
+    (
+     [in] long maxExtendedStates,
+     [out, size_is(,maxExtendedStates), length_is(,*nExtendedStates)] BSTR **extendedStates,
+     [out, retval] long *nExtendedStates
+    );
+
+  /** @brief Returns the localized extended states (array of strings).
+
+   @param [in] maxLocalizedExtendedStates
+    This parameter is ignored. Refer to @ref _arrayConsideration 
+	"Special Consideration when using Arrays" for more details.
+   @param [out] localizedExtendedStates
+    This array is allocated by the server.  The client must free it with CoTaskMemFree. 
+   @param [out] nLocalizedExtendedStates
+    The number of localized extended states returned; the size of the returned array.
+   @retval S_OK
+   @retval S_FALSE if there are no states, [out] values are NULL and 0 respectively
+  */
+  [propget] HRESULT localizedExtendedStates
+    (
+     [in] long maxLocalizedExtendedStates,
+     [out, size_is(,maxLocalizedExtendedStates), length_is(,*nLocalizedExtendedStates)] BSTR **localizedExtendedStates,
+     [out, retval] long *nLocalizedExtendedStates
+    );
+
+  /** @brief Returns the unique ID.
+   
+   The uniqueID is an identifier for this object, is unique within the
+   current window, and remains the same for the lifetime of the accessible
+   object. 
+   
+   The uniqueID is not related to:
+   - the MSAA objectID which is used by the server to disambiguate between
+   IAccessibles per HWND or
+   - the MSAA childID which is used to disambiguate between children being
+   managed by an IAccessible.
+
+   This value is provided so the AT can have access to a unique runtime persistent 
+   identifier even when not handling an event for the object.
+   
+   An example of when this value is useful is if the AT wants to build a cache. 
+   The AT could cache the uniqueIDs in addition to other data being cached. 
+   When an event is fired the AT could map the uniqueID to its internal model.
+   Thus, if there's a REORDER/SHOW/HIDE event the AT knows which part of the 
+   internal structure has been invalidated and can refetch just that part.
+
+   This value can also be used by an AT to determine when the current control
+   has changed. If the role is the same for two controls that are adjacent in 
+   the tab order, this can be used to detect the new control.
+
+   Another use of this value by an AT is to identify when a grouping object has 
+   changed, e.g. when moving from a radio button in one group to a radio button in a 
+   different group.
+
+   One means of implementing this would be to create a factory with a 32 bit number 
+   generator and a reuse pool.  The number generator would emit numbers starting 
+   at 1.  Each time an object's life cycle ended, its number would be saved into a 
+   reuse pool.  The number generator would be used whenever the reuse pool was empty.
+
+   Another way to create a unique ID is to generate it from a pointer value, e.g. an
+   object's address. That would be unique because no two active objects can use the
+   same allocated memory space.
+
+   @param [out] uniqueID
+   @retval S_OK
+  */
+  [propget] HRESULT uniqueID
+    (
+     [out, retval] long *uniqueID
+    );
+
+  /** @brief Returns the window handle for the parent window which contains this object.
+
+   This is the same window handle which will be passed for any events that occur on the 
+   object, but is cached in the accessible object for use when it would be helpful to 
+   access the window handle in cases where an event isn't fired on this object.
+
+   A use case is when a screen reader is grabbing an entire web page on a page load. 
+   Without the availability of windowHandle, the AT would have to get the window handle
+   by using WindowFromAccessibleObject on each IAccessible, which is slow because it's 
+   implemented by oleacc.dll as a loop which crawls up the ancestor chain and looks for 
+   a ROLE_WINDOW object, mapping that back to a window handle.
+   
+   @param [out] windowHandle
+   @retval S_OK
+  */
+  [propget] HRESULT windowHandle
+    (
+     [out, retval] HWND *windowHandle
+    );
+ 
+  /** @brief Returns the index of this object in its parent object.
+   @param [out] indexInParent
+     0 based; -1 indicates there is no parent; the upper bound is the value 
+	 returned by the parent's IAccessible::get_accChildCount.
+   @retval S_OK
+   @retval S_FALSE if no parent, [out] value is -1
+  */
+  [propget] HRESULT indexInParent
+    (
+     [out, retval] long *indexInParent
+    );
+
+  /** @brief Returns the IA2Locale of the accessible object. 
+   @param [out] locale
+   @retval S_OK
+  */
+  [propget] HRESULT locale
+    (
+     [out, retval] IA2Locale *locale
+    );
+
+  /** @brief Returns the attributes specific to this object, such as a cell's formula.
+   @param [out] attributes
+   @retval S_OK
+   @retval S_FALSE returned if there is nothing to return, [out] value is NULL
+  */
+  [propget] HRESULT attributes
+    (
+     [out, retval] BSTR *attributes
+    );
+
+}
+
+/*************************************************************************
+ *
+ *  File Name (Accessible2_2.idl)
+ * 
+ *  IAccessible2 IDL Specification 
+ * 
+ *  Copyright (c) 2007, 2013 Linux Foundation 
+ *  Copyright (c) 2006 IBM Corporation 
+ *  Copyright (c) 2000, 2006 Sun Microsystems, Inc. 
+ *  All rights reserved. 
+ *   
+ *   
+ *  Redistribution and use in source and binary forms, with or without 
+ *  modification, are permitted provided that the following conditions 
+ *  are met: 
+ *   
+ *   1. Redistributions of source code must retain the above copyright 
+ *      notice, this list of conditions and the following disclaimer. 
+ *   
+ *   2. Redistributions in binary form must reproduce the above 
+ *      copyright notice, this list of conditions and the following 
+ *      disclaimer in the documentation and/or other materials 
+ *      provided with the distribution. 
+ *
+ *   3. Neither the name of the Linux Foundation nor the names of its 
+ *      contributors may be used to endorse or promote products 
+ *      derived from this software without specific prior written 
+ *      permission. 
+ *   
+ *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
+ *  CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, 
+ *  INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 
+ *  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 
+ *  DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR 
+ *  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 
+ *  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 
+ *  NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 
+ *  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 
+ *  HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 
+ *  CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 
+ *  OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, 
+ *  EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
+ *   
+ *  This BSD License conforms to the Open Source Initiative "Simplified 
+ *  BSD License" as published at: 
+ *  http://www.opensource.org/licenses/bsd-license.php 
+ *   
+ *  IAccessible2 is a trademark of the Linux Foundation. The IAccessible2 
+ *  mark may be used in accordance with the Linux Foundation Trademark 
+ *  Policy to indicate compliance with the IAccessible2 specification. 
+ * 
+ ************************************************************************/ 
+
+
+
+
+
+
+/** @brief This interface exposes the primary set of information about an
+ IAccessible2 enabled accessible object.
+
+ This interface must always be provided for objects that support some
+ portion of the collection of the %IAccessible2 interfaces.
+
+ Please refer to @ref _changingInterfaces "Changing between Accessible Interfaces"
+ for special considerations related to use of the MSAA IAccessible interface and 
+ the set of %IAccessible2 interfaces.
+ */
+[object, uuid(6C9430E9-299D-4E6F-BD01-A82A1E88D3FF)]
+interface IAccessible2_2 : IAccessible2
+{
+  /** @brief Returns the attribute value of a specified attribute specific to this object.
+   @param [in] name
+   @param [out] attribute
+   @retval S_OK
+   @retval S_FALSE returned if there is nothing to return, [out] value is NULL.
+   @retval E_INVALIDARG if bad [in] passed.
+   @note The output value is a VARIANT.  Typically it will be a VT_BSTR, but there
+     are some cases where it will be a VT_I4 or VT_BOOL.  Refer to the <a href=
+     "http://www.linuxfoundation.org/collaborate/workgroups/accessibility/iaccessible2/objectattributesIAccessible2">
+     Object Attributes specification</a> for more information.
+  */
+  [propget] HRESULT attribute
+    (
+     [in] BSTR name,
+     [out, retval] VARIANT *attribute
+    );
+
+  /** @brief Returns the deepest hypertext accessible in the subtree of this object, and the caret offset within it.
+   @param [out] accessible
+   @param [out] caretOffset
+   @retval S_OK
+   @retval S_FALSE returned if there is no caret in any of the objects in the subtree, [out] accessible is NULL and [out] caretOffset is -1.
+  */
+  [propget] HRESULT accessibleWithCaret
+    (
+     [out] IUnknown **accessible,
+     [out, retval] long *caretOffset
+    );
+
+  /** @brief Returns relation targets for a specified target type.
+   @param [in] type
+    The requested @ref grpRelations "relation type".
+   @param [in] maxTargets
+    The number of targets requested.  0 indicates that all targets should be returned.
+   @param [out] targets
+    This array is allocated by the server.  The client must free it with CoTaskMemFree.
+   @param [out] nTargets
+    The number of targets returned; the size of the returned array.
+   @retval S_OK
+   @retval S_FALSE if there are no targets, [out] values are NULL and 0 respectively.
+   @retval E_INVALIDARG if bad [in] passed.
+  */
+  [propget] HRESULT relationTargetsOfType
+    (
+     [in] BSTR type,
+     [in] long maxTargets,
+     [out, size_is(,*nTargets)] IUnknown ***targets,
+     [out, retval] long *nTargets
+    );
+
+}
+
+/*************************************************************************
+ *
+ *  File Name (AccessibleComponent.idl)
+ * 
+ *  IAccessible2 IDL Specification 
+ * 
+ *  Copyright (c) 2007, 2010 Linux Foundation 
+ *  Copyright (c) 2006 IBM Corporation 
+ *  Copyright (c) 2000, 2006 Sun Microsystems, Inc. 

[... 3453 lines stripped ...]