xref: /AOO41X/main/winaccessibility/source/UAccCOMIDL/ia2_api_all.idl (revision ffad8df045fe8db79e3e50f731c1fa6ab6501c83)
1*bcb85aadSSteve Yin/*************************************************************************
2*bcb85aadSSteve Yin *
3*bcb85aadSSteve Yin *  File Name (api_all_headers.idl)
4*bcb85aadSSteve Yin *
5*bcb85aadSSteve Yin *  IAccessible2 IDL Specification
6*bcb85aadSSteve Yin *
7*bcb85aadSSteve Yin *  Copyright (c) 2013 Linux Foundation
8*bcb85aadSSteve Yin *  All rights reserved.
9*bcb85aadSSteve Yin *
10*bcb85aadSSteve Yin *
11*bcb85aadSSteve Yin *  Redistribution and use in source and binary forms, with or without
12*bcb85aadSSteve Yin *  modification, are permitted provided that the following conditions
13*bcb85aadSSteve Yin *  are met:
14*bcb85aadSSteve Yin *
15*bcb85aadSSteve Yin *   1. Redistributions of source code must retain the above copyright
16*bcb85aadSSteve Yin *      notice, this list of conditions and the following disclaimer.
17*bcb85aadSSteve Yin *
18*bcb85aadSSteve Yin *   2. Redistributions in binary form must reproduce the above
19*bcb85aadSSteve Yin *      copyright notice, this list of conditions and the following
20*bcb85aadSSteve Yin *      disclaimer in the documentation and/or other materials
21*bcb85aadSSteve Yin *      provided with the distribution.
22*bcb85aadSSteve Yin *
23*bcb85aadSSteve Yin *   3. Neither the name of the Linux Foundation nor the names of its
24*bcb85aadSSteve Yin *      contributors may be used to endorse or promote products
25*bcb85aadSSteve Yin *      derived from this software without specific prior written
26*bcb85aadSSteve Yin *      permission.
27*bcb85aadSSteve Yin *
28*bcb85aadSSteve Yin *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
29*bcb85aadSSteve Yin *  CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
30*bcb85aadSSteve Yin *  INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
31*bcb85aadSSteve Yin *  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
32*bcb85aadSSteve Yin *  DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
33*bcb85aadSSteve Yin *  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
34*bcb85aadSSteve Yin *  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
35*bcb85aadSSteve Yin *  NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
36*bcb85aadSSteve Yin *  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
37*bcb85aadSSteve Yin *  HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
38*bcb85aadSSteve Yin *  CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
39*bcb85aadSSteve Yin *  OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
40*bcb85aadSSteve Yin *  EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
41*bcb85aadSSteve Yin *
42*bcb85aadSSteve Yin *  This BSD License conforms to the Open Source Initiative "Simplified
43*bcb85aadSSteve Yin *  BSD License" as published at:
44*bcb85aadSSteve Yin *  http://www.opensource.org/licenses/bsd-license.php
45*bcb85aadSSteve Yin *
46*bcb85aadSSteve Yin *  IAccessible2 is a trademark of the Linux Foundation. The IAccessible2
47*bcb85aadSSteve Yin *  mark may be used in accordance with the Linux Foundation Trademark
48*bcb85aadSSteve Yin *  Policy to indicate compliance with the IAccessible2 specification.
49*bcb85aadSSteve Yin *
50*bcb85aadSSteve Yin ************************************************************************/
51*bcb85aadSSteve Yin
52*bcb85aadSSteve Yinimport "objidl.idl";
53*bcb85aadSSteve Yinimport "oaidl.idl";
54*bcb85aadSSteve Yinimport "oleacc.idl";
55*bcb85aadSSteve Yin
56*bcb85aadSSteve Yin/*************************************************************************
57*bcb85aadSSteve Yin *
58*bcb85aadSSteve Yin *  File Name (IA2CommonTypes.idl)
59*bcb85aadSSteve Yin *
60*bcb85aadSSteve Yin *  IAccessible2 IDL Specification
61*bcb85aadSSteve Yin *
62*bcb85aadSSteve Yin *  Copyright (c) 2007, 2013 Linux Foundation
63*bcb85aadSSteve Yin *  Copyright (c) 2006 IBM Corporation
64*bcb85aadSSteve Yin *  Copyright (c) 2000, 2006 Sun Microsystems, Inc.
65*bcb85aadSSteve Yin *  All rights reserved.
66*bcb85aadSSteve Yin *
67*bcb85aadSSteve Yin *
68*bcb85aadSSteve Yin *  Redistribution and use in source and binary forms, with or without
69*bcb85aadSSteve Yin *  modification, are permitted provided that the following conditions
70*bcb85aadSSteve Yin *  are met:
71*bcb85aadSSteve Yin *
72*bcb85aadSSteve Yin *   1. Redistributions of source code must retain the above copyright
73*bcb85aadSSteve Yin *      notice, this list of conditions and the following disclaimer.
74*bcb85aadSSteve Yin *
75*bcb85aadSSteve Yin *   2. Redistributions in binary form must reproduce the above
76*bcb85aadSSteve Yin *      copyright notice, this list of conditions and the following
77*bcb85aadSSteve Yin *      disclaimer in the documentation and/or other materials
78*bcb85aadSSteve Yin *      provided with the distribution.
79*bcb85aadSSteve Yin *
80*bcb85aadSSteve Yin *   3. Neither the name of the Linux Foundation nor the names of its
81*bcb85aadSSteve Yin *      contributors may be used to endorse or promote products
82*bcb85aadSSteve Yin *      derived from this software without specific prior written
83*bcb85aadSSteve Yin *      permission.
84*bcb85aadSSteve Yin *
85*bcb85aadSSteve Yin *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
86*bcb85aadSSteve Yin *  CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
87*bcb85aadSSteve Yin *  INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
88*bcb85aadSSteve Yin *  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
89*bcb85aadSSteve Yin *  DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
90*bcb85aadSSteve Yin *  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
91*bcb85aadSSteve Yin *  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
92*bcb85aadSSteve Yin *  NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
93*bcb85aadSSteve Yin *  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
94*bcb85aadSSteve Yin *  HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
95*bcb85aadSSteve Yin *  CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
96*bcb85aadSSteve Yin *  OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
97*bcb85aadSSteve Yin *  EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
98*bcb85aadSSteve Yin *
99*bcb85aadSSteve Yin *  This BSD License conforms to the Open Source Initiative "Simplified
100*bcb85aadSSteve Yin *  BSD License" as published at:
101*bcb85aadSSteve Yin *  http://www.opensource.org/licenses/bsd-license.php
102*bcb85aadSSteve Yin *
103*bcb85aadSSteve Yin *  IAccessible2 is a trademark of the Linux Foundation. The IAccessible2
104*bcb85aadSSteve Yin *  mark may be used in accordance with the Linux Foundation Trademark
105*bcb85aadSSteve Yin *  Policy to indicate compliance with the IAccessible2 specification.
106*bcb85aadSSteve Yin *
107*bcb85aadSSteve Yin ************************************************************************/
108*bcb85aadSSteve Yin
109*bcb85aadSSteve Yin /** These constants control the scrolling of an object or substring into a window.
110*bcb85aadSSteve Yin
111*bcb85aadSSteve Yin This enum is used in IAccessible2::scrollTo and IAccessibleText::scrollSubstringTo.
112*bcb85aadSSteve Yin*/
113*bcb85aadSSteve Yinenum IA2ScrollType {
114*bcb85aadSSteve Yin
115*bcb85aadSSteve Yin  /** Scroll the top left corner of the object or substring such that the top left
116*bcb85aadSSteve Yin   corner (and as much as possible of the rest of the object or substring) is within
117*bcb85aadSSteve Yin   the top level window.  In cases where the entire object or substring fits within
118*bcb85aadSSteve Yin   the top level window, the placement of the object or substring is dependent on
119*bcb85aadSSteve Yin   the application.  For example, the object or substring may be scrolled to the
120*bcb85aadSSteve Yin   closest edge, the furthest edge, or midway between those two edges.  In cases
121*bcb85aadSSteve Yin   where there is a hierarchy of nested scrollable controls, more than one control
122*bcb85aadSSteve Yin   may have to be scrolled.
123*bcb85aadSSteve Yin  */
124*bcb85aadSSteve Yin  IA2_SCROLL_TYPE_TOP_LEFT,
125*bcb85aadSSteve Yin
126*bcb85aadSSteve Yin  /** Scroll the bottom right corner of the object or substring such that the bottom right
127*bcb85aadSSteve Yin   corner (and as much as possible of the rest of the object or substring) is within
128*bcb85aadSSteve Yin   the top level window.  In cases where the entire object or substring fits within
129*bcb85aadSSteve Yin   the top level window, the placement of the object or substring is dependent on
130*bcb85aadSSteve Yin   the application.  For example, the object or substring may be scrolled to the
131*bcb85aadSSteve Yin   closest edge, the furthest edge, or midway between those two edges.  In cases
132*bcb85aadSSteve Yin   where there is a hierarchy of nested scrollable controls, more than one control
133*bcb85aadSSteve Yin   may have to be scrolled.
134*bcb85aadSSteve Yin  */
135*bcb85aadSSteve Yin  IA2_SCROLL_TYPE_BOTTOM_RIGHT,
136*bcb85aadSSteve Yin
137*bcb85aadSSteve Yin  /** Scroll the top edge of the object or substring such that the top edge
138*bcb85aadSSteve Yin   (and as much as possible of the rest of the object or substring) is within the
139*bcb85aadSSteve Yin   top level window.  In cases where the entire object or substring fits within
140*bcb85aadSSteve Yin   the top level window, the placement of the object or substring is dependent on
141*bcb85aadSSteve Yin   the application.  For example, the object or substring may be scrolled to the
142*bcb85aadSSteve Yin   closest edge, the furthest edge, or midway between those two edges.  In cases
143*bcb85aadSSteve Yin   where there is a hierarchy of nested scrollable controls, more than one control
144*bcb85aadSSteve Yin   may have to be scrolled.
145*bcb85aadSSteve Yin  */
146*bcb85aadSSteve Yin  IA2_SCROLL_TYPE_TOP_EDGE,
147*bcb85aadSSteve Yin
148*bcb85aadSSteve Yin  /** Scroll the bottom edge of the object or substring such that the bottom edge
149*bcb85aadSSteve Yin   (and as much as possible of the rest of the object or substring) is within the
150*bcb85aadSSteve Yin   top level window.  In cases where the entire object or substring fits within
151*bcb85aadSSteve Yin   the top level window, the placement of the object or substring is dependent on
152*bcb85aadSSteve Yin   the application.  For example, the object or substring may be scrolled to the
153*bcb85aadSSteve Yin   closest edge, the furthest edge, or midway between those two edges.  In cases
154*bcb85aadSSteve Yin   where there is a hierarchy of nested scrollable controls, more than one control
155*bcb85aadSSteve Yin   may have to be scrolled.
156*bcb85aadSSteve Yin  */
157*bcb85aadSSteve Yin  IA2_SCROLL_TYPE_BOTTOM_EDGE,
158*bcb85aadSSteve Yin
159*bcb85aadSSteve Yin  /** Scroll the left edge of the object or substring such that the left edge
160*bcb85aadSSteve Yin   (and as much as possible of the rest of the object or substring) is within the
161*bcb85aadSSteve Yin   top level window.  In cases where the entire object or substring fits within
162*bcb85aadSSteve Yin   the top level window, the placement of the object or substring is dependent on
163*bcb85aadSSteve Yin   the application.  For example, the object or substring may be scrolled to the
164*bcb85aadSSteve Yin   closest edge, the furthest edge, or midway between those two edges.  In cases
165*bcb85aadSSteve Yin   where there is a hierarchy of nested scrollable controls, more than one control
166*bcb85aadSSteve Yin   may have to be scrolled.
167*bcb85aadSSteve Yin  */
168*bcb85aadSSteve Yin  IA2_SCROLL_TYPE_LEFT_EDGE,
169*bcb85aadSSteve Yin
170*bcb85aadSSteve Yin  /** Scroll the right edge of the object or substring such that the right edge
171*bcb85aadSSteve Yin   (and as much as possible of the rest of the object or substring) is within the
172*bcb85aadSSteve Yin   top level window.  In cases where the entire object or substring fits within
173*bcb85aadSSteve Yin   the top level window, the placement of the object or substring is dependent on
174*bcb85aadSSteve Yin   the application.  For example, the object or substring may be scrolled to the
175*bcb85aadSSteve Yin   closest edge, the furthest edge, or midway between those two edges.  In cases
176*bcb85aadSSteve Yin   where there is a hierarchy of nested scrollable controls, more than one control
177*bcb85aadSSteve Yin   may have to be scrolled.
178*bcb85aadSSteve Yin  */
179*bcb85aadSSteve Yin  IA2_SCROLL_TYPE_RIGHT_EDGE,
180*bcb85aadSSteve Yin
181*bcb85aadSSteve Yin  /** Scroll the object or substring such that as much as possible of the
182*bcb85aadSSteve Yin   object or substring is within the top level window.  The placement of
183*bcb85aadSSteve Yin   the object is dependent on the application.  For example, the object or
184*bcb85aadSSteve Yin   substring may be scrolled to to closest edge, the furthest edge, or midway
185*bcb85aadSSteve Yin   between those two edges.
186*bcb85aadSSteve Yin  */
187*bcb85aadSSteve Yin  IA2_SCROLL_TYPE_ANYWHERE
188*bcb85aadSSteve Yin};
189*bcb85aadSSteve Yin
190*bcb85aadSSteve Yin/** These constants define which coordinate system a point is located in.
191*bcb85aadSSteve Yin
192*bcb85aadSSteve Yin This enum is used in IAccessible2::scrollToPoint, IAccessibleImage::imagePosition,
193*bcb85aadSSteve Yin IAccessibleText::characterExtents, and IAccessibleText::offsetAtPoint, and
194*bcb85aadSSteve Yin IAccessibleText::scrollSubstringToPoint.
195*bcb85aadSSteve Yin*/
196*bcb85aadSSteve Yinenum IA2CoordinateType {
197*bcb85aadSSteve Yin
198*bcb85aadSSteve Yin  /// The coordinates are relative to the screen.
199*bcb85aadSSteve Yin  IA2_COORDTYPE_SCREEN_RELATIVE,
200*bcb85aadSSteve Yin
201*bcb85aadSSteve Yin  /** The coordinates are relative to the upper left corner of the bounding box
202*bcb85aadSSteve Yin   of the immediate parent.
203*bcb85aadSSteve Yin  */
204*bcb85aadSSteve Yin  IA2_COORDTYPE_PARENT_RELATIVE
205*bcb85aadSSteve Yin
206*bcb85aadSSteve Yin};
207*bcb85aadSSteve Yin
208*bcb85aadSSteve Yin/** Special offsets for use in IAccessibleText and IAccessibleEditableText methods
209*bcb85aadSSteve Yin
210*bcb85aadSSteve Yin  Refer to @ref _specialOffsets
211*bcb85aadSSteve Yin  "Special Offsets for use in the IAccessibleText and IAccessibleEditableText Methods"
212*bcb85aadSSteve Yin  for more information.
213*bcb85aadSSteve Yin*/
214*bcb85aadSSteve Yinenum IA2TextSpecialOffsets {
215*bcb85aadSSteve Yin  IA2_TEXT_OFFSET_LENGTH = -1,	/**< This offset is equivalent to the length of the string.  It eliminates
216*bcb85aadSSteve Yin								 the need to call IAccessibleText::nCharacters. */
217*bcb85aadSSteve Yin  IA2_TEXT_OFFSET_CARET = -2	/**< This offset signifies that the text related to the physical location
218*bcb85aadSSteve Yin								 of the caret should be used. */
219*bcb85aadSSteve Yin};
220*bcb85aadSSteve Yin
221*bcb85aadSSteve Yin/** These constants specify the kind of change made to a table.
222*bcb85aadSSteve Yin
223*bcb85aadSSteve Yin   This enum is used in the IA2TableModelChange struct which in turn is used by
224*bcb85aadSSteve Yin   IAccessibleTable::modelChange and IAccessibleTable2::modelChange.
225*bcb85aadSSteve Yin*/
226*bcb85aadSSteve Yinenum IA2TableModelChangeType {
227*bcb85aadSSteve Yin  IA2_TABLE_MODEL_CHANGE_INSERT,  // = 0;
228*bcb85aadSSteve Yin  IA2_TABLE_MODEL_CHANGE_DELETE,
229*bcb85aadSSteve Yin  IA2_TABLE_MODEL_CHANGE_UPDATE
230*bcb85aadSSteve Yin};
231*bcb85aadSSteve Yin
232*bcb85aadSSteve Yin/** A structure defining the type of and extents of changes made to a table
233*bcb85aadSSteve Yin
234*bcb85aadSSteve Yin IAccessibleTable::modelChange and IAccessibleTable2::modelChange return this struct.
235*bcb85aadSSteve Yin In the case of an insertion or change the row and column offsets define the boundaries
236*bcb85aadSSteve Yin of the inserted or changed subtable after the operation.  In the case of a deletion
237*bcb85aadSSteve Yin the row and column offsets define the boundaries of the subtable being removed before
238*bcb85aadSSteve Yin the removal.
239*bcb85aadSSteve Yin*/
240*bcb85aadSSteve Yintypedef struct IA2TableModelChange {
241*bcb85aadSSteve Yin  enum IA2TableModelChangeType type;	// insert, delete, update
242*bcb85aadSSteve Yin  long firstRow;		///< 0 based, inclusive
243*bcb85aadSSteve Yin  long lastRow;			///< 0 based, inclusive
244*bcb85aadSSteve Yin  long firstColumn;		///< 0 based, inclusive
245*bcb85aadSSteve Yin  long lastColumn;		///< 0 based, inclusive
246*bcb85aadSSteve Yin} IA2TableModelChange;
247*bcb85aadSSteve Yin/*************************************************************************
248*bcb85aadSSteve Yin *
249*bcb85aadSSteve Yin *  File Name (AccessibleRelation.idl)
250*bcb85aadSSteve Yin *
251*bcb85aadSSteve Yin *  IAccessible2 IDL Specification
252*bcb85aadSSteve Yin *
253*bcb85aadSSteve Yin *  Copyright (c) 2007, 2013 Linux Foundation
254*bcb85aadSSteve Yin *  Copyright (c) 2006 IBM Corporation
255*bcb85aadSSteve Yin *  Copyright (c) 2000, 2006 Sun Microsystems, Inc.
256*bcb85aadSSteve Yin *  All rights reserved.
257*bcb85aadSSteve Yin *
258*bcb85aadSSteve Yin *
259*bcb85aadSSteve Yin *  Redistribution and use in source and binary forms, with or without
260*bcb85aadSSteve Yin *  modification, are permitted provided that the following conditions
261*bcb85aadSSteve Yin *  are met:
262*bcb85aadSSteve Yin *
263*bcb85aadSSteve Yin *   1. Redistributions of source code must retain the above copyright
264*bcb85aadSSteve Yin *      notice, this list of conditions and the following disclaimer.
265*bcb85aadSSteve Yin *
266*bcb85aadSSteve Yin *   2. Redistributions in binary form must reproduce the above
267*bcb85aadSSteve Yin *      copyright notice, this list of conditions and the following
268*bcb85aadSSteve Yin *      disclaimer in the documentation and/or other materials
269*bcb85aadSSteve Yin *      provided with the distribution.
270*bcb85aadSSteve Yin *
271*bcb85aadSSteve Yin *   3. Neither the name of the Linux Foundation nor the names of its
272*bcb85aadSSteve Yin *      contributors may be used to endorse or promote products
273*bcb85aadSSteve Yin *      derived from this software without specific prior written
274*bcb85aadSSteve Yin *      permission.
275*bcb85aadSSteve Yin *
276*bcb85aadSSteve Yin *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
277*bcb85aadSSteve Yin *  CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
278*bcb85aadSSteve Yin *  INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
279*bcb85aadSSteve Yin *  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
280*bcb85aadSSteve Yin *  DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
281*bcb85aadSSteve Yin *  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
282*bcb85aadSSteve Yin *  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
283*bcb85aadSSteve Yin *  NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
284*bcb85aadSSteve Yin *  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
285*bcb85aadSSteve Yin *  HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
286*bcb85aadSSteve Yin *  CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
287*bcb85aadSSteve Yin *  OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
288*bcb85aadSSteve Yin *  EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
289*bcb85aadSSteve Yin *
290*bcb85aadSSteve Yin *  This BSD License conforms to the Open Source Initiative "Simplified
291*bcb85aadSSteve Yin *  BSD License" as published at:
292*bcb85aadSSteve Yin *  http://www.opensource.org/licenses/bsd-license.php
293*bcb85aadSSteve Yin *
294*bcb85aadSSteve Yin *  IAccessible2 is a trademark of the Linux Foundation. The IAccessible2
295*bcb85aadSSteve Yin *  mark may be used in accordance with the Linux Foundation Trademark
296*bcb85aadSSteve Yin *  Policy to indicate compliance with the IAccessible2 specification.
297*bcb85aadSSteve Yin *
298*bcb85aadSSteve Yin ************************************************************************/
299*bcb85aadSSteve Yin
300*bcb85aadSSteve Yin
301*bcb85aadSSteve Yin
302*bcb85aadSSteve Yin
303*bcb85aadSSteve Yin
304*bcb85aadSSteve Yin/** @defgroup grpRelations Relations
305*bcb85aadSSteve Yin  Use the following constants to compare against the BSTRs returned by
306*bcb85aadSSteve Yin  IAccessibleRelation::relationType.
307*bcb85aadSSteve Yin*/
308*bcb85aadSSteve Yin///@{
309*bcb85aadSSteve Yin
310*bcb85aadSSteve Yin/** The target object is the containing application object. */
311*bcb85aadSSteve Yinconst WCHAR *const IA2_RELATION_CONTAINING_APPLICATION = L"containingApplication";
312*bcb85aadSSteve Yin
313*bcb85aadSSteve Yin/** The target object is the containing document object. The target object implements
314*bcb85aadSSteve Yin the IAccessibleDocument interface.
315*bcb85aadSSteve Yin*/
316*bcb85aadSSteve Yinconst WCHAR *const IA2_RELATION_CONTAINING_DOCUMENT = L"containingDocument";
317*bcb85aadSSteve Yin
318*bcb85aadSSteve Yin/** The target object is the containing tab pane object. */
319*bcb85aadSSteve Yinconst WCHAR *const IA2_RELATION_CONTAINING_TAB_PANE = L"containingTabPane";
320*bcb85aadSSteve Yin
321*bcb85aadSSteve Yin/** The target object is the containing window object. */
322*bcb85aadSSteve Yinconst WCHAR *const IA2_RELATION_CONTAINING_WINDOW = L"containingWindow";
323*bcb85aadSSteve Yin
324*bcb85aadSSteve Yin/** Some attribute of this object is affected by a target object. */
325*bcb85aadSSteve Yinconst WCHAR *const IA2_RELATION_CONTROLLED_BY = L"controlledBy";
326*bcb85aadSSteve Yin
327*bcb85aadSSteve Yin/** This object is interactive and controls some attribute of a target object. */
328*bcb85aadSSteve Yinconst WCHAR *const IA2_RELATION_CONTROLLER_FOR = L"controllerFor";
329*bcb85aadSSteve Yin
330*bcb85aadSSteve Yin/** This object is described by the target object. */
331*bcb85aadSSteve Yinconst WCHAR *const IA2_RELATION_DESCRIBED_BY = L"describedBy";
332*bcb85aadSSteve Yin
333*bcb85aadSSteve Yin/** This object is describes the target object. */
334*bcb85aadSSteve Yinconst WCHAR *const IA2_RELATION_DESCRIPTION_FOR = L"descriptionFor";
335*bcb85aadSSteve Yin
336*bcb85aadSSteve Yin/** This object is embedded by a target object. */
337*bcb85aadSSteve Yinconst WCHAR *const IA2_RELATION_EMBEDDED_BY = L"embeddedBy";
338*bcb85aadSSteve Yin
339*bcb85aadSSteve Yin/** This object embeds a target object. This relation can be used on the
340*bcb85aadSSteve Yin OBJID_CLIENT accessible for a top level window to show where the content
341*bcb85aadSSteve Yin areas are.
342*bcb85aadSSteve Yin*/
343*bcb85aadSSteve Yinconst WCHAR *const IA2_RELATION_EMBEDS = L"embeds";
344*bcb85aadSSteve Yin
345*bcb85aadSSteve Yin/** Content flows to this object from a target object.
346*bcb85aadSSteve Yin This relation and IA2_RELATION_FLOWS_TO are useful to tie text and non-text
347*bcb85aadSSteve Yin objects together in order to allow assistive technology to follow the
348*bcb85aadSSteve Yin intended reading order.
349*bcb85aadSSteve Yin*/
350*bcb85aadSSteve Yinconst WCHAR *const IA2_RELATION_FLOWS_FROM = L"flowsFrom";
351*bcb85aadSSteve Yin
352*bcb85aadSSteve Yin/** Content flows from this object to a target object. */
353*bcb85aadSSteve Yinconst WCHAR *const IA2_RELATION_FLOWS_TO = L"flowsTo";
354*bcb85aadSSteve Yin
355*bcb85aadSSteve Yin/** This object is label for a target object. */
356*bcb85aadSSteve Yinconst WCHAR *const IA2_RELATION_LABEL_FOR = L"labelFor";
357*bcb85aadSSteve Yin
358*bcb85aadSSteve Yin/** This object is labelled by a target object. Note that the double L spelling
359*bcb85aadSSteve Yin which follows is preferred.  Please use it instead.  This single L version may
360*bcb85aadSSteve Yin be removed in a later version.
361*bcb85aadSSteve Yin*/
362*bcb85aadSSteve Yinconst WCHAR *const IA2_RELATION_LABELED_BY = L"labelledBy";
363*bcb85aadSSteve Yin
364*bcb85aadSSteve Yin/** This object is labelled by a target object. */
365*bcb85aadSSteve Yinconst WCHAR *const IA2_RELATION_LABELLED_BY = L"labelledBy";
366*bcb85aadSSteve Yin
367*bcb85aadSSteve Yin/** This object is a member of a group of one or more objects. When
368*bcb85aadSSteve Yin there is more than one object in the group each member may have one and the
369*bcb85aadSSteve Yin same target, e.g. a grouping object.  It is also possible that each member has
370*bcb85aadSSteve Yin multiple additional targets, e.g. one for every other member in the group.
371*bcb85aadSSteve Yin*/
372*bcb85aadSSteve Yinconst WCHAR *const IA2_RELATION_MEMBER_OF = L"memberOf";
373*bcb85aadSSteve Yin
374*bcb85aadSSteve Yin/** The target object is the next object in the tab order. */
375*bcb85aadSSteve Yinconst WCHAR *const IA2_RELATION_NEXT_TABBABLE = L"nextTabbable";
376*bcb85aadSSteve Yin
377*bcb85aadSSteve Yin/** This object is a logical child of a target object.  This relation is the reciprocal
378*bcb85aadSSteve Yin of the IA2_RELATION_NODE_PARENT_OF relation. In some cases an application's accessible
379*bcb85aadSSteve Yin tree is such that objects can be in a logical parent-child relationship which is
380*bcb85aadSSteve Yin different from the hierarchy of the accessible tree. */
381*bcb85aadSSteve Yinconst WCHAR *const IA2_RELATION_NODE_CHILD_OF = L"nodeChildOf";
382*bcb85aadSSteve Yin
383*bcb85aadSSteve Yin/** This object is a logical parent of a target object. This relation is the reciprocal
384*bcb85aadSSteve Yin of the IA2_RELATION_NODE_CHILD_OF relation. In some cases an application's accessible
385*bcb85aadSSteve Yin tree is such that objects can be in a logical parent-child relationship which is
386*bcb85aadSSteve Yin different from the hierarchy of the accessible tree. */
387*bcb85aadSSteve Yinconst WCHAR *const IA2_RELATION_NODE_PARENT_OF = L"nodeParentOf";
388*bcb85aadSSteve Yin
389*bcb85aadSSteve Yin/** This object is a parent window of the target object. */
390*bcb85aadSSteve Yinconst WCHAR *const IA2_RELATION_PARENT_WINDOW_OF = L"parentWindowOf";
391*bcb85aadSSteve Yin
392*bcb85aadSSteve Yin/** This object is a transient component related to the target object.
393*bcb85aadSSteve Yin When this object is activated the target object doesn't lose focus.
394*bcb85aadSSteve Yin*/
395*bcb85aadSSteve Yinconst WCHAR *const IA2_RELATION_POPUP_FOR = L"popupFor";
396*bcb85aadSSteve Yin
397*bcb85aadSSteve Yin/** The target object is the previous object in the tab order. */
398*bcb85aadSSteve Yinconst WCHAR *const IA2_RELATION_PREVIOUS_TABBABLE = L"previousTabbable";
399*bcb85aadSSteve Yin
400*bcb85aadSSteve Yin/** This object is a sub window of a target object. */
401*bcb85aadSSteve Yinconst WCHAR *const IA2_RELATION_SUBWINDOW_OF = L"subwindowOf";
402*bcb85aadSSteve Yin
403*bcb85aadSSteve Yin///@}
404*bcb85aadSSteve Yin
405*bcb85aadSSteve Yin/** This interface gives access to an object's set of relations.
406*bcb85aadSSteve Yin*/
407*bcb85aadSSteve Yin[object, uuid(7CDF86EE-C3DA-496a-BDA4-281B336E1FDC)]
408*bcb85aadSSteve Yininterface IAccessibleRelation : IUnknown
409*bcb85aadSSteve Yin{
410*bcb85aadSSteve Yin  /** @brief Returns the type of the relation.
411*bcb85aadSSteve Yin   @param [out] relationType
412*bcb85aadSSteve Yin    The strings returned are defined @ref grpRelations "in this section of the documentation".
413*bcb85aadSSteve Yin   @retval S_OK
414*bcb85aadSSteve Yin  */
415*bcb85aadSSteve Yin  [propget] HRESULT relationType
416*bcb85aadSSteve Yin    (
417*bcb85aadSSteve Yin     [out, retval] BSTR *relationType
418*bcb85aadSSteve Yin    );
419*bcb85aadSSteve Yin
420*bcb85aadSSteve Yin  /** @brief Returns a localized version of the relation type.
421*bcb85aadSSteve Yin   @param [out] localizedRelationType
422*bcb85aadSSteve Yin   @retval S_OK
423*bcb85aadSSteve Yin  */
424*bcb85aadSSteve Yin  [propget] HRESULT localizedRelationType
425*bcb85aadSSteve Yin    (
426*bcb85aadSSteve Yin     [out, retval] BSTR *localizedRelationType
427*bcb85aadSSteve Yin    );
428*bcb85aadSSteve Yin
429*bcb85aadSSteve Yin  /** @brief Returns the number of targets for this relation.
430*bcb85aadSSteve Yin   @param [out] nTargets
431*bcb85aadSSteve Yin   @retval S_OK
432*bcb85aadSSteve Yin  */
433*bcb85aadSSteve Yin  [propget] HRESULT nTargets
434*bcb85aadSSteve Yin    (
435*bcb85aadSSteve Yin     [out, retval] long *nTargets
436*bcb85aadSSteve Yin    );
437*bcb85aadSSteve Yin
438*bcb85aadSSteve Yin  /** @brief Returns one accessible relation target.
439*bcb85aadSSteve Yin   @param [in] targetIndex
440*bcb85aadSSteve Yin    0 based index
441*bcb85aadSSteve Yin   @param [out] target
442*bcb85aadSSteve Yin   @retval S_OK
443*bcb85aadSSteve Yin   @retval E_INVALIDARG if bad [in] passed
444*bcb85aadSSteve Yin   @note Use QueryInterface to get IAccessible2.
445*bcb85aadSSteve Yin  */
446*bcb85aadSSteve Yin  [propget] HRESULT target
447*bcb85aadSSteve Yin    (
448*bcb85aadSSteve Yin     [in] long targetIndex,
449*bcb85aadSSteve Yin     [out, retval] IUnknown **target
450*bcb85aadSSteve Yin    );
451*bcb85aadSSteve Yin
452*bcb85aadSSteve Yin  /** @brief Returns multiple accessible relation targets
453*bcb85aadSSteve Yin   @param [in] maxTargets
454*bcb85aadSSteve Yin    maximum size of the array allocated by the client
455*bcb85aadSSteve Yin   @param [out] targets
456*bcb85aadSSteve Yin    The array of target objects.  Note that this array is to be allocated by the
457*bcb85aadSSteve Yin	client and freed when no longer needed.  Refer to @ref _arrayConsideration
458*bcb85aadSSteve Yin	"Special Consideration when using Arrays" for more details.  You will need to use
459*bcb85aadSSteve Yin	QueryInterface on the IUnknown to get the IAccessible2.
460*bcb85aadSSteve Yin   @param [out] nTargets
461*bcb85aadSSteve Yin	actual number of targets in the returned array (not more than maxTargets)
462*bcb85aadSSteve Yin   @retval S_OK
463*bcb85aadSSteve Yin   @retval E_INVALIDARG if bad [in] passed, e.g. a negative value
464*bcb85aadSSteve Yin  */
465*bcb85aadSSteve Yin  [propget] HRESULT targets
466*bcb85aadSSteve Yin    (
467*bcb85aadSSteve Yin     [in] long maxTargets,
468*bcb85aadSSteve Yin     [out, size_is(maxTargets), length_is(*nTargets)]
469*bcb85aadSSteve Yin       IUnknown **targets,
470*bcb85aadSSteve Yin     [out, retval] long *nTargets
471*bcb85aadSSteve Yin    );
472*bcb85aadSSteve Yin
473*bcb85aadSSteve Yin}
474*bcb85aadSSteve Yin/*************************************************************************
475*bcb85aadSSteve Yin *
476*bcb85aadSSteve Yin *  File Name (AccessibleAction.idl)
477*bcb85aadSSteve Yin *
478*bcb85aadSSteve Yin *  IAccessible2 IDL Specification
479*bcb85aadSSteve Yin *
480*bcb85aadSSteve Yin *  Copyright (c) 2007, 2013 Linux Foundation
481*bcb85aadSSteve Yin *  Copyright (c) 2006 IBM Corporation
482*bcb85aadSSteve Yin *  Copyright (c) 2000, 2006 Sun Microsystems, Inc.
483*bcb85aadSSteve Yin *  All rights reserved.
484*bcb85aadSSteve Yin *
485*bcb85aadSSteve Yin *
486*bcb85aadSSteve Yin *  Redistribution and use in source and binary forms, with or without
487*bcb85aadSSteve Yin *  modification, are permitted provided that the following conditions
488*bcb85aadSSteve Yin *  are met:
489*bcb85aadSSteve Yin *
490*bcb85aadSSteve Yin *   1. Redistributions of source code must retain the above copyright
491*bcb85aadSSteve Yin *      notice, this list of conditions and the following disclaimer.
492*bcb85aadSSteve Yin *
493*bcb85aadSSteve Yin *   2. Redistributions in binary form must reproduce the above
494*bcb85aadSSteve Yin *      copyright notice, this list of conditions and the following
495*bcb85aadSSteve Yin *      disclaimer in the documentation and/or other materials
496*bcb85aadSSteve Yin *      provided with the distribution.
497*bcb85aadSSteve Yin *
498*bcb85aadSSteve Yin *   3. Neither the name of the Linux Foundation nor the names of its
499*bcb85aadSSteve Yin *      contributors may be used to endorse or promote products
500*bcb85aadSSteve Yin *      derived from this software without specific prior written
501*bcb85aadSSteve Yin *      permission.
502*bcb85aadSSteve Yin *
503*bcb85aadSSteve Yin *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
504*bcb85aadSSteve Yin *  CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
505*bcb85aadSSteve Yin *  INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
506*bcb85aadSSteve Yin *  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
507*bcb85aadSSteve Yin *  DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
508*bcb85aadSSteve Yin *  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
509*bcb85aadSSteve Yin *  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
510*bcb85aadSSteve Yin *  NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
511*bcb85aadSSteve Yin *  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
512*bcb85aadSSteve Yin *  HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
513*bcb85aadSSteve Yin *  CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
514*bcb85aadSSteve Yin *  OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
515*bcb85aadSSteve Yin *  EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
516*bcb85aadSSteve Yin *
517*bcb85aadSSteve Yin *  This BSD License conforms to the Open Source Initiative "Simplified
518*bcb85aadSSteve Yin *  BSD License" as published at:
519*bcb85aadSSteve Yin *  http://www.opensource.org/licenses/bsd-license.php
520*bcb85aadSSteve Yin *
521*bcb85aadSSteve Yin *  IAccessible2 is a trademark of the Linux Foundation. The IAccessible2
522*bcb85aadSSteve Yin *  mark may be used in accordance with the Linux Foundation Trademark
523*bcb85aadSSteve Yin *  Policy to indicate compliance with the IAccessible2 specification.
524*bcb85aadSSteve Yin *
525*bcb85aadSSteve Yin ************************************************************************/
526*bcb85aadSSteve Yin
527*bcb85aadSSteve Yin
528*bcb85aadSSteve Yin
529*bcb85aadSSteve Yin
530*bcb85aadSSteve Yin
531*bcb85aadSSteve Yin/** This enum defines values which are predefined actions for use when implementing
532*bcb85aadSSteve Yin support for media.
533*bcb85aadSSteve Yin
534*bcb85aadSSteve Yin This enum is used when specifying an action for IAccessibleAction::doAction.
535*bcb85aadSSteve Yin*/
536*bcb85aadSSteve Yin
537*bcb85aadSSteve Yinenum IA2Actions {
538*bcb85aadSSteve Yin  IA2_ACTION_OPEN = -1,         /**< Used to inform the server that the client will
539*bcb85aadSSteve Yin                                signal via IA2_ACTION_COMPLETE when it has consumed
540*bcb85aadSSteve Yin                                the content provided by the object.  This action
541*bcb85aadSSteve Yin                                allows the object's server to wait for all clients
542*bcb85aadSSteve Yin                                to signal their readiness for additional content.
543*bcb85aadSSteve Yin                                Any form of content generation that requires
544*bcb85aadSSteve Yin                                synchronization with an AT would require use of this
545*bcb85aadSSteve Yin                                action.  One example is the generation of text describing
546*bcb85aadSSteve Yin                                visual content not obvious from a video's sound track.
547*bcb85aadSSteve Yin                                In this scenario the Text to Speech or Braille output
548*bcb85aadSSteve Yin                                may take more time than the related length of silence
549*bcb85aadSSteve Yin                                in the video's sound track. */
550*bcb85aadSSteve Yin  IA2_ACTION_COMPLETE = -2,  	/**< Used by the client to inform the server that it has
551*bcb85aadSSteve Yin                                consumed the most recent content provided by this object. */
552*bcb85aadSSteve Yin  IA2_ACTION_CLOSE = -3         /**< Used to inform the server that the client no longer
553*bcb85aadSSteve Yin                                requires synchronization. */
554*bcb85aadSSteve Yin};
555*bcb85aadSSteve Yin
556*bcb85aadSSteve Yin/** @brief This interface gives access to actions that can be executed
557*bcb85aadSSteve Yin  for accessible objects.
558*bcb85aadSSteve Yin
559*bcb85aadSSteve Yin Every accessible object that can be manipulated via the native GUI beyond the
560*bcb85aadSSteve Yin  methods available either in the MSAA IAccessible interface or in the set of
561*bcb85aadSSteve Yin  IAccessible2 interfaces (other than this IAccessibleAction interface) should
562*bcb85aadSSteve Yin  support the IAccessibleAction interface in order to provide Assistive Technology
563*bcb85aadSSteve Yin  access to all the actions that can be performed by the object.  Each action can
564*bcb85aadSSteve Yin  be performed or queried for a name, description or associated key bindings.
565*bcb85aadSSteve Yin  Actions are needed more for ATs that assist the mobility impaired, such as
566*bcb85aadSSteve Yin  on-screen keyboards and voice command software.  By providing actions directly,
567*bcb85aadSSteve Yin  the AT can present them to the user without the user having to perform the extra
568*bcb85aadSSteve Yin  steps to navigate a context menu.
569*bcb85aadSSteve Yin
570*bcb85aadSSteve Yin The first action should be equivalent to the MSAA default action.  If there is
571*bcb85aadSSteve Yin  only one action, %IAccessibleAction should also be implemented.
572*bcb85aadSSteve Yin*/
573*bcb85aadSSteve Yin[object, uuid(B70D9F59-3B5A-4dba-AB9E-22012F607DF5)]
574*bcb85aadSSteve Yininterface IAccessibleAction : IUnknown
575*bcb85aadSSteve Yin{
576*bcb85aadSSteve Yin
577*bcb85aadSSteve Yin  /** @brief Returns the number of accessible actions available in this object.
578*bcb85aadSSteve Yin
579*bcb85aadSSteve Yin   If there are more than one, the first one is considered the
580*bcb85aadSSteve Yin    "default" action of the object.
581*bcb85aadSSteve Yin   @param [out] nActions
582*bcb85aadSSteve Yin    The returned value of the number of actions is zero if there are
583*bcb85aadSSteve Yin    no actions.
584*bcb85aadSSteve Yin   @retval S_OK
585*bcb85aadSSteve Yin   @note This method is missing a [propget] prefix in the IDL.  The result is the
586*bcb85aadSSteve Yin    method is named nActions in generated C++ code instead of get_nActions.
587*bcb85aadSSteve Yin  */
588*bcb85aadSSteve Yin  HRESULT nActions
589*bcb85aadSSteve Yin    (
590*bcb85aadSSteve Yin     [out,retval] long* nActions
591*bcb85aadSSteve Yin    );
592*bcb85aadSSteve Yin
593*bcb85aadSSteve Yin  /** @brief Performs the specified Action on the object.
594*bcb85aadSSteve Yin   @param [in] actionIndex
595*bcb85aadSSteve Yin    0 based index specifying the action to perform.  If it lies outside
596*bcb85aadSSteve Yin    the valid range no action is performed.
597*bcb85aadSSteve Yin   @retval S_OK
598*bcb85aadSSteve Yin   @retval S_FALSE if action could not be performed
599*bcb85aadSSteve Yin   @retval E_INVALIDARG if bad [in] passed
600*bcb85aadSSteve Yin   @note If implementing support for media, refer to the predefined constants in the ::IA2Actions enum.
601*bcb85aadSSteve Yin    */
602*bcb85aadSSteve Yin  HRESULT doAction
603*bcb85aadSSteve Yin    (
604*bcb85aadSSteve Yin     [in] long actionIndex
605*bcb85aadSSteve Yin    );
606*bcb85aadSSteve Yin
607*bcb85aadSSteve Yin  /** @brief Returns a description of the specified action of the object.
608*bcb85aadSSteve Yin   @param [in] actionIndex
609*bcb85aadSSteve Yin    0 based index specifying which action's description to return.
610*bcb85aadSSteve Yin    If it lies outside the valid range an empty string is returned.
611*bcb85aadSSteve Yin   @param [out] description
612*bcb85aadSSteve Yin    The returned value is a localized string of the specified action.
613*bcb85aadSSteve Yin   @retval S_OK
614*bcb85aadSSteve Yin   @retval S_FALSE if there is nothing to return, [out] value is NULL
615*bcb85aadSSteve Yin   @retval E_INVALIDARG if bad [in] passed
616*bcb85aadSSteve Yin    */
617*bcb85aadSSteve Yin  [propget] HRESULT description
618*bcb85aadSSteve Yin    (
619*bcb85aadSSteve Yin     [in] long actionIndex,
620*bcb85aadSSteve Yin     [out, retval] BSTR *description
621*bcb85aadSSteve Yin    );
622*bcb85aadSSteve Yin
623*bcb85aadSSteve Yin  /** @brief Returns an array of BSTRs describing one or more key bindings, if
624*bcb85aadSSteve Yin   there are any, associated with the specified action.
625*bcb85aadSSteve Yin
626*bcb85aadSSteve Yin   The returned strings are the localized human readable key sequences to be
627*bcb85aadSSteve Yin   used to activate each action, e.g. "Ctrl+Shift+D".  Since these key
628*bcb85aadSSteve Yin   sequences are to be used when the object has focus, they are like
629*bcb85aadSSteve Yin   mnemonics (access keys), and not like shortcut (accelerator) keys.
630*bcb85aadSSteve Yin
631*bcb85aadSSteve Yin   There is no need to implement this method for single action controls since
632*bcb85aadSSteve Yin   that would be redundant with the standard MSAA programming practice of
633*bcb85aadSSteve Yin   getting the mnemonic from get_accKeyboardShortcut.
634*bcb85aadSSteve Yin
635*bcb85aadSSteve Yin   An AT such as an On Screen Keyboard might not expose these bindings but
636*bcb85aadSSteve Yin   provide alternative means of activation.
637*bcb85aadSSteve Yin
638*bcb85aadSSteve Yin   Note: the client allocates and passes in an array of pointers.  The server
639*bcb85aadSSteve Yin   allocates the BSTRs and passes back one or more pointers to these BSTRs into
640*bcb85aadSSteve Yin   the array of pointers allocated by the client.  The client is responsible
641*bcb85aadSSteve Yin   for deallocating the BSTRs.
642*bcb85aadSSteve Yin
643*bcb85aadSSteve Yin   @param [in] actionIndex
644*bcb85aadSSteve Yin    0 based index specifying which action's key bindings should be returned.
645*bcb85aadSSteve Yin   @param [in] nMaxBindings
646*bcb85aadSSteve Yin    This parameter is ignored. Refer to @ref _arrayConsideration
647*bcb85aadSSteve Yin	"Special Consideration when using Arrays" for more details.
648*bcb85aadSSteve Yin   @param [out] keyBindings
649*bcb85aadSSteve Yin    An array of BSTRs, allocated by the server, one for each key binding.
650*bcb85aadSSteve Yin	The client must free it with CoTaskMemFree.
651*bcb85aadSSteve Yin   @param [out] nBindings
652*bcb85aadSSteve Yin    The number of key bindings returned; the size of the returned array.
653*bcb85aadSSteve Yin   @retval S_OK
654*bcb85aadSSteve Yin   @retval S_FALSE if there are no key bindings, [out] values are NULL and 0 respectively
655*bcb85aadSSteve Yin   @retval E_INVALIDARG if bad [in] passed
656*bcb85aadSSteve Yin	*/
657*bcb85aadSSteve Yin  [propget] HRESULT keyBinding
658*bcb85aadSSteve Yin    (
659*bcb85aadSSteve Yin     [in] long actionIndex,
660*bcb85aadSSteve Yin     [in] long nMaxBindings,
661*bcb85aadSSteve Yin     [out, size_is(,nMaxBindings), length_is(,*nBindings)] BSTR **keyBindings,
662*bcb85aadSSteve Yin	 [out, retval] long *nBindings
663*bcb85aadSSteve Yin    );
664*bcb85aadSSteve Yin
665*bcb85aadSSteve Yin  /** @brief Returns the non-localized name of specified action.
666*bcb85aadSSteve Yin   @param [in] actionIndex
667*bcb85aadSSteve Yin    0 based index specifying which action's non-localized name should be returned.
668*bcb85aadSSteve Yin   @param [out] name
669*bcb85aadSSteve Yin   @retval S_OK
670*bcb85aadSSteve Yin   @retval S_FALSE if there is nothing to return, [out] value is NULL
671*bcb85aadSSteve Yin   @retval E_INVALIDARG if bad [in] passed
672*bcb85aadSSteve Yin   */
673*bcb85aadSSteve Yin  [propget] HRESULT name
674*bcb85aadSSteve Yin    (
675*bcb85aadSSteve Yin     [in] long actionIndex,
676*bcb85aadSSteve Yin     [out, retval] BSTR *name
677*bcb85aadSSteve Yin    );
678*bcb85aadSSteve Yin
679*bcb85aadSSteve Yin  /** @brief Returns the localized name of specified action.
680*bcb85aadSSteve Yin   @param [in] actionIndex
681*bcb85aadSSteve Yin    0 based index specifying which action's localized name should be returned.
682*bcb85aadSSteve Yin   @param [out] localizedName
683*bcb85aadSSteve Yin   @retval S_OK
684*bcb85aadSSteve Yin   @retval S_FALSE if there is nothing to return, [out] value is NULL
685*bcb85aadSSteve Yin   @retval E_INVALIDARG if bad [in] passed
686*bcb85aadSSteve Yin   */
687*bcb85aadSSteve Yin  [propget] HRESULT localizedName
688*bcb85aadSSteve Yin    (
689*bcb85aadSSteve Yin     [in] long actionIndex,
690*bcb85aadSSteve Yin     [out, retval] BSTR *localizedName
691*bcb85aadSSteve Yin    );
692*bcb85aadSSteve Yin
693*bcb85aadSSteve Yin}
694*bcb85aadSSteve Yin/*************************************************************************
695*bcb85aadSSteve Yin *
696*bcb85aadSSteve Yin *  File Name (AccessibleRole.idl)
697*bcb85aadSSteve Yin *
698*bcb85aadSSteve Yin *  IAccessible2 IDL Specification
699*bcb85aadSSteve Yin *
700*bcb85aadSSteve Yin *  Copyright (c) 2007, 2013 Linux Foundation
701*bcb85aadSSteve Yin *  Copyright (c) 2006 IBM Corporation
702*bcb85aadSSteve Yin *  Copyright (c) 2000, 2006 Sun Microsystems, Inc.
703*bcb85aadSSteve Yin *  All rights reserved.
704*bcb85aadSSteve Yin *
705*bcb85aadSSteve Yin *
706*bcb85aadSSteve Yin *  Redistribution and use in source and binary forms, with or without
707*bcb85aadSSteve Yin *  modification, are permitted provided that the following conditions
708*bcb85aadSSteve Yin *  are met:
709*bcb85aadSSteve Yin *
710*bcb85aadSSteve Yin *   1. Redistributions of source code must retain the above copyright
711*bcb85aadSSteve Yin *      notice, this list of conditions and the following disclaimer.
712*bcb85aadSSteve Yin *
713*bcb85aadSSteve Yin *   2. Redistributions in binary form must reproduce the above
714*bcb85aadSSteve Yin *      copyright notice, this list of conditions and the following
715*bcb85aadSSteve Yin *      disclaimer in the documentation and/or other materials
716*bcb85aadSSteve Yin *      provided with the distribution.
717*bcb85aadSSteve Yin *
718*bcb85aadSSteve Yin *   3. Neither the name of the Linux Foundation nor the names of its
719*bcb85aadSSteve Yin *      contributors may be used to endorse or promote products
720*bcb85aadSSteve Yin *      derived from this software without specific prior written
721*bcb85aadSSteve Yin *      permission.
722*bcb85aadSSteve Yin *
723*bcb85aadSSteve Yin *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
724*bcb85aadSSteve Yin *  CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
725*bcb85aadSSteve Yin *  INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
726*bcb85aadSSteve Yin *  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
727*bcb85aadSSteve Yin *  DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
728*bcb85aadSSteve Yin *  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
729*bcb85aadSSteve Yin *  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
730*bcb85aadSSteve Yin *  NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
731*bcb85aadSSteve Yin *  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
732*bcb85aadSSteve Yin *  HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
733*bcb85aadSSteve Yin *  CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
734*bcb85aadSSteve Yin *  OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
735*bcb85aadSSteve Yin *  EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
736*bcb85aadSSteve Yin *
737*bcb85aadSSteve Yin *  This BSD License conforms to the Open Source Initiative "Simplified
738*bcb85aadSSteve Yin *  BSD License" as published at:
739*bcb85aadSSteve Yin *  http://www.opensource.org/licenses/bsd-license.php
740*bcb85aadSSteve Yin *
741*bcb85aadSSteve Yin *  IAccessible2 is a trademark of the Linux Foundation. The IAccessible2
742*bcb85aadSSteve Yin *  mark may be used in accordance with the Linux Foundation Trademark
743*bcb85aadSSteve Yin *  Policy to indicate compliance with the IAccessible2 specification.
744*bcb85aadSSteve Yin *
745*bcb85aadSSteve Yin ************************************************************************/
746*bcb85aadSSteve Yin
747*bcb85aadSSteve Yin
748*bcb85aadSSteve Yin
749*bcb85aadSSteve Yin/** Collection of roles
750*bcb85aadSSteve Yin
751*bcb85aadSSteve Yin  This enumerator defines an extended set of accessible roles of objects implementing
752*bcb85aadSSteve Yin  the %IAccessible2 interface. These roles are in addition to the MSAA roles obtained
753*bcb85aadSSteve Yin  through the MSAA get_accRole method.  Examples are 'footnote', 'heading', and
754*bcb85aadSSteve Yin  'label'. You obtain an object's %IAccessible2 roles by calling IAccessible2::role.
755*bcb85aadSSteve Yin*/
756*bcb85aadSSteve Yinenum IA2Role {
757*bcb85aadSSteve Yin
758*bcb85aadSSteve Yin  /** Unknown role. The object contains some Accessible information, but its
759*bcb85aadSSteve Yin   role is not known.
760*bcb85aadSSteve Yin  */
761*bcb85aadSSteve Yin  IA2_ROLE_UNKNOWN = 0,
762*bcb85aadSSteve Yin
763*bcb85aadSSteve Yin  /** An object that can be drawn into and to manage events from the objects
764*bcb85aadSSteve Yin   drawn into it.  Also refer to ::IA2_ROLE_FRAME,
765*bcb85aadSSteve Yin   ::IA2_ROLE_GLASS_PANE, and ::IA2_ROLE_LAYERED_PANE.
766*bcb85aadSSteve Yin  */
767*bcb85aadSSteve Yin  IA2_ROLE_CANVAS = 0x401,
768*bcb85aadSSteve Yin
769*bcb85aadSSteve Yin  /// A caption describing another object.
770*bcb85aadSSteve Yin  IA2_ROLE_CAPTION,
771*bcb85aadSSteve Yin
772*bcb85aadSSteve Yin  /// Used for check buttons that are menu items.
773*bcb85aadSSteve Yin  IA2_ROLE_CHECK_MENU_ITEM,
774*bcb85aadSSteve Yin
775*bcb85aadSSteve Yin  /// A specialized dialog that lets the user choose a color.
776*bcb85aadSSteve Yin  IA2_ROLE_COLOR_CHOOSER,
777*bcb85aadSSteve Yin
778*bcb85aadSSteve Yin  /// A date editor.
779*bcb85aadSSteve Yin  IA2_ROLE_DATE_EDITOR,
780*bcb85aadSSteve Yin
781*bcb85aadSSteve Yin  /** An iconified internal frame in an ::IA2_ROLE_DESKTOP_PANE.
782*bcb85aadSSteve Yin   Also refer to ::IA2_ROLE_INTERNAL_FRAME.
783*bcb85aadSSteve Yin  */
784*bcb85aadSSteve Yin  IA2_ROLE_DESKTOP_ICON,
785*bcb85aadSSteve Yin
786*bcb85aadSSteve Yin  /** A desktop pane. A pane that supports internal frames and iconified
787*bcb85aadSSteve Yin   versions of those internal frames.  Also refer to ::IA2_ROLE_INTERNAL_FRAME.
788*bcb85aadSSteve Yin  */
789*bcb85aadSSteve Yin  IA2_ROLE_DESKTOP_PANE,
790*bcb85aadSSteve Yin
791*bcb85aadSSteve Yin  /** A directory pane. A pane that allows the user to navigate through
792*bcb85aadSSteve Yin   and select the contents of a directory. May be used by a file chooser.
793*bcb85aadSSteve Yin   Also refer to ::IA2_ROLE_FILE_CHOOSER.
794*bcb85aadSSteve Yin  */
795*bcb85aadSSteve Yin  IA2_ROLE_DIRECTORY_PANE,
796*bcb85aadSSteve Yin
797*bcb85aadSSteve Yin  /** An editable text object in a toolbar. <b>Deprecated.</b>
798*bcb85aadSSteve Yin   The edit bar role was meant for a text area in a tool bar. However, to detect
799*bcb85aadSSteve Yin   a text area in a tool bar the AT can query the parent.
800*bcb85aadSSteve Yin  */
801*bcb85aadSSteve Yin  IA2_ROLE_EDITBAR,
802*bcb85aadSSteve Yin
803*bcb85aadSSteve Yin  /// Embedded (OLE) object.
804*bcb85aadSSteve Yin  IA2_ROLE_EMBEDDED_OBJECT,
805*bcb85aadSSteve Yin
806*bcb85aadSSteve Yin  /// Text that is used as an endnote (footnote at the end of a chapter or section).
807*bcb85aadSSteve Yin  IA2_ROLE_ENDNOTE,
808*bcb85aadSSteve Yin
809*bcb85aadSSteve Yin  /** A file chooser. A specialized dialog that displays the files in the
810*bcb85aadSSteve Yin   directory and lets the user select a file, browse a different directory,
811*bcb85aadSSteve Yin   or specify a filename. May use the directory pane to show the contents of
812*bcb85aadSSteve Yin   a directory.
813*bcb85aadSSteve Yin   Also refer to ::IA2_ROLE_DIRECTORY_PANE.
814*bcb85aadSSteve Yin  */
815*bcb85aadSSteve Yin  IA2_ROLE_FILE_CHOOSER,
816*bcb85aadSSteve Yin
817*bcb85aadSSteve Yin  /** A font chooser. A font chooser is a component that lets the user pick
818*bcb85aadSSteve Yin   various attributes for fonts.
819*bcb85aadSSteve Yin  */
820*bcb85aadSSteve Yin  IA2_ROLE_FONT_CHOOSER,
821*bcb85aadSSteve Yin
822*bcb85aadSSteve Yin  /** Footer of a document page.
823*bcb85aadSSteve Yin   Also refer to ::IA2_ROLE_HEADER.
824*bcb85aadSSteve Yin  */
825*bcb85aadSSteve Yin  IA2_ROLE_FOOTER,
826*bcb85aadSSteve Yin
827*bcb85aadSSteve Yin  /// Text that is used as a footnote.  Also refer to ::IA2_ROLE_ENDNOTE.
828*bcb85aadSSteve Yin  IA2_ROLE_FOOTNOTE,
829*bcb85aadSSteve Yin
830*bcb85aadSSteve Yin  /** A container of form controls.  An example of the use of this role is to
831*bcb85aadSSteve Yin   represent an HTML FORM tag.
832*bcb85aadSSteve Yin  */
833*bcb85aadSSteve Yin  IA2_ROLE_FORM,
834*bcb85aadSSteve Yin
835*bcb85aadSSteve Yin  /** Frame role. A top level window with a title bar, border, menu bar, etc.
836*bcb85aadSSteve Yin   It is often used as the primary window for an application.  Also refer to
837*bcb85aadSSteve Yin   ::IA2_ROLE_CANVAS and the MSAA roles of dialog and window.
838*bcb85aadSSteve Yin  */
839*bcb85aadSSteve Yin  IA2_ROLE_FRAME,
840*bcb85aadSSteve Yin
841*bcb85aadSSteve Yin  /** A glass pane. A pane that is guaranteed to be painted on top of all panes
842*bcb85aadSSteve Yin   beneath it.  Also refer to ::IA2_ROLE_CANVAS, ::IA2_ROLE_INTERNAL_FRAME, and
843*bcb85aadSSteve Yin   ::IA2_ROLE_ROOT_PANE.
844*bcb85aadSSteve Yin  */
845*bcb85aadSSteve Yin  IA2_ROLE_GLASS_PANE,
846*bcb85aadSSteve Yin
847*bcb85aadSSteve Yin  /** Header of a document page.
848*bcb85aadSSteve Yin   Also refer to ::IA2_ROLE_FOOTER.
849*bcb85aadSSteve Yin  */
850*bcb85aadSSteve Yin  IA2_ROLE_HEADER,
851*bcb85aadSSteve Yin
852*bcb85aadSSteve Yin  /// Heading.  Use the IAccessible2::attributes level attribute to determine the heading level.
853*bcb85aadSSteve Yin  IA2_ROLE_HEADING,
854*bcb85aadSSteve Yin
855*bcb85aadSSteve Yin  /// A small fixed size picture, typically used to decorate components.
856*bcb85aadSSteve Yin  IA2_ROLE_ICON,
857*bcb85aadSSteve Yin
858*bcb85aadSSteve Yin  /** An image map object.  Usually a graphic with multiple hotspots, where
859*bcb85aadSSteve Yin   each hotspot can be activated resulting in the loading of another document
860*bcb85aadSSteve Yin   or section of a document.
861*bcb85aadSSteve Yin  */
862*bcb85aadSSteve Yin  IA2_ROLE_IMAGE_MAP,
863*bcb85aadSSteve Yin
864*bcb85aadSSteve Yin  /** An object which is used to allow input of characters not found on a keyboard,
865*bcb85aadSSteve Yin   such as the input of Chinese characters on a Western keyboard.
866*bcb85aadSSteve Yin  */
867*bcb85aadSSteve Yin  IA2_ROLE_INPUT_METHOD_WINDOW,
868*bcb85aadSSteve Yin
869*bcb85aadSSteve Yin  /** An internal frame. A frame-like object that is clipped by a desktop pane.
870*bcb85aadSSteve Yin   The desktop pane, internal frame, and desktop icon objects are often used to
871*bcb85aadSSteve Yin   create multiple document interfaces within an application.
872*bcb85aadSSteve Yin   Also refer to ::IA2_ROLE_DESKTOP_ICON, ::IA2_ROLE_DESKTOP_PANE, and ::IA2_ROLE_FRAME.
873*bcb85aadSSteve Yin  */
874*bcb85aadSSteve Yin  IA2_ROLE_INTERNAL_FRAME,
875*bcb85aadSSteve Yin
876*bcb85aadSSteve Yin  /// An object used to present an icon or short string in an interface.
877*bcb85aadSSteve Yin  IA2_ROLE_LABEL,
878*bcb85aadSSteve Yin
879*bcb85aadSSteve Yin  /** A layered pane. A specialized pane that allows its children to be drawn
880*bcb85aadSSteve Yin   in layers, providing a form of stacking order. This is usually the pane that
881*bcb85aadSSteve Yin   holds the menu bar as  well as the pane that contains most of the visual
882*bcb85aadSSteve Yin   components in a window.
883*bcb85aadSSteve Yin   Also refer to ::IA2_ROLE_CANVAS, ::IA2_ROLE_GLASS_PANE, and ::IA2_ROLE_ROOT_PANE.
884*bcb85aadSSteve Yin  */
885*bcb85aadSSteve Yin  IA2_ROLE_LAYERED_PANE,
886*bcb85aadSSteve Yin
887*bcb85aadSSteve Yin  /** A section whose content is parenthetic or ancillary to the main content
888*bcb85aadSSteve Yin   of the resource.
889*bcb85aadSSteve Yin  */
890*bcb85aadSSteve Yin  IA2_ROLE_NOTE,
891*bcb85aadSSteve Yin
892*bcb85aadSSteve Yin /** A specialized pane whose primary use is inside a dialog.
893*bcb85aadSSteve Yin   Also refer to MSAA's dialog role.
894*bcb85aadSSteve Yin  */
895*bcb85aadSSteve Yin  IA2_ROLE_OPTION_PANE,
896*bcb85aadSSteve Yin
897*bcb85aadSSteve Yin  /** An object representing a page of document content.  It is used in documents
898*bcb85aadSSteve Yin   which are accessed by the user on a page by page basis.
899*bcb85aadSSteve Yin  */
900*bcb85aadSSteve Yin  IA2_ROLE_PAGE,
901*bcb85aadSSteve Yin
902*bcb85aadSSteve Yin  /// A paragraph of text.
903*bcb85aadSSteve Yin  IA2_ROLE_PARAGRAPH,
904*bcb85aadSSteve Yin
905*bcb85aadSSteve Yin  /** A radio button that is a menu item.
906*bcb85aadSSteve Yin   Also refer to MSAA's button and menu item roles.
907*bcb85aadSSteve Yin  */
908*bcb85aadSSteve Yin  IA2_ROLE_RADIO_MENU_ITEM,
909*bcb85aadSSteve Yin
910*bcb85aadSSteve Yin  /** An object which is redundant with another object in the accessible hierarchy.
911*bcb85aadSSteve Yin   ATs typically ignore objects with this role.
912*bcb85aadSSteve Yin  */
913*bcb85aadSSteve Yin  IA2_ROLE_REDUNDANT_OBJECT,
914*bcb85aadSSteve Yin
915*bcb85aadSSteve Yin  /** A root pane. A specialized pane that has a glass pane and a layered pane
916*bcb85aadSSteve Yin   as its children.
917*bcb85aadSSteve Yin   Also refer to ::IA2_ROLE_GLASS_PANE and ::IA2_ROLE_LAYERED_PANE
918*bcb85aadSSteve Yin  */
919*bcb85aadSSteve Yin  IA2_ROLE_ROOT_PANE,
920*bcb85aadSSteve Yin
921*bcb85aadSSteve Yin  /** A ruler such as those used in word processors.
922*bcb85aadSSteve Yin  */
923*bcb85aadSSteve Yin  IA2_ROLE_RULER,
924*bcb85aadSSteve Yin
925*bcb85aadSSteve Yin  /** A scroll pane. An object that allows a user to incrementally view a large
926*bcb85aadSSteve Yin   amount of information.  Its children can include scroll bars and a viewport.
927*bcb85aadSSteve Yin   Also refer to ::IA2_ROLE_VIEW_PORT and MSAA's scroll bar role.
928*bcb85aadSSteve Yin  */
929*bcb85aadSSteve Yin  IA2_ROLE_SCROLL_PANE,
930*bcb85aadSSteve Yin
931*bcb85aadSSteve Yin  /** A container of document content.  An example of the use of this role is to
932*bcb85aadSSteve Yin   represent an HTML DIV tag.  A section may be used as a region.  A region is a
933*bcb85aadSSteve Yin   group of elements that together form a perceivable unit.  A region does not
934*bcb85aadSSteve Yin   necessarily follow the logical structure of the content, but follows the
935*bcb85aadSSteve Yin   perceivable structure of the page.  A region may have an attribute in the set
936*bcb85aadSSteve Yin   of IAccessible2::attributes which indicates that it is "live".  A live region
937*bcb85aadSSteve Yin   is content that is likely to change in response to a timed change, a user
938*bcb85aadSSteve Yin   event, or some other programmed logic or event.
939*bcb85aadSSteve Yin  */
940*bcb85aadSSteve Yin  IA2_ROLE_SECTION,
941*bcb85aadSSteve Yin
942*bcb85aadSSteve Yin  /// Object with graphical representation used to represent content on draw pages.
943*bcb85aadSSteve Yin  IA2_ROLE_SHAPE,
944*bcb85aadSSteve Yin
945*bcb85aadSSteve Yin  /** A split pane. A specialized panel that presents two other panels at the
946*bcb85aadSSteve Yin   same time. Between the two panels is a divider the user can manipulate to make
947*bcb85aadSSteve Yin   one panel larger and the other panel smaller.
948*bcb85aadSSteve Yin  */
949*bcb85aadSSteve Yin  IA2_ROLE_SPLIT_PANE,
950*bcb85aadSSteve Yin
951*bcb85aadSSteve Yin  /** An object that forms part of a menu system but which can be "undocked"
952*bcb85aadSSteve Yin   from or "torn off" the menu system to exist as a separate window.
953*bcb85aadSSteve Yin  */
954*bcb85aadSSteve Yin  IA2_ROLE_TEAR_OFF_MENU,
955*bcb85aadSSteve Yin
956*bcb85aadSSteve Yin  /// An object used as a terminal emulator.
957*bcb85aadSSteve Yin  IA2_ROLE_TERMINAL,
958*bcb85aadSSteve Yin
959*bcb85aadSSteve Yin  /// Collection of objects that constitute a logical text entity.
960*bcb85aadSSteve Yin  IA2_ROLE_TEXT_FRAME,
961*bcb85aadSSteve Yin
962*bcb85aadSSteve Yin  /** A toggle button. A specialized push button that can be checked or unchecked,
963*bcb85aadSSteve Yin   but does not provide a separate indicator for the current state.
964*bcb85aadSSteve Yin   Also refer to MSAA's roles of push button, check box, and radio button.
965*bcb85aadSSteve Yin   <BR><B>Note:</B> IA2_ROLE_TOGGLE_BUTTON should not be used.  Instead, use MSAA's
966*bcb85aadSSteve Yin   ROLE_SYSTEM_PUSHBUTTON and STATE_SYSTEM_PRESSED.
967*bcb85aadSSteve Yin  */
968*bcb85aadSSteve Yin  IA2_ROLE_TOGGLE_BUTTON,
969*bcb85aadSSteve Yin
970*bcb85aadSSteve Yin  /** A viewport. An object usually used in a scroll pane. It represents the
971*bcb85aadSSteve Yin   portion of the entire data that the user can see. As the user manipulates
972*bcb85aadSSteve Yin   the scroll bars, the contents of the viewport can change.
973*bcb85aadSSteve Yin   Also refer to ::IA2_ROLE_SCROLL_PANE.
974*bcb85aadSSteve Yin  */
975*bcb85aadSSteve Yin  IA2_ROLE_VIEW_PORT,
976*bcb85aadSSteve Yin
977*bcb85aadSSteve Yin  /** An object containing content which is complementary to the main content of
978*bcb85aadSSteve Yin   a document, but remains meaningful when separated from the main content.  There
979*bcb85aadSSteve Yin   are various types of content that would appropriately have this role.  For example,
980*bcb85aadSSteve Yin   in the case where content is delivered via a web portal to a web browser, this may
981*bcb85aadSSteve Yin   include but not be limited to show times, current weather, related articles, or
982*bcb85aadSSteve Yin   stocks to watch.  The complementary role indicates that contained content is relevant
983*bcb85aadSSteve Yin   to the main content.  If the complementary content is completely separable main
984*bcb85aadSSteve Yin   content, it may be appropriate to use a more general role.
985*bcb85aadSSteve Yin  */
986*bcb85aadSSteve Yin  IA2_ROLE_COMPLEMENTARY_CONTENT
987*bcb85aadSSteve Yin
988*bcb85aadSSteve Yin};
989*bcb85aadSSteve Yin/*************************************************************************
990*bcb85aadSSteve Yin *
991*bcb85aadSSteve Yin *  File Name (AccessibleStates.idl)
992*bcb85aadSSteve Yin *
993*bcb85aadSSteve Yin *  IAccessible2 IDL Specification
994*bcb85aadSSteve Yin *
995*bcb85aadSSteve Yin *  Copyright (c) 2007, 2010 Linux Foundation
996*bcb85aadSSteve Yin *  Copyright (c) 2006 IBM Corporation
997*bcb85aadSSteve Yin *  Copyright (c) 2000, 2006 Sun Microsystems, Inc.
998*bcb85aadSSteve Yin *  All rights reserved.
999*bcb85aadSSteve Yin *
1000*bcb85aadSSteve Yin *
1001*bcb85aadSSteve Yin *  Redistribution and use in source and binary forms, with or without
1002*bcb85aadSSteve Yin *  modification, are permitted provided that the following conditions
1003*bcb85aadSSteve Yin *  are met:
1004*bcb85aadSSteve Yin *
1005*bcb85aadSSteve Yin *   1. Redistributions of source code must retain the above copyright
1006*bcb85aadSSteve Yin *      notice, this list of conditions and the following disclaimer.
1007*bcb85aadSSteve Yin *
1008*bcb85aadSSteve Yin *   2. Redistributions in binary form must reproduce the above
1009*bcb85aadSSteve Yin *      copyright notice, this list of conditions and the following
1010*bcb85aadSSteve Yin *      disclaimer in the documentation and/or other materials
1011*bcb85aadSSteve Yin *      provided with the distribution.
1012*bcb85aadSSteve Yin *
1013*bcb85aadSSteve Yin *   3. Neither the name of the Linux Foundation nor the names of its
1014*bcb85aadSSteve Yin *      contributors may be used to endorse or promote products
1015*bcb85aadSSteve Yin *      derived from this software without specific prior written
1016*bcb85aadSSteve Yin *      permission.
1017*bcb85aadSSteve Yin *
1018*bcb85aadSSteve Yin *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
1019*bcb85aadSSteve Yin *  CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
1020*bcb85aadSSteve Yin *  INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
1021*bcb85aadSSteve Yin *  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
1022*bcb85aadSSteve Yin *  DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
1023*bcb85aadSSteve Yin *  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
1024*bcb85aadSSteve Yin *  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
1025*bcb85aadSSteve Yin *  NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
1026*bcb85aadSSteve Yin *  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
1027*bcb85aadSSteve Yin *  HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
1028*bcb85aadSSteve Yin *  CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
1029*bcb85aadSSteve Yin *  OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
1030*bcb85aadSSteve Yin *  EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
1031*bcb85aadSSteve Yin *
1032*bcb85aadSSteve Yin *  This BSD License conforms to the Open Source Initiative "Simplified
1033*bcb85aadSSteve Yin *  BSD License" as published at:
1034*bcb85aadSSteve Yin *  http://www.opensource.org/licenses/bsd-license.php
1035*bcb85aadSSteve Yin *
1036*bcb85aadSSteve Yin *  IAccessible2 is a trademark of the Linux Foundation. The IAccessible2
1037*bcb85aadSSteve Yin *  mark may be used in accordance with the Linux Foundation Trademark
1038*bcb85aadSSteve Yin *  Policy to indicate compliance with the IAccessible2 specification.
1039*bcb85aadSSteve Yin *
1040*bcb85aadSSteve Yin ************************************************************************/
1041*bcb85aadSSteve Yin
1042*bcb85aadSSteve Yin
1043*bcb85aadSSteve Yin
1044*bcb85aadSSteve Yintypedef long AccessibleStates;
1045*bcb85aadSSteve Yin
1046*bcb85aadSSteve Yin/** %IAccessible2 specific state bit constants
1047*bcb85aadSSteve Yin
1048*bcb85aadSSteve Yin  This enum defines the state bits returned by IAccessible2::states.  The
1049*bcb85aadSSteve Yin  %IAccessible2 state bits are in addition to those returned by MSAA.
1050*bcb85aadSSteve Yin*/
1051*bcb85aadSSteve Yinenum IA2States {
1052*bcb85aadSSteve Yin
1053*bcb85aadSSteve Yin/** Indicates a window is currently the active window, or is an active subelement
1054*bcb85aadSSteve Yin  within a container or table.
1055*bcb85aadSSteve Yin
1056*bcb85aadSSteve Yin This state can be used to indicate the current active item in a container, even
1057*bcb85aadSSteve Yin  if the container itself is not currently active. In other words this would indicate
1058*bcb85aadSSteve Yin  the item that will get focus if you tab to the container.
1059*bcb85aadSSteve Yin
1060*bcb85aadSSteve Yin This information is important for knowing what to report for trees and potentially
1061*bcb85aadSSteve Yin  other containers in a virtual buffer.
1062*bcb85aadSSteve Yin
1063*bcb85aadSSteve Yin Also, see ::IA2_STATE_MANAGES_DESCENDANTS for more information.
1064*bcb85aadSSteve Yin*/
1065*bcb85aadSSteve YinIA2_STATE_ACTIVE =					0x1,
1066*bcb85aadSSteve Yin
1067*bcb85aadSSteve Yin/** Indicates that the object is armed.
1068*bcb85aadSSteve Yin
1069*bcb85aadSSteve Yin Used to indicate that the control is "pressed" and will be invoked when the
1070*bcb85aadSSteve Yin  actuator, e.g. a mouse button, is "released".  An AT which either monitors the
1071*bcb85aadSSteve Yin  mouse or synthesizes mouse events might need to know that, and possibly a talking
1072*bcb85aadSSteve Yin  interface would even let the user know about it.  It could also potentially be
1073*bcb85aadSSteve Yin  useful to on screen keyboards or test tools since the information does indicate
1074*bcb85aadSSteve Yin  something about the state of the interface, for example, code operating asynchronously
1075*bcb85aadSSteve Yin  might need to wait for the armed state to change before doing something else.
1076*bcb85aadSSteve Yin
1077*bcb85aadSSteve Yin*/
1078*bcb85aadSSteve YinIA2_STATE_ARMED =					0x2,
1079*bcb85aadSSteve Yin
1080*bcb85aadSSteve Yin/** Indicates the user interface object corresponding to this object no longer exists. */
1081*bcb85aadSSteve YinIA2_STATE_DEFUNCT =					0x4,
1082*bcb85aadSSteve Yin
1083*bcb85aadSSteve Yin/** An object with this state has a caret and implements the IAccessibleText interface.
1084*bcb85aadSSteve Yin
1085*bcb85aadSSteve Yin Such fields may be read-only, so STATE_SYSTEM_READONLY is valid in combination
1086*bcb85aadSSteve Yin  with IA2_STATE_EDITABLE.
1087*bcb85aadSSteve Yin
1088*bcb85aadSSteve Yin*/
1089*bcb85aadSSteve YinIA2_STATE_EDITABLE =				0x8,
1090*bcb85aadSSteve Yin
1091*bcb85aadSSteve Yin/** Indicates the orientation of this object is horizontal. */
1092*bcb85aadSSteve YinIA2_STATE_HORIZONTAL =				0x10,
1093*bcb85aadSSteve Yin
1094*bcb85aadSSteve Yin/** Indicates this object is minimized and is represented only by an icon. */
1095*bcb85aadSSteve YinIA2_STATE_ICONIFIED =				0x20,
1096*bcb85aadSSteve Yin
1097*bcb85aadSSteve Yin/** Indicates an input validation failure. */
1098*bcb85aadSSteve YinIA2_STATE_INVALID_ENTRY =			0x40,
1099*bcb85aadSSteve Yin
1100*bcb85aadSSteve Yin/** Indicates that this object manages its children.
1101*bcb85aadSSteve Yin
1102*bcb85aadSSteve Yin Note: Due to the fact that MSAA's WinEvents don't allow the active child index
1103*bcb85aadSSteve Yin  to be passed on the IA2_EVENT_ACTIVE_DESCENDANT_CHANGED event, the manages
1104*bcb85aadSSteve Yin  descendants	scheme can't be used.  Instead the active child object has to fire
1105*bcb85aadSSteve Yin  MSAA's EVENT_OBJECT_FOCUS.  In a future release a new event mechanism may be
1106*bcb85aadSSteve Yin  added to provide for event specific data to be passed with the event.  At that
1107*bcb85aadSSteve Yin  time the IA2_EVENT_ACTIVE_DECENDENT_CHANGED event and
1108*bcb85aadSSteve Yin  IA2_STATE_MANAGES_DESCENDANTS state would be useful.
1109*bcb85aadSSteve Yin*/
1110*bcb85aadSSteve YinIA2_STATE_MANAGES_DESCENDANTS =		0x80,
1111*bcb85aadSSteve Yin
1112*bcb85aadSSteve Yin/** Indicates that an object is modal.
1113*bcb85aadSSteve Yin
1114*bcb85aadSSteve Yin Modal objects have the behavior that something must be done with the object
1115*bcb85aadSSteve Yin  before the user can interact with an object in a different window.
1116*bcb85aadSSteve Yin*/
1117*bcb85aadSSteve YinIA2_STATE_MODAL =					0x100,
1118*bcb85aadSSteve Yin
1119*bcb85aadSSteve Yin/** Indicates this text object can contain multiple lines of text. */
1120*bcb85aadSSteve YinIA2_STATE_MULTI_LINE =				0x200,
1121*bcb85aadSSteve Yin
1122*bcb85aadSSteve Yin/** Indicates this object paints every pixel within its rectangular region. */
1123*bcb85aadSSteve YinIA2_STATE_OPAQUE =					0x400,
1124*bcb85aadSSteve Yin
1125*bcb85aadSSteve Yin/** Indicates that user interaction is required.
1126*bcb85aadSSteve Yin
1127*bcb85aadSSteve Yin An example of when this state is used is when a field in a form must be filled
1128*bcb85aadSSteve Yin  before a form can be processed.
1129*bcb85aadSSteve Yin*/
1130*bcb85aadSSteve YinIA2_STATE_REQUIRED =				0x800,
1131*bcb85aadSSteve Yin
1132*bcb85aadSSteve Yin/** Indicates an object which supports text selection.
1133*bcb85aadSSteve Yin
1134*bcb85aadSSteve Yin Note: This is different than MSAA STATE_SYSTEM_SELECTABLE.
1135*bcb85aadSSteve Yin*/
1136*bcb85aadSSteve YinIA2_STATE_SELECTABLE_TEXT =			0x1000,
1137*bcb85aadSSteve Yin
1138*bcb85aadSSteve Yin/** Indicates that this text object can contain only a single line of text. */
1139*bcb85aadSSteve YinIA2_STATE_SINGLE_LINE =				0x2000,
1140*bcb85aadSSteve Yin
1141*bcb85aadSSteve Yin/** Indicates that the accessible object is stale.
1142*bcb85aadSSteve Yin
1143*bcb85aadSSteve Yin This state is used when the accessible object no longer accurately
1144*bcb85aadSSteve Yin  represents the state of the object which it is representing such as when an
1145*bcb85aadSSteve Yin  object is transient or when an object has been or is in the process of being
1146*bcb85aadSSteve Yin  destroyed or when the object's index in its parent has changed.
1147*bcb85aadSSteve Yin*/
1148*bcb85aadSSteve YinIA2_STATE_STALE =					0x4000,
1149*bcb85aadSSteve Yin
1150*bcb85aadSSteve Yin/** Indicates that the object implements autocompletion.
1151*bcb85aadSSteve Yin
1152*bcb85aadSSteve Yin This state indicates that a text control will respond to the input of
1153*bcb85aadSSteve Yin one ore more characters and cause a sub-item to become selected.  The
1154*bcb85aadSSteve Yin selection may also result in events fired on the parent object.
1155*bcb85aadSSteve Yin*/
1156*bcb85aadSSteve YinIA2_STATE_SUPPORTS_AUTOCOMPLETION =	0x8000,
1157*bcb85aadSSteve Yin
1158*bcb85aadSSteve Yin/** Indicates this object is transient.
1159*bcb85aadSSteve Yin
1160*bcb85aadSSteve Yin An object has this state when its parent object has the state ::IA2_STATE_MANAGES_DESCENDANTS.
1161*bcb85aadSSteve Yin For example, a list item object may be managed by its parent list object and may only
1162*bcb85aadSSteve Yin exist as long as the object is actually rendered.  Similarly a table cell's accessible
1163*bcb85aadSSteve Yin object may exist only while the cell has focus.  However, from the perspective of an
1164*bcb85aadSSteve Yin assistive technology a transient object behaves like a non-transient object.  As a
1165*bcb85aadSSteve Yin result it is likely that this state is not of use to an assistive technology, but it
1166*bcb85aadSSteve Yin is provided in case an assistive technology determines that knowledge of the transient
1167*bcb85aadSSteve Yin nature of the object is useful and also for harmony with the Linux accessibility API.
1168*bcb85aadSSteve Yin
1169*bcb85aadSSteve Yin Also, see ::IA2_STATE_MANAGES_DESCENDANTS for more information.
1170*bcb85aadSSteve Yin */
1171*bcb85aadSSteve YinIA2_STATE_TRANSIENT =				0x10000,
1172*bcb85aadSSteve Yin
1173*bcb85aadSSteve Yin/** Indicates the orientation of this object is vertical. */
1174*bcb85aadSSteve YinIA2_STATE_VERTICAL =				0x20000,
1175*bcb85aadSSteve Yin
1176*bcb85aadSSteve Yin/** Indicates this object is checkable.
1177*bcb85aadSSteve Yin
1178*bcb85aadSSteve Yin The standard checkable objects are check boxes, radio buttons, check box menu
1179*bcb85aadSSteve Yin items, radio menu items, and toggle buttons.  Since assistive technology will
1180*bcb85aadSSteve Yin determine that these objects are checkable via the object's role the checkable
1181*bcb85aadSSteve Yin state is not required.  However, this state is necessary in those cases where
1182*bcb85aadSSteve Yin an object has a role which is not one of the previously mentioned roles.  An
1183*bcb85aadSSteve Yin example is a table cell which indicates whether or not an email has an attachment,
1184*bcb85aadSSteve Yin whether or not an mail is considered spam, and whether or not an email has been read.
1185*bcb85aadSSteve Yin */
1186*bcb85aadSSteve YinIA2_STATE_CHECKABLE =				0x40000,
1187*bcb85aadSSteve Yin
1188*bcb85aadSSteve Yin/** Indicates this object is pinned.
1189*bcb85aadSSteve Yin
1190*bcb85aadSSteve Yin This state indicates that an object is fixed at a certain location.  One example
1191*bcb85aadSSteve Yin is a browser tab that when pinned cannot be moved until unpinned.  Another example
1192*bcb85aadSSteve Yin is a movable or floating object that when pinned remains in its pinned location
1193*bcb85aadSSteve Yin until being unpinned.
1194*bcb85aadSSteve Yin */
1195*bcb85aadSSteve YinIA2_STATE_PINNED =					0x80000
1196*bcb85aadSSteve Yin
1197*bcb85aadSSteve Yin};
1198*bcb85aadSSteve Yin/*************************************************************************
1199*bcb85aadSSteve Yin *
1200*bcb85aadSSteve Yin *  File Name (Accessible2.idl)
1201*bcb85aadSSteve Yin *
1202*bcb85aadSSteve Yin *  IAccessible2 IDL Specification
1203*bcb85aadSSteve Yin *
1204*bcb85aadSSteve Yin *  Copyright (c) 2007, 2013 Linux Foundation
1205*bcb85aadSSteve Yin *  Copyright (c) 2006 IBM Corporation
1206*bcb85aadSSteve Yin *  Copyright (c) 2000, 2006 Sun Microsystems, Inc.
1207*bcb85aadSSteve Yin *  All rights reserved.
1208*bcb85aadSSteve Yin *
1209*bcb85aadSSteve Yin *
1210*bcb85aadSSteve Yin *  Redistribution and use in source and binary forms, with or without
1211*bcb85aadSSteve Yin *  modification, are permitted provided that the following conditions
1212*bcb85aadSSteve Yin *  are met:
1213*bcb85aadSSteve Yin *
1214*bcb85aadSSteve Yin *   1. Redistributions of source code must retain the above copyright
1215*bcb85aadSSteve Yin *      notice, this list of conditions and the following disclaimer.
1216*bcb85aadSSteve Yin *
1217*bcb85aadSSteve Yin *   2. Redistributions in binary form must reproduce the above
1218*bcb85aadSSteve Yin *      copyright notice, this list of conditions and the following
1219*bcb85aadSSteve Yin *      disclaimer in the documentation and/or other materials
1220*bcb85aadSSteve Yin *      provided with the distribution.
1221*bcb85aadSSteve Yin *
1222*bcb85aadSSteve Yin *   3. Neither the name of the Linux Foundation nor the names of its
1223*bcb85aadSSteve Yin *      contributors may be used to endorse or promote products
1224*bcb85aadSSteve Yin *      derived from this software without specific prior written
1225*bcb85aadSSteve Yin *      permission.
1226*bcb85aadSSteve Yin *
1227*bcb85aadSSteve Yin *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
1228*bcb85aadSSteve Yin *  CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
1229*bcb85aadSSteve Yin *  INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
1230*bcb85aadSSteve Yin *  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
1231*bcb85aadSSteve Yin *  DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
1232*bcb85aadSSteve Yin *  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
1233*bcb85aadSSteve Yin *  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
1234*bcb85aadSSteve Yin *  NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
1235*bcb85aadSSteve Yin *  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
1236*bcb85aadSSteve Yin *  HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
1237*bcb85aadSSteve Yin *  CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
1238*bcb85aadSSteve Yin *  OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
1239*bcb85aadSSteve Yin *  EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
1240*bcb85aadSSteve Yin *
1241*bcb85aadSSteve Yin *  This BSD License conforms to the Open Source Initiative "Simplified
1242*bcb85aadSSteve Yin *  BSD License" as published at:
1243*bcb85aadSSteve Yin *  http://www.opensource.org/licenses/bsd-license.php
1244*bcb85aadSSteve Yin *
1245*bcb85aadSSteve Yin *  IAccessible2 is a trademark of the Linux Foundation. The IAccessible2
1246*bcb85aadSSteve Yin *  mark may be used in accordance with the Linux Foundation Trademark
1247*bcb85aadSSteve Yin *  Policy to indicate compliance with the IAccessible2 specification.
1248*bcb85aadSSteve Yin *
1249*bcb85aadSSteve Yin ************************************************************************/
1250*bcb85aadSSteve Yin
1251*bcb85aadSSteve Yin/** @mainpage
1252*bcb85aadSSteve Yin
1253*bcb85aadSSteve Yin @section _interfaces Interfaces
1254*bcb85aadSSteve Yin  IAccessible2\n
1255*bcb85aadSSteve Yin  IAccessible2_2\n
1256*bcb85aadSSteve Yin  IAccessibleAction\n
1257*bcb85aadSSteve Yin  IAccessibleApplication\n
1258*bcb85aadSSteve Yin  IAccessibleComponent\n
1259*bcb85aadSSteve Yin  IAccessibleDocument\n
1260*bcb85aadSSteve Yin  IAccessibleEditableText\n
1261*bcb85aadSSteve Yin  IAccessibleHypertext\n
1262*bcb85aadSSteve Yin  IAccessibleHypertext2\n
1263*bcb85aadSSteve Yin  IAccessibleHyperlink\n
1264*bcb85aadSSteve Yin  IAccessibleImage\n
1265*bcb85aadSSteve Yin  IAccessibleRelation\n
1266*bcb85aadSSteve Yin  IAccessibleTable [Deprecated]\n
1267*bcb85aadSSteve Yin  IAccessibleTable2\n
1268*bcb85aadSSteve Yin  IAccessibleTableCell\n
1269*bcb85aadSSteve Yin  IAccessibleText\n
1270*bcb85aadSSteve Yin  IAccessibleText2\n
1271*bcb85aadSSteve Yin  IAccessibleValue
1272*bcb85aadSSteve Yin
1273*bcb85aadSSteve Yin @section _structs Structs
1274*bcb85aadSSteve Yin  IA2Locale\n
1275*bcb85aadSSteve Yin  IA2TableModelChange\n
1276*bcb85aadSSteve Yin  IA2TextSegment
1277*bcb85aadSSteve Yin
1278*bcb85aadSSteve Yin @section _enums Enums
1279*bcb85aadSSteve Yin  ::IA2Actions values are predefined actions for use when implementing support for HTML5 media.\n
1280*bcb85aadSSteve Yin  ::IA2CoordinateType values define the requested coordinate type (screen or parent window).\n
1281*bcb85aadSSteve Yin  ::IA2EventID values identify events.\n
1282*bcb85aadSSteve Yin  ::IA2Role values defines roles which are in addition to the existing MSAA roles.\n
1283*bcb85aadSSteve Yin  ::IA2ScrollType values define where to place an object or substring on the screen.\n
1284*bcb85aadSSteve Yin  ::IA2States values define states which are in addition to the existing MSAA states.\n
1285*bcb85aadSSteve Yin  ::IA2TableModelChangeType values describe the kinds of changes made to a table (insert, delete, update).\n
1286*bcb85aadSSteve Yin  ::IA2TextBoundaryType values define the requested text unit (character, word, sentence, line, paragraph).\n
1287*bcb85aadSSteve Yin  ::IA2TextSpecialOffsets values define special offsets for use in the text interfaces.
1288*bcb85aadSSteve Yin
1289*bcb85aadSSteve Yin @section _constants Constants
1290*bcb85aadSSteve Yin  @ref grpRelations
1291*bcb85aadSSteve Yin
1292*bcb85aadSSteve Yin @section _misc Miscellaneous
1293*bcb85aadSSteve Yin  @ref _licensePage "BSD License"\n
1294*bcb85aadSSteve Yin  @ref _generalInfo "General Information"\n
1295*bcb85aadSSteve Yin
1296*bcb85aadSSteve Yin @page _licensePage BSD License
1297*bcb85aadSSteve Yin  %IAccessible2 IDL Specification
1298*bcb85aadSSteve Yin
1299*bcb85aadSSteve Yin  Copyright (c) 2007, 2013 Linux Foundation\n
1300*bcb85aadSSteve Yin  Copyright (c) 2006 IBM Corporation\n
1301*bcb85aadSSteve Yin  Copyright (c) 2000, 2006 Sun Microsystems, Inc.\n
1302*bcb85aadSSteve Yin  All rights reserved.
1303*bcb85aadSSteve Yin
1304*bcb85aadSSteve Yin  Redistribution and use in source and binary forms, with or without
1305*bcb85aadSSteve Yin  modification, are permitted provided that the following conditions
1306*bcb85aadSSteve Yin  are met:
1307*bcb85aadSSteve Yin
1308*bcb85aadSSteve Yin   1. Redistributions of source code must retain the above copyright
1309*bcb85aadSSteve Yin      notice, this list of conditions and the following disclaimer.
1310*bcb85aadSSteve Yin
1311*bcb85aadSSteve Yin   2. Redistributions in binary form must reproduce the above
1312*bcb85aadSSteve Yin      copyright notice, this list of conditions and the following
1313*bcb85aadSSteve Yin      disclaimer in the documentation and/or other materials
1314*bcb85aadSSteve Yin      provided with the distribution.
1315*bcb85aadSSteve Yin
1316*bcb85aadSSteve Yin   3. Neither the name of the Linux Foundation nor the names of its
1317*bcb85aadSSteve Yin      contributors may be used to endorse or promote products
1318*bcb85aadSSteve Yin      derived from this software without specific prior written
1319*bcb85aadSSteve Yin      permission.
1320*bcb85aadSSteve Yin
1321*bcb85aadSSteve Yin  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
1322*bcb85aadSSteve Yin  CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
1323*bcb85aadSSteve Yin  INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
1324*bcb85aadSSteve Yin  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
1325*bcb85aadSSteve Yin  DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
1326*bcb85aadSSteve Yin  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
1327*bcb85aadSSteve Yin  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
1328*bcb85aadSSteve Yin  NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
1329*bcb85aadSSteve Yin  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
1330*bcb85aadSSteve Yin  HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
1331*bcb85aadSSteve Yin  CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
1332*bcb85aadSSteve Yin  OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
1333*bcb85aadSSteve Yin  EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
1334*bcb85aadSSteve Yin
1335*bcb85aadSSteve Yin  This BSD License conforms to the Open Source Initiative "Simplified
1336*bcb85aadSSteve Yin  BSD License" as published at:
1337*bcb85aadSSteve Yin  http://www.opensource.org/licenses/bsd-license.php
1338*bcb85aadSSteve Yin
1339*bcb85aadSSteve Yin  %IAccessible2 is a trademark of the Linux Foundation. The %IAccessible2
1340*bcb85aadSSteve Yin  mark may be used in accordance with the
1341*bcb85aadSSteve Yin  <a href="http://www.linuxfoundation.org/collaborate/workgroups/accessibility/trademark-policy">
1342*bcb85aadSSteve Yin  Linux Foundation Trademark Policy</a> to indicate compliance with the %IAccessible2 specification.
1343*bcb85aadSSteve Yin
1344*bcb85aadSSteve Yin @page _generalInfo General Information
1345*bcb85aadSSteve Yin  The following information is applicable to two or more interfaces.
1346*bcb85aadSSteve Yin
1347*bcb85aadSSteve Yin @ref _errors\n
1348*bcb85aadSSteve Yin @ref _memory\n
1349*bcb85aadSSteve Yin &nbsp;&nbsp;@ref _arrayConsideration\n
1350*bcb85aadSSteve Yin @ref _indexes\n
1351*bcb85aadSSteve Yin @ref _enumBase\n
1352*bcb85aadSSteve Yin @ref _specialOffsets\n
1353*bcb85aadSSteve Yin @ref _dicoveringInterfaces\n
1354*bcb85aadSSteve Yin @ref _changingInterfaces\n
1355*bcb85aadSSteve Yin @ref _applicationInfo\n
1356*bcb85aadSSteve Yin @ref _childIDs\n
1357*bcb85aadSSteve Yin @ref _variants\n
1358*bcb85aadSSteve Yin @ref _iaaction-iahyperlink\n
1359*bcb85aadSSteve Yin @ref _trademark
1360*bcb85aadSSteve Yin
1361*bcb85aadSSteve Yin @section _errors Error Handling
1362*bcb85aadSSteve Yin  HRESULT values are defined by the Microsoft&reg; Win32&reg; API.  For more information, refer to
1363*bcb85aadSSteve Yin  <a href="http://msdn.microsoft.com/en-us/library/windows/desktop/aa378137%28v=vs.85%29.aspx">
1364*bcb85aadSSteve Yin  Interpreting HRESULT Values</a> in MSDN&reg;.
1365*bcb85aadSSteve Yin
1366*bcb85aadSSteve Yin  Note that the S_FALSE return value is considered a non-error value and the
1367*bcb85aadSSteve Yin  SUCCEEDED macro will return TRUE.  S_FALSE is used when there is no failure
1368*bcb85aadSSteve Yin  but there was nothing valid to return, e.g. in IAccessible2::attributes when
1369*bcb85aadSSteve Yin  there are no attributes.  When S_FALSE is returned [out] pointer types should
1370*bcb85aadSSteve Yin  be NULL and [out] longs should generally be 0, but sometimes -1 is used such
1371*bcb85aadSSteve Yin  as IAccessible2::indexInParent, IAccessibleText::caretOffset, and
1372*bcb85aadSSteve Yin  IAccessibleHypertext::hyperlinkIndex.
1373*bcb85aadSSteve Yin
1374*bcb85aadSSteve Yin  Note that for BSTR [out] variables common COM practice is that the server does
1375*bcb85aadSSteve Yin  the SysAllocString and the client does the SysFreeString.  Also note that when
1376*bcb85aadSSteve Yin  NULL is returned there is no need for the client to call SysFreeString.  Please
1377*bcb85aadSSteve Yin  refer to the documentation for each method for more details regarding error handling.
1378*bcb85aadSSteve Yin
1379*bcb85aadSSteve Yin @section _memory Memory Management
1380*bcb85aadSSteve Yin  The following memory management issues should be considered:
1381*bcb85aadSSteve Yin  @li Although [out] BSTR variables are declared by the client, their space is
1382*bcb85aadSSteve Yin   allocated by the server.  They need to be freed with SysFreeString by the
1383*bcb85aadSSteve Yin   client at end of life; the same is true when BSTRs are used in structs or
1384*bcb85aadSSteve Yin   arrays which are passed to the server.
1385*bcb85aadSSteve Yin  @li If there is no valid [out] BSTR to return, the server should return S_FALSE and
1386*bcb85aadSSteve Yin   assign NULL to the output, e.g. *theOutBSTR = NULL;.
1387*bcb85aadSSteve Yin  @li COM interfaces need to be referenced with AddRef when used and dereferenced
1388*bcb85aadSSteve Yin   with Release at end of life.
1389*bcb85aadSSteve Yin  @li Single [out] longs, HWNDs, booleans, and structs are declared by the caller
1390*bcb85aadSSteve Yin   and passed by reference. The marshaller does all the memory management.
1391*bcb85aadSSteve Yin
1392*bcb85aadSSteve Yin  The following articles may be helpful for understanding memory management issues:
1393*bcb85aadSSteve Yin  @li An article by Don Box in a
1394*bcb85aadSSteve Yin   <a href="http://www.microsoft.com/msj/1196/activex1196.aspx">Q & A section</a>
1395*bcb85aadSSteve Yin   of the November 1996 edition of the Microsoft Systems Journal.
1396*bcb85aadSSteve Yin  @li A posting to a CodeGuru forum,
1397*bcb85aadSSteve Yin   <a href="http://www.codeguru.com/forum/showthread.php?t=364511">Windows SDK
1398*bcb85aadSSteve Yin   String: What are the rules for BSTR allocation and deallocation?</a>
1399*bcb85aadSSteve Yin
1400*bcb85aadSSteve Yin @subsection _arrayConsideration Special Consideration when using Arrays
1401*bcb85aadSSteve Yin  There are several methods which return arrays.  In the case of IAccessible2::relations
1402*bcb85aadSSteve Yin  and IAccessibleRelation::targets the client must allocate and free the arrays.
1403*bcb85aadSSteve Yin
1404*bcb85aadSSteve Yin  For the remaining methods which return arrays, the server must allocate the array
1405*bcb85aadSSteve Yin  and the client must free the array when no longer needed.  These methods are
1406*bcb85aadSSteve Yin  IAccessible2::extendedStates, IAccessible2::localizedExtendedStates,
1407*bcb85aadSSteve Yin  IAccessible2_2::relationTargetsOfType, IAccessibleAction::keyBinding,
1408*bcb85aadSSteve Yin  IAccessibleHypertext2::hyperlinks, IAccessibleTable::selectedChildren,
1409*bcb85aadSSteve Yin  IAccessibleTable::selectedColumns, IAccessibleTable::selectedRows,
1410*bcb85aadSSteve Yin  IAccessibleTable2::selectedCells, IAccessibleTable2::selectedColumns,
1411*bcb85aadSSteve Yin  IAccessibleTable2::selectedRows, IAccessibleTableCell::columnHeaderCells,
1412*bcb85aadSSteve Yin  and IAccessibleTableCell::rowHeaderCells.
1413*bcb85aadSSteve Yin  For those methods, the server must allocate both the top level array and any storage
1414*bcb85aadSSteve Yin  associated with it, e.g. for BSTRs.  The server must allocate the arrays with
1415*bcb85aadSSteve Yin  CoTaskMemAlloc and any BSTRs with SysAllocString.  The client must use CoTaskMemFree
1416*bcb85aadSSteve Yin  to free the array and any BSTRs must be freed with SysFreeString.
1417*bcb85aadSSteve Yin
1418*bcb85aadSSteve Yin  Also, the IDL for IAccessible2::extendedStates, IAccessible2::localizedExtendedStates,
1419*bcb85aadSSteve Yin  IAccessibleAction::keyBinding, IAccessibleTable::selectedChildren,
1420*bcb85aadSSteve Yin  IAccessibleTable::selectedColumns, and IAccessibleTable::selectedRows includes an
1421*bcb85aadSSteve Yin  extraneous [in] parameter for the caller to specify the max size of the array.
1422*bcb85aadSSteve Yin  This parameter will be ignored by the COM server.
1423*bcb85aadSSteve Yin
1424*bcb85aadSSteve Yin @section _indexes Zero and One Based Indexes
1425*bcb85aadSSteve Yin  Unless otherwise specified all offsets and indexes are 0 based.
1426*bcb85aadSSteve Yin
1427*bcb85aadSSteve Yin @section _enumBase Enum Base
1428*bcb85aadSSteve Yin  Note that enums start at 0.
1429*bcb85aadSSteve Yin
1430*bcb85aadSSteve Yin @section _specialOffsets Special Offsets for use in the IAccessibleText and IAccessibleEditableText Methods
1431*bcb85aadSSteve Yin  IAccessibleText and IAccessibleEditableText can use one or more of the following
1432*bcb85aadSSteve Yin  special offset values.  They are defined in the ::IA2TextSpecialOffsets enum.
1433*bcb85aadSSteve Yin  @li Using ::IA2_TEXT_OFFSET_LENGTH (-1) as an offset in any of the IAccessibleText or
1434*bcb85aadSSteve Yin   IAccessibleEditableText methods is the same as specifying the length of the string.
1435*bcb85aadSSteve Yin  @li Using ::IA2_TEXT_OFFSET_CARET (-2) as an offset for IAccessibleText::textBeforeOffset,
1436*bcb85aadSSteve Yin   IAccessibleText::textAtOffset, and IAccessibleText::textAfterOffset indicates that the
1437*bcb85aadSSteve Yin   text related to the physical location of the caret should be used.  This is needed for
1438*bcb85aadSSteve Yin   applications that consider the character offset of the end of one line (as reached by
1439*bcb85aadSSteve Yin   pressing the End key) the same as the offset of the first character on the next line.
1440*bcb85aadSSteve Yin   Since the same offset is associated with two different lines a special means is needed
1441*bcb85aadSSteve Yin   to fetch text from the line where the caret is physically located.
1442*bcb85aadSSteve Yin
1443*bcb85aadSSteve Yin @section _dicoveringInterfaces Discovery of Interfaces
1444*bcb85aadSSteve Yin  In general AT (Assistive Technology) should try IAccessible2 interfaces, followed by using
1445*bcb85aadSSteve Yin  the MSAA (Microsoft&reg; Active Accessibility&reg;) interfaces.  (In cases where the an application
1446*bcb85aadSSteve Yin  is known to have custom interfaces which provide information not supplied by IAccessible2
1447*bcb85aadSSteve Yin  or MSAA, then those custom interfaces can be used.)  The AT can then, by default, support
1448*bcb85aadSSteve Yin  unknown IAccessible2/MSAA applications, without the application developers having to request
1449*bcb85aadSSteve Yin  AT vendors for support on an individual application by application basis.
1450*bcb85aadSSteve Yin
1451*bcb85aadSSteve Yin  When you have a reference to an IAccessible and require a reference to an IAccessible2 use
1452*bcb85aadSSteve Yin  QueryService as follows:
1453*bcb85aadSSteve Yin  @code
1454*bcb85aadSSteve Yin  // pAcc is a reference to the accessible object's IAccessible interface.
1455*bcb85aadSSteve Yin  IServiceProvider *pService = NULL;
1456*bcb85aadSSteve Yin  hr = pAcc->QueryInterface(IID_IServiceProvider, (void **)&pService);
1457*bcb85aadSSteve Yin  if(SUCCEEDED(hr)) {
1458*bcb85aadSSteve Yin    IAccessible2 *pIA2 = NULL;
1459*bcb85aadSSteve Yin    hr = pService->QueryService(IID_IAccessible, IID_IAccessible2, (void**)&pIA2);
1460*bcb85aadSSteve Yin    if (SUCCEEDED(hr) && pIA2) {
1461*bcb85aadSSteve Yin      // The control supports IAccessible2.
1462*bcb85aadSSteve Yin      // pIA2 is the reference to the accessible object's IAccessible2 interface.
1463*bcb85aadSSteve Yin    }
1464*bcb85aadSSteve Yin  }
1465*bcb85aadSSteve Yin  @endcode
1466*bcb85aadSSteve Yin
1467*bcb85aadSSteve Yin  @section _changingInterfaces Changing between Accessible Interfaces
1468*bcb85aadSSteve Yin  Note that developers must always implement MSAA's IAccessible and, if needed, some
1469*bcb85aadSSteve Yin  of the interfaces in the set of IAccessible2 interfaces.  Although the IAccessible2
1470*bcb85aadSSteve Yin  IDL is coded such that IAccessible2 is a subclass of MSAA's IAccessible, none of
1471*bcb85aadSSteve Yin  MSAA's IAccessible methods are redefined by IAccessible2.
1472*bcb85aadSSteve Yin
1473*bcb85aadSSteve Yin  QueryService must be used to switch from a reference to an MSAA IAccessible interface
1474*bcb85aadSSteve Yin  to another interface.  This has been
1475*bcb85aadSSteve Yin  <a href="http://www.atia.org/files/public/Introducing_IAccessibleEx.doc">
1476*bcb85aadSSteve Yin  documented</a> and the pertinent facts have been extracted below:
1477*bcb85aadSSteve Yin
1478*bcb85aadSSteve Yin  @par
1479*bcb85aadSSteve Yin   Why use QueryService instead of just using QueryInterface to get IAccessibleEx
1480*bcb85aadSSteve Yin   directly? The reason is that since MSAA 2.0, clients don't talk to a server's
1481*bcb85aadSSteve Yin   IAccessible interface directly; instead they talk to an intermediate MSAA-provided
1482*bcb85aadSSteve Yin   wrapper that calls through to the original IAccessible. This wrapper provides services
1483*bcb85aadSSteve Yin   such as implementing IDispatch, supplying information from MSAA 2.0's Dynamic Annotation
1484*bcb85aadSSteve Yin   service, and scaling locations when running on Windows Vista with DPI scaling enabled.
1485*bcb85aadSSteve Yin   QueryService is the supported way to expose additional interfaces from an existing
1486*bcb85aadSSteve Yin   IAccessible and was originally used by MSHTML to expose IHTMLElement objects corresponding
1487*bcb85aadSSteve Yin   to IAccessibles. QueryService is often more convenient for servers to implement than
1488*bcb85aadSSteve Yin   QueryInterface because it does not have the same requirements for preserving object
1489*bcb85aadSSteve Yin   identity or symmetry/transitivity as QueryInterface, so QueryService allows servers to
1490*bcb85aadSSteve Yin   easily implement the interface on the same object or a separate object. The latter is
1491*bcb85aadSSteve Yin   often hard to do with QueryInterface unless the original object supports aggregation.
1492*bcb85aadSSteve Yin
1493*bcb85aadSSteve Yin  Two related references in MSDN&reg; are:
1494*bcb85aadSSteve Yin  @li <a href="http://msdn.microsoft.com/en-us/library/ms696078(VS.85).aspx">
1495*bcb85aadSSteve Yin  "Using QueryService to expose a native object model interface for an IAccessible object"</a>
1496*bcb85aadSSteve Yin  @li <a href="http://msdn.microsoft.com/en-us/library/ms528415.aspx#acc_obj">
1497*bcb85aadSSteve Yin  "Accessing the Internet Explorer Object Associated with an Accessible Object"</a>
1498*bcb85aadSSteve Yin
1499*bcb85aadSSteve Yin  Based on this information from Microsoft, QueryService must be used to switch back and forth
1500*bcb85aadSSteve Yin  between a reference to an MSAA IAccessible interface and any of the IAccessible2 interfaces.
1501*bcb85aadSSteve Yin
1502*bcb85aadSSteve Yin  Regarding switching between any of the IAccessible2 interfaces, applications implementing
1503*bcb85aadSSteve Yin  IAccessible2 should implement the IAccessible2 interfaces on a single object since ATs
1504*bcb85aadSSteve Yin  will be using QueryInterface to switch between the IAccessilbe2 interfaces.  Implementing
1505*bcb85aadSSteve Yin  the IAccessible2 interfaces on separate objects would require the use of QueryService.
1506*bcb85aadSSteve Yin  There is one exception, IAccessibleApplication can be implemented on a separate object so
1507*bcb85aadSSteve Yin  its common code doesn't have to be included in each accessible object.  ATs should use
1508*bcb85aadSSteve Yin  QueryService to access IAccessibleApplication.
1509*bcb85aadSSteve Yin
1510*bcb85aadSSteve Yin @section _applicationInfo Access to Information about the Application
1511*bcb85aadSSteve Yin  Servers implementing IAccessible2 should provide access to the IAccessibleApplication
1512*bcb85aadSSteve Yin  interface via QueryService from any object so that ATs can easily determine specific
1513*bcb85aadSSteve Yin  information about the application such as its name or version.
1514*bcb85aadSSteve Yin
1515*bcb85aadSSteve Yin @section _childIDs Child IDs
1516*bcb85aadSSteve Yin  The IAccessible2 interfaces do not support child IDs, i.e. simple child elements.
1517*bcb85aadSSteve Yin  Full accessible objects must be created for each object that supports IAccessible2.
1518*bcb85aadSSteve Yin  Therefore MSAA's get_accChild should never return a child ID (other than CHILDID_SELF)
1519*bcb85aadSSteve Yin  for an object that implements any of the IAccessible2 interfaces.
1520*bcb85aadSSteve Yin
1521*bcb85aadSSteve Yin  Microsoft's UI Automation specification has the same limitation and this was resolved
1522*bcb85aadSSteve Yin  in the UI Automation Express specification by adding IAccessibleEx::GetObjectForChild
1523*bcb85aadSSteve Yin  and IAccessibleEx::GetIAccessiblePair.  These methods allow mapping back and forth
1524*bcb85aadSSteve Yin  between an IAccessibleEx and an {IAccessible, Child ID} pair.  A future version of
1525*bcb85aadSSteve Yin  IAccessible2 may include similar methods to map back and forth between an IAccessible2
1526*bcb85aadSSteve Yin  and an {IAccessible, Child ID} pair.
1527*bcb85aadSSteve Yin
1528*bcb85aadSSteve Yin @section _variants VARIANTs
1529*bcb85aadSSteve Yin  Some methods return a VARIANT.  Implementers need to make sure that the return type is
1530*bcb85aadSSteve Yin  specified, i.e. VT_I4, VT_IDISPATCH, etc.  The methods that return VARIANTs are
1531*bcb85aadSSteve Yin  IAccessibleHyperlink::anchor, IAccessibleHyperlink::anchorTarget, IAccessibleValue::currentValue,
1532*bcb85aadSSteve Yin  IAccessibleValue::maximumValue, IAccessibleValue::minimumValue.
1533*bcb85aadSSteve Yin
1534*bcb85aadSSteve Yin @section _iaaction-iahyperlink IAccessibleHyperlink as subclass of IAccessibleAction
1535*bcb85aadSSteve Yin  In this version of the IDL, IAccessibleHyperlink is a subclass of IAccessibleAction.
1536*bcb85aadSSteve Yin  However, there is no practical need for that inheritance and in some cases, such as
1537*bcb85aadSSteve Yin  an image map of smart tags, it doesn't make sense because such an image map doesn't
1538*bcb85aadSSteve Yin  have actionable objects; it's the secondary smart tags that are actionable.  As a
1539*bcb85aadSSteve Yin  result, implementations should not rely on the inheritance as it may be removed in
1540*bcb85aadSSteve Yin  a later version of the IDL.
1541*bcb85aadSSteve Yin
1542*bcb85aadSSteve Yin @section _trademark Trademark Attribution
1543*bcb85aadSSteve Yin  The names of actual companies and products mentioned herein may be the trademarks of
1544*bcb85aadSSteve Yin  their respective owners.  In particular, Active Accessibility, Microsoft, MSDN, and Win32
1545*bcb85aadSSteve Yin  are trademarks of the Microsoft group of companies in the U.S.A. and/or other countries.
1546*bcb85aadSSteve Yin
1547*bcb85aadSSteve Yin**/
1548*bcb85aadSSteve Yin
1549*bcb85aadSSteve Yin
1550*bcb85aadSSteve Yin
1551*bcb85aadSSteve Yin
1552*bcb85aadSSteve Yin
1553*bcb85aadSSteve Yin
1554*bcb85aadSSteve Yin
1555*bcb85aadSSteve Yin
1556*bcb85aadSSteve Yin/** A structure defining the locale of an accessible object.
1557*bcb85aadSSteve Yin
1558*bcb85aadSSteve YinIAccessible2::locale returns this struct.
1559*bcb85aadSSteve Yin*/
1560*bcb85aadSSteve Yintypedef struct IA2Locale {
1561*bcb85aadSSteve Yin  BSTR language; ///< ISO 639-1 Alpha-2 two character language code
1562*bcb85aadSSteve Yin  BSTR country;  ///< ISO 3166-1 Alpha-2 two character country code
1563*bcb85aadSSteve Yin  BSTR variant;  ///< Application specific variant of the locale
1564*bcb85aadSSteve Yin} IA2Locale;
1565*bcb85aadSSteve Yin
1566*bcb85aadSSteve Yin/** @brief This interface exposes the primary set of information about an
1567*bcb85aadSSteve Yin IAccessible2 enabled accessible object.
1568*bcb85aadSSteve Yin
1569*bcb85aadSSteve Yin This interface must always be provided for objects that support some
1570*bcb85aadSSteve Yin portion of the collection of the %IAccessible2 interfaces.
1571*bcb85aadSSteve Yin
1572*bcb85aadSSteve Yin Please refer to @ref _changingInterfaces "Changing between Accessible Interfaces"
1573*bcb85aadSSteve Yin for special considerations related to use of the MSAA IAccessible interface and
1574*bcb85aadSSteve Yin the set of %IAccessible2 interfaces.
1575*bcb85aadSSteve Yin */
1576*bcb85aadSSteve Yin[object, uuid(E89F726E-C4F4-4c19-BB19-B647D7FA8478)]
1577*bcb85aadSSteve Yininterface IAccessible2 : IAccessible
1578*bcb85aadSSteve Yin{
1579*bcb85aadSSteve Yin
1580*bcb85aadSSteve Yin  /** @brief Returns the number of accessible relations for this object.
1581*bcb85aadSSteve Yin   @param [out] nRelations
1582*bcb85aadSSteve Yin   @retval S_OK
1583*bcb85aadSSteve Yin  */
1584*bcb85aadSSteve Yin  [propget] HRESULT nRelations
1585*bcb85aadSSteve Yin    (
1586*bcb85aadSSteve Yin     [out, retval] long *nRelations
1587*bcb85aadSSteve Yin    );
1588*bcb85aadSSteve Yin
1589*bcb85aadSSteve Yin  /** @brief Returns one accessible relation for this object.
1590*bcb85aadSSteve Yin   @param [in] relationIndex
1591*bcb85aadSSteve Yin     0 based
1592*bcb85aadSSteve Yin   @param [out] relation
1593*bcb85aadSSteve Yin   @retval S_OK
1594*bcb85aadSSteve Yin   @retval E_INVALIDARG if bad [in] passed
1595*bcb85aadSSteve Yin  */
1596*bcb85aadSSteve Yin  [propget] HRESULT relation
1597*bcb85aadSSteve Yin    (
1598*bcb85aadSSteve Yin     [in] long relationIndex,
1599*bcb85aadSSteve Yin     [out, retval] IAccessibleRelation **relation
1600*bcb85aadSSteve Yin    );
1601*bcb85aadSSteve Yin
1602*bcb85aadSSteve Yin  /** @brief Returns multiple accessible relations for this object.
1603*bcb85aadSSteve Yin   @param [in] maxRelations
1604*bcb85aadSSteve Yin     maximum size of the array allocated by the client
1605*bcb85aadSSteve Yin   @param [out] relations
1606*bcb85aadSSteve Yin    The array of accessible relation objects.  Note that this array is to be
1607*bcb85aadSSteve Yin	allocated by the client and freed when no longer needed.  Refer to @ref
1608*bcb85aadSSteve Yin	_arrayConsideration "Special Consideration when using Arrays" for more details.
1609*bcb85aadSSteve Yin   @param [out] nRelations
1610*bcb85aadSSteve Yin    actual number of relations in the returned array (not more than maxRelations)
1611*bcb85aadSSteve Yin   @retval S_OK
1612*bcb85aadSSteve Yin   @retval S_FALSE if there are no relations, nRelations is set to 0
1613*bcb85aadSSteve Yin   @note As a performant alternative, client code should consider using IAccessible2_2::relationTargetsOfType.
1614*bcb85aadSSteve Yin  */
1615*bcb85aadSSteve Yin  [propget] HRESULT relations
1616*bcb85aadSSteve Yin    (
1617*bcb85aadSSteve Yin     [in] long maxRelations,
1618*bcb85aadSSteve Yin     [out, size_is(maxRelations), length_is(*nRelations)]
1619*bcb85aadSSteve Yin       IAccessibleRelation **relations,
1620*bcb85aadSSteve Yin     [out, retval] long *nRelations
1621*bcb85aadSSteve Yin    );
1622*bcb85aadSSteve Yin
1623*bcb85aadSSteve Yin  /** @brief Returns the role of an %IAccessible2 object.
1624*bcb85aadSSteve Yin   @param [out] role
1625*bcb85aadSSteve Yin    The role of an %IAccessible2 object.
1626*bcb85aadSSteve Yin   @retval S_OK
1627*bcb85aadSSteve Yin   @note
1628*bcb85aadSSteve Yin   @li For convenience MSAA roles are also passed through this method so the
1629*bcb85aadSSteve Yin    AT doesn't have to also fetch roles through MSAA's get_accRole.
1630*bcb85aadSSteve Yin   @li %IAccessible2 roles should not be passed through MSAA's get_accRole.
1631*bcb85aadSSteve Yin   @li For compatibility with non IAccessible2 enabled ATs, IAccessible2
1632*bcb85aadSSteve Yin    applications should also add support to get_accRole to return the closest
1633*bcb85aadSSteve Yin	MSAA role or ROLE_SYSTEM_CLIENT (the MSAA defined default role) if there
1634*bcb85aadSSteve Yin	is not a good match.
1635*bcb85aadSSteve Yin   @li This method is missing a [propget] prefix in the IDL.  The result is the
1636*bcb85aadSSteve Yin    method is named role in generated C++ code instead of get_role.
1637*bcb85aadSSteve Yin  */
1638*bcb85aadSSteve Yin  HRESULT role
1639*bcb85aadSSteve Yin    (
1640*bcb85aadSSteve Yin     [out, retval] long *role
1641*bcb85aadSSteve Yin    );
1642*bcb85aadSSteve Yin
1643*bcb85aadSSteve Yin  /** @brief Makes an object visible on the screen.
1644*bcb85aadSSteve Yin   @param [in] scrollType
1645*bcb85aadSSteve Yin    Defines where the object should be placed on the screen.
1646*bcb85aadSSteve Yin   @retval S_OK
1647*bcb85aadSSteve Yin   @retval E_INVALIDARG if bad [in] passed
1648*bcb85aadSSteve Yin  */
1649*bcb85aadSSteve Yin  HRESULT scrollTo
1650*bcb85aadSSteve Yin    (
1651*bcb85aadSSteve Yin     [in] enum IA2ScrollType scrollType
1652*bcb85aadSSteve Yin    );
1653*bcb85aadSSteve Yin
1654*bcb85aadSSteve Yin  /** @brief Moves the top left of an object to a specified location.
1655*bcb85aadSSteve Yin
1656*bcb85aadSSteve Yin   @param [in] coordinateType
1657*bcb85aadSSteve Yin    Specifies whether the coordinates are relative to the screen or the parent object.
1658*bcb85aadSSteve Yin   @param [in] x
1659*bcb85aadSSteve Yin    Defines the x coordinate.
1660*bcb85aadSSteve Yin   @param [in] y
1661*bcb85aadSSteve Yin    Defines the y coordinate.
1662*bcb85aadSSteve Yin   @retval S_OK
1663*bcb85aadSSteve Yin   @retval E_INVALIDARG if bad [in] passed
1664*bcb85aadSSteve Yin  */
1665*bcb85aadSSteve Yin  HRESULT scrollToPoint
1666*bcb85aadSSteve Yin    (
1667*bcb85aadSSteve Yin     [in] enum IA2CoordinateType coordinateType,
1668*bcb85aadSSteve Yin	 [in] long x,
1669*bcb85aadSSteve Yin	 [in] long y
1670*bcb85aadSSteve Yin    );
1671*bcb85aadSSteve Yin
1672*bcb85aadSSteve Yin  /** @brief Returns grouping information.
1673*bcb85aadSSteve Yin
1674*bcb85aadSSteve Yin   Used for tree items, list items, tab panel labels, radio buttons, etc.
1675*bcb85aadSSteve Yin   Also used for collections of non-text objects.
1676*bcb85aadSSteve Yin
1677*bcb85aadSSteve Yin   @param [out] groupLevel
1678*bcb85aadSSteve Yin    1 based, 0 indicates that this value is not applicable
1679*bcb85aadSSteve Yin   @param [out] similarItemsInGroup
1680*bcb85aadSSteve Yin    1 based, 0 indicates that this value is not applicable
1681*bcb85aadSSteve Yin   @param [out] positionInGroup
1682*bcb85aadSSteve Yin    1 based, 0 indicates that this value is not applicable. This is an index
1683*bcb85aadSSteve Yin    into the objects in the current group, not an index into all the objects
1684*bcb85aadSSteve Yin    at the same group level.
1685*bcb85aadSSteve Yin   @retval S_OK if at least one value is valid
1686*bcb85aadSSteve Yin   @retval S_FALSE if no values are valid, [out] values are 0s
1687*bcb85aadSSteve Yin   @note This method is meant to describe the nature of an object's containment
1688*bcb85aadSSteve Yin    structure.  It's exposed by trees, tree grids, nested lists, nested menus,
1689*bcb85aadSSteve Yin    but not headings, which uses the level object attribute.  It is also exposed
1690*bcb85aadSSteve Yin    by radio buttons (with groupLevel == 0).
1691*bcb85aadSSteve Yin   @note This is normally not implemented on a combo box to describe the nature
1692*bcb85aadSSteve Yin    of its contents.  Normally an AT will get that information from its child list
1693*bcb85aadSSteve Yin    object.  However, in some cases when non-edit combo boxes are not able to be structured
1694*bcb85aadSSteve Yin    such that the list is a child of the combo box, this method is implemented on
1695*bcb85aadSSteve Yin    the combo box itself. ATs can use this interface if a child list is not found.
1696*bcb85aadSSteve Yin	*/
1697*bcb85aadSSteve Yin  [propget] HRESULT groupPosition
1698*bcb85aadSSteve Yin    (
1699*bcb85aadSSteve Yin     [out] long *groupLevel,
1700*bcb85aadSSteve Yin     [out] long *similarItemsInGroup,
1701*bcb85aadSSteve Yin     [out, retval] long *positionInGroup
1702*bcb85aadSSteve Yin    );
1703*bcb85aadSSteve Yin
1704*bcb85aadSSteve Yin  /** @brief Returns the bit strip containing any IAccessible2 states.
1705*bcb85aadSSteve Yin
1706*bcb85aadSSteve Yin   The IAccessible2 states are in addition to the MSAA states and are defined in
1707*bcb85aadSSteve Yin   the IA2States enum.
1708*bcb85aadSSteve Yin
1709*bcb85aadSSteve Yin   @param [out] states
1710*bcb85aadSSteve Yin   @retval S_OK
1711*bcb85aadSSteve Yin  */
1712*bcb85aadSSteve Yin  [propget] HRESULT states
1713*bcb85aadSSteve Yin    (
1714*bcb85aadSSteve Yin	 [out, retval] AccessibleStates *states
1715*bcb85aadSSteve Yin    );
1716*bcb85aadSSteve Yin
1717*bcb85aadSSteve Yin  /** @brief Returns the extended role.
1718*bcb85aadSSteve Yin
1719*bcb85aadSSteve Yin   An extended role is a role which is dynamically generated by the application.
1720*bcb85aadSSteve Yin   It is not predefined by the %IAccessible2 specification.
1721*bcb85aadSSteve Yin
1722*bcb85aadSSteve Yin   @param [out] extendedRole
1723*bcb85aadSSteve Yin   @retval S_OK
1724*bcb85aadSSteve Yin   @retval S_FALSE if there is nothing to return, [out] value is NULL
1725*bcb85aadSSteve Yin  */
1726*bcb85aadSSteve Yin  [propget] HRESULT extendedRole
1727*bcb85aadSSteve Yin    (
1728*bcb85aadSSteve Yin	 [out, retval] BSTR *extendedRole
1729*bcb85aadSSteve Yin    );
1730*bcb85aadSSteve Yin
1731*bcb85aadSSteve Yin  /** @brief Returns the localized extended role.
1732*bcb85aadSSteve Yin   @param [out] localizedExtendedRole
1733*bcb85aadSSteve Yin   @retval S_OK
1734*bcb85aadSSteve Yin   @retval S_FALSE if there is nothing to return, [out] value is NULL
1735*bcb85aadSSteve Yin  */
1736*bcb85aadSSteve Yin  [propget] HRESULT localizedExtendedRole
1737*bcb85aadSSteve Yin    (
1738*bcb85aadSSteve Yin	 [out, retval] BSTR *localizedExtendedRole
1739*bcb85aadSSteve Yin    );
1740*bcb85aadSSteve Yin
1741*bcb85aadSSteve Yin  /** @brief Returns the number of extended states.
1742*bcb85aadSSteve Yin   @param [out] nExtendedStates
1743*bcb85aadSSteve Yin   @retval S_OK
1744*bcb85aadSSteve Yin  */
1745*bcb85aadSSteve Yin  [propget] HRESULT nExtendedStates
1746*bcb85aadSSteve Yin    (
1747*bcb85aadSSteve Yin     [out, retval] long *nExtendedStates
1748*bcb85aadSSteve Yin    );
1749*bcb85aadSSteve Yin
1750*bcb85aadSSteve Yin  /** @brief Returns the extended states (array of strings).
1751*bcb85aadSSteve Yin
1752*bcb85aadSSteve Yin   An extended state is a state which is dynamically generated by the application.
1753*bcb85aadSSteve Yin   It is not predefined by the %IAccessible2 specification.
1754*bcb85aadSSteve Yin
1755*bcb85aadSSteve Yin   @param [in] maxExtendedStates
1756*bcb85aadSSteve Yin    This parameter is ignored. Refer to @ref _arrayConsideration
1757*bcb85aadSSteve Yin	"Special Consideration when using Arrays" for more details.
1758*bcb85aadSSteve Yin   @param [out] extendedStates
1759*bcb85aadSSteve Yin    This array is allocated by the server.  The client must free it with CoTaskMemFree.
1760*bcb85aadSSteve Yin   @param [out] nExtendedStates
1761*bcb85aadSSteve Yin    The number of extended states returned; the size of the returned array.
1762*bcb85aadSSteve Yin   @retval S_OK
1763*bcb85aadSSteve Yin   @retval S_FALSE if there are no states, [out] values are NULL and 0 respectively
1764*bcb85aadSSteve Yin  */
1765*bcb85aadSSteve Yin  [propget] HRESULT extendedStates
1766*bcb85aadSSteve Yin    (
1767*bcb85aadSSteve Yin     [in] long maxExtendedStates,
1768*bcb85aadSSteve Yin     [out, size_is(,maxExtendedStates), length_is(,*nExtendedStates)] BSTR **extendedStates,
1769*bcb85aadSSteve Yin     [out, retval] long *nExtendedStates
1770*bcb85aadSSteve Yin    );
1771*bcb85aadSSteve Yin
1772*bcb85aadSSteve Yin  /** @brief Returns the localized extended states (array of strings).
1773*bcb85aadSSteve Yin
1774*bcb85aadSSteve Yin   @param [in] maxLocalizedExtendedStates
1775*bcb85aadSSteve Yin    This parameter is ignored. Refer to @ref _arrayConsideration
1776*bcb85aadSSteve Yin	"Special Consideration when using Arrays" for more details.
1777*bcb85aadSSteve Yin   @param [out] localizedExtendedStates
1778*bcb85aadSSteve Yin    This array is allocated by the server.  The client must free it with CoTaskMemFree.
1779*bcb85aadSSteve Yin   @param [out] nLocalizedExtendedStates
1780*bcb85aadSSteve Yin    The number of localized extended states returned; the size of the returned array.
1781*bcb85aadSSteve Yin   @retval S_OK
1782*bcb85aadSSteve Yin   @retval S_FALSE if there are no states, [out] values are NULL and 0 respectively
1783*bcb85aadSSteve Yin  */
1784*bcb85aadSSteve Yin  [propget] HRESULT localizedExtendedStates
1785*bcb85aadSSteve Yin    (
1786*bcb85aadSSteve Yin     [in] long maxLocalizedExtendedStates,
1787*bcb85aadSSteve Yin     [out, size_is(,maxLocalizedExtendedStates), length_is(,*nLocalizedExtendedStates)] BSTR **localizedExtendedStates,
1788*bcb85aadSSteve Yin     [out, retval] long *nLocalizedExtendedStates
1789*bcb85aadSSteve Yin    );
1790*bcb85aadSSteve Yin
1791*bcb85aadSSteve Yin  /** @brief Returns the unique ID.
1792*bcb85aadSSteve Yin
1793*bcb85aadSSteve Yin   The uniqueID is an identifier for this object, is unique within the
1794*bcb85aadSSteve Yin   current window, and remains the same for the lifetime of the accessible
1795*bcb85aadSSteve Yin   object.
1796*bcb85aadSSteve Yin
1797*bcb85aadSSteve Yin   The uniqueID is not related to:
1798*bcb85aadSSteve Yin   - the MSAA objectID which is used by the server to disambiguate between
1799*bcb85aadSSteve Yin   IAccessibles per HWND or
1800*bcb85aadSSteve Yin   - the MSAA childID which is used to disambiguate between children being
1801*bcb85aadSSteve Yin   managed by an IAccessible.
1802*bcb85aadSSteve Yin
1803*bcb85aadSSteve Yin   This value is provided so the AT can have access to a unique runtime persistent
1804*bcb85aadSSteve Yin   identifier even when not handling an event for the object.
1805*bcb85aadSSteve Yin
1806*bcb85aadSSteve Yin   An example of when this value is useful is if the AT wants to build a cache.
1807*bcb85aadSSteve Yin   The AT could cache the uniqueIDs in addition to other data being cached.
1808*bcb85aadSSteve Yin   When an event is fired the AT could map the uniqueID to its internal model.
1809*bcb85aadSSteve Yin   Thus, if there's a REORDER/SHOW/HIDE event the AT knows which part of the
1810*bcb85aadSSteve Yin   internal structure has been invalidated and can refetch just that part.
1811*bcb85aadSSteve Yin
1812*bcb85aadSSteve Yin   This value can also be used by an AT to determine when the current control
1813*bcb85aadSSteve Yin   has changed. If the role is the same for two controls that are adjacent in
1814*bcb85aadSSteve Yin   the tab order, this can be used to detect the new control.
1815*bcb85aadSSteve Yin
1816*bcb85aadSSteve Yin   Another use of this value by an AT is to identify when a grouping object has
1817*bcb85aadSSteve Yin   changed, e.g. when moving from a radio button in one group to a radio button in a
1818*bcb85aadSSteve Yin   different group.
1819*bcb85aadSSteve Yin
1820*bcb85aadSSteve Yin   One means of implementing this would be to create a factory with a 32 bit number
1821*bcb85aadSSteve Yin   generator and a reuse pool.  The number generator would emit numbers starting
1822*bcb85aadSSteve Yin   at 1.  Each time an object's life cycle ended, its number would be saved into a
1823*bcb85aadSSteve Yin   reuse pool.  The number generator would be used whenever the reuse pool was empty.
1824*bcb85aadSSteve Yin
1825*bcb85aadSSteve Yin   Another way to create a unique ID is to generate it from a pointer value, e.g. an
1826*bcb85aadSSteve Yin   object's address. That would be unique because no two active objects can use the
1827*bcb85aadSSteve Yin   same allocated memory space.
1828*bcb85aadSSteve Yin
1829*bcb85aadSSteve Yin   @param [out] uniqueID
1830*bcb85aadSSteve Yin   @retval S_OK
1831*bcb85aadSSteve Yin  */
1832*bcb85aadSSteve Yin  [propget] HRESULT uniqueID
1833*bcb85aadSSteve Yin    (
1834*bcb85aadSSteve Yin     [out, retval] long *uniqueID
1835*bcb85aadSSteve Yin    );
1836*bcb85aadSSteve Yin
1837*bcb85aadSSteve Yin  /** @brief Returns the window handle for the parent window which contains this object.
1838*bcb85aadSSteve Yin
1839*bcb85aadSSteve Yin   This is the same window handle which will be passed for any events that occur on the
1840*bcb85aadSSteve Yin   object, but is cached in the accessible object for use when it would be helpful to
1841*bcb85aadSSteve Yin   access the window handle in cases where an event isn't fired on this object.
1842*bcb85aadSSteve Yin
1843*bcb85aadSSteve Yin   A use case is when a screen reader is grabbing an entire web page on a page load.
1844*bcb85aadSSteve Yin   Without the availability of windowHandle, the AT would have to get the window handle
1845*bcb85aadSSteve Yin   by using WindowFromAccessibleObject on each IAccessible, which is slow because it's
1846*bcb85aadSSteve Yin   implemented by oleacc.dll as a loop which crawls up the ancestor chain and looks for
1847*bcb85aadSSteve Yin   a ROLE_WINDOW object, mapping that back to a window handle.
1848*bcb85aadSSteve Yin
1849*bcb85aadSSteve Yin   @param [out] windowHandle
1850*bcb85aadSSteve Yin   @retval S_OK
1851*bcb85aadSSteve Yin  */
1852*bcb85aadSSteve Yin  [propget] HRESULT windowHandle
1853*bcb85aadSSteve Yin    (
1854*bcb85aadSSteve Yin     [out, retval] HWND *windowHandle
1855*bcb85aadSSteve Yin    );
1856*bcb85aadSSteve Yin
1857*bcb85aadSSteve Yin  /** @brief Returns the index of this object in its parent object.
1858*bcb85aadSSteve Yin   @param [out] indexInParent
1859*bcb85aadSSteve Yin     0 based; -1 indicates there is no parent; the upper bound is the value
1860*bcb85aadSSteve Yin	 returned by the parent's IAccessible::get_accChildCount.
1861*bcb85aadSSteve Yin   @retval S_OK
1862*bcb85aadSSteve Yin   @retval S_FALSE if no parent, [out] value is -1
1863*bcb85aadSSteve Yin  */
1864*bcb85aadSSteve Yin  [propget] HRESULT indexInParent
1865*bcb85aadSSteve Yin    (
1866*bcb85aadSSteve Yin     [out, retval] long *indexInParent
1867*bcb85aadSSteve Yin    );
1868*bcb85aadSSteve Yin
1869*bcb85aadSSteve Yin  /** @brief Returns the IA2Locale of the accessible object.
1870*bcb85aadSSteve Yin   @param [out] locale
1871*bcb85aadSSteve Yin   @retval S_OK
1872*bcb85aadSSteve Yin  */
1873*bcb85aadSSteve Yin  [propget] HRESULT locale
1874*bcb85aadSSteve Yin    (
1875*bcb85aadSSteve Yin     [out, retval] IA2Locale *locale
1876*bcb85aadSSteve Yin    );
1877*bcb85aadSSteve Yin
1878*bcb85aadSSteve Yin  /** @brief Returns the attributes specific to this object, such as a cell's formula.
1879*bcb85aadSSteve Yin   @param [out] attributes
1880*bcb85aadSSteve Yin   @retval S_OK
1881*bcb85aadSSteve Yin   @retval S_FALSE returned if there is nothing to return, [out] value is NULL
1882*bcb85aadSSteve Yin  */
1883*bcb85aadSSteve Yin  [propget] HRESULT attributes
1884*bcb85aadSSteve Yin    (
1885*bcb85aadSSteve Yin     [out, retval] BSTR *attributes
1886*bcb85aadSSteve Yin    );
1887*bcb85aadSSteve Yin
1888*bcb85aadSSteve Yin}
1889*bcb85aadSSteve Yin
1890*bcb85aadSSteve Yin/*************************************************************************
1891*bcb85aadSSteve Yin *
1892*bcb85aadSSteve Yin *  File Name (Accessible2_2.idl)
1893*bcb85aadSSteve Yin *
1894*bcb85aadSSteve Yin *  IAccessible2 IDL Specification
1895*bcb85aadSSteve Yin *
1896*bcb85aadSSteve Yin *  Copyright (c) 2007, 2013 Linux Foundation
1897*bcb85aadSSteve Yin *  Copyright (c) 2006 IBM Corporation
1898*bcb85aadSSteve Yin *  Copyright (c) 2000, 2006 Sun Microsystems, Inc.
1899*bcb85aadSSteve Yin *  All rights reserved.
1900*bcb85aadSSteve Yin *
1901*bcb85aadSSteve Yin *
1902*bcb85aadSSteve Yin *  Redistribution and use in source and binary forms, with or without
1903*bcb85aadSSteve Yin *  modification, are permitted provided that the following conditions
1904*bcb85aadSSteve Yin *  are met:
1905*bcb85aadSSteve Yin *
1906*bcb85aadSSteve Yin *   1. Redistributions of source code must retain the above copyright
1907*bcb85aadSSteve Yin *      notice, this list of conditions and the following disclaimer.
1908*bcb85aadSSteve Yin *
1909*bcb85aadSSteve Yin *   2. Redistributions in binary form must reproduce the above
1910*bcb85aadSSteve Yin *      copyright notice, this list of conditions and the following
1911*bcb85aadSSteve Yin *      disclaimer in the documentation and/or other materials
1912*bcb85aadSSteve Yin *      provided with the distribution.
1913*bcb85aadSSteve Yin *
1914*bcb85aadSSteve Yin *   3. Neither the name of the Linux Foundation nor the names of its
1915*bcb85aadSSteve Yin *      contributors may be used to endorse or promote products
1916*bcb85aadSSteve Yin *      derived from this software without specific prior written
1917*bcb85aadSSteve Yin *      permission.
1918*bcb85aadSSteve Yin *
1919*bcb85aadSSteve Yin *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
1920*bcb85aadSSteve Yin *  CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
1921*bcb85aadSSteve Yin *  INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
1922*bcb85aadSSteve Yin *  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
1923*bcb85aadSSteve Yin *  DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
1924*bcb85aadSSteve Yin *  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
1925*bcb85aadSSteve Yin *  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
1926*bcb85aadSSteve Yin *  NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
1927*bcb85aadSSteve Yin *  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
1928*bcb85aadSSteve Yin *  HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
1929*bcb85aadSSteve Yin *  CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
1930*bcb85aadSSteve Yin *  OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
1931*bcb85aadSSteve Yin *  EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
1932*bcb85aadSSteve Yin *
1933*bcb85aadSSteve Yin *  This BSD License conforms to the Open Source Initiative "Simplified
1934*bcb85aadSSteve Yin *  BSD License" as published at:
1935*bcb85aadSSteve Yin *  http://www.opensource.org/licenses/bsd-license.php
1936*bcb85aadSSteve Yin *
1937*bcb85aadSSteve Yin *  IAccessible2 is a trademark of the Linux Foundation. The IAccessible2
1938*bcb85aadSSteve Yin *  mark may be used in accordance with the Linux Foundation Trademark
1939*bcb85aadSSteve Yin *  Policy to indicate compliance with the IAccessible2 specification.
1940*bcb85aadSSteve Yin *
1941*bcb85aadSSteve Yin ************************************************************************/
1942*bcb85aadSSteve Yin
1943*bcb85aadSSteve Yin
1944*bcb85aadSSteve Yin
1945*bcb85aadSSteve Yin
1946*bcb85aadSSteve Yin
1947*bcb85aadSSteve Yin
1948*bcb85aadSSteve Yin/** @brief This interface exposes the primary set of information about an
1949*bcb85aadSSteve Yin IAccessible2 enabled accessible object.
1950*bcb85aadSSteve Yin
1951*bcb85aadSSteve Yin This interface must always be provided for objects that support some
1952*bcb85aadSSteve Yin portion of the collection of the %IAccessible2 interfaces.
1953*bcb85aadSSteve Yin
1954*bcb85aadSSteve Yin Please refer to @ref _changingInterfaces "Changing between Accessible Interfaces"
1955*bcb85aadSSteve Yin for special considerations related to use of the MSAA IAccessible interface and
1956*bcb85aadSSteve Yin the set of %IAccessible2 interfaces.
1957*bcb85aadSSteve Yin */
1958*bcb85aadSSteve Yin[object, uuid(6C9430E9-299D-4E6F-BD01-A82A1E88D3FF)]
1959*bcb85aadSSteve Yininterface IAccessible2_2 : IAccessible2
1960*bcb85aadSSteve Yin{
1961*bcb85aadSSteve Yin  /** @brief Returns the attribute value of a specified attribute specific to this object.
1962*bcb85aadSSteve Yin   @param [in] name
1963*bcb85aadSSteve Yin   @param [out] attribute
1964*bcb85aadSSteve Yin   @retval S_OK
1965*bcb85aadSSteve Yin   @retval S_FALSE returned if there is nothing to return, [out] value is NULL.
1966*bcb85aadSSteve Yin   @retval E_INVALIDARG if bad [in] passed.
1967*bcb85aadSSteve Yin   @note The output value is a VARIANT.  Typically it will be a VT_BSTR, but there
1968*bcb85aadSSteve Yin     are some cases where it will be a VT_I4 or VT_BOOL.  Refer to the <a href=
1969*bcb85aadSSteve Yin     "http://www.linuxfoundation.org/collaborate/workgroups/accessibility/iaccessible2/objectattributesIAccessible2">
1970*bcb85aadSSteve Yin     Object Attributes specification</a> for more information.
1971*bcb85aadSSteve Yin  */
1972*bcb85aadSSteve Yin  [propget] HRESULT attribute
1973*bcb85aadSSteve Yin    (
1974*bcb85aadSSteve Yin     [in] BSTR name,
1975*bcb85aadSSteve Yin     [out, retval] VARIANT *attribute
1976*bcb85aadSSteve Yin    );
1977*bcb85aadSSteve Yin
1978*bcb85aadSSteve Yin  /** @brief Returns the deepest hypertext accessible in the subtree of this object, and the caret offset within it.
1979*bcb85aadSSteve Yin   @param [out] accessible
1980*bcb85aadSSteve Yin   @param [out] caretOffset
1981*bcb85aadSSteve Yin   @retval S_OK
1982*bcb85aadSSteve Yin   @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.
1983*bcb85aadSSteve Yin  */
1984*bcb85aadSSteve Yin  [propget] HRESULT accessibleWithCaret
1985*bcb85aadSSteve Yin    (
1986*bcb85aadSSteve Yin     [out] IUnknown **accessible,
1987*bcb85aadSSteve Yin     [out, retval] long *caretOffset
1988*bcb85aadSSteve Yin    );
1989*bcb85aadSSteve Yin
1990*bcb85aadSSteve Yin  /** @brief Returns relation targets for a specified target type.
1991*bcb85aadSSteve Yin   @param [in] type
1992*bcb85aadSSteve Yin    The requested @ref grpRelations "relation type".
1993*bcb85aadSSteve Yin   @param [in] maxTargets
1994*bcb85aadSSteve Yin    The number of targets requested.  0 indicates that all targets should be returned.
1995*bcb85aadSSteve Yin   @param [out] targets
1996*bcb85aadSSteve Yin    This array is allocated by the server.  The client must free it with CoTaskMemFree.
1997*bcb85aadSSteve Yin   @param [out] nTargets
1998*bcb85aadSSteve Yin    The number of targets returned; the size of the returned array.
1999*bcb85aadSSteve Yin   @retval S_OK
2000*bcb85aadSSteve Yin   @retval S_FALSE if there are no targets, [out] values are NULL and 0 respectively.
2001*bcb85aadSSteve Yin   @retval E_INVALIDARG if bad [in] passed.
2002*bcb85aadSSteve Yin  */
2003*bcb85aadSSteve Yin  [propget] HRESULT relationTargetsOfType
2004*bcb85aadSSteve Yin    (
2005*bcb85aadSSteve Yin     [in] BSTR type,
2006*bcb85aadSSteve Yin     [in] long maxTargets,
2007*bcb85aadSSteve Yin     [out, size_is(,*nTargets)] IUnknown ***targets,
2008*bcb85aadSSteve Yin     [out, retval] long *nTargets
2009*bcb85aadSSteve Yin    );
2010*bcb85aadSSteve Yin
2011*bcb85aadSSteve Yin}
2012*bcb85aadSSteve Yin
2013*bcb85aadSSteve Yin/*************************************************************************
2014*bcb85aadSSteve Yin *
2015*bcb85aadSSteve Yin *  File Name (AccessibleComponent.idl)
2016*bcb85aadSSteve Yin *
2017*bcb85aadSSteve Yin *  IAccessible2 IDL Specification
2018*bcb85aadSSteve Yin *
2019*bcb85aadSSteve Yin *  Copyright (c) 2007, 2010 Linux Foundation
2020*bcb85aadSSteve Yin *  Copyright (c) 2006 IBM Corporation
2021*bcb85aadSSteve Yin *  Copyright (c) 2000, 2006 Sun Microsystems, Inc.
2022*bcb85aadSSteve Yin *  All rights reserved.
2023*bcb85aadSSteve Yin *
2024*bcb85aadSSteve Yin *
2025*bcb85aadSSteve Yin *  Redistribution and use in source and binary forms, with or without
2026*bcb85aadSSteve Yin *  modification, are permitted provided that the following conditions
2027*bcb85aadSSteve Yin *  are met:
2028*bcb85aadSSteve Yin *
2029*bcb85aadSSteve Yin *   1. Redistributions of source code must retain the above copyright
2030*bcb85aadSSteve Yin *      notice, this list of conditions and the following disclaimer.
2031*bcb85aadSSteve Yin *
2032*bcb85aadSSteve Yin *   2. Redistributions in binary form must reproduce the above
2033*bcb85aadSSteve Yin *      copyright notice, this list of conditions and the following
2034*bcb85aadSSteve Yin *      disclaimer in the documentation and/or other materials
2035*bcb85aadSSteve Yin *      provided with the distribution.
2036*bcb85aadSSteve Yin *
2037*bcb85aadSSteve Yin *   3. Neither the name of the Linux Foundation nor the names of its
2038*bcb85aadSSteve Yin *      contributors may be used to endorse or promote products
2039*bcb85aadSSteve Yin *      derived from this software without specific prior written
2040*bcb85aadSSteve Yin *      permission.
2041*bcb85aadSSteve Yin *
2042*bcb85aadSSteve Yin *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
2043*bcb85aadSSteve Yin *  CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
2044*bcb85aadSSteve Yin *  INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
2045*bcb85aadSSteve Yin *  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
2046*bcb85aadSSteve Yin *  DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
2047*bcb85aadSSteve Yin *  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
2048*bcb85aadSSteve Yin *  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
2049*bcb85aadSSteve Yin *  NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
2050*bcb85aadSSteve Yin *  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
2051*bcb85aadSSteve Yin *  HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
2052*bcb85aadSSteve Yin *  CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
2053*bcb85aadSSteve Yin *  OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
2054*bcb85aadSSteve Yin *  EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
2055*bcb85aadSSteve Yin *
2056*bcb85aadSSteve Yin *  This BSD License conforms to the Open Source Initiative "Simplified
2057*bcb85aadSSteve Yin *  BSD License" as published at:
2058*bcb85aadSSteve Yin *  http://www.opensource.org/licenses/bsd-license.php
2059*bcb85aadSSteve Yin *
2060*bcb85aadSSteve Yin *  IAccessible2 is a trademark of the Linux Foundation. The IAccessible2
2061*bcb85aadSSteve Yin *  mark may be used in accordance with the Linux Foundation Trademark
2062*bcb85aadSSteve Yin *  Policy to indicate compliance with the IAccessible2 specification.
2063*bcb85aadSSteve Yin *
2064*bcb85aadSSteve Yin ************************************************************************/
2065*bcb85aadSSteve Yin
2066*bcb85aadSSteve Yin
2067*bcb85aadSSteve Yin
2068*bcb85aadSSteve Yin
2069*bcb85aadSSteve Yin
2070*bcb85aadSSteve Yin/** A value specifying a color in ARGB format, where each 8 bit color component
2071*bcb85aadSSteve Yinspecifies alpha, red, green, and blue respectively.  The alpha value is optional.
2072*bcb85aadSSteve Yin*/
2073*bcb85aadSSteve Yintypedef long IA2Color;
2074*bcb85aadSSteve Yin
2075*bcb85aadSSteve Yin/** @brief This interface is implemented by any object that can be rendered
2076*bcb85aadSSteve Yin on the screen.
2077*bcb85aadSSteve Yin
2078*bcb85aadSSteve Yin This interface provides the standard mechanism for an assistive technology
2079*bcb85aadSSteve Yin  to retrieve information concerning the graphical representation of an object.
2080*bcb85aadSSteve Yin  Coordinates used by the functions of this interface are specified in
2081*bcb85aadSSteve Yin  different coordinate systems.  Their scale is the same and is equal to
2082*bcb85aadSSteve Yin  that of the screen coordinate system.  In other words all coordinates
2083*bcb85aadSSteve Yin  are measured in pixels.  They differ in their respective origin:
2084*bcb85aadSSteve Yin  <ul>
2085*bcb85aadSSteve Yin   <li>The screen coordinate system has its origin in the upper left
2086*bcb85aadSSteve Yin    corner of the current screen.</li>
2087*bcb85aadSSteve Yin   <li>The origin of the parent coordinate system is the upper left corner
2088*bcb85aadSSteve Yin    of the parent's bounding box.  With no parent the screen coordinate
2089*bcb85aadSSteve Yin    system is used instead.</li>
2090*bcb85aadSSteve Yin  </ul>
2091*bcb85aadSSteve Yin*/
2092*bcb85aadSSteve Yin[object, uuid(1546D4B0-4C98-4bda-89AE-9A64748BDDE4)]
2093*bcb85aadSSteve Yininterface IAccessibleComponent : IUnknown
2094*bcb85aadSSteve Yin{
2095*bcb85aadSSteve Yin
2096*bcb85aadSSteve Yin  /** @brief Returns the location of the upper left corner of the object's
2097*bcb85aadSSteve Yin    bounding box relative to the immediate parent object.
2098*bcb85aadSSteve Yin
2099*bcb85aadSSteve Yin	The coordinates of the bounding box are given relative to the parent's
2100*bcb85aadSSteve Yin	coordinate system. The coordinates of the returned position are relative
2101*bcb85aadSSteve Yin	to this object's parent or relative to the screen on which this object
2102*bcb85aadSSteve Yin    is rendered if it has no parent. If the object is not on any screen
2103*bcb85aadSSteve Yin    the returned position is (0,0).
2104*bcb85aadSSteve Yin
2105*bcb85aadSSteve Yin   @param [out] x
2106*bcb85aadSSteve Yin   @param [out] y
2107*bcb85aadSSteve Yin   @retval S_OK
2108*bcb85aadSSteve Yin  */
2109*bcb85aadSSteve Yin  [propget] HRESULT locationInParent
2110*bcb85aadSSteve Yin    (
2111*bcb85aadSSteve Yin	 [out] long *x,
2112*bcb85aadSSteve Yin     [out, retval] long *y
2113*bcb85aadSSteve Yin    );
2114*bcb85aadSSteve Yin
2115*bcb85aadSSteve Yin  /** @brief Returns the foreground color of this object.
2116*bcb85aadSSteve Yin   @param [out] foreground
2117*bcb85aadSSteve Yin    The returned color is the foreground color of this object or, if
2118*bcb85aadSSteve Yin    that is not supported, the default foreground color.
2119*bcb85aadSSteve Yin   @retval S_OK
2120*bcb85aadSSteve Yin  */
2121*bcb85aadSSteve Yin  [propget] HRESULT foreground
2122*bcb85aadSSteve Yin    (
2123*bcb85aadSSteve Yin     [out, retval] IA2Color *foreground
2124*bcb85aadSSteve Yin    );
2125*bcb85aadSSteve Yin
2126*bcb85aadSSteve Yin   /** @brief Returns the background color of this object.
2127*bcb85aadSSteve Yin    @param [out] background
2128*bcb85aadSSteve Yin     The returned color is the background color of this object or, if
2129*bcb85aadSSteve Yin     that is not supported, the default background color.
2130*bcb85aadSSteve Yin    @retval S_OK
2131*bcb85aadSSteve Yin   */
2132*bcb85aadSSteve Yin  [propget] HRESULT background
2133*bcb85aadSSteve Yin    (
2134*bcb85aadSSteve Yin     [out, retval] IA2Color *background
2135*bcb85aadSSteve Yin    );
2136*bcb85aadSSteve Yin}
2137*bcb85aadSSteve Yin/*************************************************************************
2138*bcb85aadSSteve Yin *
2139*bcb85aadSSteve Yin *  File Name (AccessibleValue.idl)
2140*bcb85aadSSteve Yin *
2141*bcb85aadSSteve Yin *  IAccessible2 IDL Specification
2142*bcb85aadSSteve Yin *
2143*bcb85aadSSteve Yin *  Copyright (c) 2007, 2010 Linux Foundation
2144*bcb85aadSSteve Yin *  Copyright (c) 2006 IBM Corporation
2145*bcb85aadSSteve Yin *  Copyright (c) 2000, 2006 Sun Microsystems, Inc.
2146*bcb85aadSSteve Yin *  All rights reserved.
2147*bcb85aadSSteve Yin *
2148*bcb85aadSSteve Yin *
2149*bcb85aadSSteve Yin *  Redistribution and use in source and binary forms, with or without
2150*bcb85aadSSteve Yin *  modification, are permitted provided that the following conditions
2151*bcb85aadSSteve Yin *  are met:
2152*bcb85aadSSteve Yin *
2153*bcb85aadSSteve Yin *   1. Redistributions of source code must retain the above copyright
2154*bcb85aadSSteve Yin *      notice, this list of conditions and the following disclaimer.
2155*bcb85aadSSteve Yin *
2156*bcb85aadSSteve Yin *   2. Redistributions in binary form must reproduce the above
2157*bcb85aadSSteve Yin *      copyright notice, this list of conditions and the following
2158*bcb85aadSSteve Yin *      disclaimer in the documentation and/or other materials
2159*bcb85aadSSteve Yin *      provided with the distribution.
2160*bcb85aadSSteve Yin *
2161*bcb85aadSSteve Yin *   3. Neither the name of the Linux Foundation nor the names of its
2162*bcb85aadSSteve Yin *      contributors may be used to endorse or promote products
2163*bcb85aadSSteve Yin *      derived from this software without specific prior written
2164*bcb85aadSSteve Yin *      permission.
2165*bcb85aadSSteve Yin *
2166*bcb85aadSSteve Yin *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
2167*bcb85aadSSteve Yin *  CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
2168*bcb85aadSSteve Yin *  INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
2169*bcb85aadSSteve Yin *  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
2170*bcb85aadSSteve Yin *  DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
2171*bcb85aadSSteve Yin *  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
2172*bcb85aadSSteve Yin *  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
2173*bcb85aadSSteve Yin *  NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
2174*bcb85aadSSteve Yin *  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
2175*bcb85aadSSteve Yin *  HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
2176*bcb85aadSSteve Yin *  CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
2177*bcb85aadSSteve Yin *  OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
2178*bcb85aadSSteve Yin *  EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
2179*bcb85aadSSteve Yin *
2180*bcb85aadSSteve Yin *  This BSD License conforms to the Open Source Initiative "Simplified
2181*bcb85aadSSteve Yin *  BSD License" as published at:
2182*bcb85aadSSteve Yin *  http://www.opensource.org/licenses/bsd-license.php
2183*bcb85aadSSteve Yin *
2184*bcb85aadSSteve Yin *  IAccessible2 is a trademark of the Linux Foundation. The IAccessible2
2185*bcb85aadSSteve Yin *  mark may be used in accordance with the Linux Foundation Trademark
2186*bcb85aadSSteve Yin *  Policy to indicate compliance with the IAccessible2 specification.
2187*bcb85aadSSteve Yin *
2188*bcb85aadSSteve Yin ************************************************************************/
2189*bcb85aadSSteve Yin
2190*bcb85aadSSteve Yin
2191*bcb85aadSSteve Yin
2192*bcb85aadSSteve Yin
2193*bcb85aadSSteve Yin
2194*bcb85aadSSteve Yin/** @brief This interface gives access to a single numerical value.
2195*bcb85aadSSteve Yin
2196*bcb85aadSSteve Yin The %IAccessibleValue interface represents a single numerical value and should
2197*bcb85aadSSteve Yin  be implemented by any class that supports numerical value like progress bars
2198*bcb85aadSSteve Yin  and spin boxes.  This interface lets you access the value and its upper and
2199*bcb85aadSSteve Yin  lower bounds.
2200*bcb85aadSSteve Yin*/
2201*bcb85aadSSteve Yin[object, uuid(35855B5B-C566-4fd0-A7B1-E65465600394)]
2202*bcb85aadSSteve Yininterface IAccessibleValue : IUnknown
2203*bcb85aadSSteve Yin{
2204*bcb85aadSSteve Yin
2205*bcb85aadSSteve Yin  /** @brief Returns the value of this object as a number.
2206*bcb85aadSSteve Yin
2207*bcb85aadSSteve Yin   The exact return type is implementation dependent.  Typical types are long and
2208*bcb85aadSSteve Yin    double.
2209*bcb85aadSSteve Yin   @param [out] currentValue
2210*bcb85aadSSteve Yin    Returns the current value represented by this object.  See the section about
2211*bcb85aadSSteve Yin	@ref _variants "VARIANTs" for additional information.
2212*bcb85aadSSteve Yin   @retval S_OK
2213*bcb85aadSSteve Yin   @retval S_FALSE if there is nothing to return, [out] value is a VARIANT with vt = VT_EMPTY
2214*bcb85aadSSteve Yin  */
2215*bcb85aadSSteve Yin  [propget] HRESULT currentValue
2216*bcb85aadSSteve Yin    (
2217*bcb85aadSSteve Yin     [out, retval] VARIANT *currentValue
2218*bcb85aadSSteve Yin    );
2219*bcb85aadSSteve Yin
2220*bcb85aadSSteve Yin  /** @brief Sets the value of this object to the given number.
2221*bcb85aadSSteve Yin
2222*bcb85aadSSteve Yin   The argument is clipped to the valid interval whose upper and lower
2223*bcb85aadSSteve Yin    bounds are returned by the methods IAccessibleValue::maximumValue and
2224*bcb85aadSSteve Yin	IAccessibleValue::minimumValue, i.e. if it is 	lower than the minimum
2225*bcb85aadSSteve Yin	value the new value will be the minimum and if it is greater than the
2226*bcb85aadSSteve Yin	maximum then the new value will be the maximum.
2227*bcb85aadSSteve Yin
2228*bcb85aadSSteve Yin   @param [in] value
2229*bcb85aadSSteve Yin    The new value represented by this object.  The set of admissible types for
2230*bcb85aadSSteve Yin    this argument is implementation dependent.
2231*bcb85aadSSteve Yin   @retval S_OK
2232*bcb85aadSSteve Yin  */
2233*bcb85aadSSteve Yin  HRESULT setCurrentValue
2234*bcb85aadSSteve Yin    (
2235*bcb85aadSSteve Yin     [in] VARIANT value
2236*bcb85aadSSteve Yin    );
2237*bcb85aadSSteve Yin
2238*bcb85aadSSteve Yin  /** @brief Returns the maximal value that can be represented by this object.
2239*bcb85aadSSteve Yin
2240*bcb85aadSSteve Yin   The type of the returned value is implementation dependent.  It does not have
2241*bcb85aadSSteve Yin    to be the same type as that returned by method IAccessibleValue::currentValue.
2242*bcb85aadSSteve Yin
2243*bcb85aadSSteve Yin   @param [out] maximumValue
2244*bcb85aadSSteve Yin    Returns the maximal value in an implementation dependent type. If this object
2245*bcb85aadSSteve Yin    has no upper bound then an empty object is returned.  See the section about
2246*bcb85aadSSteve Yin	@ref _variants "VARIANTs" for additional information.
2247*bcb85aadSSteve Yin   @retval S_OK
2248*bcb85aadSSteve Yin   @retval S_FALSE if there is nothing to return, [out] value is a VARIANT with vt = VT_EMPTY
2249*bcb85aadSSteve Yin  */
2250*bcb85aadSSteve Yin  [propget] HRESULT maximumValue
2251*bcb85aadSSteve Yin    (
2252*bcb85aadSSteve Yin     [out, retval] VARIANT *maximumValue
2253*bcb85aadSSteve Yin    );
2254*bcb85aadSSteve Yin
2255*bcb85aadSSteve Yin  /** @brief Returns the minimal value that can be represented by this object.
2256*bcb85aadSSteve Yin
2257*bcb85aadSSteve Yin   The type of the returned value is implementation dependent.  It does not have
2258*bcb85aadSSteve Yin    to be the same type as that returned by method IAccessibleValue::currentValue.
2259*bcb85aadSSteve Yin
2260*bcb85aadSSteve Yin   @param [out] minimumValue
2261*bcb85aadSSteve Yin    Returns the minimal value in an implementation dependent type. If this object
2262*bcb85aadSSteve Yin    has no lower bound then an empty object is returned.  See the section about
2263*bcb85aadSSteve Yin	@ref _variants "VARIANTs" for additional information.
2264*bcb85aadSSteve Yin   @retval S_OK
2265*bcb85aadSSteve Yin   @retval S_FALSE if there is nothing to return, [out] value is a VARIANT with vt = VT_EMPTY
2266*bcb85aadSSteve Yin  */
2267*bcb85aadSSteve Yin  [propget] HRESULT minimumValue
2268*bcb85aadSSteve Yin    (
2269*bcb85aadSSteve Yin     [out, retval] VARIANT *minimumValue
2270*bcb85aadSSteve Yin    );
2271*bcb85aadSSteve Yin
2272*bcb85aadSSteve Yin};
2273*bcb85aadSSteve Yin/*************************************************************************
2274*bcb85aadSSteve Yin *
2275*bcb85aadSSteve Yin *  File Name (AccessibleText.idl)
2276*bcb85aadSSteve Yin *
2277*bcb85aadSSteve Yin *  IAccessible2 IDL Specification
2278*bcb85aadSSteve Yin *
2279*bcb85aadSSteve Yin *  Copyright (c) 2007, 2013 Linux Foundation
2280*bcb85aadSSteve Yin *  Copyright (c) 2006 IBM Corporation
2281*bcb85aadSSteve Yin *  Copyright (c) 2000, 2006 Sun Microsystems, Inc.
2282*bcb85aadSSteve Yin *  All rights reserved.
2283*bcb85aadSSteve Yin *
2284*bcb85aadSSteve Yin *
2285*bcb85aadSSteve Yin *  Redistribution and use in source and binary forms, with or without
2286*bcb85aadSSteve Yin *  modification, are permitted provided that the following conditions
2287*bcb85aadSSteve Yin *  are met:
2288*bcb85aadSSteve Yin *
2289*bcb85aadSSteve Yin *   1. Redistributions of source code must retain the above copyright
2290*bcb85aadSSteve Yin *      notice, this list of conditions and the following disclaimer.
2291*bcb85aadSSteve Yin *
2292*bcb85aadSSteve Yin *   2. Redistributions in binary form must reproduce the above
2293*bcb85aadSSteve Yin *      copyright notice, this list of conditions and the following
2294*bcb85aadSSteve Yin *      disclaimer in the documentation and/or other materials
2295*bcb85aadSSteve Yin *      provided with the distribution.
2296*bcb85aadSSteve Yin *
2297*bcb85aadSSteve Yin *   3. Neither the name of the Linux Foundation nor the names of its
2298*bcb85aadSSteve Yin *      contributors may be used to endorse or promote products
2299*bcb85aadSSteve Yin *      derived from this software without specific prior written
2300*bcb85aadSSteve Yin *      permission.
2301*bcb85aadSSteve Yin *
2302*bcb85aadSSteve Yin *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
2303*bcb85aadSSteve Yin *  CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
2304*bcb85aadSSteve Yin *  INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
2305*bcb85aadSSteve Yin *  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
2306*bcb85aadSSteve Yin *  DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
2307*bcb85aadSSteve Yin *  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
2308*bcb85aadSSteve Yin *  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
2309*bcb85aadSSteve Yin *  NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
2310*bcb85aadSSteve Yin *  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
2311*bcb85aadSSteve Yin *  HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
2312*bcb85aadSSteve Yin *  CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
2313*bcb85aadSSteve Yin *  OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
2314*bcb85aadSSteve Yin *  EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
2315*bcb85aadSSteve Yin *
2316*bcb85aadSSteve Yin *  This BSD License conforms to the Open Source Initiative "Simplified
2317*bcb85aadSSteve Yin *  BSD License" as published at:
2318*bcb85aadSSteve Yin *  http://www.opensource.org/licenses/bsd-license.php
2319*bcb85aadSSteve Yin *
2320*bcb85aadSSteve Yin *  IAccessible2 is a trademark of the Linux Foundation. The IAccessible2
2321*bcb85aadSSteve Yin *  mark may be used in accordance with the Linux Foundation Trademark
2322*bcb85aadSSteve Yin *  Policy to indicate compliance with the IAccessible2 specification.
2323*bcb85aadSSteve Yin *
2324*bcb85aadSSteve Yin ************************************************************************/
2325*bcb85aadSSteve Yin
2326*bcb85aadSSteve Yin
2327*bcb85aadSSteve Yin
2328*bcb85aadSSteve Yin
2329*bcb85aadSSteve Yin
2330*bcb85aadSSteve Yin
2331*bcb85aadSSteve Yin/** A structure containing a substring and the start and end offsets in the enclosing string.
2332*bcb85aadSSteve Yin
2333*bcb85aadSSteve Yin IAccessibleText::newText and IAccessibleText::oldText return this struct.
2334*bcb85aadSSteve Yin*/
2335*bcb85aadSSteve Yintypedef struct IA2TextSegment {
2336*bcb85aadSSteve Yin  BSTR text;	///< A copy of a segment of text taken from an enclosing paragraph.
2337*bcb85aadSSteve Yin  long start;	///< Index of the first character of the segment in the enclosing text.
2338*bcb85aadSSteve Yin  long end;		///< Index of the character following the last character of the segment in the enclosing text.
2339*bcb85aadSSteve Yin} IA2TextSegment;
2340*bcb85aadSSteve Yin
2341*bcb85aadSSteve Yin/** This enum defines values which specify a text boundary type.
2342*bcb85aadSSteve Yin
2343*bcb85aadSSteve Yin IA2_TEXT_BOUNDARY_SENTENCE is optional.  When a method doesn't implement this
2344*bcb85aadSSteve Yin method it must return S_FALSE.  Typically this feature would not be implemented
2345*bcb85aadSSteve Yin by an application.  However, if the application developer was not satisfied with
2346*bcb85aadSSteve Yin how screen readers have handled the reading of sentences this boundary type
2347*bcb85aadSSteve Yin could be implemented and screen readers could use the application's version of a
2348*bcb85aadSSteve Yin sentence rather than the screen reader's.
2349*bcb85aadSSteve Yin
2350*bcb85aadSSteve Yin The rest of the boundary types must be supported.
2351*bcb85aadSSteve Yin
2352*bcb85aadSSteve Yin This enum is used in IAccessibleText::textBeforeOffset, IAccessibleText::textAtOffset,
2353*bcb85aadSSteve Yin and IAccessibleText::textAfterOffset.
2354*bcb85aadSSteve Yin*/
2355*bcb85aadSSteve Yin
2356*bcb85aadSSteve Yinenum IA2TextBoundaryType {
2357*bcb85aadSSteve Yin  IA2_TEXT_BOUNDARY_CHAR,       /**< Typically, a single character is returned.  In some cases more than
2358*bcb85aadSSteve Yin                                 one character is returned, for example, when a document contains field
2359*bcb85aadSSteve Yin                                 data such as a field containing a date, time, or footnote reference.
2360*bcb85aadSSteve Yin                                 In this case the caret can move over several characters in one movement
2361*bcb85aadSSteve Yin                                 of the caret.  Note that after the caret moves, the caret offset changes
2362*bcb85aadSSteve Yin                                 by the number of characters in the field, e.g. by 8 characters in the
2363*bcb85aadSSteve Yin                                 following date: 03/26/07. */
2364*bcb85aadSSteve Yin  IA2_TEXT_BOUNDARY_WORD,       /**< The range provided matches the range observed when the application
2365*bcb85aadSSteve Yin                                 processes the Ctrl + left arrow and Ctrl + right arrow key sequences.
2366*bcb85aadSSteve Yin                                 Typically this is from the start of one word to the start of the next, but
2367*bcb85aadSSteve Yin                                 various applications are inconsistent in the handling of the end of a line. */
2368*bcb85aadSSteve Yin  IA2_TEXT_BOUNDARY_SENTENCE,   ///< Range is from start of one sentence to the start of another sentence.
2369*bcb85aadSSteve Yin  IA2_TEXT_BOUNDARY_PARAGRAPH,  ///< Range is from start of one paragraph to the start of another paragraph.
2370*bcb85aadSSteve Yin  IA2_TEXT_BOUNDARY_LINE,       /**< Range is from start of one line to the start of another line. This
2371*bcb85aadSSteve Yin                                 often means that an end-of-line character will appear at the end of the
2372*bcb85aadSSteve Yin                                 range. However in the case of some applications an end-of-line character
2373*bcb85aadSSteve Yin                                 indicates the end of a paragraph and the lines composing the paragraph,
2374*bcb85aadSSteve Yin                                 other than the last line, do not contain an end of line character. */
2375*bcb85aadSSteve Yin  IA2_TEXT_BOUNDARY_ALL         ///< Using this value will cause all text to be returned.
2376*bcb85aadSSteve Yin};
2377*bcb85aadSSteve Yin
2378*bcb85aadSSteve Yin/** @brief This interface gives read-only access to text.
2379*bcb85aadSSteve Yin
2380*bcb85aadSSteve Yin The %IAccessibleText interface should be implemented by all components
2381*bcb85aadSSteve Yin  that present textual information on the display like  buttons,
2382*bcb85aadSSteve Yin  text entry fields, or text portions of the document window.  The interface
2383*bcb85aadSSteve Yin  provides access to the text's content, attributes, and spatial location.
2384*bcb85aadSSteve Yin  However, text can not be modified with this interface.  That is the task
2385*bcb85aadSSteve Yin  of the IAccessibleEditableText interface.
2386*bcb85aadSSteve Yin
2387*bcb85aadSSteve Yin The text length, i.e. the number of characters in the text, is
2388*bcb85aadSSteve Yin  returned by IAccessibleText::nCharacters. All methods that operate
2389*bcb85aadSSteve Yin  on particular characters (e.g. IAccessibleText::textAtOffset) use character
2390*bcb85aadSSteve Yin  indices from 0 to length-1. All methods that operate on character positions
2391*bcb85aadSSteve Yin  (e.g. IAccessibleText::text) use indices from 0 to length.
2392*bcb85aadSSteve Yin
2393*bcb85aadSSteve Yin Please note that accessible text does not necessarily support selection.
2394*bcb85aadSSteve Yin  In this case it should behave as if there where no selection.  An empty
2395*bcb85aadSSteve Yin  selection is used for example to express the current cursor position.
2396*bcb85aadSSteve Yin
2397*bcb85aadSSteve Yin Refer to @ref _specialOffsets
2398*bcb85aadSSteve Yin  "Special Offsets for use in the IAccessibleText and IAccessibleEditableText Methods"
2399*bcb85aadSSteve Yin  for information about special offsets that can be used in %IAccessibleText methods.
2400*bcb85aadSSteve Yin
2401*bcb85aadSSteve Yin E_FAIL is returned in the following cases
2402*bcb85aadSSteve Yin @li endOffset < startOffset
2403*bcb85aadSSteve Yin @li endoffset > length
2404*bcb85aadSSteve Yin*/
2405*bcb85aadSSteve Yin[object, uuid(24FD2FFB-3AAD-4a08-8335-A3AD89C0FB4B)]
2406*bcb85aadSSteve Yininterface IAccessibleText : IUnknown
2407*bcb85aadSSteve Yin{
2408*bcb85aadSSteve Yin
2409*bcb85aadSSteve Yin  /** @brief Adds a text selection
2410*bcb85aadSSteve Yin   @param [in] startOffset
2411*bcb85aadSSteve Yin    Starting offset ( 0 based).
2412*bcb85aadSSteve Yin   @param [in] endOffset
2413*bcb85aadSSteve Yin    Offset of first character after new selection (0 based).
2414*bcb85aadSSteve Yin   @retval S_OK
2415*bcb85aadSSteve Yin   @retval E_INVALIDARG if bad [in] passed
2416*bcb85aadSSteve Yin   @note  Refer to @ref _specialOffsets
2417*bcb85aadSSteve Yin    "Special Offsets for use in the IAccessibleText and IAccessibleEditableText Methods"
2418*bcb85aadSSteve Yin    for information about special offsets that can be used in %IAccessibleText methods.
2419*bcb85aadSSteve Yin  */
2420*bcb85aadSSteve Yin  HRESULT addSelection
2421*bcb85aadSSteve Yin    (
2422*bcb85aadSSteve Yin     [in] long startOffset,
2423*bcb85aadSSteve Yin     [in] long endOffset
2424*bcb85aadSSteve Yin    );
2425*bcb85aadSSteve Yin
2426*bcb85aadSSteve Yin  /** @brief Returns text attributes.
2427*bcb85aadSSteve Yin   @param [in] offset
2428*bcb85aadSSteve Yin    Text offset (0 based).  Refer to @ref _specialOffsets
2429*bcb85aadSSteve Yin    "Special Offsets for use in the IAccessibleText and IAccessibleEditableText Methods"
2430*bcb85aadSSteve Yin    for information about special offsets that can be used in %IAccessibleText methods.
2431*bcb85aadSSteve Yin   @param [out] startOffset
2432*bcb85aadSSteve Yin    The starting offset of the character range over which all text attributes match
2433*bcb85aadSSteve Yin    those of offset. (0 based)
2434*bcb85aadSSteve Yin   @param [out] endOffset
2435*bcb85aadSSteve Yin    The offset of the first character past the character range over which all text
2436*bcb85aadSSteve Yin    attributes match those of offset. (0 based)
2437*bcb85aadSSteve Yin   @param [out] textAttributes
2438*bcb85aadSSteve Yin    A string of attributes describing the text.  The attributes are described in the
2439*bcb85aadSSteve Yin    <a href="http://www.linuxfoundation.org/en/Accessibility/IAccessible2/TextAttributes">
2440*bcb85aadSSteve Yin    text attributes specification</a> on the %IAccessible2 web site.
2441*bcb85aadSSteve Yin   @retval S_OK
2442*bcb85aadSSteve Yin   @retval S_FALSE if there is nothing to return, [out] values are 0s and NULL respectively
2443*bcb85aadSSteve Yin   @retval E_INVALIDARG if bad [in] passed
2444*bcb85aadSSteve Yin  */
2445*bcb85aadSSteve Yin  [propget] HRESULT attributes
2446*bcb85aadSSteve Yin    (
2447*bcb85aadSSteve Yin     [in] long offset,
2448*bcb85aadSSteve Yin     [out] long *startOffset,
2449*bcb85aadSSteve Yin     [out] long *endOffset,
2450*bcb85aadSSteve Yin     [out, retval] BSTR *textAttributes
2451*bcb85aadSSteve Yin    );
2452*bcb85aadSSteve Yin
2453*bcb85aadSSteve Yin  /** @brief Returns the position of the caret.
2454*bcb85aadSSteve Yin
2455*bcb85aadSSteve Yin   Returns the 0-based offset of the caret within the text.  If the text is
2456*bcb85aadSSteve Yin   implemented as a tree of text objects with embed characters in higher levels
2457*bcb85aadSSteve Yin   representing substrings of child text objects and the caret is in one of the
2458*bcb85aadSSteve Yin   child text objects, then the offset in the higher level text object would be
2459*bcb85aadSSteve Yin   at the embed character representing child text object that contains the caret.
2460*bcb85aadSSteve Yin
2461*bcb85aadSSteve Yin   For example, if the string "one two three" is implemented as a two text objects,
2462*bcb85aadSSteve Yin   with a top level text object containing an embed character "one ? three" and a
2463*bcb85aadSSteve Yin   child text object containing "two" and if the caret is in the descendant object
2464*bcb85aadSSteve Yin   just before the 'o' in "two", then:
2465*bcb85aadSSteve Yin   <ul>
2466*bcb85aadSSteve Yin   <li>the caretOffset for the "one ? three" object would be 4, matching the embed character</li>
2467*bcb85aadSSteve Yin   <li>the caretOffset for "two" would be 2, matching the "o"</li>
2468*bcb85aadSSteve Yin   </ul>
2469*bcb85aadSSteve Yin   The caret position/offset is that of the character logically following it, e.g.
2470*bcb85aadSSteve Yin   to the right of it in a left to right language, or to the left of it in a right
2471*bcb85aadSSteve Yin   to left language.
2472*bcb85aadSSteve Yin   @param [out] offset
2473*bcb85aadSSteve Yin    The returned offset is relative to the text represented by this object.
2474*bcb85aadSSteve Yin   @retval S_OK
2475*bcb85aadSSteve Yin   @retval S_FALSE if the caret is not currently active on this object, i.e. the
2476*bcb85aadSSteve Yin    caret is located on some other object.  The returned offset value will be -1.
2477*bcb85aadSSteve Yin   @note S_FALSE (and an offset of -1) will not be returned if the caret is somewhere
2478*bcb85aadSSteve Yin   in the text object or one of its descendants.
2479*bcb85aadSSteve Yin  */
2480*bcb85aadSSteve Yin  [propget] HRESULT caretOffset
2481*bcb85aadSSteve Yin    (
2482*bcb85aadSSteve Yin     [out, retval] long *offset
2483*bcb85aadSSteve Yin    );
2484*bcb85aadSSteve Yin
2485*bcb85aadSSteve Yin
2486*bcb85aadSSteve Yin  /** @brief Returns the bounding box of the specified position.
2487*bcb85aadSSteve Yin
2488*bcb85aadSSteve Yin   The virtual character after the last character of the represented
2489*bcb85aadSSteve Yin    text, i.e. the one at position length is a special case. It represents the
2490*bcb85aadSSteve Yin    current input position and will therefore typically be queried by AT more
2491*bcb85aadSSteve Yin    often than other positions.  Because it does not represent an existing character
2492*bcb85aadSSteve Yin    its bounding box is defined in relation to preceding characters.  It should be
2493*bcb85aadSSteve Yin    roughly equivalent to the bounding box of some character when inserted at the
2494*bcb85aadSSteve Yin    end of the text.  Its height typically being the maximal height of all the
2495*bcb85aadSSteve Yin    characters in the text or the height of the preceding character, its width being
2496*bcb85aadSSteve Yin    at least one pixel so that the bounding box is not degenerate.
2497*bcb85aadSSteve Yin
2498*bcb85aadSSteve Yin   Note that the index 'length' is not always valid.  Whether it is or not is
2499*bcb85aadSSteve Yin    implementation dependent.  It typically is when text is editable or otherwise
2500*bcb85aadSSteve Yin    when on the screen the caret can be placed behind the text.  You can be sure
2501*bcb85aadSSteve Yin    that the index is valid after you have received a ::IA2_EVENT_TEXT_CARET_MOVED
2502*bcb85aadSSteve Yin    event for this index.
2503*bcb85aadSSteve Yin   @param [in] offset
2504*bcb85aadSSteve Yin    Index of the character for which to return its bounding box. The valid range
2505*bcb85aadSSteve Yin    is 0..length.  Refer to @ref _specialOffsets
2506*bcb85aadSSteve Yin    "Special Offsets for use in the IAccessibleText and IAccessibleEditableText Methods"
2507*bcb85aadSSteve Yin    for information about special offsets that can be used in %IAccessibleText methods.
2508*bcb85aadSSteve Yin   @param [in] coordType
2509*bcb85aadSSteve Yin    Specifies if the coordinates are relative to the screen or to the parent window.
2510*bcb85aadSSteve Yin   @param [out] x
2511*bcb85aadSSteve Yin    X coordinate of the top left corner of the bounding box of the referenced character.
2512*bcb85aadSSteve Yin   @param [out] y
2513*bcb85aadSSteve Yin    Y coordinate of the top left corner of the bounding box of the referenced character.
2514*bcb85aadSSteve Yin   @param [out] width
2515*bcb85aadSSteve Yin    Width of the bounding box of the referenced character.
2516*bcb85aadSSteve Yin   @param [out] height
2517*bcb85aadSSteve Yin    Height of the bounding box of the referenced character.
2518*bcb85aadSSteve Yin   @retval S_OK
2519*bcb85aadSSteve Yin   @retval E_INVALIDARG if bad [in] passed
2520*bcb85aadSSteve Yin  */
2521*bcb85aadSSteve Yin  [propget] HRESULT characterExtents
2522*bcb85aadSSteve Yin    (
2523*bcb85aadSSteve Yin     [in] long offset,
2524*bcb85aadSSteve Yin     [in] enum IA2CoordinateType coordType,
2525*bcb85aadSSteve Yin     [out] long *x,
2526*bcb85aadSSteve Yin     [out] long *y,
2527*bcb85aadSSteve Yin     [out] long *width,
2528*bcb85aadSSteve Yin     [out, retval] long *height
2529*bcb85aadSSteve Yin    );
2530*bcb85aadSSteve Yin
2531*bcb85aadSSteve Yin
2532*bcb85aadSSteve Yin  /** @brief Returns the number of active non-contiguous selections
2533*bcb85aadSSteve Yin   @param [out] nSelections
2534*bcb85aadSSteve Yin   @retval S_OK
2535*bcb85aadSSteve Yin  */
2536*bcb85aadSSteve Yin  [propget] HRESULT nSelections
2537*bcb85aadSSteve Yin    (
2538*bcb85aadSSteve Yin     [out, retval] long *nSelections
2539*bcb85aadSSteve Yin    );
2540*bcb85aadSSteve Yin
2541*bcb85aadSSteve Yin  /** @brief Returns the text position for the specified screen position.
2542*bcb85aadSSteve Yin
2543*bcb85aadSSteve Yin   Given a point return the zero-based index of the character under that
2544*bcb85aadSSteve Yin   point.  The same functionality could be achieved by using the bounding
2545*bcb85aadSSteve Yin   boxes for each character as returned by IAccessibleText::characterExtents.
2546*bcb85aadSSteve Yin   The method IAccessibleText::offsetAtPoint, however, can be implemented
2547*bcb85aadSSteve Yin   more efficiently.
2548*bcb85aadSSteve Yin
2549*bcb85aadSSteve Yin   @param [in] x
2550*bcb85aadSSteve Yin    The position's x value for which to look up the index of the character that
2551*bcb85aadSSteve Yin    is rendered on to the display at that point.
2552*bcb85aadSSteve Yin   @param [in] y
2553*bcb85aadSSteve Yin    The position's y value for which to look up the index of the character that
2554*bcb85aadSSteve Yin    is rendered on to the display at that point.
2555*bcb85aadSSteve Yin   @param [in] coordType
2556*bcb85aadSSteve Yin    Screen coordinates or window coordinates.
2557*bcb85aadSSteve Yin   @param [out] offset
2558*bcb85aadSSteve Yin    Index of the character under the given point or -1 if the point
2559*bcb85aadSSteve Yin    is invalid or there is no character under the point.
2560*bcb85aadSSteve Yin   @retval S_OK
2561*bcb85aadSSteve Yin   @retval S_FALSE if nothing to return, [out] value is -1
2562*bcb85aadSSteve Yin
2563*bcb85aadSSteve Yin   @retval E_INVALIDARG if bad [in] passed
2564*bcb85aadSSteve Yin    */
2565*bcb85aadSSteve Yin  [propget] HRESULT offsetAtPoint
2566*bcb85aadSSteve Yin    (
2567*bcb85aadSSteve Yin     [in] long x,
2568*bcb85aadSSteve Yin     [in] long y,
2569*bcb85aadSSteve Yin     [in] enum IA2CoordinateType coordType,
2570*bcb85aadSSteve Yin     [out, retval] long *offset
2571*bcb85aadSSteve Yin    );
2572*bcb85aadSSteve Yin
2573*bcb85aadSSteve Yin  /** @brief Returns the character offsets of Nth active text selection
2574*bcb85aadSSteve Yin
2575*bcb85aadSSteve Yin   Returns the 0-based starting and ending offsets of the Nth selection.  If the
2576*bcb85aadSSteve Yin   text is implemented as a tree of text objects with embed characters in higher
2577*bcb85aadSSteve Yin   levels representing substrings of child text objects, consider the following.
2578*bcb85aadSSteve Yin   If the starting selection offset is in one of the child text objects, then the
2579*bcb85aadSSteve Yin   starting offset in the higher level text object would be at the embed character
2580*bcb85aadSSteve Yin   representing the child text object that contains the starting selection offset.
2581*bcb85aadSSteve Yin   If the ending selection offset is in one of the child text objects, then the
2582*bcb85aadSSteve Yin   ending offset in the higher level text object would be just after the embed
2583*bcb85aadSSteve Yin   character representing the child text object that contains the ending selection
2584*bcb85aadSSteve Yin   offset.
2585*bcb85aadSSteve Yin
2586*bcb85aadSSteve Yin   For example, if the string "one two three" is implemented as a two text objects,
2587*bcb85aadSSteve Yin   with a top level text object containing an embed character "one ? three" and a
2588*bcb85aadSSteve Yin   child text object containing "two" and if the selection is the string "two" then:
2589*bcb85aadSSteve Yin   <ul>
2590*bcb85aadSSteve Yin   <li>the startOffset for the "one ? three" object would be 4, matching the embed character and the endOffset would be 5.</li>
2591*bcb85aadSSteve Yin   <li>the startOffset for the "two" object would be 0, and the endOffset would be 3</li>
2592*bcb85aadSSteve Yin   </ul>
2593*bcb85aadSSteve Yin   Selection offsets are that of the character logically following it, e.g.
2594*bcb85aadSSteve Yin   to the right of it in a left to right language or to the left of it in a right to left language.
2595*bcb85aadSSteve Yin   @param [in] selectionIndex
2596*bcb85aadSSteve Yin    Index of selection (0 based).
2597*bcb85aadSSteve Yin   @param [out] startOffset
2598*bcb85aadSSteve Yin    0 based offset of first selected character
2599*bcb85aadSSteve Yin   @param [out] endOffset
2600*bcb85aadSSteve Yin    0 based offset of one past the last selected character.
2601*bcb85aadSSteve Yin   @retval S_OK
2602*bcb85aadSSteve Yin   @retval E_INVALIDARG if bad [in] passed
2603*bcb85aadSSteve Yin  */
2604*bcb85aadSSteve Yin  [propget] HRESULT selection
2605*bcb85aadSSteve Yin    (
2606*bcb85aadSSteve Yin     [in] long selectionIndex,
2607*bcb85aadSSteve Yin     [out] long *startOffset,
2608*bcb85aadSSteve Yin     [out, retval] long *endOffset
2609*bcb85aadSSteve Yin    );
2610*bcb85aadSSteve Yin
2611*bcb85aadSSteve Yin  /** @brief Returns the substring between the two given indices.
2612*bcb85aadSSteve Yin
2613*bcb85aadSSteve Yin   The substring starts with the character at startOffset (inclusive) and up to
2614*bcb85aadSSteve Yin    the character at endOffset (exclusive), if startOffset is less or equal
2615*bcb85aadSSteve Yin    endOffset.  If endOffset is lower than startOffset, the result is the same
2616*bcb85aadSSteve Yin    as a call with the two arguments being exchanged.
2617*bcb85aadSSteve Yin
2618*bcb85aadSSteve Yin   The whole text can be requested by passing the indices zero and
2619*bcb85aadSSteve Yin    IAccessibleText::nCharacters. If both indices have the same value, an empty
2620*bcb85aadSSteve Yin    string is returned.
2621*bcb85aadSSteve Yin   @param [in] startOffset
2622*bcb85aadSSteve Yin    Index of the first character to include in the returned string. The valid range
2623*bcb85aadSSteve Yin    is 0..length.
2624*bcb85aadSSteve Yin   @param [in] endOffset
2625*bcb85aadSSteve Yin    Index of the last character to exclude in the returned string. The valid range
2626*bcb85aadSSteve Yin    is 0..length.
2627*bcb85aadSSteve Yin   @param [out] text
2628*bcb85aadSSteve Yin    Returns the substring starting with the character at startOffset (inclusive)
2629*bcb85aadSSteve Yin    and up to the character at endOffset (exclusive), if startOffset is less than
2630*bcb85aadSSteve Yin    or equal to endOffset.
2631*bcb85aadSSteve Yin   @retval S_OK
2632*bcb85aadSSteve Yin   @retval E_INVALIDARG if bad [in] passed
2633*bcb85aadSSteve Yin   @note
2634*bcb85aadSSteve Yin   @li The returned string may be longer than endOffset-startOffset bytes if text
2635*bcb85aadSSteve Yin    contains multi-byte characters.
2636*bcb85aadSSteve Yin   @li Refer to @ref _specialOffsets
2637*bcb85aadSSteve Yin    "Special Offsets for use in the IAccessibleText and IAccessibleEditableText Methods"
2638*bcb85aadSSteve Yin    for information about special offsets that can be used in %IAccessibleText methods.
2639*bcb85aadSSteve Yin  */
2640*bcb85aadSSteve Yin  [propget] HRESULT text
2641*bcb85aadSSteve Yin    (
2642*bcb85aadSSteve Yin     [in] long startOffset,
2643*bcb85aadSSteve Yin     [in] long endOffset,
2644*bcb85aadSSteve Yin     [out, retval] BSTR *text
2645*bcb85aadSSteve Yin    );
2646*bcb85aadSSteve Yin
2647*bcb85aadSSteve Yin  /** @brief Returns a text portion before the given position.
2648*bcb85aadSSteve Yin
2649*bcb85aadSSteve Yin   Returns the substring of the specified text type that is located before the
2650*bcb85aadSSteve Yin    given character and does not include it. The result of this method should be
2651*bcb85aadSSteve Yin    same as a result for IAccessibleText::textAtOffset with a suitably decreased
2652*bcb85aadSSteve Yin    index value.
2653*bcb85aadSSteve Yin
2654*bcb85aadSSteve Yin   For example, if text type is ::IA2_TEXT_BOUNDARY_WORD, then the complete
2655*bcb85aadSSteve Yin    word that is closest to and located before offset is returned.
2656*bcb85aadSSteve Yin
2657*bcb85aadSSteve Yin   If the index is valid, but no text is found, S_FALSE is returned along with out
2658*bcb85aadSSteve Yin    values of 0, 0, and a NULL pointer.  This would happen for boundary types other
2659*bcb85aadSSteve Yin    than character when the text consists entirely of whitespace.
2660*bcb85aadSSteve Yin
2661*bcb85aadSSteve Yin   @param [in] offset
2662*bcb85aadSSteve Yin    Index of the character for which to return the text part before it.  The index
2663*bcb85aadSSteve Yin    character will not be part of the returned string. The valid range is 0..length.
2664*bcb85aadSSteve Yin    Refer to @ref _specialOffsets
2665*bcb85aadSSteve Yin    "Special Offsets for use in the IAccessibleText and IAccessibleEditableText Methods"
2666*bcb85aadSSteve Yin    for information about special offsets that can be used in %IAccessibleText methods.
2667*bcb85aadSSteve Yin   @param [in] boundaryType
2668*bcb85aadSSteve Yin    The type of the text portion to return.  See ::IA2TextBoundaryType for the
2669*bcb85aadSSteve Yin    complete list.
2670*bcb85aadSSteve Yin   @param [out] startOffset
2671*bcb85aadSSteve Yin    0 based offset of first character.
2672*bcb85aadSSteve Yin   @param [out] endOffset
2673*bcb85aadSSteve Yin    0 based offset of one past the last character.
2674*bcb85aadSSteve Yin   @param [out] text
2675*bcb85aadSSteve Yin    Returns the requested text portion.  This portion may be empty or invalid when
2676*bcb85aadSSteve Yin    no appropriate text portion is found or text type is invalid.
2677*bcb85aadSSteve Yin   @retval S_OK
2678*bcb85aadSSteve Yin   @retval S_FALSE if the requested boundary type is not implemented, such as
2679*bcb85aadSSteve Yin    ::IA2_TEXT_BOUNDARY_SENTENCE, or if there is nothing to return;
2680*bcb85aadSSteve Yin    [out] values are 0s and NULL respectively
2681*bcb85aadSSteve Yin   @retval E_INVALIDARG if bad [in] passed
2682*bcb85aadSSteve Yin  */
2683*bcb85aadSSteve Yin  [propget] HRESULT textBeforeOffset
2684*bcb85aadSSteve Yin    (
2685*bcb85aadSSteve Yin     [in] long offset,
2686*bcb85aadSSteve Yin     [in] enum IA2TextBoundaryType boundaryType,
2687*bcb85aadSSteve Yin     [out] long *startOffset,
2688*bcb85aadSSteve Yin     [out] long *endOffset,
2689*bcb85aadSSteve Yin     [out, retval] BSTR *text
2690*bcb85aadSSteve Yin    );
2691*bcb85aadSSteve Yin
2692*bcb85aadSSteve Yin  /** @brief Returns a text portion after the given position.
2693*bcb85aadSSteve Yin
2694*bcb85aadSSteve Yin   Returns the substring of the specified text type that is located after the
2695*bcb85aadSSteve Yin    given character and does not include it. The result of this method should be
2696*bcb85aadSSteve Yin    same as a result for IAccessibleText::textAtOffset with a suitably increased
2697*bcb85aadSSteve Yin    index value.
2698*bcb85aadSSteve Yin
2699*bcb85aadSSteve Yin   For example, if text type is ::IA2_TEXT_BOUNDARY_WORD, then the complete
2700*bcb85aadSSteve Yin    word that is closest to and located after offset is returned.
2701*bcb85aadSSteve Yin
2702*bcb85aadSSteve Yin   If the index is valid, but no text is found, S_FALSE is returned along with out
2703*bcb85aadSSteve Yin    values of 0, 0, and a NULL pointer.  This would happen for boundary types other
2704*bcb85aadSSteve Yin    than character when the text consists entirely of whitespace.
2705*bcb85aadSSteve Yin
2706*bcb85aadSSteve Yin   @param [in] offset
2707*bcb85aadSSteve Yin    Index of the character for which to return the text part after it.  The index
2708*bcb85aadSSteve Yin    character will not be part of the returned string. The valid range is 0..length.
2709*bcb85aadSSteve Yin    Refer to @ref _specialOffsets
2710*bcb85aadSSteve Yin    "Special Offsets for use in the IAccessibleText and IAccessibleEditableText Methods"
2711*bcb85aadSSteve Yin    for information about special offsets that can be used in %IAccessibleText methods.
2712*bcb85aadSSteve Yin   @param [in] boundaryType
2713*bcb85aadSSteve Yin    The type of the text portion to return.  See ::IA2TextBoundaryType for the complete
2714*bcb85aadSSteve Yin    list.
2715*bcb85aadSSteve Yin   @param [out] startOffset
2716*bcb85aadSSteve Yin    0 based offset of first character.
2717*bcb85aadSSteve Yin   @param [out] endOffset
2718*bcb85aadSSteve Yin    0 based offset of one past the last character.
2719*bcb85aadSSteve Yin   @param [out] text
2720*bcb85aadSSteve Yin    Returns the requested text portion.  This portion may be empty or invalid when
2721*bcb85aadSSteve Yin    no appropriate text portion is found or text type is invalid.
2722*bcb85aadSSteve Yin   @retval S_OK
2723*bcb85aadSSteve Yin   @retval S_FALSE if the requested boundary type is not implemented, such as
2724*bcb85aadSSteve Yin    ::IA2_TEXT_BOUNDARY_SENTENCE, or if there is nothing to return;
2725*bcb85aadSSteve Yin    [out] values are 0s and NULL respectively
2726*bcb85aadSSteve Yin   @retval E_INVALIDARG if bad [in] passed
2727*bcb85aadSSteve Yin  */
2728*bcb85aadSSteve Yin  [propget] HRESULT textAfterOffset
2729*bcb85aadSSteve Yin    (
2730*bcb85aadSSteve Yin     [in] long offset,
2731*bcb85aadSSteve Yin     [in] enum IA2TextBoundaryType boundaryType,
2732*bcb85aadSSteve Yin     [out] long *startOffset,
2733*bcb85aadSSteve Yin     [out] long *endOffset,
2734*bcb85aadSSteve Yin     [out, retval] BSTR *text
2735*bcb85aadSSteve Yin    );
2736*bcb85aadSSteve Yin
2737*bcb85aadSSteve Yin  /** @brief Returns a text portion that spans the given position.
2738*bcb85aadSSteve Yin
2739*bcb85aadSSteve Yin   Returns the substring defined by the specified boundary type at the specified
2740*bcb85aadSSteve Yin    offset.  Refer to IA2TextBoundaryType for more details.
2741*bcb85aadSSteve Yin
2742*bcb85aadSSteve Yin   For the word boundary type the returned string will contain the word at the
2743*bcb85aadSSteve Yin    offset if the offset is inside a word and will contain the word before the
2744*bcb85aadSSteve Yin    offset if the offset is not inside a word.  All offsets from the first to the
2745*bcb85aadSSteve Yin    last characters of a word are considered inside the word.  Boundary types of
2746*bcb85aadSSteve Yin    sentence and paragraph should exhibit similar behavior.
2747*bcb85aadSSteve Yin
2748*bcb85aadSSteve Yin   If the index is valid, but no text is found, S_FALSE is returned along with out
2749*bcb85aadSSteve Yin    values of 0, 0, and a NULL pointer.  This would happen for boundary types other
2750*bcb85aadSSteve Yin    than character when the text consists entirely of whitespace.
2751*bcb85aadSSteve Yin
2752*bcb85aadSSteve Yin   @param [in] offset
2753*bcb85aadSSteve Yin    Index of the character for which to return the text part it belongs to.  The valid
2754*bcb85aadSSteve Yin    range is 0..length.
2755*bcb85aadSSteve Yin    Refer to @ref _specialOffsets
2756*bcb85aadSSteve Yin    "Special Offsets for use in the IAccessibleText and IAccessibleEditableText Methods"
2757*bcb85aadSSteve Yin    for information about special offsets that can be used in %IAccessibleText methods.
2758*bcb85aadSSteve Yin   @param [in] boundaryType
2759*bcb85aadSSteve Yin    The type of the text portion to return.  See ::IA2TextBoundaryType for the complete
2760*bcb85aadSSteve Yin    list.
2761*bcb85aadSSteve Yin   @param [out] startOffset
2762*bcb85aadSSteve Yin    0 based offset of first character.
2763*bcb85aadSSteve Yin   @param [out] endOffset
2764*bcb85aadSSteve Yin    0 based offset of one past the last character.
2765*bcb85aadSSteve Yin   @param [out] text
2766*bcb85aadSSteve Yin    Returns the requested text portion.  This portion may be empty or invalid when
2767*bcb85aadSSteve Yin    no appropriate text portion is found or text type is invalid.
2768*bcb85aadSSteve Yin   @retval S_OK
2769*bcb85aadSSteve Yin   @retval S_FALSE if the requested boundary type is not implemented, such as
2770*bcb85aadSSteve Yin    ::IA2_TEXT_BOUNDARY_SENTENCE, or if there is nothing to return;
2771*bcb85aadSSteve Yin    [out] values are 0s and NULL respectively
2772*bcb85aadSSteve Yin   @retval E_INVALIDARG if bad [in] passed
2773*bcb85aadSSteve Yin  */
2774*bcb85aadSSteve Yin  [propget] HRESULT textAtOffset
2775*bcb85aadSSteve Yin    (
2776*bcb85aadSSteve Yin     [in] long offset,
2777*bcb85aadSSteve Yin     [in] enum IA2TextBoundaryType boundaryType,
2778*bcb85aadSSteve Yin     [out] long *startOffset,
2779*bcb85aadSSteve Yin     [out] long *endOffset,
2780*bcb85aadSSteve Yin     [out, retval] BSTR *text
2781*bcb85aadSSteve Yin    );
2782*bcb85aadSSteve Yin
2783*bcb85aadSSteve Yin  /** @brief Unselects a range of text.
2784*bcb85aadSSteve Yin   @param [in] selectionIndex
2785*bcb85aadSSteve Yin    Index of selection to remove (0 based).
2786*bcb85aadSSteve Yin   @retval S_OK
2787*bcb85aadSSteve Yin   @retval E_INVALIDARG if bad [in] passed
2788*bcb85aadSSteve Yin  */
2789*bcb85aadSSteve Yin  HRESULT removeSelection
2790*bcb85aadSSteve Yin    (
2791*bcb85aadSSteve Yin     [in] long selectionIndex
2792*bcb85aadSSteve Yin    );
2793*bcb85aadSSteve Yin
2794*bcb85aadSSteve Yin  /** @brief Sets the position of the caret.
2795*bcb85aadSSteve Yin
2796*bcb85aadSSteve Yin   The caret position/offset is that of the character logically following it,
2797*bcb85aadSSteve Yin   e.g. to the right of it in a left to right language.
2798*bcb85aadSSteve Yin
2799*bcb85aadSSteve Yin   Setting the caret position may or may not alter the current selection.  A
2800*bcb85aadSSteve Yin    change of the selection is notified to the accessibility event listeners with
2801*bcb85aadSSteve Yin    an ::IA2_EVENT_TEXT_SELECTION_CHANGED event.
2802*bcb85aadSSteve Yin
2803*bcb85aadSSteve Yin   When the new caret position differs from the old one (which, of course, is the
2804*bcb85aadSSteve Yin    standard case) this is notified to the accessibility event listeners with an
2805*bcb85aadSSteve Yin    ::IA2_EVENT_TEXT_CARET_MOVED event.
2806*bcb85aadSSteve Yin   @param [in] offset
2807*bcb85aadSSteve Yin    The new index of the caret.  This caret is actually placed to the left side of
2808*bcb85aadSSteve Yin    the character with that index.  An index of 0 places the caret so that the next
2809*bcb85aadSSteve Yin    insertion goes before the first character.  An index of IAccessibleText::nCharacters
2810*bcb85aadSSteve Yin    leads to insertion after the last character.  Refer to @ref _specialOffsets
2811*bcb85aadSSteve Yin    "Special Offsets for use in the IAccessibleText and IAccessibleEditableText Methods"
2812*bcb85aadSSteve Yin    for information about special offsets that can be used in %IAccessibleText methods.
2813*bcb85aadSSteve Yin   @retval S_OK
2814*bcb85aadSSteve Yin   @retval E_FAIL if the caret cannot be set
2815*bcb85aadSSteve Yin   @retval E_INVALIDARG if bad [in] passed
2816*bcb85aadSSteve Yin  */
2817*bcb85aadSSteve Yin  HRESULT setCaretOffset
2818*bcb85aadSSteve Yin    (
2819*bcb85aadSSteve Yin     [in] long offset
2820*bcb85aadSSteve Yin    );
2821*bcb85aadSSteve Yin
2822*bcb85aadSSteve Yin  /** @brief Changes the bounds of an existing selection.
2823*bcb85aadSSteve Yin   @param [in] selectionIndex
2824*bcb85aadSSteve Yin    Index of selection to change (0 based)
2825*bcb85aadSSteve Yin   @param [in] startOffset
2826*bcb85aadSSteve Yin    New starting offset (0 based)
2827*bcb85aadSSteve Yin   @param [in] endOffset
2828*bcb85aadSSteve Yin    New ending offset (0 based) - the offset of the character just past the last character of the selection.
2829*bcb85aadSSteve Yin   @retval S_OK
2830*bcb85aadSSteve Yin   @retval E_INVALIDARG if bad [in] passed
2831*bcb85aadSSteve Yin   @note Refer to @ref _specialOffsets
2832*bcb85aadSSteve Yin    "Special Offsets for use in the IAccessibleText and IAccessibleEditableText Methods"
2833*bcb85aadSSteve Yin    for information about special offsets that can be used in %IAccessibleText methods.
2834*bcb85aadSSteve Yin  */
2835*bcb85aadSSteve Yin  HRESULT setSelection
2836*bcb85aadSSteve Yin    (
2837*bcb85aadSSteve Yin     [in] long selectionIndex,
2838*bcb85aadSSteve Yin     [in] long startOffset,
2839*bcb85aadSSteve Yin     [in] long endOffset
2840*bcb85aadSSteve Yin    );
2841*bcb85aadSSteve Yin
2842*bcb85aadSSteve Yin  /** @brief Returns total number of characters.
2843*bcb85aadSSteve Yin
2844*bcb85aadSSteve Yin   Note that this may be different than the total number of bytes required to store the
2845*bcb85aadSSteve Yin    text, if the text contains multi-byte characters.
2846*bcb85aadSSteve Yin   @param [out] nCharacters
2847*bcb85aadSSteve Yin   @retval S_OK
2848*bcb85aadSSteve Yin  */
2849*bcb85aadSSteve Yin  [propget] HRESULT nCharacters
2850*bcb85aadSSteve Yin    (
2851*bcb85aadSSteve Yin     [out, retval] long *nCharacters
2852*bcb85aadSSteve Yin    );
2853*bcb85aadSSteve Yin
2854*bcb85aadSSteve Yin  /** @brief Makes a specific part of string visible on screen.
2855*bcb85aadSSteve Yin   @param [in] startIndex
2856*bcb85aadSSteve Yin    0 based character offset.
2857*bcb85aadSSteve Yin   @param [in] endIndex
2858*bcb85aadSSteve Yin    0 based character offset - the offset of the character just past the last character of the string.
2859*bcb85aadSSteve Yin   @param [in] scrollType
2860*bcb85aadSSteve Yin    Defines where the object should be placed on the screen.
2861*bcb85aadSSteve Yin   @retval S_OK
2862*bcb85aadSSteve Yin   @retval E_INVALIDARG if bad [in] passed
2863*bcb85aadSSteve Yin   @note Refer to @ref _specialOffsets
2864*bcb85aadSSteve Yin    "Special Offsets for use in the IAccessibleText and IAccessibleEditableText Methods"
2865*bcb85aadSSteve Yin    for information about special offsets that can be used in %IAccessibleText methods.
2866*bcb85aadSSteve Yin  */
2867*bcb85aadSSteve Yin  HRESULT scrollSubstringTo
2868*bcb85aadSSteve Yin    (
2869*bcb85aadSSteve Yin     [in] long startIndex,
2870*bcb85aadSSteve Yin     [in] long endIndex,
2871*bcb85aadSSteve Yin     [in] enum IA2ScrollType scrollType
2872*bcb85aadSSteve Yin    );
2873*bcb85aadSSteve Yin
2874*bcb85aadSSteve Yin  /** @brief Moves the top left of a substring to a specified location.
2875*bcb85aadSSteve Yin
2876*bcb85aadSSteve Yin   @param [in] startIndex
2877*bcb85aadSSteve Yin    0 based character offset.
2878*bcb85aadSSteve Yin   @param [in] endIndex
2879*bcb85aadSSteve Yin    0 based character offset - the offset of the character just past the last character of the string.
2880*bcb85aadSSteve Yin   @param [in] coordinateType
2881*bcb85aadSSteve Yin    Specifies whether the coordinates are relative to the screen or the parent object.
2882*bcb85aadSSteve Yin   @param [in] x
2883*bcb85aadSSteve Yin    Defines the x coordinate.
2884*bcb85aadSSteve Yin   @param [in] y
2885*bcb85aadSSteve Yin    Defines the y coordinate.
2886*bcb85aadSSteve Yin   @retval S_OK
2887*bcb85aadSSteve Yin   @retval S_FALSE if the object is already at the specified location.
2888*bcb85aadSSteve Yin   @retval E_INVALIDARG if bad [in] passed
2889*bcb85aadSSteve Yin   @note Refer to @ref _specialOffsets
2890*bcb85aadSSteve Yin    "Special Offsets for use in the IAccessibleText and IAccessibleEditableText Methods"
2891*bcb85aadSSteve Yin    for information about special offsets that can be used in %IAccessibleText methods.
2892*bcb85aadSSteve Yin  */
2893*bcb85aadSSteve Yin  HRESULT scrollSubstringToPoint
2894*bcb85aadSSteve Yin    (
2895*bcb85aadSSteve Yin     [in] long startIndex,
2896*bcb85aadSSteve Yin     [in] long endIndex,
2897*bcb85aadSSteve Yin     [in] enum IA2CoordinateType coordinateType,
2898*bcb85aadSSteve Yin     [in] long x,
2899*bcb85aadSSteve Yin     [in] long y
2900*bcb85aadSSteve Yin    );
2901*bcb85aadSSteve Yin
2902*bcb85aadSSteve Yin  /** @brief Returns any inserted text.
2903*bcb85aadSSteve Yin
2904*bcb85aadSSteve Yin   Provided for use by the ::IA2_EVENT_TEXT_INSERTED and ::IA2_EVENT_TEXT_UPDATED
2905*bcb85aadSSteve Yin    event handlers.
2906*bcb85aadSSteve Yin
2907*bcb85aadSSteve Yin   This data is only guaranteed to be valid while the thread notifying the event
2908*bcb85aadSSteve Yin   continues. Once the handler has returned, the validity of the data depends on
2909*bcb85aadSSteve Yin   how the server manages the life cycle of its objects. Also, note that the server
2910*bcb85aadSSteve Yin   may have different life cycle management strategies for controls depending on
2911*bcb85aadSSteve Yin   whether or not a control manages its children. Lists, trees, and tables can have
2912*bcb85aadSSteve Yin   a large number of children and thus it's possible that the child objects for those
2913*bcb85aadSSteve Yin   controls would only be created as needed. Servers should document their life cycle
2914*bcb85aadSSteve Yin   strategy as this will be of interest to assistive technology or script engines
2915*bcb85aadSSteve Yin   accessing data out of process or from other threads. Servers only need to save the
2916*bcb85aadSSteve Yin   last inserted block of text and a scope of the entire application is adequate.
2917*bcb85aadSSteve Yin
2918*bcb85aadSSteve Yin   @param [out] newText
2919*bcb85aadSSteve Yin    The text that was just inserted.
2920*bcb85aadSSteve Yin   @retval S_OK
2921*bcb85aadSSteve Yin   @retval S_FALSE If there is nothing to return, the values of IA2TextSegment
2922*bcb85aadSSteve Yin    struct are set as follows:  text = NULL, start = 0, end = 0.
2923*bcb85aadSSteve Yin
2924*bcb85aadSSteve Yin  */
2925*bcb85aadSSteve Yin  [propget] HRESULT newText
2926*bcb85aadSSteve Yin    (
2927*bcb85aadSSteve Yin     [out, retval] IA2TextSegment *newText
2928*bcb85aadSSteve Yin    );
2929*bcb85aadSSteve Yin
2930*bcb85aadSSteve Yin  /** @brief Returns any removed text.
2931*bcb85aadSSteve Yin
2932*bcb85aadSSteve Yin   Provided for use by the IA2_EVENT_TEXT_REMOVED/UPDATED event handlers.
2933*bcb85aadSSteve Yin
2934*bcb85aadSSteve Yin   This data is only guaranteed to be valid while the thread notifying the event
2935*bcb85aadSSteve Yin   continues. Once the handler has returned, the validity of the data depends on
2936*bcb85aadSSteve Yin   how the server manages the life cycle of its objects. Also, note that the server
2937*bcb85aadSSteve Yin   may have different life cycle management strategies for controls depending on
2938*bcb85aadSSteve Yin   whether or not a control manages its children. Lists, trees, and tables can have
2939*bcb85aadSSteve Yin   a large number of children and thus it's possible that the child objects for those
2940*bcb85aadSSteve Yin   controls would only be created as needed. Servers should document their life cycle
2941*bcb85aadSSteve Yin   strategy as this will be of interest to assistive technology or script engines
2942*bcb85aadSSteve Yin   accessing data out of process or from other threads. Servers only need to save the
2943*bcb85aadSSteve Yin   last removed block of text and a scope of the entire application is adequate.
2944*bcb85aadSSteve Yin
2945*bcb85aadSSteve Yin   @param [out] oldText
2946*bcb85aadSSteve Yin    The text that was just removed.
2947*bcb85aadSSteve Yin   @retval S_OK
2948*bcb85aadSSteve Yin   @retval S_FALSE If there is nothing to return, the values of IA2TextSegment
2949*bcb85aadSSteve Yin    struct are set as follows:  text = NULL, start = 0, end = 0.
2950*bcb85aadSSteve Yin  */
2951*bcb85aadSSteve Yin  [propget] HRESULT oldText
2952*bcb85aadSSteve Yin    (
2953*bcb85aadSSteve Yin     [out, retval] IA2TextSegment *oldText
2954*bcb85aadSSteve Yin    );
2955*bcb85aadSSteve Yin
2956*bcb85aadSSteve Yin}
2957*bcb85aadSSteve Yin/*************************************************************************
2958*bcb85aadSSteve Yin *
2959*bcb85aadSSteve Yin *  File Name (AccessibleText2.idl)
2960*bcb85aadSSteve Yin *
2961*bcb85aadSSteve Yin *  IAccessible2 IDL Specification
2962*bcb85aadSSteve Yin *
2963*bcb85aadSSteve Yin *  Copyright (c) 2007, 2013 Linux Foundation
2964*bcb85aadSSteve Yin *  Copyright (c) 2006 IBM Corporation
2965*bcb85aadSSteve Yin *  Copyright (c) 2000, 2006 Sun Microsystems, Inc.
2966*bcb85aadSSteve Yin *  All rights reserved.
2967*bcb85aadSSteve Yin *
2968*bcb85aadSSteve Yin *
2969*bcb85aadSSteve Yin *  Redistribution and use in source and binary forms, with or without
2970*bcb85aadSSteve Yin *  modification, are permitted provided that the following conditions
2971*bcb85aadSSteve Yin *  are met:
2972*bcb85aadSSteve Yin *
2973*bcb85aadSSteve Yin *   1. Redistributions of source code must retain the above copyright
2974*bcb85aadSSteve Yin *      notice, this list of conditions and the following disclaimer.
2975*bcb85aadSSteve Yin *
2976*bcb85aadSSteve Yin *   2. Redistributions in binary form must reproduce the above
2977*bcb85aadSSteve Yin *      copyright notice, this list of conditions and the following
2978*bcb85aadSSteve Yin *      disclaimer in the documentation and/or other materials
2979*bcb85aadSSteve Yin *      provided with the distribution.
2980*bcb85aadSSteve Yin *
2981*bcb85aadSSteve Yin *   3. Neither the name of the Linux Foundation nor the names of its
2982*bcb85aadSSteve Yin *      contributors may be used to endorse or promote products
2983*bcb85aadSSteve Yin *      derived from this software without specific prior written
2984*bcb85aadSSteve Yin *      permission.
2985*bcb85aadSSteve Yin *
2986*bcb85aadSSteve Yin *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
2987*bcb85aadSSteve Yin *  CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
2988*bcb85aadSSteve Yin *  INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
2989*bcb85aadSSteve Yin *  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
2990*bcb85aadSSteve Yin *  DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
2991*bcb85aadSSteve Yin *  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
2992*bcb85aadSSteve Yin *  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
2993*bcb85aadSSteve Yin *  NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
2994*bcb85aadSSteve Yin *  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
2995*bcb85aadSSteve Yin *  HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
2996*bcb85aadSSteve Yin *  CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
2997*bcb85aadSSteve Yin *  OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
2998*bcb85aadSSteve Yin *  EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
2999*bcb85aadSSteve Yin *
3000*bcb85aadSSteve Yin *  This BSD License conforms to the Open Source Initiative "Simplified
3001*bcb85aadSSteve Yin *  BSD License" as published at:
3002*bcb85aadSSteve Yin *  http://www.opensource.org/licenses/bsd-license.php
3003*bcb85aadSSteve Yin *
3004*bcb85aadSSteve Yin *  IAccessible2 is a trademark of the Linux Foundation. The IAccessible2
3005*bcb85aadSSteve Yin *  mark may be used in accordance with the Linux Foundation Trademark
3006*bcb85aadSSteve Yin *  Policy to indicate compliance with the IAccessible2 specification.
3007*bcb85aadSSteve Yin *
3008*bcb85aadSSteve Yin ************************************************************************/
3009*bcb85aadSSteve Yin
3010*bcb85aadSSteve Yin
3011*bcb85aadSSteve Yin
3012*bcb85aadSSteve Yin
3013*bcb85aadSSteve Yin
3014*bcb85aadSSteve Yin
3015*bcb85aadSSteve Yin
3016*bcb85aadSSteve Yin/** @brief This interface gives read-only access to text.
3017*bcb85aadSSteve Yin
3018*bcb85aadSSteve Yin The %IAccessibleText2 interface extends the functionality of the
3019*bcb85aadSSteve Yin %IAccessibleText interface.
3020*bcb85aadSSteve Yin*/
3021*bcb85aadSSteve Yin[object, uuid(9690A9CC-5C80-4DF5-852E-2D5AE4189A54)]
3022*bcb85aadSSteve Yininterface IAccessibleText2 : IAccessibleText
3023*bcb85aadSSteve Yin{
3024*bcb85aadSSteve Yin
3025*bcb85aadSSteve Yin  /** @brief Returns the range and of the specified set of attributes.
3026*bcb85aadSSteve Yin
3027*bcb85aadSSteve Yin   Return the range (start and end offsets) and text attributes that correspond
3028*bcb85aadSSteve Yin    to the given attributes filter at the given offset.
3029*bcb85aadSSteve Yin
3030*bcb85aadSSteve Yin   @param [in] offset
3031*bcb85aadSSteve Yin    The offset at which to search for the attributes specified in the filter.
3032*bcb85aadSSteve Yin   @param [in] filter
3033*bcb85aadSSteve Yin    The requested attribute names.  The filter format is "attribute1, attribute2".
3034*bcb85aadSSteve Yin   @param [out] startOffset
3035*bcb85aadSSteve Yin    The starting (0-based) offset of the text containing the specified attributes.
3036*bcb85aadSSteve Yin   @param [out] endOffset
3037*bcb85aadSSteve Yin    The (0-based) offset one past the last character of the text containing the
3038*bcb85aadSSteve Yin    specified attributes.
3039*bcb85aadSSteve Yin   @param [out] attributeValues
3040*bcb85aadSSteve Yin    The values of the requested attributes.
3041*bcb85aadSSteve Yin   @retval S_OK
3042*bcb85aadSSteve Yin   @retval S_FALSE if nothing to return, [out] values are -1, -1, NULL respectively.
3043*bcb85aadSSteve Yin   @retval E_INVALIDARG if bad [in] passed.
3044*bcb85aadSSteve Yin   */
3045*bcb85aadSSteve Yin  [propget] HRESULT attributeRange
3046*bcb85aadSSteve Yin    (
3047*bcb85aadSSteve Yin     [in] long offset,
3048*bcb85aadSSteve Yin     [in] BSTR filter,
3049*bcb85aadSSteve Yin     [out] long *startOffset,
3050*bcb85aadSSteve Yin     [out] long *endOffset,
3051*bcb85aadSSteve Yin     [out, retval] BSTR *attributeValues
3052*bcb85aadSSteve Yin    );
3053*bcb85aadSSteve Yin
3054*bcb85aadSSteve Yin}
3055*bcb85aadSSteve Yin/*************************************************************************
3056*bcb85aadSSteve Yin *
3057*bcb85aadSSteve Yin *  File Name (AccessibleEditableText.idl)
3058*bcb85aadSSteve Yin *
3059*bcb85aadSSteve Yin *  IAccessible2 IDL Specification
3060*bcb85aadSSteve Yin *
3061*bcb85aadSSteve Yin *  Copyright (c) 2007, 2012 Linux Foundation
3062*bcb85aadSSteve Yin *  Copyright (c) 2006 IBM Corporation
3063*bcb85aadSSteve Yin *  Copyright (c) 2000, 2006 Sun Microsystems, Inc.
3064*bcb85aadSSteve Yin *  All rights reserved.
3065*bcb85aadSSteve Yin *
3066*bcb85aadSSteve Yin *
3067*bcb85aadSSteve Yin *  Redistribution and use in source and binary forms, with or without
3068*bcb85aadSSteve Yin *  modification, are permitted provided that the following conditions
3069*bcb85aadSSteve Yin *  are met:
3070*bcb85aadSSteve Yin *
3071*bcb85aadSSteve Yin *   1. Redistributions of source code must retain the above copyright
3072*bcb85aadSSteve Yin *      notice, this list of conditions and the following disclaimer.
3073*bcb85aadSSteve Yin *
3074*bcb85aadSSteve Yin *   2. Redistributions in binary form must reproduce the above
3075*bcb85aadSSteve Yin *      copyright notice, this list of conditions and the following
3076*bcb85aadSSteve Yin *      disclaimer in the documentation and/or other materials
3077*bcb85aadSSteve Yin *      provided with the distribution.
3078*bcb85aadSSteve Yin *
3079*bcb85aadSSteve Yin *   3. Neither the name of the Linux Foundation nor the names of its
3080*bcb85aadSSteve Yin *      contributors may be used to endorse or promote products
3081*bcb85aadSSteve Yin *      derived from this software without specific prior written
3082*bcb85aadSSteve Yin *      permission.
3083*bcb85aadSSteve Yin *
3084*bcb85aadSSteve Yin *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
3085*bcb85aadSSteve Yin *  CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
3086*bcb85aadSSteve Yin *  INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
3087*bcb85aadSSteve Yin *  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
3088*bcb85aadSSteve Yin *  DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
3089*bcb85aadSSteve Yin *  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
3090*bcb85aadSSteve Yin *  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
3091*bcb85aadSSteve Yin *  NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
3092*bcb85aadSSteve Yin *  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
3093*bcb85aadSSteve Yin *  HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
3094*bcb85aadSSteve Yin *  CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
3095*bcb85aadSSteve Yin *  OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
3096*bcb85aadSSteve Yin *  EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
3097*bcb85aadSSteve Yin *
3098*bcb85aadSSteve Yin *  This BSD License conforms to the Open Source Initiative "Simplified
3099*bcb85aadSSteve Yin *  BSD License" as published at:
3100*bcb85aadSSteve Yin *  http://www.opensource.org/licenses/bsd-license.php
3101*bcb85aadSSteve Yin *
3102*bcb85aadSSteve Yin *  IAccessible2 is a trademark of the Linux Foundation. The IAccessible2
3103*bcb85aadSSteve Yin *  mark may be used in accordance with the Linux Foundation Trademark
3104*bcb85aadSSteve Yin *  Policy to indicate compliance with the IAccessible2 specification.
3105*bcb85aadSSteve Yin *
3106*bcb85aadSSteve Yin ************************************************************************/
3107*bcb85aadSSteve Yin
3108*bcb85aadSSteve Yin
3109*bcb85aadSSteve Yin
3110*bcb85aadSSteve Yin
3111*bcb85aadSSteve Yin
3112*bcb85aadSSteve Yin
3113*bcb85aadSSteve Yin/** @brief This interface provides clipboard capability to text objects.
3114*bcb85aadSSteve Yin
3115*bcb85aadSSteve Yin This interface is typically used in conjunction with the IAccessibleText
3116*bcb85aadSSteve Yin  interface and complements that interface with the additional capability of
3117*bcb85aadSSteve Yin  clipboard operations.  Note that even a read only text object can support
3118*bcb85aadSSteve Yin  the copy capability so this interface is not limited to editable objects.
3119*bcb85aadSSteve Yin
3120*bcb85aadSSteve Yin The substrings used with this interface are specified as follows:
3121*bcb85aadSSteve Yin  If startOffset is less than endOffset, the substring starts with the
3122*bcb85aadSSteve Yin  character at startOffset and ends with the character just before endOffset.
3123*bcb85aadSSteve Yin  If endOffset is lower than startOffset,  the result is the same as a call
3124*bcb85aadSSteve Yin  with the two arguments exchanged. The whole text can be defined by passing
3125*bcb85aadSSteve Yin  the indices zero and IAccessibleText::nCharacters. If both indices have the
3126*bcb85aadSSteve Yin  same value, an empty string is defined.
3127*bcb85aadSSteve Yin
3128*bcb85aadSSteve Yin Refer to the @ref _specialOffsets
3129*bcb85aadSSteve Yin  "Special Offsets for use in the IAccessibleText and IAccessibleEditableText Methods"
3130*bcb85aadSSteve Yin  for information about a special offset constant that can be used in %IAccessibleEditableText methods.
3131*bcb85aadSSteve Yin*/
3132*bcb85aadSSteve Yin[object, uuid(A59AA09A-7011-4b65-939D-32B1FB5547E3)]
3133*bcb85aadSSteve Yininterface IAccessibleEditableText : IUnknown
3134*bcb85aadSSteve Yin{
3135*bcb85aadSSteve Yin
3136*bcb85aadSSteve Yin  /** @brief Copies the text range into the clipboard.
3137*bcb85aadSSteve Yin
3138*bcb85aadSSteve Yin   The selection is set to the specified offsets and then selection is copied into
3139*bcb85aadSSteve Yin   the system clipboard.
3140*bcb85aadSSteve Yin
3141*bcb85aadSSteve Yin   @param [in] startOffset
3142*bcb85aadSSteve Yin    Start index of the text to moved into the clipboard.
3143*bcb85aadSSteve Yin    The valid range is 0..length.
3144*bcb85aadSSteve Yin   @param [in] endOffset
3145*bcb85aadSSteve Yin    End index of the text to moved into the clipboard.
3146*bcb85aadSSteve Yin    The valid range is 0..length.
3147*bcb85aadSSteve Yin   @retval S_OK
3148*bcb85aadSSteve Yin   @retval E_INVALIDARG if bad [in] passed
3149*bcb85aadSSteve Yin   @note Refer to @ref _specialOffsets
3150*bcb85aadSSteve Yin    "Special Offsets for use in the IAccessibleText and IAccessibleEditableText Methods"
3151*bcb85aadSSteve Yin    for information about special offsets that can be used in %IAccessibleEditableText
3152*bcb85aadSSteve Yin    methods.
3153*bcb85aadSSteve Yin   @deprecated This function is available via the application's GUI.
3154*bcb85aadSSteve Yin  */
3155*bcb85aadSSteve Yin  HRESULT copyText
3156*bcb85aadSSteve Yin    (
3157*bcb85aadSSteve Yin     [in] long startOffset,
3158*bcb85aadSSteve Yin     [in] long endOffset
3159*bcb85aadSSteve Yin    );
3160*bcb85aadSSteve Yin
3161*bcb85aadSSteve Yin  /** @brief Deletes a range of text.
3162*bcb85aadSSteve Yin
3163*bcb85aadSSteve Yin   The text between and including the two given indices is deleted
3164*bcb85aadSSteve Yin    from the text represented by this object.
3165*bcb85aadSSteve Yin
3166*bcb85aadSSteve Yin   @param [in] startOffset
3167*bcb85aadSSteve Yin    Start index of the text to be deleted.
3168*bcb85aadSSteve Yin    The valid range is 0..length.
3169*bcb85aadSSteve Yin   @param [in] endOffset
3170*bcb85aadSSteve Yin    End index of the text to be deleted.
3171*bcb85aadSSteve Yin    The valid range is 0..length.
3172*bcb85aadSSteve Yin   @retval S_OK
3173*bcb85aadSSteve Yin   @retval E_INVALIDARG if bad [in] passed
3174*bcb85aadSSteve Yin   @note Refer to @ref _specialOffsets
3175*bcb85aadSSteve Yin    "Special Offsets for use in the IAccessibleText and IAccessibleEditableText Methods"
3176*bcb85aadSSteve Yin    for information about special offsets that can be used in %IAccessibleEditableText
3177*bcb85aadSSteve Yin    methods.
3178*bcb85aadSSteve Yin  */
3179*bcb85aadSSteve Yin  HRESULT deleteText
3180*bcb85aadSSteve Yin    (
3181*bcb85aadSSteve Yin     [in] long startOffset,
3182*bcb85aadSSteve Yin     [in] long endOffset
3183*bcb85aadSSteve Yin    );
3184*bcb85aadSSteve Yin
3185*bcb85aadSSteve Yin  /** @brief Inserts text at the specified position.
3186*bcb85aadSSteve Yin
3187*bcb85aadSSteve Yin   The specified string is inserted at the given index into the text
3188*bcb85aadSSteve Yin    represented by this object.
3189*bcb85aadSSteve Yin
3190*bcb85aadSSteve Yin   @param [in] offset
3191*bcb85aadSSteve Yin    Index at which to insert the text.
3192*bcb85aadSSteve Yin    The valid range is 0..length.
3193*bcb85aadSSteve Yin	Refer to @ref _specialOffsets
3194*bcb85aadSSteve Yin    "Special Offsets for use in the IAccessibleText and IAccessibleEditableText Methods"
3195*bcb85aadSSteve Yin    for information about special offsets that can be used in %IAccessibleEditableText
3196*bcb85aadSSteve Yin    methods.
3197*bcb85aadSSteve Yin   @param [in] text
3198*bcb85aadSSteve Yin    Text that is inserted.
3199*bcb85aadSSteve Yin   @retval S_OK
3200*bcb85aadSSteve Yin   @retval E_INVALIDARG if bad [in] passed
3201*bcb85aadSSteve Yin  */
3202*bcb85aadSSteve Yin  HRESULT insertText
3203*bcb85aadSSteve Yin    (
3204*bcb85aadSSteve Yin     [in] long offset,
3205*bcb85aadSSteve Yin     [in] BSTR *text
3206*bcb85aadSSteve Yin    );
3207*bcb85aadSSteve Yin
3208*bcb85aadSSteve Yin  /** @brief Deletes a range of text and copies it to the clipboard.
3209*bcb85aadSSteve Yin
3210*bcb85aadSSteve Yin   The selection is set to the specified offsets, the selection is then copied into
3211*bcb85aadSSteve Yin    the system clipboard, and then the selection is deleted.
3212*bcb85aadSSteve Yin
3213*bcb85aadSSteve Yin   @param [in] startOffset
3214*bcb85aadSSteve Yin    Start index of the text to be deleted.
3215*bcb85aadSSteve Yin    The valid range is 0..length.
3216*bcb85aadSSteve Yin   @param [in] endOffset
3217*bcb85aadSSteve Yin    End index of the text to be deleted.
3218*bcb85aadSSteve Yin    The valid range is 0..length.
3219*bcb85aadSSteve Yin   @retval S_OK
3220*bcb85aadSSteve Yin   @retval E_INVALIDARG if bad [in] passed
3221*bcb85aadSSteve Yin   @note Refer to @ref _specialOffsets
3222*bcb85aadSSteve Yin    "Special Offsets for use in the IAccessibleText and IAccessibleEditableText Methods"
3223*bcb85aadSSteve Yin    for information about special offsets that can be used in %IAccessibleEditableText
3224*bcb85aadSSteve Yin    methods.
3225*bcb85aadSSteve Yin   @deprecated This function is available via the application's GUI.
3226*bcb85aadSSteve Yin  */
3227*bcb85aadSSteve Yin  HRESULT cutText
3228*bcb85aadSSteve Yin    (
3229*bcb85aadSSteve Yin     [in] long startOffset,
3230*bcb85aadSSteve Yin     [in] long endOffset
3231*bcb85aadSSteve Yin    );
3232*bcb85aadSSteve Yin
3233*bcb85aadSSteve Yin  /** @brief Pastes content from the clipboard.
3234*bcb85aadSSteve Yin
3235*bcb85aadSSteve Yin   Any existing selection is removed, the clipboard content is then pasted into
3236*bcb85aadSSteve Yin    this object's text at the given offset.  This method is similar to the insertText
3237*bcb85aadSSteve Yin    method.  If the index is not valid the system clipboard content is not inserted. The
3238*bcb85aadSSteve Yin    behavior is the same as	when Ctrl+V is used, i.e. the pasted contents are not
3239*bcb85aadSSteve Yin    necessarily plain text.
3240*bcb85aadSSteve Yin
3241*bcb85aadSSteve Yin   @param [in] offset
3242*bcb85aadSSteve Yin    Index at which to insert the content from the system clipboard into
3243*bcb85aadSSteve Yin    the text represented by this object.
3244*bcb85aadSSteve Yin    The valid range is 0..length.
3245*bcb85aadSSteve Yin	Refer to @ref _specialOffsets
3246*bcb85aadSSteve Yin    "Special Offsets for use in the IAccessibleText and IAccessibleEditableText Methods"
3247*bcb85aadSSteve Yin    for information about special offsets that can be used in %IAccessibleEditableText
3248*bcb85aadSSteve Yin    methods.
3249*bcb85aadSSteve Yin   @retval S_OK
3250*bcb85aadSSteve Yin   @retval E_INVALIDARG if bad [in] passed
3251*bcb85aadSSteve Yin   @deprecated This function is available via the application's GUI.
3252*bcb85aadSSteve Yin  */
3253*bcb85aadSSteve Yin  HRESULT pasteText
3254*bcb85aadSSteve Yin    (
3255*bcb85aadSSteve Yin     [in] long offset
3256*bcb85aadSSteve Yin    );
3257*bcb85aadSSteve Yin
3258*bcb85aadSSteve Yin  /** @brief Replaces text.
3259*bcb85aadSSteve Yin
3260*bcb85aadSSteve Yin   The text between the two given indices is replaced by the specified
3261*bcb85aadSSteve Yin    replacement string. This method is equivalent to calling first
3262*bcb85aadSSteve Yin    IAccessibleEditableText::deleteText with the two indices and then
3263*bcb85aadSSteve Yin    calling IAccessibleEditableText::insertText with the replacement text
3264*bcb85aadSSteve Yin	at the start index.
3265*bcb85aadSSteve Yin
3266*bcb85aadSSteve Yin   @param [in] startOffset
3267*bcb85aadSSteve Yin    Start index of the text to be replaced.
3268*bcb85aadSSteve Yin    The valid range is 0..length.
3269*bcb85aadSSteve Yin   @param [in] endOffset
3270*bcb85aadSSteve Yin    End index of the text to be replaced.
3271*bcb85aadSSteve Yin    The valid range is 0..length.
3272*bcb85aadSSteve Yin   @param [in] text
3273*bcb85aadSSteve Yin    The Text that replaces the text between the given indices.
3274*bcb85aadSSteve Yin   @retval S_OK
3275*bcb85aadSSteve Yin   @retval E_INVALIDARG if bad [in] passed
3276*bcb85aadSSteve Yin   @note Refer to @ref _specialOffsets
3277*bcb85aadSSteve Yin    "Special Offsets for use in the IAccessibleText and IAccessibleEditableText Methods"
3278*bcb85aadSSteve Yin    for information about special offsets that can be used in %IAccessibleEditableText
3279*bcb85aadSSteve Yin    methods.
3280*bcb85aadSSteve Yin  */
3281*bcb85aadSSteve Yin  HRESULT replaceText
3282*bcb85aadSSteve Yin    (
3283*bcb85aadSSteve Yin     [in] long startOffset,
3284*bcb85aadSSteve Yin     [in] long endOffset,
3285*bcb85aadSSteve Yin     [in] BSTR *text
3286*bcb85aadSSteve Yin    );
3287*bcb85aadSSteve Yin
3288*bcb85aadSSteve Yin  /** @brief Replaces the attributes of a text range by the given set of attributes.
3289*bcb85aadSSteve Yin
3290*bcb85aadSSteve Yin   Sets the attributes for the text between the two given indices. The old
3291*bcb85aadSSteve Yin    attributes are replaced by the new list of attributes.
3292*bcb85aadSSteve Yin
3293*bcb85aadSSteve Yin   @param [in] startOffset
3294*bcb85aadSSteve Yin    Start index of the text whose attributes are modified.
3295*bcb85aadSSteve Yin    The valid range is 0..length.
3296*bcb85aadSSteve Yin   @param [in] endOffset
3297*bcb85aadSSteve Yin    End index of the text whose attributes are modified.
3298*bcb85aadSSteve Yin    The valid range is 0..length.
3299*bcb85aadSSteve Yin   @param [in] attributes
3300*bcb85aadSSteve Yin    Set of attributes that replaces the old list of attributes of
3301*bcb85aadSSteve Yin    the specified text portion.
3302*bcb85aadSSteve Yin   @retval S_OK
3303*bcb85aadSSteve Yin   @retval E_INVALIDARG if bad [in] passed
3304*bcb85aadSSteve Yin   @note Refer to @ref _specialOffsets
3305*bcb85aadSSteve Yin    "Special Offsets for use in the IAccessibleText and IAccessibleEditableText Methods"
3306*bcb85aadSSteve Yin    for information about special offsets that can be used in %IAccessibleEditableText
3307*bcb85aadSSteve Yin    methods.
3308*bcb85aadSSteve Yin  */
3309*bcb85aadSSteve Yin  HRESULT setAttributes
3310*bcb85aadSSteve Yin    (
3311*bcb85aadSSteve Yin     [in] long startOffset,
3312*bcb85aadSSteve Yin     [in] long endOffset,
3313*bcb85aadSSteve Yin     [in] BSTR *attributes
3314*bcb85aadSSteve Yin    );
3315*bcb85aadSSteve Yin}
3316*bcb85aadSSteve Yin
3317*bcb85aadSSteve Yin/*************************************************************************
3318*bcb85aadSSteve Yin *
3319*bcb85aadSSteve Yin *  File Name (AccessibleHyperlink.idl)
3320*bcb85aadSSteve Yin *
3321*bcb85aadSSteve Yin *  IAccessible2 IDL Specification
3322*bcb85aadSSteve Yin *
3323*bcb85aadSSteve Yin *  Copyright (c) 2007, 2010 Linux Foundation
3324*bcb85aadSSteve Yin *  Copyright (c) 2006 IBM Corporation
3325*bcb85aadSSteve Yin *  Copyright (c) 2000, 2006 Sun Microsystems, Inc.
3326*bcb85aadSSteve Yin *  All rights reserved.
3327*bcb85aadSSteve Yin *
3328*bcb85aadSSteve Yin *
3329*bcb85aadSSteve Yin *  Redistribution and use in source and binary forms, with or without
3330*bcb85aadSSteve Yin *  modification, are permitted provided that the following conditions
3331*bcb85aadSSteve Yin *  are met:
3332*bcb85aadSSteve Yin *
3333*bcb85aadSSteve Yin *   1. Redistributions of source code must retain the above copyright
3334*bcb85aadSSteve Yin *      notice, this list of conditions and the following disclaimer.
3335*bcb85aadSSteve Yin *
3336*bcb85aadSSteve Yin *   2. Redistributions in binary form must reproduce the above
3337*bcb85aadSSteve Yin *      copyright notice, this list of conditions and the following
3338*bcb85aadSSteve Yin *      disclaimer in the documentation and/or other materials
3339*bcb85aadSSteve Yin *      provided with the distribution.
3340*bcb85aadSSteve Yin *
3341*bcb85aadSSteve Yin *   3. Neither the name of the Linux Foundation nor the names of its
3342*bcb85aadSSteve Yin *      contributors may be used to endorse or promote products
3343*bcb85aadSSteve Yin *      derived from this software without specific prior written
3344*bcb85aadSSteve Yin *      permission.
3345*bcb85aadSSteve Yin *
3346*bcb85aadSSteve Yin *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
3347*bcb85aadSSteve Yin *  CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
3348*bcb85aadSSteve Yin *  INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
3349*bcb85aadSSteve Yin *  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
3350*bcb85aadSSteve Yin *  DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
3351*bcb85aadSSteve Yin *  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
3352*bcb85aadSSteve Yin *  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
3353*bcb85aadSSteve Yin *  NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
3354*bcb85aadSSteve Yin *  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
3355*bcb85aadSSteve Yin *  HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
3356*bcb85aadSSteve Yin *  CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
3357*bcb85aadSSteve Yin *  OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
3358*bcb85aadSSteve Yin *  EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
3359*bcb85aadSSteve Yin *
3360*bcb85aadSSteve Yin *  This BSD License conforms to the Open Source Initiative "Simplified
3361*bcb85aadSSteve Yin *  BSD License" as published at:
3362*bcb85aadSSteve Yin *  http://www.opensource.org/licenses/bsd-license.php
3363*bcb85aadSSteve Yin *
3364*bcb85aadSSteve Yin *  IAccessible2 is a trademark of the Linux Foundation. The IAccessible2
3365*bcb85aadSSteve Yin *  mark may be used in accordance with the Linux Foundation Trademark
3366*bcb85aadSSteve Yin *  Policy to indicate compliance with the IAccessible2 specification.
3367*bcb85aadSSteve Yin *
3368*bcb85aadSSteve Yin ************************************************************************/
3369*bcb85aadSSteve Yin
3370*bcb85aadSSteve Yin
3371*bcb85aadSSteve Yin
3372*bcb85aadSSteve Yin
3373*bcb85aadSSteve Yin
3374*bcb85aadSSteve Yin
3375*bcb85aadSSteve Yin/** @brief This interface represents hyperlinks.
3376*bcb85aadSSteve Yin
3377*bcb85aadSSteve Yin This interface represents a hyperlink associated with a single substring
3378*bcb85aadSSteve Yin  of text or single non-text object.  Non-text objects can have either a
3379*bcb85aadSSteve Yin  single link or a collection of links such as when the non-text object is
3380*bcb85aadSSteve Yin  an image map.
3381*bcb85aadSSteve Yin
3382*bcb85aadSSteve Yin Linked objects and anchors are implementation dependent. This interface is derived
3383*bcb85aadSSteve Yin  from IAccessibleAction.  IAccessibleAction::nActions is one greater than the
3384*bcb85aadSSteve Yin  maximum value for the indices used with the methods of this interface.
3385*bcb85aadSSteve Yin
3386*bcb85aadSSteve Yin Furthermore, the object that implements this interface has to be connected
3387*bcb85aadSSteve Yin  implicitly or explicitly with an object that implements IAccessibleText.
3388*bcb85aadSSteve Yin  IAccessibleHyperlink::startIndex and IAccessibleHyperlink::endIndex are
3389*bcb85aadSSteve Yin  indices with respect to the text exposed by IAccessibleText.
3390*bcb85aadSSteve Yin
3391*bcb85aadSSteve Yin This interface provides access to a single object which can have multiple actions.
3392*bcb85aadSSteve Yin  An example is an image map which is an image with multiple links each of which is
3393*bcb85aadSSteve Yin  associated with a separate non-overlapping area of the image.  This interface could
3394*bcb85aadSSteve Yin  also be applied to other kinds of objects with multiple actions such as "smart tags"
3395*bcb85aadSSteve Yin  which are objects, typically strings, which have multiple actions such as
3396*bcb85aadSSteve Yin  "Activate URI", "Bookmark URI", etc.
3397*bcb85aadSSteve Yin
3398*bcb85aadSSteve Yin An interesting use case is an image map where each area is associated with multiple
3399*bcb85aadSSteve Yin  actions, e.g. an image map of smart tags.  In this case you would have to implement
3400*bcb85aadSSteve Yin  two levels of accessible hyperlinks.  The first level hyperlinks would only implement
3401*bcb85aadSSteve Yin  anchor and anchorTarget.  The anchors would all reference the image object.  The
3402*bcb85aadSSteve Yin  anchorTargets would reference the second level accessible hyperlink objects.  None
3403*bcb85aadSSteve Yin  of the IAccessibleAction methods would be implemented on the first level hyperlink
3404*bcb85aadSSteve Yin  objects.  The second level hyperlink objects would implement the IAccessibleAction
3405*bcb85aadSSteve Yin  methods.  Their anchors would also reference the image object and their anchorTargets
3406*bcb85aadSSteve Yin  would reference URLs or the objects that would be activated.
3407*bcb85aadSSteve Yin
3408*bcb85aadSSteve Yin This use case demonstrates that in some cases there is no need for IAccessibleHyperlink
3409*bcb85aadSSteve Yin  to derive from IAccessibleAction.  As a result it may be removed in a later version of
3410*bcb85aadSSteve Yin  the IDL and it is suggested that implementations should not rely on the inheritance.
3411*bcb85aadSSteve Yin
3412*bcb85aadSSteve Yin*/
3413*bcb85aadSSteve Yin[object, uuid(01C20F2B-3DD2-400f-949F-AD00BDAB1D41)]
3414*bcb85aadSSteve Yininterface IAccessibleHyperlink : IAccessibleAction
3415*bcb85aadSSteve Yin{
3416*bcb85aadSSteve Yin
3417*bcb85aadSSteve Yin  /** @brief Returns an object that represents the link anchor, as appropriate
3418*bcb85aadSSteve Yin   for the link at the specified index.
3419*bcb85aadSSteve Yin   @param [in] index
3420*bcb85aadSSteve Yin    A 0 based index identifies the anchor when, as in the case of an image map,
3421*bcb85aadSSteve Yin    there is more than one link represented by this object.  The valid maximal
3422*bcb85aadSSteve Yin    index is indicated by IAccessibleAction::nActions.
3423*bcb85aadSSteve Yin   @param [out] anchor
3424*bcb85aadSSteve Yin    This is an implementation dependent value.  For example, for a text link this
3425*bcb85aadSSteve Yin	method could return the substring of the containing string where the substring
3426*bcb85aadSSteve Yin	is overridden with link behavior, and for an image link this method could return
3427*bcb85aadSSteve Yin	an IUnknown VARIANT for IAccessibleImage.  See the section about
3428*bcb85aadSSteve Yin	@ref _variants "VARIANTs" for additional information.
3429*bcb85aadSSteve Yin   @retval S_OK
3430*bcb85aadSSteve Yin   @retval E_INVALIDARG if bad [in] passed
3431*bcb85aadSSteve Yin  */
3432*bcb85aadSSteve Yin  [propget] HRESULT anchor
3433*bcb85aadSSteve Yin    (
3434*bcb85aadSSteve Yin     [in] long index,
3435*bcb85aadSSteve Yin     [out, retval] VARIANT *anchor
3436*bcb85aadSSteve Yin    );
3437*bcb85aadSSteve Yin
3438*bcb85aadSSteve Yin  /** @brief Returns an object representing the target of the link, as appropriate
3439*bcb85aadSSteve Yin   for the link at the specified index.
3440*bcb85aadSSteve Yin   @param [in] index
3441*bcb85aadSSteve Yin    A 0 based index identifies the anchor when, as in the case of an image map,
3442*bcb85aadSSteve Yin    there is more than one link represented by this object.  The valid maximal
3443*bcb85aadSSteve Yin    index is indicated by IAccessibleAction::nActions.
3444*bcb85aadSSteve Yin   @param [out] anchorTarget
3445*bcb85aadSSteve Yin    This is an implementation dependent value.  For example this method could
3446*bcb85aadSSteve Yin	return a BSTR VARIANT of the URI.  Alternatively this method could return an
3447*bcb85aadSSteve Yin	IUnknown VARIANT of a COM interface representing a target object to be
3448*bcb85aadSSteve Yin	activated when the link is activated.  See the section about
3449*bcb85aadSSteve Yin	@ref _variants "VARIANTs" for additional information.
3450*bcb85aadSSteve Yin   @retval S_OK
3451*bcb85aadSSteve Yin   @retval E_INVALIDARG if bad [in] passed
3452*bcb85aadSSteve Yin  */
3453*bcb85aadSSteve Yin  [propget] HRESULT anchorTarget
3454*bcb85aadSSteve Yin    (
3455*bcb85aadSSteve Yin     [in] long index,
3456*bcb85aadSSteve Yin     [out, retval] VARIANT *anchorTarget
3457*bcb85aadSSteve Yin    );
3458*bcb85aadSSteve Yin
3459*bcb85aadSSteve Yin  /** @brief Returns the 0 based character offset at which the textual representation of the hyperlink starts.
3460*bcb85aadSSteve Yin
3461*bcb85aadSSteve Yin   The returned value is related to the IAccessibleText interface of the object that
3462*bcb85aadSSteve Yin   owns this hyperlink.
3463*bcb85aadSSteve Yin   @param [out] index
3464*bcb85aadSSteve Yin   @retval S_OK
3465*bcb85aadSSteve Yin  */
3466*bcb85aadSSteve Yin  [propget] HRESULT startIndex
3467*bcb85aadSSteve Yin    (
3468*bcb85aadSSteve Yin     [out, retval] long *index
3469*bcb85aadSSteve Yin    );
3470*bcb85aadSSteve Yin
3471*bcb85aadSSteve Yin  /** @brief Returns the 0 based character offset at which the textual representation of the hyperlink ends.
3472*bcb85aadSSteve Yin
3473*bcb85aadSSteve Yin   The returned value is related to the IAccessibleText interface of the object that
3474*bcb85aadSSteve Yin   owns this hyperlink. The character at the index is not part of the hypertext.
3475*bcb85aadSSteve Yin   @param [out] index
3476*bcb85aadSSteve Yin   @retval S_OK
3477*bcb85aadSSteve Yin  */
3478*bcb85aadSSteve Yin  [propget] HRESULT endIndex
3479*bcb85aadSSteve Yin    (
3480*bcb85aadSSteve Yin     [out, retval] long *index
3481*bcb85aadSSteve Yin    );
3482*bcb85aadSSteve Yin
3483*bcb85aadSSteve Yin  /** @brief Returns whether the target object referenced by this link is still valid.
3484*bcb85aadSSteve Yin
3485*bcb85aadSSteve Yin   This is a volatile state that may change without sending an appropriate event.
3486*bcb85aadSSteve Yin   Returns TRUE if the referenced target is still valid and FALSE otherwise.
3487*bcb85aadSSteve Yin
3488*bcb85aadSSteve Yin   This has also been used to indicate whether or not the URI of the anchorTarget
3489*bcb85aadSSteve Yin   is malformed.
3490*bcb85aadSSteve Yin
3491*bcb85aadSSteve Yin   @param [out] valid
3492*bcb85aadSSteve Yin    If false, one or more of the object's links are invalid.
3493*bcb85aadSSteve Yin	If true, all of the object's links are valid.
3494*bcb85aadSSteve Yin   @retval S_OK
3495*bcb85aadSSteve Yin   @retval S_FALSE if there is nothing to return, [out] value is FALSE
3496*bcb85aadSSteve Yin   @note This method is not being used, is deprecated, and should not be implemented or
3497*bcb85aadSSteve Yin    used.  It is likely that this method will be removed in a later version of the IDL.
3498*bcb85aadSSteve Yin  */
3499*bcb85aadSSteve Yin  [propget] HRESULT valid
3500*bcb85aadSSteve Yin    (
3501*bcb85aadSSteve Yin     [out, retval] boolean *valid
3502*bcb85aadSSteve Yin    );
3503*bcb85aadSSteve Yin}
3504*bcb85aadSSteve Yin/*************************************************************************
3505*bcb85aadSSteve Yin *
3506*bcb85aadSSteve Yin *  File Name (AccessibleHypertext.idl)
3507*bcb85aadSSteve Yin *
3508*bcb85aadSSteve Yin *  IAccessible2 IDL Specification
3509*bcb85aadSSteve Yin *
3510*bcb85aadSSteve Yin *  Copyright (c) 2007, 2010 Linux Foundation
3511*bcb85aadSSteve Yin *  Copyright (c) 2006 IBM Corporation
3512*bcb85aadSSteve Yin *  Copyright (c) 2000, 2006 Sun Microsystems, Inc.
3513*bcb85aadSSteve Yin *  All rights reserved.
3514*bcb85aadSSteve Yin *
3515*bcb85aadSSteve Yin *
3516*bcb85aadSSteve Yin *  Redistribution and use in source and binary forms, with or without
3517*bcb85aadSSteve Yin *  modification, are permitted provided that the following conditions
3518*bcb85aadSSteve Yin *  are met:
3519*bcb85aadSSteve Yin *
3520*bcb85aadSSteve Yin *   1. Redistributions of source code must retain the above copyright
3521*bcb85aadSSteve Yin *      notice, this list of conditions and the following disclaimer.
3522*bcb85aadSSteve Yin *
3523*bcb85aadSSteve Yin *   2. Redistributions in binary form must reproduce the above
3524*bcb85aadSSteve Yin *      copyright notice, this list of conditions and the following
3525*bcb85aadSSteve Yin *      disclaimer in the documentation and/or other materials
3526*bcb85aadSSteve Yin *      provided with the distribution.
3527*bcb85aadSSteve Yin *
3528*bcb85aadSSteve Yin *   3. Neither the name of the Linux Foundation nor the names of its
3529*bcb85aadSSteve Yin *      contributors may be used to endorse or promote products
3530*bcb85aadSSteve Yin *      derived from this software without specific prior written
3531*bcb85aadSSteve Yin *      permission.
3532*bcb85aadSSteve Yin *
3533*bcb85aadSSteve Yin *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
3534*bcb85aadSSteve Yin *  CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
3535*bcb85aadSSteve Yin *  INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
3536*bcb85aadSSteve Yin *  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
3537*bcb85aadSSteve Yin *  DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
3538*bcb85aadSSteve Yin *  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
3539*bcb85aadSSteve Yin *  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
3540*bcb85aadSSteve Yin *  NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
3541*bcb85aadSSteve Yin *  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
3542*bcb85aadSSteve Yin *  HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
3543*bcb85aadSSteve Yin *  CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
3544*bcb85aadSSteve Yin *  OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
3545*bcb85aadSSteve Yin *  EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
3546*bcb85aadSSteve Yin *
3547*bcb85aadSSteve Yin *  This BSD License conforms to the Open Source Initiative "Simplified
3548*bcb85aadSSteve Yin *  BSD License" as published at:
3549*bcb85aadSSteve Yin *  http://www.opensource.org/licenses/bsd-license.php
3550*bcb85aadSSteve Yin *
3551*bcb85aadSSteve Yin *  IAccessible2 is a trademark of the Linux Foundation. The IAccessible2
3552*bcb85aadSSteve Yin *  mark may be used in accordance with the Linux Foundation Trademark
3553*bcb85aadSSteve Yin *  Policy to indicate compliance with the IAccessible2 specification.
3554*bcb85aadSSteve Yin *
3555*bcb85aadSSteve Yin ************************************************************************/
3556*bcb85aadSSteve Yin
3557*bcb85aadSSteve Yin
3558*bcb85aadSSteve Yin
3559*bcb85aadSSteve Yin
3560*bcb85aadSSteve Yin
3561*bcb85aadSSteve Yin
3562*bcb85aadSSteve Yin
3563*bcb85aadSSteve Yin/** @brief This interface exposes information about hypertext in a document.
3564*bcb85aadSSteve Yin
3565*bcb85aadSSteve Yin The %IAccessibleHypertext interface is the main interface to expose
3566*bcb85aadSSteve Yin  hyperlinks in a document, typically a text document, that are used
3567*bcb85aadSSteve Yin  to reference other documents.  A typical implementation is to implement
3568*bcb85aadSSteve Yin  this interface on the smallest text object such as a paragraph of text.
3569*bcb85aadSSteve Yin*/
3570*bcb85aadSSteve Yin[object, uuid(6B4F8BBF-F1F2-418a-B35E-A195BC4103B9)]
3571*bcb85aadSSteve Yininterface IAccessibleHypertext : IAccessibleText
3572*bcb85aadSSteve Yin{
3573*bcb85aadSSteve Yin
3574*bcb85aadSSteve Yin  /** @brief Returns the number of links and link groups contained within this hypertext
3575*bcb85aadSSteve Yin    paragraph.
3576*bcb85aadSSteve Yin   @param [out] hyperlinkCount
3577*bcb85aadSSteve Yin    The number of links and link groups within this hypertext paragraph.
3578*bcb85aadSSteve Yin    Returns 0 if there is no link.
3579*bcb85aadSSteve Yin   @retval S_OK
3580*bcb85aadSSteve Yin  */
3581*bcb85aadSSteve Yin  [propget] HRESULT nHyperlinks
3582*bcb85aadSSteve Yin    (
3583*bcb85aadSSteve Yin     [out, retval] long *hyperlinkCount
3584*bcb85aadSSteve Yin    );
3585*bcb85aadSSteve Yin
3586*bcb85aadSSteve Yin  /** @brief Returns the specified link.
3587*bcb85aadSSteve Yin
3588*bcb85aadSSteve Yin   The returned IAccessibleHyperlink object encapsulates the hyperlink and
3589*bcb85aadSSteve Yin    provides several kinds of information describing it.
3590*bcb85aadSSteve Yin   @param [in] index
3591*bcb85aadSSteve Yin    This 0 based index specifies the hyperlink to return.
3592*bcb85aadSSteve Yin   @param [out] hyperlink
3593*bcb85aadSSteve Yin    If the given index is valid, i.e. lies in the interval from 0 to the number
3594*bcb85aadSSteve Yin    of links minus one, a reference to the specified hyperlink object is returned.
3595*bcb85aadSSteve Yin    If the index is invalid then a NULL pointer is returned.
3596*bcb85aadSSteve Yin   @retval S_OK
3597*bcb85aadSSteve Yin   @retval E_INVALIDARG if bad [in] passed
3598*bcb85aadSSteve Yin  */
3599*bcb85aadSSteve Yin  [propget] HRESULT hyperlink
3600*bcb85aadSSteve Yin    (
3601*bcb85aadSSteve Yin     [in] long index,
3602*bcb85aadSSteve Yin     [out, retval] IAccessibleHyperlink **hyperlink
3603*bcb85aadSSteve Yin    );
3604*bcb85aadSSteve Yin
3605*bcb85aadSSteve Yin  /** @brief Returns the index of the hyperlink that is associated with this character index.
3606*bcb85aadSSteve Yin
3607*bcb85aadSSteve Yin   This is the case when a link spans the given character index.
3608*bcb85aadSSteve Yin   @param [in] charIndex
3609*bcb85aadSSteve Yin    A 0 based index of the character for which to return the link index.  If
3610*bcb85aadSSteve Yin	IAccessibleText is used to represent the text containing the link, then the
3611*bcb85aadSSteve Yin	character index is only  valid if it is greater than or equal to zero and
3612*bcb85aadSSteve Yin	lower than the number of characters in the text.
3613*bcb85aadSSteve Yin   @param [out] hyperlinkIndex
3614*bcb85aadSSteve Yin    Returns the 0 based index of the hyperlink that is associated with this
3615*bcb85aadSSteve Yin	character index, or -1 if charIndex is not on a link.
3616*bcb85aadSSteve Yin   @retval S_OK
3617*bcb85aadSSteve Yin   @retval S_FALSE if there is nothing to return, [out] value is -1
3618*bcb85aadSSteve Yin   @retval E_INVALIDARG if bad [in] passed
3619*bcb85aadSSteve Yin  */
3620*bcb85aadSSteve Yin  [propget] HRESULT hyperlinkIndex
3621*bcb85aadSSteve Yin    (
3622*bcb85aadSSteve Yin     [in] long charIndex,
3623*bcb85aadSSteve Yin     [out, retval] long *hyperlinkIndex
3624*bcb85aadSSteve Yin    );
3625*bcb85aadSSteve Yin
3626*bcb85aadSSteve Yin}
3627*bcb85aadSSteve Yin/*************************************************************************
3628*bcb85aadSSteve Yin *
3629*bcb85aadSSteve Yin *  File Name (AccessibleHypertext2.idl)
3630*bcb85aadSSteve Yin *
3631*bcb85aadSSteve Yin *  IAccessible2 IDL Specification
3632*bcb85aadSSteve Yin *
3633*bcb85aadSSteve Yin *  Copyright (c) 2007, 2013 Linux Foundation
3634*bcb85aadSSteve Yin *  Copyright (c) 2006 IBM Corporation
3635*bcb85aadSSteve Yin *  Copyright (c) 2000, 2006 Sun Microsystems, Inc.
3636*bcb85aadSSteve Yin *  All rights reserved.
3637*bcb85aadSSteve Yin *
3638*bcb85aadSSteve Yin *
3639*bcb85aadSSteve Yin *  Redistribution and use in source and binary forms, with or without
3640*bcb85aadSSteve Yin *  modification, are permitted provided that the following conditions
3641*bcb85aadSSteve Yin *  are met:
3642*bcb85aadSSteve Yin *
3643*bcb85aadSSteve Yin *   1. Redistributions of source code must retain the above copyright
3644*bcb85aadSSteve Yin *      notice, this list of conditions and the following disclaimer.
3645*bcb85aadSSteve Yin *
3646*bcb85aadSSteve Yin *   2. Redistributions in binary form must reproduce the above
3647*bcb85aadSSteve Yin *      copyright notice, this list of conditions and the following
3648*bcb85aadSSteve Yin *      disclaimer in the documentation and/or other materials
3649*bcb85aadSSteve Yin *      provided with the distribution.
3650*bcb85aadSSteve Yin *
3651*bcb85aadSSteve Yin *   3. Neither the name of the Linux Foundation nor the names of its
3652*bcb85aadSSteve Yin *      contributors may be used to endorse or promote products
3653*bcb85aadSSteve Yin *      derived from this software without specific prior written
3654*bcb85aadSSteve Yin *      permission.
3655*bcb85aadSSteve Yin *
3656*bcb85aadSSteve Yin *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
3657*bcb85aadSSteve Yin *  CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
3658*bcb85aadSSteve Yin *  INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
3659*bcb85aadSSteve Yin *  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
3660*bcb85aadSSteve Yin *  DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
3661*bcb85aadSSteve Yin *  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
3662*bcb85aadSSteve Yin *  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
3663*bcb85aadSSteve Yin *  NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
3664*bcb85aadSSteve Yin *  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
3665*bcb85aadSSteve Yin *  HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
3666*bcb85aadSSteve Yin *  CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
3667*bcb85aadSSteve Yin *  OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
3668*bcb85aadSSteve Yin *  EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
3669*bcb85aadSSteve Yin *
3670*bcb85aadSSteve Yin *  This BSD License conforms to the Open Source Initiative "Simplified
3671*bcb85aadSSteve Yin *  BSD License" as published at:
3672*bcb85aadSSteve Yin *  http://www.opensource.org/licenses/bsd-license.php
3673*bcb85aadSSteve Yin *
3674*bcb85aadSSteve Yin *  IAccessible2 is a trademark of the Linux Foundation. The IAccessible2
3675*bcb85aadSSteve Yin *  mark may be used in accordance with the Linux Foundation Trademark
3676*bcb85aadSSteve Yin *  Policy to indicate compliance with the IAccessible2 specification.
3677*bcb85aadSSteve Yin *
3678*bcb85aadSSteve Yin ************************************************************************/
3679*bcb85aadSSteve Yin
3680*bcb85aadSSteve Yin
3681*bcb85aadSSteve Yin
3682*bcb85aadSSteve Yin
3683*bcb85aadSSteve Yin
3684*bcb85aadSSteve Yin
3685*bcb85aadSSteve Yin
3686*bcb85aadSSteve Yin/** @brief This interface exposes information about hypertext in a document.
3687*bcb85aadSSteve Yin
3688*bcb85aadSSteve Yin The %IAccessibleHypertext2 interface extends the functinality of the
3689*bcb85aadSSteve Yin %IAccessibleHypertext inteface.
3690*bcb85aadSSteve Yin*/
3691*bcb85aadSSteve Yin[object, uuid(CF64D89F-8287-4B44-8501-A827453A6077)]
3692*bcb85aadSSteve Yininterface IAccessibleHypertext2 : IAccessibleHypertext
3693*bcb85aadSSteve Yin{
3694*bcb85aadSSteve Yin
3695*bcb85aadSSteve Yin /** @brief Returns the links for this object.
3696*bcb85aadSSteve Yin
3697*bcb85aadSSteve Yin   The returned IAccessibleHyperlink objects encapsulate the hyperlink and
3698*bcb85aadSSteve Yin    provides several kinds of information describing it.
3699*bcb85aadSSteve Yin
3700*bcb85aadSSteve Yin   @param [out] hyperlinks
3701*bcb85aadSSteve Yin    This array is allocated by the server.  The client must free it with CoTaskMemFree.
3702*bcb85aadSSteve Yin   @param [out] nHyperlinks
3703*bcb85aadSSteve Yin    The number of links returned; the size of the returned array.
3704*bcb85aadSSteve Yin   @retval S_OK
3705*bcb85aadSSteve Yin   @retval S_FALSE if there are no links, [out] values are NULL and 0 respectively
3706*bcb85aadSSteve Yin  */
3707*bcb85aadSSteve Yin  [propget] HRESULT hyperlinks
3708*bcb85aadSSteve Yin    (
3709*bcb85aadSSteve Yin     [out, size_is(,*nHyperlinks)] IAccessibleHyperlink ***hyperlinks,
3710*bcb85aadSSteve Yin     [out, retval] long *nHyperlinks
3711*bcb85aadSSteve Yin    );
3712*bcb85aadSSteve Yin
3713*bcb85aadSSteve Yin}
3714*bcb85aadSSteve Yin/*************************************************************************
3715*bcb85aadSSteve Yin *
3716*bcb85aadSSteve Yin *  File Name (AccessibleTable.idl)
3717*bcb85aadSSteve Yin *
3718*bcb85aadSSteve Yin *  IAccessible2 IDL Specification
3719*bcb85aadSSteve Yin *
3720*bcb85aadSSteve Yin *  Copyright (c) 2007, 2013 Linux Foundation
3721*bcb85aadSSteve Yin *  Copyright (c) 2006 IBM Corporation
3722*bcb85aadSSteve Yin *  Copyright (c) 2000, 2006 Sun Microsystems, Inc.
3723*bcb85aadSSteve Yin *  All rights reserved.
3724*bcb85aadSSteve Yin *
3725*bcb85aadSSteve Yin *
3726*bcb85aadSSteve Yin *  Redistribution and use in source and binary forms, with or without
3727*bcb85aadSSteve Yin *  modification, are permitted provided that the following conditions
3728*bcb85aadSSteve Yin *  are met:
3729*bcb85aadSSteve Yin *
3730*bcb85aadSSteve Yin *   1. Redistributions of source code must retain the above copyright
3731*bcb85aadSSteve Yin *      notice, this list of conditions and the following disclaimer.
3732*bcb85aadSSteve Yin *
3733*bcb85aadSSteve Yin *   2. Redistributions in binary form must reproduce the above
3734*bcb85aadSSteve Yin *      copyright notice, this list of conditions and the following
3735*bcb85aadSSteve Yin *      disclaimer in the documentation and/or other materials
3736*bcb85aadSSteve Yin *      provided with the distribution.
3737*bcb85aadSSteve Yin *
3738*bcb85aadSSteve Yin *   3. Neither the name of the Linux Foundation nor the names of its
3739*bcb85aadSSteve Yin *      contributors may be used to endorse or promote products
3740*bcb85aadSSteve Yin *      derived from this software without specific prior written
3741*bcb85aadSSteve Yin *      permission.
3742*bcb85aadSSteve Yin *
3743*bcb85aadSSteve Yin *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
3744*bcb85aadSSteve Yin *  CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
3745*bcb85aadSSteve Yin *  INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
3746*bcb85aadSSteve Yin *  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
3747*bcb85aadSSteve Yin *  DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
3748*bcb85aadSSteve Yin *  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
3749*bcb85aadSSteve Yin *  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
3750*bcb85aadSSteve Yin *  NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
3751*bcb85aadSSteve Yin *  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
3752*bcb85aadSSteve Yin *  HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
3753*bcb85aadSSteve Yin *  CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
3754*bcb85aadSSteve Yin *  OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
3755*bcb85aadSSteve Yin *  EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
3756*bcb85aadSSteve Yin *
3757*bcb85aadSSteve Yin *  This BSD License conforms to the Open Source Initiative "Simplified
3758*bcb85aadSSteve Yin *  BSD License" as published at:
3759*bcb85aadSSteve Yin *  http://www.opensource.org/licenses/bsd-license.php
3760*bcb85aadSSteve Yin *
3761*bcb85aadSSteve Yin *  IAccessible2 is a trademark of the Linux Foundation. The IAccessible2
3762*bcb85aadSSteve Yin *  mark may be used in accordance with the Linux Foundation Trademark
3763*bcb85aadSSteve Yin *  Policy to indicate compliance with the IAccessible2 specification.
3764*bcb85aadSSteve Yin *
3765*bcb85aadSSteve Yin ************************************************************************/
3766*bcb85aadSSteve Yin
3767*bcb85aadSSteve Yin
3768*bcb85aadSSteve Yin
3769*bcb85aadSSteve Yin
3770*bcb85aadSSteve Yin
3771*bcb85aadSSteve Yin
3772*bcb85aadSSteve Yin
3773*bcb85aadSSteve Yin/** @brief This interface gives access to a two-dimensional table.
3774*bcb85aadSSteve Yin
3775*bcb85aadSSteve Yin Typically all accessible objects that represent cells or cell-clusters of a table
3776*bcb85aadSSteve Yin  will be at the same time children of the table.  In this case IAccessible2::indexInParent
3777*bcb85aadSSteve Yin  will return the child index which then can be used when calling IAccessibleTable::rowIndex
3778*bcb85aadSSteve Yin  and IAccessibleTable::columnIndex.
3779*bcb85aadSSteve Yin
3780*bcb85aadSSteve Yin However, in some cases that kind of implementation will not be possible.  When
3781*bcb85aadSSteve Yin  the table cells are not direct children of a table, the object representing
3782*bcb85aadSSteve Yin  the cell can define a "table-cell-index" object attribute identifying the 0
3783*bcb85aadSSteve Yin  based table cell index.  This object attribute is obtained by parsing the
3784*bcb85aadSSteve Yin  attribute string returned by IAccessible2::attributes.  The "table-cell-index"
3785*bcb85aadSSteve Yin  attribute can be used just like a child index of the typical case.  ATs should
3786*bcb85aadSSteve Yin  first test for the presence of the "table-cell-index" attribute and if it is not
3787*bcb85aadSSteve Yin  present then IAccessible2::indexInParent can be used as in the typical case
3788*bcb85aadSSteve Yin  where cells are direct children of the table.
3789*bcb85aadSSteve Yin
3790*bcb85aadSSteve Yin The range of valid coordinates for this interface are implementation dependent.
3791*bcb85aadSSteve Yin  However, that range includes at least the intervals from the from the first row
3792*bcb85aadSSteve Yin  or column with the index 0 up to the last (but not including) used row or column
3793*bcb85aadSSteve Yin  as returned by IAccessibleTable::nRows and IAccessibleTable::nColumns.
3794*bcb85aadSSteve Yin
3795*bcb85aadSSteve Yin Note that newer implementations are now using IAccessibleTable2 and IAccessibleTableCell
3796*bcb85aadSSteve Yin  rather than this interface.
3797*bcb85aadSSteve Yin*/
3798*bcb85aadSSteve Yin[object, uuid(35AD8070-C20C-4fb4-B094-F4F7275DD469)]
3799*bcb85aadSSteve Yininterface IAccessibleTable : IUnknown
3800*bcb85aadSSteve Yin{
3801*bcb85aadSSteve Yin
3802*bcb85aadSSteve Yin  /** @brief Returns the accessible object at the specified row and column in
3803*bcb85aadSSteve Yin    the table.  This object could be an IAccessible or an IAccessible2.
3804*bcb85aadSSteve Yin   @param [in] row
3805*bcb85aadSSteve Yin    The 0 based row index for which to retrieve the cell.
3806*bcb85aadSSteve Yin   @param [in] column
3807*bcb85aadSSteve Yin    The 0 based column index for which to retrieve the cell.
3808*bcb85aadSSteve Yin   @param [out] accessible
3809*bcb85aadSSteve Yin    If both row and column index are valid then the corresponding accessible
3810*bcb85aadSSteve Yin    object is returned that represents the requested cell regardless of whether
3811*bcb85aadSSteve Yin    the cell is currently visible (on the screen).
3812*bcb85aadSSteve Yin   @retval S_OK
3813*bcb85aadSSteve Yin   @retval E_INVALIDARG if bad [in] passed, [out] value is NULL
3814*bcb85aadSSteve Yin  */
3815*bcb85aadSSteve Yin  [propget] HRESULT accessibleAt
3816*bcb85aadSSteve Yin    (
3817*bcb85aadSSteve Yin     [in] long row,
3818*bcb85aadSSteve Yin     [in] long column,
3819*bcb85aadSSteve Yin     [out, retval] IUnknown **accessible
3820*bcb85aadSSteve Yin    );
3821*bcb85aadSSteve Yin
3822*bcb85aadSSteve Yin  /** @brief Returns the caption for the table.  The returned object could be
3823*bcb85aadSSteve Yin    an IAccessible or an IAccessible2.
3824*bcb85aadSSteve Yin   @param [out] accessible
3825*bcb85aadSSteve Yin    If the table has a caption then a reference to it is returned, else a NULL
3826*bcb85aadSSteve Yin    pointer is returned.
3827*bcb85aadSSteve Yin   @retval S_OK
3828*bcb85aadSSteve Yin   @retval S_FALSE if there is nothing to return, [out] value is NULL
3829*bcb85aadSSteve Yin  */
3830*bcb85aadSSteve Yin  [propget] HRESULT caption
3831*bcb85aadSSteve Yin    (
3832*bcb85aadSSteve Yin     [out, retval] IUnknown **accessible
3833*bcb85aadSSteve Yin    );
3834*bcb85aadSSteve Yin
3835*bcb85aadSSteve Yin  /** @brief Translates the given row and column indexes into the corresponding cell index.
3836*bcb85aadSSteve Yin   @param [in] rowIndex
3837*bcb85aadSSteve Yin    0 based row index for the cell.
3838*bcb85aadSSteve Yin   @param [in] columnIndex
3839*bcb85aadSSteve Yin    0 based column index for the cell.
3840*bcb85aadSSteve Yin   @param [out] cellIndex
3841*bcb85aadSSteve Yin    Returns the 0 based index of the cell at the specified row and column indexes.
3842*bcb85aadSSteve Yin   @retval S_OK
3843*bcb85aadSSteve Yin   @retval E_INVALIDARG if bad [in] passed, [out] value is 0
3844*bcb85aadSSteve Yin   @note The returned value is not necessarily a child index of the immediate parent.
3845*bcb85aadSSteve Yin    In cases where the table cells are not direct children of the table the index
3846*bcb85aadSSteve Yin    is actually the cell index, i.e. conceptually it's an index into a one dimensional
3847*bcb85aadSSteve Yin	array of cells laid out in row order.
3848*bcb85aadSSteve Yin  */
3849*bcb85aadSSteve Yin  [propget] HRESULT childIndex
3850*bcb85aadSSteve Yin	(
3851*bcb85aadSSteve Yin	 [in] long rowIndex,
3852*bcb85aadSSteve Yin	 [in] long columnIndex,
3853*bcb85aadSSteve Yin	 [out, retval] long *cellIndex
3854*bcb85aadSSteve Yin	);
3855*bcb85aadSSteve Yin
3856*bcb85aadSSteve Yin  /** @brief Returns the description text of the specified column in the table.
3857*bcb85aadSSteve Yin   @param [in] column
3858*bcb85aadSSteve Yin    The 0 based index of the column for which to retrieve the description.
3859*bcb85aadSSteve Yin   @param [out] description
3860*bcb85aadSSteve Yin    Returns the description text of the specified column in the table if such a
3861*bcb85aadSSteve Yin    description exists.  Otherwise a NULL pointer is returned.
3862*bcb85aadSSteve Yin   @retval S_OK
3863*bcb85aadSSteve Yin   @retval S_FALSE if there is nothing to return, [out] value is NULL
3864*bcb85aadSSteve Yin   @retval E_INVALIDARG if bad [in] passed, [out] value is NULL
3865*bcb85aadSSteve Yin  */
3866*bcb85aadSSteve Yin  [propget] HRESULT columnDescription
3867*bcb85aadSSteve Yin    (
3868*bcb85aadSSteve Yin     [in] long column,
3869*bcb85aadSSteve Yin     [out, retval] BSTR *description
3870*bcb85aadSSteve Yin    );
3871*bcb85aadSSteve Yin
3872*bcb85aadSSteve Yin  /** @brief Returns the number of columns occupied by the accessible object
3873*bcb85aadSSteve Yin    at the specified row and column in the table.
3874*bcb85aadSSteve Yin
3875*bcb85aadSSteve Yin   The result is greater than 1 if the specified cell spans multiple columns.
3876*bcb85aadSSteve Yin   @param [in] row
3877*bcb85aadSSteve Yin    0 based row index of the accessible for which to return the column extent.
3878*bcb85aadSSteve Yin   @param [in] column
3879*bcb85aadSSteve Yin    0 based column index of the accessible for which to return the column extent.
3880*bcb85aadSSteve Yin   @param [out] nColumnsSpanned
3881*bcb85aadSSteve Yin    Returns the 1 based column extent of the specified cell.
3882*bcb85aadSSteve Yin   @retval S_OK
3883*bcb85aadSSteve Yin   @retval E_INVALIDARG if bad [in] passed, [out] value is 0
3884*bcb85aadSSteve Yin  */
3885*bcb85aadSSteve Yin  [propget] HRESULT columnExtentAt
3886*bcb85aadSSteve Yin    (
3887*bcb85aadSSteve Yin     [in] long row,
3888*bcb85aadSSteve Yin     [in] long column,
3889*bcb85aadSSteve Yin     [out, retval] long *nColumnsSpanned
3890*bcb85aadSSteve Yin    );
3891*bcb85aadSSteve Yin
3892*bcb85aadSSteve Yin  /** @brief Returns the column headers as an %IAccessibleTable object.
3893*bcb85aadSSteve Yin
3894*bcb85aadSSteve Yin   Content and size of the returned table are implementation dependent.
3895*bcb85aadSSteve Yin   @param [out] accessibleTable
3896*bcb85aadSSteve Yin    The column header
3897*bcb85aadSSteve Yin   @param [out] startingRowIndex
3898*bcb85aadSSteve Yin    The 0 based row index where the header starts, usually 0.
3899*bcb85aadSSteve Yin   @retval S_OK
3900*bcb85aadSSteve Yin   @retval S_FALSE if there is no header, [out] values are NULL and 0 respectively
3901*bcb85aadSSteve Yin  */
3902*bcb85aadSSteve Yin  [propget] HRESULT columnHeader
3903*bcb85aadSSteve Yin    (
3904*bcb85aadSSteve Yin     [out] IAccessibleTable **accessibleTable,
3905*bcb85aadSSteve Yin	 [out, retval] long *startingRowIndex
3906*bcb85aadSSteve Yin    );
3907*bcb85aadSSteve Yin
3908*bcb85aadSSteve Yin  /** @brief Translates the given cell index into the corresponding column index.
3909*bcb85aadSSteve Yin   @param [in] cellIndex
3910*bcb85aadSSteve Yin    0 based index of the cell in the parent or closest ancestor table.  Typically this
3911*bcb85aadSSteve Yin	is the value returned from IAccessible2::indexInParent, but in the case where the
3912*bcb85aadSSteve Yin	table cells are not direct children of the table this is the cell index specified
3913*bcb85aadSSteve Yin	by the "table-cell-index" object attribute obtained from parsing the attributes
3914*bcb85aadSSteve Yin	string returned by calling IAccessible2::attributes on the cell object.
3915*bcb85aadSSteve Yin   @param [out] columnIndex
3916*bcb85aadSSteve Yin    Returns the 0 based column index of the cell of the specified child or the index of
3917*bcb85aadSSteve Yin    the first column if the child spans multiple columns.
3918*bcb85aadSSteve Yin   @retval S_OK
3919*bcb85aadSSteve Yin   @retval E_INVALIDARG if bad [in] passed, [out] value is 0
3920*bcb85aadSSteve Yin  */
3921*bcb85aadSSteve Yin  [propget] HRESULT columnIndex
3922*bcb85aadSSteve Yin    (
3923*bcb85aadSSteve Yin	 [in] long cellIndex,
3924*bcb85aadSSteve Yin	 [out, retval] long *columnIndex
3925*bcb85aadSSteve Yin	);
3926*bcb85aadSSteve Yin
3927*bcb85aadSSteve Yin  /** @brief Returns the total number of columns in table
3928*bcb85aadSSteve Yin   @param [out] columnCount
3929*bcb85aadSSteve Yin    Number of columns in table (including columns outside the current viewport)
3930*bcb85aadSSteve Yin   @retval S_OK
3931*bcb85aadSSteve Yin  */
3932*bcb85aadSSteve Yin  [propget] HRESULT nColumns
3933*bcb85aadSSteve Yin    (
3934*bcb85aadSSteve Yin     [out, retval] long *columnCount
3935*bcb85aadSSteve Yin    );
3936*bcb85aadSSteve Yin
3937*bcb85aadSSteve Yin  /** @brief Returns the total number of rows in table
3938*bcb85aadSSteve Yin   @param [out] rowCount
3939*bcb85aadSSteve Yin    Number of rows in table (including rows outside the current viewport)
3940*bcb85aadSSteve Yin   @retval S_OK
3941*bcb85aadSSteve Yin  */
3942*bcb85aadSSteve Yin  [propget] HRESULT nRows
3943*bcb85aadSSteve Yin    (
3944*bcb85aadSSteve Yin     [out, retval] long *rowCount
3945*bcb85aadSSteve Yin    );
3946*bcb85aadSSteve Yin
3947*bcb85aadSSteve Yin  /** @brief Returns the total number of selected cells
3948*bcb85aadSSteve Yin   @param [out] cellCount
3949*bcb85aadSSteve Yin    Number of cells currently selected
3950*bcb85aadSSteve Yin   @retval S_OK
3951*bcb85aadSSteve Yin  */
3952*bcb85aadSSteve Yin  [propget] HRESULT nSelectedChildren
3953*bcb85aadSSteve Yin    (
3954*bcb85aadSSteve Yin	 [out, retval] long *cellCount
3955*bcb85aadSSteve Yin	);
3956*bcb85aadSSteve Yin
3957*bcb85aadSSteve Yin  /** @brief Returns the total number of selected columns
3958*bcb85aadSSteve Yin   @param [out] columnCount
3959*bcb85aadSSteve Yin    Number of columns currently selected
3960*bcb85aadSSteve Yin   @retval S_OK
3961*bcb85aadSSteve Yin  */
3962*bcb85aadSSteve Yin  [propget] HRESULT nSelectedColumns
3963*bcb85aadSSteve Yin    (
3964*bcb85aadSSteve Yin     [out, retval] long *columnCount
3965*bcb85aadSSteve Yin    );
3966*bcb85aadSSteve Yin
3967*bcb85aadSSteve Yin  /** @brief Returns the total number of selected rows
3968*bcb85aadSSteve Yin   @param [out] rowCount
3969*bcb85aadSSteve Yin    Number of rows currently selected
3970*bcb85aadSSteve Yin   @retval S_OK
3971*bcb85aadSSteve Yin  */
3972*bcb85aadSSteve Yin  [propget] HRESULT nSelectedRows
3973*bcb85aadSSteve Yin    (
3974*bcb85aadSSteve Yin     [out, retval] long *rowCount
3975*bcb85aadSSteve Yin    );
3976*bcb85aadSSteve Yin
3977*bcb85aadSSteve Yin  /** @brief Returns the description text of the specified row in the table.
3978*bcb85aadSSteve Yin   @param [in] row
3979*bcb85aadSSteve Yin    The 0 based index of the row for which to retrieve the description.
3980*bcb85aadSSteve Yin   @param [out] description
3981*bcb85aadSSteve Yin    Returns the description text of the specified row in the table if such a
3982*bcb85aadSSteve Yin    description exists.  Otherwise a NULL pointer is returned.
3983*bcb85aadSSteve Yin   @retval S_OK
3984*bcb85aadSSteve Yin   @retval S_FALSE if there is nothing to return, [out] value is NULL
3985*bcb85aadSSteve Yin   @retval E_INVALIDARG if bad [in] passed, [out] value is NULL
3986*bcb85aadSSteve Yin  */
3987*bcb85aadSSteve Yin  [propget] HRESULT rowDescription
3988*bcb85aadSSteve Yin    (
3989*bcb85aadSSteve Yin     [in] long row,
3990*bcb85aadSSteve Yin     [out, retval] BSTR *description
3991*bcb85aadSSteve Yin    );
3992*bcb85aadSSteve Yin
3993*bcb85aadSSteve Yin  /** @brief Returns the number of rows occupied by the accessible object
3994*bcb85aadSSteve Yin    at the specified row and column in the table.
3995*bcb85aadSSteve Yin
3996*bcb85aadSSteve Yin   The result is greater than 1 if the specified cell spans multiple rows.
3997*bcb85aadSSteve Yin   @param [in] row
3998*bcb85aadSSteve Yin    0 based row index of the accessible for which to return the row extent.
3999*bcb85aadSSteve Yin   @param [in] column
4000*bcb85aadSSteve Yin    0 based column index of the accessible for which to return the row extent.
4001*bcb85aadSSteve Yin   @param [out] nRowsSpanned
4002*bcb85aadSSteve Yin    Returns the row extent of the specified cell.
4003*bcb85aadSSteve Yin   @retval S_OK
4004*bcb85aadSSteve Yin   @retval E_INVALIDARG if bad [in] passed, [out] value is 0
4005*bcb85aadSSteve Yin  */
4006*bcb85aadSSteve Yin  [propget] HRESULT rowExtentAt
4007*bcb85aadSSteve Yin    (
4008*bcb85aadSSteve Yin     [in] long row,
4009*bcb85aadSSteve Yin     [in] long column,
4010*bcb85aadSSteve Yin     [out, retval] long *nRowsSpanned
4011*bcb85aadSSteve Yin    );
4012*bcb85aadSSteve Yin
4013*bcb85aadSSteve Yin  /** @brief Returns the row headers as an %IAccessibleTable object.
4014*bcb85aadSSteve Yin
4015*bcb85aadSSteve Yin   Content and size of the returned table are implementation dependent.
4016*bcb85aadSSteve Yin   @param [out] accessibleTable
4017*bcb85aadSSteve Yin    The row header.
4018*bcb85aadSSteve Yin   @param [out] startingColumnIndex
4019*bcb85aadSSteve Yin    The 0 based column index where the header starts, usually 0.
4020*bcb85aadSSteve Yin   @retval S_OK
4021*bcb85aadSSteve Yin   @retval S_FALSE if there is no header, [out] values are NULL and 0 respectively
4022*bcb85aadSSteve Yin  */
4023*bcb85aadSSteve Yin  [propget] HRESULT rowHeader
4024*bcb85aadSSteve Yin    (
4025*bcb85aadSSteve Yin     [out] IAccessibleTable **accessibleTable,
4026*bcb85aadSSteve Yin	 [out, retval] long *startingColumnIndex
4027*bcb85aadSSteve Yin    );
4028*bcb85aadSSteve Yin
4029*bcb85aadSSteve Yin  /** @brief Translates the given cell index into a row index.
4030*bcb85aadSSteve Yin   @param [in] cellIndex
4031*bcb85aadSSteve Yin    0 based index of the cell in the parent or closest ancestor table.  Typically this
4032*bcb85aadSSteve Yin	is the value returned from IAccessible2::indexInParent, but in the case where the
4033*bcb85aadSSteve Yin	table cells are not direct children of the table this is the cell index specified
4034*bcb85aadSSteve Yin	by the "table-cell-index" object attribute obtained from parsing the attributes
4035*bcb85aadSSteve Yin	string returned by calling IAccessible2::attributes on the cell object.
4036*bcb85aadSSteve Yin   @param [out] rowIndex
4037*bcb85aadSSteve Yin    0 based row index
4038*bcb85aadSSteve Yin   @retval S_OK
4039*bcb85aadSSteve Yin   @retval E_INVALIDARG if bad [in] passed, [out] value is 0
4040*bcb85aadSSteve Yin  */
4041*bcb85aadSSteve Yin  [propget] HRESULT rowIndex
4042*bcb85aadSSteve Yin    (
4043*bcb85aadSSteve Yin	 [in] long cellIndex,
4044*bcb85aadSSteve Yin	 [out, retval] long *rowIndex
4045*bcb85aadSSteve Yin	);
4046*bcb85aadSSteve Yin
4047*bcb85aadSSteve Yin  /** @brief Returns a list of cell indexes currently selected (0 based).
4048*bcb85aadSSteve Yin   @param [in] maxChildren
4049*bcb85aadSSteve Yin    This parameter is ignored. Refer to @ref _arrayConsideration
4050*bcb85aadSSteve Yin	"Special Consideration when using Arrays" for more details.
4051*bcb85aadSSteve Yin   @param [out] children
4052*bcb85aadSSteve Yin    An array of cell indexes of selected cells (each index is 0 based),
4053*bcb85aadSSteve Yin	allocated by the server. The client must free it with CoTaskMemFree.
4054*bcb85aadSSteve Yin   @param [out] nChildren
4055*bcb85aadSSteve Yin    The number of cell indexes returned; the size of the returned array.
4056*bcb85aadSSteve Yin   @retval S_OK
4057*bcb85aadSSteve Yin   @retval S_FALSE if there are none, [out] values are NULL and 0 respectively
4058*bcb85aadSSteve Yin  */
4059*bcb85aadSSteve Yin  [propget] HRESULT selectedChildren
4060*bcb85aadSSteve Yin    (
4061*bcb85aadSSteve Yin     [in] long maxChildren,
4062*bcb85aadSSteve Yin     [out, size_is(,maxChildren), length_is(,*nChildren)] long **children,
4063*bcb85aadSSteve Yin     [out, retval] long *nChildren
4064*bcb85aadSSteve Yin    );
4065*bcb85aadSSteve Yin
4066*bcb85aadSSteve Yin  /** @brief Returns a list of column indexes currently selected (0 based).
4067*bcb85aadSSteve Yin   @param [in] maxColumns
4068*bcb85aadSSteve Yin    This parameter is ignored. Refer to @ref _arrayConsideration
4069*bcb85aadSSteve Yin	"Special Consideration when using Arrays" for more details.
4070*bcb85aadSSteve Yin   @param [out] columns
4071*bcb85aadSSteve Yin	An array of column indexes of selected columns (each index is 0 based), allocated
4072*bcb85aadSSteve Yin	by the server. The client must free it with CoTaskMemFree.
4073*bcb85aadSSteve Yin   @param [out] nColumns
4074*bcb85aadSSteve Yin    The number of column indexes returned; the size of the returned array.
4075*bcb85aadSSteve Yin   @retval S_OK
4076*bcb85aadSSteve Yin   @retval S_FALSE if there are none, [out] values are NULL and 0 respectively
4077*bcb85aadSSteve Yin  */
4078*bcb85aadSSteve Yin  [propget] HRESULT selectedColumns
4079*bcb85aadSSteve Yin    (
4080*bcb85aadSSteve Yin     [in] long maxColumns,
4081*bcb85aadSSteve Yin     [out, size_is(,maxColumns), length_is(,*nColumns)] long **columns,
4082*bcb85aadSSteve Yin     [out, retval] long *nColumns
4083*bcb85aadSSteve Yin    );
4084*bcb85aadSSteve Yin
4085*bcb85aadSSteve Yin  /** @brief Returns a list of row indexes currently selected (0 based).
4086*bcb85aadSSteve Yin   @param [in] maxRows
4087*bcb85aadSSteve Yin    This parameter is ignored. Refer to @ref _arrayConsideration
4088*bcb85aadSSteve Yin	"Special Consideration when using Arrays" for more details.
4089*bcb85aadSSteve Yin   @param [out] rows
4090*bcb85aadSSteve Yin    An array of row indexes of selected rows (each index is 0 based), allocated
4091*bcb85aadSSteve Yin	by the server. The client must free it with CoTaskMemFree.
4092*bcb85aadSSteve Yin   @param [out] nRows
4093*bcb85aadSSteve Yin    The number of row indexes returned; the size of the returned array.
4094*bcb85aadSSteve Yin   @retval S_OK
4095*bcb85aadSSteve Yin   @retval S_FALSE if there are none, [out] values are NULL and 0 respectively
4096*bcb85aadSSteve Yin  */
4097*bcb85aadSSteve Yin  [propget] HRESULT selectedRows
4098*bcb85aadSSteve Yin    (
4099*bcb85aadSSteve Yin     [in] long maxRows,
4100*bcb85aadSSteve Yin     [out, size_is(,maxRows), length_is(,*nRows)] long **rows,
4101*bcb85aadSSteve Yin     [out, retval] long *nRows
4102*bcb85aadSSteve Yin    );
4103*bcb85aadSSteve Yin
4104*bcb85aadSSteve Yin  /** @brief Returns the summary description of the table.  The returned object could be
4105*bcb85aadSSteve Yin    an IAccessible or an IAccessible2.
4106*bcb85aadSSteve Yin   @param [out] accessible
4107*bcb85aadSSteve Yin    Returns a reference to an implementation dependent accessible object
4108*bcb85aadSSteve Yin    representing the table's summary or a NULL pointer if the table
4109*bcb85aadSSteve Yin    does not support a summary.
4110*bcb85aadSSteve Yin   @retval S_OK
4111*bcb85aadSSteve Yin   @retval S_FALSE if there is nothing to return, [out] value is NULL
4112*bcb85aadSSteve Yin  */
4113*bcb85aadSSteve Yin  [propget] HRESULT summary
4114*bcb85aadSSteve Yin    (
4115*bcb85aadSSteve Yin     [out, retval] IUnknown **accessible
4116*bcb85aadSSteve Yin    );
4117*bcb85aadSSteve Yin
4118*bcb85aadSSteve Yin  /** @brief Returns a boolean value indicating whether the specified column is
4119*bcb85aadSSteve Yin    completely selected.
4120*bcb85aadSSteve Yin   @param [in] column
4121*bcb85aadSSteve Yin    0 based index of the column for which to determine whether it is selected.
4122*bcb85aadSSteve Yin   @param [out] isSelected
4123*bcb85aadSSteve Yin    Returns TRUE if the specified column is selected completely and FALSE otherwise.
4124*bcb85aadSSteve Yin   @retval S_OK
4125*bcb85aadSSteve Yin   @retval E_INVALIDARG if bad [in] passed, [out] value is FALSE
4126*bcb85aadSSteve Yin  */
4127*bcb85aadSSteve Yin  [propget] HRESULT isColumnSelected
4128*bcb85aadSSteve Yin    (
4129*bcb85aadSSteve Yin     [in] long column,
4130*bcb85aadSSteve Yin     [out, retval] boolean *isSelected
4131*bcb85aadSSteve Yin    );
4132*bcb85aadSSteve Yin
4133*bcb85aadSSteve Yin  /** @brief Returns a boolean value indicating whether the specified row is completely
4134*bcb85aadSSteve Yin    selected.
4135*bcb85aadSSteve Yin   @param [in] row
4136*bcb85aadSSteve Yin    0 based index of the row for which to determine whether it is selected.
4137*bcb85aadSSteve Yin   @param [out] isSelected
4138*bcb85aadSSteve Yin    Returns TRUE if the specified row is selected completely and FALSE otherwise.
4139*bcb85aadSSteve Yin   @retval S_OK
4140*bcb85aadSSteve Yin   @retval E_INVALIDARG if bad [in] passed, [out] value is FALSE
4141*bcb85aadSSteve Yin  */
4142*bcb85aadSSteve Yin  [propget] HRESULT isRowSelected
4143*bcb85aadSSteve Yin    (
4144*bcb85aadSSteve Yin     [in] long row,
4145*bcb85aadSSteve Yin     [out, retval] boolean *isSelected
4146*bcb85aadSSteve Yin    );
4147*bcb85aadSSteve Yin
4148*bcb85aadSSteve Yin  /** @brief Returns a boolean value indicating whether the specified cell is selected.
4149*bcb85aadSSteve Yin   @param [in] row
4150*bcb85aadSSteve Yin    0 based index of the row for the cell to determine whether it is selected.
4151*bcb85aadSSteve Yin   @param [in] column
4152*bcb85aadSSteve Yin    0 based index of the column for the cell to determine whether it is selected.
4153*bcb85aadSSteve Yin   @param [out] isSelected
4154*bcb85aadSSteve Yin    Returns TRUE if the specified cell is selected and FALSE otherwise.
4155*bcb85aadSSteve Yin   @retval S_OK
4156*bcb85aadSSteve Yin   @retval E_INVALIDARG if bad [in] passed, [out] value is FALSE
4157*bcb85aadSSteve Yin  */
4158*bcb85aadSSteve Yin  [propget] HRESULT isSelected
4159*bcb85aadSSteve Yin    (
4160*bcb85aadSSteve Yin     [in] long row,
4161*bcb85aadSSteve Yin     [in] long column,
4162*bcb85aadSSteve Yin     [out, retval] boolean *isSelected
4163*bcb85aadSSteve Yin    );
4164*bcb85aadSSteve Yin
4165*bcb85aadSSteve Yin  /** @brief Selects a row and unselects all previously selected rows.
4166*bcb85aadSSteve Yin   @param [in] row
4167*bcb85aadSSteve Yin    0 based index of the row to be selected.
4168*bcb85aadSSteve Yin   @retval S_OK
4169*bcb85aadSSteve Yin   @retval E_INVALIDARG if bad [in] passed
4170*bcb85aadSSteve Yin  */
4171*bcb85aadSSteve Yin  HRESULT selectRow
4172*bcb85aadSSteve Yin    (
4173*bcb85aadSSteve Yin     [in] long row
4174*bcb85aadSSteve Yin    );
4175*bcb85aadSSteve Yin
4176*bcb85aadSSteve Yin  /** @brief Selects a column and unselects all previously selected columns.
4177*bcb85aadSSteve Yin   @param [in] column
4178*bcb85aadSSteve Yin    0 based index of the column to be selected.
4179*bcb85aadSSteve Yin   @retval S_OK
4180*bcb85aadSSteve Yin   @retval E_INVALIDARG if bad [in] passed
4181*bcb85aadSSteve Yin  */
4182*bcb85aadSSteve Yin  HRESULT selectColumn
4183*bcb85aadSSteve Yin    (
4184*bcb85aadSSteve Yin     [in] long column
4185*bcb85aadSSteve Yin    );
4186*bcb85aadSSteve Yin
4187*bcb85aadSSteve Yin  /** @brief Unselects one row, leaving other selected rows selected (if any).
4188*bcb85aadSSteve Yin   @param [in] row
4189*bcb85aadSSteve Yin    0 based index of the row to be unselected.
4190*bcb85aadSSteve Yin   @retval S_OK
4191*bcb85aadSSteve Yin   @retval E_INVALIDARG if bad [in] passed
4192*bcb85aadSSteve Yin  */
4193*bcb85aadSSteve Yin  HRESULT unselectRow
4194*bcb85aadSSteve Yin    (
4195*bcb85aadSSteve Yin     [in] long row
4196*bcb85aadSSteve Yin    );
4197*bcb85aadSSteve Yin
4198*bcb85aadSSteve Yin  /** @brief Unselects one column, leaving other selected columns selected (if any).
4199*bcb85aadSSteve Yin   @param [in] column
4200*bcb85aadSSteve Yin    0 based index of the column to be unselected.
4201*bcb85aadSSteve Yin   @retval S_OK
4202*bcb85aadSSteve Yin   @retval E_INVALIDARG if bad [in] passed
4203*bcb85aadSSteve Yin  */
4204*bcb85aadSSteve Yin  HRESULT unselectColumn
4205*bcb85aadSSteve Yin    (
4206*bcb85aadSSteve Yin     [in] long column
4207*bcb85aadSSteve Yin    );
4208*bcb85aadSSteve Yin
4209*bcb85aadSSteve Yin  /** @brief Given a cell index, gets the row and column indexes and extents of a cell
4210*bcb85aadSSteve Yin    and whether or not it is selected.
4211*bcb85aadSSteve Yin
4212*bcb85aadSSteve Yin   This is a convenience function.  It is not mandatory to implement it.
4213*bcb85aadSSteve Yin   @param [in] index
4214*bcb85aadSSteve Yin    0 based index of this cell in the table.
4215*bcb85aadSSteve Yin   @param [out] row
4216*bcb85aadSSteve Yin    0 based row index.
4217*bcb85aadSSteve Yin   @param [out] column
4218*bcb85aadSSteve Yin    0 based column index.
4219*bcb85aadSSteve Yin   @param [out] rowExtents
4220*bcb85aadSSteve Yin    Number of cells spanned by this cell in this row.
4221*bcb85aadSSteve Yin   @param [out] columnExtents
4222*bcb85aadSSteve Yin    Number of cells spanned by this cell in this column.
4223*bcb85aadSSteve Yin   @param [out] isSelected
4224*bcb85aadSSteve Yin    Indicates if the specified cell is selected.
4225*bcb85aadSSteve Yin   @retval S_OK
4226*bcb85aadSSteve Yin   @retval E_INVALIDARG if bad [in] passed, [out] values are 0s and FALSE respectively
4227*bcb85aadSSteve Yin  */
4228*bcb85aadSSteve Yin  [propget] HRESULT rowColumnExtentsAtIndex
4229*bcb85aadSSteve Yin    (
4230*bcb85aadSSteve Yin	 [in] long index,
4231*bcb85aadSSteve Yin	 [out] long *row,
4232*bcb85aadSSteve Yin	 [out] long *column,
4233*bcb85aadSSteve Yin	 [out] long *rowExtents,
4234*bcb85aadSSteve Yin	 [out] long *columnExtents,
4235*bcb85aadSSteve Yin	 [out, retval] boolean *isSelected
4236*bcb85aadSSteve Yin	);
4237*bcb85aadSSteve Yin
4238*bcb85aadSSteve Yin  /** @brief Returns the type and extents describing how a table changed.
4239*bcb85aadSSteve Yin
4240*bcb85aadSSteve Yin   Provided for use by the IA2_EVENT_TABLE_MODEL_CHANGED event handler.
4241*bcb85aadSSteve Yin
4242*bcb85aadSSteve Yin   This data is only guaranteed to be valid while the thread notifying the event
4243*bcb85aadSSteve Yin   continues. Once the handler has returned, the validity of the data depends on
4244*bcb85aadSSteve Yin   how the server manages the life cycle of its objects. Also, note that the server
4245*bcb85aadSSteve Yin   may have different life cycle management strategies for controls depending on
4246*bcb85aadSSteve Yin   whether or not a control manages its children. Lists, trees, and tables can have
4247*bcb85aadSSteve Yin   a large number of children and thus it's possible that the child objects for those
4248*bcb85aadSSteve Yin   controls would only be created as needed. Servers should document their life cycle
4249*bcb85aadSSteve Yin   strategy as this will be of interest to assistive technology or script engines
4250*bcb85aadSSteve Yin   accessing data out of process or from other threads. Servers only need to save the
4251*bcb85aadSSteve Yin   most recent row and column values associated with the change and a scope of the
4252*bcb85aadSSteve Yin   entire application is adequate.
4253*bcb85aadSSteve Yin
4254*bcb85aadSSteve Yin   @param [out] modelChange
4255*bcb85aadSSteve Yin    A struct of (type(insert, delete, update), firstRow, lastRow, firstColumn, lastColumn).
4256*bcb85aadSSteve Yin   @retval S_OK
4257*bcb85aadSSteve Yin   @retval S_FALSE if there is nothing to return, [out] value is NULL
4258*bcb85aadSSteve Yin  */
4259*bcb85aadSSteve Yin  [propget] HRESULT modelChange
4260*bcb85aadSSteve Yin    (
4261*bcb85aadSSteve Yin	 [out, retval] IA2TableModelChange *modelChange
4262*bcb85aadSSteve Yin    );
4263*bcb85aadSSteve Yin
4264*bcb85aadSSteve Yin}
4265*bcb85aadSSteve Yin/*************************************************************************
4266*bcb85aadSSteve Yin *
4267*bcb85aadSSteve Yin *  File Name (AccessibleTable2.idl)
4268*bcb85aadSSteve Yin *
4269*bcb85aadSSteve Yin *  IAccessible2 IDL Specification
4270*bcb85aadSSteve Yin *
4271*bcb85aadSSteve Yin *  Copyright (c) 2007, 2012 Linux Foundation
4272*bcb85aadSSteve Yin *  Copyright (c) 2006 IBM Corporation
4273*bcb85aadSSteve Yin *  Copyright (c) 2000, 2006 Sun Microsystems, Inc.
4274*bcb85aadSSteve Yin *  All rights reserved.
4275*bcb85aadSSteve Yin *
4276*bcb85aadSSteve Yin *
4277*bcb85aadSSteve Yin *  Redistribution and use in source and binary forms, with or without
4278*bcb85aadSSteve Yin *  modification, are permitted provided that the following conditions
4279*bcb85aadSSteve Yin *  are met:
4280*bcb85aadSSteve Yin *
4281*bcb85aadSSteve Yin *   1. Redistributions of source code must retain the above copyright
4282*bcb85aadSSteve Yin *      notice, this list of conditions and the following disclaimer.
4283*bcb85aadSSteve Yin *
4284*bcb85aadSSteve Yin *   2. Redistributions in binary form must reproduce the above
4285*bcb85aadSSteve Yin *      copyright notice, this list of conditions and the following
4286*bcb85aadSSteve Yin *      disclaimer in the documentation and/or other materials
4287*bcb85aadSSteve Yin *      provided with the distribution.
4288*bcb85aadSSteve Yin *
4289*bcb85aadSSteve Yin *   3. Neither the name of the Linux Foundation nor the names of its
4290*bcb85aadSSteve Yin *      contributors may be used to endorse or promote products
4291*bcb85aadSSteve Yin *      derived from this software without specific prior written
4292*bcb85aadSSteve Yin *      permission.
4293*bcb85aadSSteve Yin *
4294*bcb85aadSSteve Yin *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
4295*bcb85aadSSteve Yin *  CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
4296*bcb85aadSSteve Yin *  INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
4297*bcb85aadSSteve Yin *  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
4298*bcb85aadSSteve Yin *  DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
4299*bcb85aadSSteve Yin *  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
4300*bcb85aadSSteve Yin *  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
4301*bcb85aadSSteve Yin *  NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
4302*bcb85aadSSteve Yin *  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
4303*bcb85aadSSteve Yin *  HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
4304*bcb85aadSSteve Yin *  CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
4305*bcb85aadSSteve Yin *  OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
4306*bcb85aadSSteve Yin *  EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
4307*bcb85aadSSteve Yin *
4308*bcb85aadSSteve Yin *  This BSD License conforms to the Open Source Initiative "Simplified
4309*bcb85aadSSteve Yin *  BSD License" as published at:
4310*bcb85aadSSteve Yin *  http://www.opensource.org/licenses/bsd-license.php
4311*bcb85aadSSteve Yin *
4312*bcb85aadSSteve Yin *  IAccessible2 is a trademark of the Linux Foundation. The IAccessible2
4313*bcb85aadSSteve Yin *  mark may be used in accordance with the Linux Foundation Trademark
4314*bcb85aadSSteve Yin *  Policy to indicate compliance with the IAccessible2 specification.
4315*bcb85aadSSteve Yin *
4316*bcb85aadSSteve Yin ************************************************************************/
4317*bcb85aadSSteve Yin
4318*bcb85aadSSteve Yin
4319*bcb85aadSSteve Yin
4320*bcb85aadSSteve Yin
4321*bcb85aadSSteve Yin
4322*bcb85aadSSteve Yin
4323*bcb85aadSSteve Yin
4324*bcb85aadSSteve Yin/** @brief This interface gives access to a two-dimensional table.
4325*bcb85aadSSteve Yin
4326*bcb85aadSSteve Yin Please also refer to the IAccessibleTableCell interface.
4327*bcb85aadSSteve Yin
4328*bcb85aadSSteve Yin If you want to support older applications you should also support the
4329*bcb85aadSSteve Yin  IAccessibleTable inteface.
4330*bcb85aadSSteve Yin*/
4331*bcb85aadSSteve Yin[object, uuid(6167f295-06f0-4cdd-a1fa-02e25153d869)]
4332*bcb85aadSSteve Yininterface IAccessibleTable2 : IUnknown
4333*bcb85aadSSteve Yin{
4334*bcb85aadSSteve Yin
4335*bcb85aadSSteve Yin  /** @brief Returns the accessible object at the specified row and column in
4336*bcb85aadSSteve Yin    the table.  This object could be an IAccessible or an IAccessible2.
4337*bcb85aadSSteve Yin   @param [in] row
4338*bcb85aadSSteve Yin    The 0 based row index for which to retrieve the cell.
4339*bcb85aadSSteve Yin   @param [in] column
4340*bcb85aadSSteve Yin    The 0 based column index for which to retrieve the cell.
4341*bcb85aadSSteve Yin   @param [out] cell
4342*bcb85aadSSteve Yin    If both row and column index are valid then the corresponding accessible
4343*bcb85aadSSteve Yin    object is returned that represents the requested cell regardless of whether
4344*bcb85aadSSteve Yin    the cell is currently visible (on the screen).
4345*bcb85aadSSteve Yin   @retval S_OK
4346*bcb85aadSSteve Yin   @retval E_INVALIDARG if bad [in] passed
4347*bcb85aadSSteve Yin  */
4348*bcb85aadSSteve Yin  [propget] HRESULT cellAt
4349*bcb85aadSSteve Yin    (
4350*bcb85aadSSteve Yin     [in] long row,
4351*bcb85aadSSteve Yin     [in] long column,
4352*bcb85aadSSteve Yin     [out, retval] IUnknown **cell
4353*bcb85aadSSteve Yin    );
4354*bcb85aadSSteve Yin
4355*bcb85aadSSteve Yin  /** @brief Returns the caption for the table.  The returned object could be
4356*bcb85aadSSteve Yin    an IAccessible or an IAccessible2.
4357*bcb85aadSSteve Yin   @param [out] accessible
4358*bcb85aadSSteve Yin    If the table has a caption then a reference to it is returned, else a NULL
4359*bcb85aadSSteve Yin    pointer is returned.
4360*bcb85aadSSteve Yin   @retval S_OK
4361*bcb85aadSSteve Yin   @retval S_FALSE if there is nothing to return, [out] value is NULL
4362*bcb85aadSSteve Yin   @deprecated use a describedBy relation
4363*bcb85aadSSteve Yin  */
4364*bcb85aadSSteve Yin  [propget] HRESULT caption
4365*bcb85aadSSteve Yin    (
4366*bcb85aadSSteve Yin     [out, retval] IUnknown **accessible
4367*bcb85aadSSteve Yin    );
4368*bcb85aadSSteve Yin
4369*bcb85aadSSteve Yin  /** @brief Returns the description text of the specified column in the table.
4370*bcb85aadSSteve Yin   @param [in] column
4371*bcb85aadSSteve Yin    The 0 based index of the column for which to retrieve the description.
4372*bcb85aadSSteve Yin   @param [out] description
4373*bcb85aadSSteve Yin    Returns the description text of the specified column in the table if such a
4374*bcb85aadSSteve Yin    description exists.  Otherwise a NULL pointer is returned.
4375*bcb85aadSSteve Yin   @retval S_OK
4376*bcb85aadSSteve Yin   @retval S_FALSE if there is nothing to return, [out] value is NULL
4377*bcb85aadSSteve Yin   @retval E_INVALIDARG if bad [in] passed
4378*bcb85aadSSteve Yin  */
4379*bcb85aadSSteve Yin  [propget] HRESULT columnDescription
4380*bcb85aadSSteve Yin    (
4381*bcb85aadSSteve Yin     [in] long column,
4382*bcb85aadSSteve Yin     [out, retval] BSTR *description
4383*bcb85aadSSteve Yin    );
4384*bcb85aadSSteve Yin
4385*bcb85aadSSteve Yin
4386*bcb85aadSSteve Yin  /** @brief Returns the total number of columns in table
4387*bcb85aadSSteve Yin   @param [out] columnCount
4388*bcb85aadSSteve Yin    Number of columns in table (including columns outside the current viewport)
4389*bcb85aadSSteve Yin   @retval S_OK
4390*bcb85aadSSteve Yin  */
4391*bcb85aadSSteve Yin  [propget] HRESULT nColumns
4392*bcb85aadSSteve Yin    (
4393*bcb85aadSSteve Yin     [out, retval] long *columnCount
4394*bcb85aadSSteve Yin    );
4395*bcb85aadSSteve Yin
4396*bcb85aadSSteve Yin  /** @brief Returns the total number of rows in table
4397*bcb85aadSSteve Yin   @param [out] rowCount
4398*bcb85aadSSteve Yin    Number of rows in table (including rows outside the current viewport)
4399*bcb85aadSSteve Yin   @retval S_OK
4400*bcb85aadSSteve Yin  */
4401*bcb85aadSSteve Yin  [propget] HRESULT nRows
4402*bcb85aadSSteve Yin    (
4403*bcb85aadSSteve Yin     [out, retval] long *rowCount
4404*bcb85aadSSteve Yin    );
4405*bcb85aadSSteve Yin
4406*bcb85aadSSteve Yin  /** @brief Returns the total number of selected cells
4407*bcb85aadSSteve Yin   @param [out] cellCount
4408*bcb85aadSSteve Yin    Number of cells currently selected
4409*bcb85aadSSteve Yin   @retval S_OK
4410*bcb85aadSSteve Yin  */
4411*bcb85aadSSteve Yin  [propget] HRESULT nSelectedCells
4412*bcb85aadSSteve Yin    (
4413*bcb85aadSSteve Yin     [out, retval] long *cellCount
4414*bcb85aadSSteve Yin    );
4415*bcb85aadSSteve Yin
4416*bcb85aadSSteve Yin  /** @brief Returns the total number of selected columns
4417*bcb85aadSSteve Yin   @param [out] columnCount
4418*bcb85aadSSteve Yin    Number of columns currently selected
4419*bcb85aadSSteve Yin   @retval S_OK
4420*bcb85aadSSteve Yin  */
4421*bcb85aadSSteve Yin  [propget] HRESULT nSelectedColumns
4422*bcb85aadSSteve Yin    (
4423*bcb85aadSSteve Yin     [out, retval] long *columnCount
4424*bcb85aadSSteve Yin    );
4425*bcb85aadSSteve Yin
4426*bcb85aadSSteve Yin  /** @brief Returns the total number of selected rows
4427*bcb85aadSSteve Yin   @param [out] rowCount
4428*bcb85aadSSteve Yin    Number of rows currently selected
4429*bcb85aadSSteve Yin   @retval S_OK
4430*bcb85aadSSteve Yin  */
4431*bcb85aadSSteve Yin  [propget] HRESULT nSelectedRows
4432*bcb85aadSSteve Yin    (
4433*bcb85aadSSteve Yin     [out, retval] long *rowCount
4434*bcb85aadSSteve Yin    );
4435*bcb85aadSSteve Yin
4436*bcb85aadSSteve Yin  /** @brief Returns the description text of the specified row in the table.
4437*bcb85aadSSteve Yin   @param [in] row
4438*bcb85aadSSteve Yin    The 0 based index of the row for which to retrieve the description.
4439*bcb85aadSSteve Yin   @param [out] description
4440*bcb85aadSSteve Yin    Returns the description text of the specified row in the table if such a
4441*bcb85aadSSteve Yin    description exists.  Otherwise a NULL pointer is returned.
4442*bcb85aadSSteve Yin   @retval S_OK
4443*bcb85aadSSteve Yin   @retval S_FALSE if there is nothing to return, [out] value is NULL
4444*bcb85aadSSteve Yin   @retval E_INVALIDARG if bad [in] passed
4445*bcb85aadSSteve Yin  */
4446*bcb85aadSSteve Yin  [propget] HRESULT rowDescription
4447*bcb85aadSSteve Yin    (
4448*bcb85aadSSteve Yin     [in] long row,
4449*bcb85aadSSteve Yin     [out, retval] BSTR *description
4450*bcb85aadSSteve Yin    );
4451*bcb85aadSSteve Yin
4452*bcb85aadSSteve Yin  /** @brief Returns a list of accessibles currently selected.
4453*bcb85aadSSteve Yin   @param [out] cells
4454*bcb85aadSSteve Yin    Pointer to an array of references to selected accessibles.  The array is
4455*bcb85aadSSteve Yin    allocated by the server with CoTaskMemAlloc and freed by the client with
4456*bcb85aadSSteve Yin    CoTaskMemFree.
4457*bcb85aadSSteve Yin   @param [out] nSelectedCells
4458*bcb85aadSSteve Yin    The number of accessibles returned; the size of the returned array.
4459*bcb85aadSSteve Yin   @retval S_OK
4460*bcb85aadSSteve Yin   @retval S_FALSE if there are none, [out] values are NULL and 0 respectively
4461*bcb85aadSSteve Yin  */
4462*bcb85aadSSteve Yin  [propget] HRESULT selectedCells
4463*bcb85aadSSteve Yin    (
4464*bcb85aadSSteve Yin     [out, size_is(,*nSelectedCells)] IUnknown ***cells,
4465*bcb85aadSSteve Yin     [out, retval] long *nSelectedCells
4466*bcb85aadSSteve Yin    );
4467*bcb85aadSSteve Yin
4468*bcb85aadSSteve Yin  /** @brief Returns a list of column indexes currently selected (0 based).
4469*bcb85aadSSteve Yin   @param [out] selectedColumns
4470*bcb85aadSSteve Yin    A pointer to an array of column indexes of selected columns (each index is
4471*bcb85aadSSteve Yin    0 based).  The array is allocated by the server with CoTaskMemAlloc and
4472*bcb85aadSSteve Yin    freed by the client with CoTaskMemFree.
4473*bcb85aadSSteve Yin   @param [out] nColumns
4474*bcb85aadSSteve Yin    The number of column indexes returned; the size of the returned array.
4475*bcb85aadSSteve Yin   @retval S_OK
4476*bcb85aadSSteve Yin   @retval S_FALSE if there are none, [out] values are NULL and 0 respectively
4477*bcb85aadSSteve Yin  */
4478*bcb85aadSSteve Yin  [propget] HRESULT selectedColumns
4479*bcb85aadSSteve Yin    (
4480*bcb85aadSSteve Yin     [out, size_is(,*nColumns)] long **selectedColumns,
4481*bcb85aadSSteve Yin     [out, retval] long *nColumns
4482*bcb85aadSSteve Yin    );
4483*bcb85aadSSteve Yin
4484*bcb85aadSSteve Yin  /** @brief Returns a list of row indexes currently selected (0 based).
4485*bcb85aadSSteve Yin   @param [out] selectedRows
4486*bcb85aadSSteve Yin    An array of row indexes of selected rows (each index is 0 based).  The array
4487*bcb85aadSSteve Yin    is allocated by the server with CoTaskMemAlloc and freed by the client with
4488*bcb85aadSSteve Yin    CoTaskMemFree.
4489*bcb85aadSSteve Yin   @param [out] nRows
4490*bcb85aadSSteve Yin    The number of row indexes returned; the size of the returned array.
4491*bcb85aadSSteve Yin   @retval S_OK
4492*bcb85aadSSteve Yin   @retval S_FALSE if there are none, [out] values are NULL and 0 respectively
4493*bcb85aadSSteve Yin  */
4494*bcb85aadSSteve Yin  [propget] HRESULT selectedRows
4495*bcb85aadSSteve Yin    (
4496*bcb85aadSSteve Yin     [out, size_is(,*nRows)] long **selectedRows,
4497*bcb85aadSSteve Yin     [out, retval] long *nRows
4498*bcb85aadSSteve Yin    );
4499*bcb85aadSSteve Yin
4500*bcb85aadSSteve Yin  /** @brief Returns the summary description of the table.  The returned object could be
4501*bcb85aadSSteve Yin    an IAccessible or an IAccessible2.
4502*bcb85aadSSteve Yin   @param [out] accessible
4503*bcb85aadSSteve Yin    Returns a reference to an implementation dependent accessible object
4504*bcb85aadSSteve Yin    representing the table's summary or a NULL pointer if the table
4505*bcb85aadSSteve Yin    does not support a summary.
4506*bcb85aadSSteve Yin   @retval S_OK
4507*bcb85aadSSteve Yin   @retval S_FALSE if there is nothing to return, [out] value is NULL
4508*bcb85aadSSteve Yin   @deprecated Use the labeledBy relation
4509*bcb85aadSSteve Yin  */
4510*bcb85aadSSteve Yin  [propget] HRESULT summary
4511*bcb85aadSSteve Yin    (
4512*bcb85aadSSteve Yin     [out, retval] IUnknown **accessible
4513*bcb85aadSSteve Yin    );
4514*bcb85aadSSteve Yin
4515*bcb85aadSSteve Yin  /** @brief Returns a boolean value indicating whether the specified column is
4516*bcb85aadSSteve Yin    completely selected.
4517*bcb85aadSSteve Yin   @param [in] column
4518*bcb85aadSSteve Yin    0 based index of the column for which to determine whether it is selected.
4519*bcb85aadSSteve Yin   @param [out] isSelected
4520*bcb85aadSSteve Yin    Returns TRUE if the specified column is selected completely and FALSE otherwise.
4521*bcb85aadSSteve Yin   @retval S_OK
4522*bcb85aadSSteve Yin   @retval E_INVALIDARG if bad [in] passed
4523*bcb85aadSSteve Yin  */
4524*bcb85aadSSteve Yin  [propget] HRESULT isColumnSelected
4525*bcb85aadSSteve Yin    (
4526*bcb85aadSSteve Yin     [in] long column,
4527*bcb85aadSSteve Yin     [out, retval] boolean *isSelected
4528*bcb85aadSSteve Yin    );
4529*bcb85aadSSteve Yin
4530*bcb85aadSSteve Yin  /** @brief Returns a boolean value indicating whether the specified row is completely
4531*bcb85aadSSteve Yin    selected.
4532*bcb85aadSSteve Yin   @param [in] row
4533*bcb85aadSSteve Yin    0 based index of the row for which to determine whether it is selected.
4534*bcb85aadSSteve Yin   @param [out] isSelected
4535*bcb85aadSSteve Yin    Returns TRUE if the specified row is selected completely and FALSE otherwise.
4536*bcb85aadSSteve Yin   @retval S_OK
4537*bcb85aadSSteve Yin   @retval E_INVALIDARG if bad [in] passed
4538*bcb85aadSSteve Yin  */
4539*bcb85aadSSteve Yin  [propget] HRESULT isRowSelected
4540*bcb85aadSSteve Yin    (
4541*bcb85aadSSteve Yin     [in] long row,
4542*bcb85aadSSteve Yin     [out, retval] boolean *isSelected
4543*bcb85aadSSteve Yin    );
4544*bcb85aadSSteve Yin
4545*bcb85aadSSteve Yin  /** @brief Selects a row and unselects all previously selected rows.
4546*bcb85aadSSteve Yin
4547*bcb85aadSSteve Yin   The behavior should mimic that of the application, but for those applications
4548*bcb85aadSSteve Yin    which do not have a means in the GUI to select a full row of cells the behavior
4549*bcb85aadSSteve Yin    should be as follows:  First any selected rows in the table are unselected.  Then
4550*bcb85aadSSteve Yin    the entire row of cells for the specified row is selected.  If any of the
4551*bcb85aadSSteve Yin    cells in the selected row span additional rows, the cells in those rows
4552*bcb85aadSSteve Yin    are also selected.
4553*bcb85aadSSteve Yin   @param [in] row
4554*bcb85aadSSteve Yin    0 based index of the row to be selected.
4555*bcb85aadSSteve Yin   @retval S_OK
4556*bcb85aadSSteve Yin   @retval E_INVALIDARG if bad [in] passed
4557*bcb85aadSSteve Yin  */
4558*bcb85aadSSteve Yin  HRESULT selectRow
4559*bcb85aadSSteve Yin    (
4560*bcb85aadSSteve Yin     [in] long row
4561*bcb85aadSSteve Yin    );
4562*bcb85aadSSteve Yin
4563*bcb85aadSSteve Yin  /** @brief Selects a column and unselects all previously selected columns.
4564*bcb85aadSSteve Yin
4565*bcb85aadSSteve Yin   The behavior should mimic that of the application, but for those applications
4566*bcb85aadSSteve Yin    which do not have a means in the GUI to select a full column of cells the behavior
4567*bcb85aadSSteve Yin    should be as follows:  First any selected columns in the table are unselected.  Then
4568*bcb85aadSSteve Yin    the entire column of cells for the specified column is selected.  If any of the
4569*bcb85aadSSteve Yin    cells in the selected column span additional columns, the cells in those columns
4570*bcb85aadSSteve Yin    are also selected.
4571*bcb85aadSSteve Yin   @param [in] column
4572*bcb85aadSSteve Yin    0 based index of the column to be selected.
4573*bcb85aadSSteve Yin   @retval S_OK
4574*bcb85aadSSteve Yin   @retval E_INVALIDARG if bad [in] passed
4575*bcb85aadSSteve Yin  */
4576*bcb85aadSSteve Yin  HRESULT selectColumn
4577*bcb85aadSSteve Yin    (
4578*bcb85aadSSteve Yin     [in] long column
4579*bcb85aadSSteve Yin    );
4580*bcb85aadSSteve Yin
4581*bcb85aadSSteve Yin  /** @brief Unselects one row, leaving other selected rows selected (if any).
4582*bcb85aadSSteve Yin
4583*bcb85aadSSteve Yin   The behavior should mimic that of the application, but for those applications
4584*bcb85aadSSteve Yin    which do not have a means in the GUI to unselect a full row of cells the
4585*bcb85aadSSteve Yin    behavior should be as follows:  The entire row of cells for the specified
4586*bcb85aadSSteve Yin    row is unselected.  If any of the cells in the selected row span additional
4587*bcb85aadSSteve Yin    rows, the cells in those rows are also unselected.
4588*bcb85aadSSteve Yin   @param [in] row
4589*bcb85aadSSteve Yin    0 based index of the row to be unselected.
4590*bcb85aadSSteve Yin   @retval S_OK
4591*bcb85aadSSteve Yin   @retval E_INVALIDARG if bad [in] passed
4592*bcb85aadSSteve Yin  */
4593*bcb85aadSSteve Yin  HRESULT unselectRow
4594*bcb85aadSSteve Yin    (
4595*bcb85aadSSteve Yin     [in] long row
4596*bcb85aadSSteve Yin    );
4597*bcb85aadSSteve Yin
4598*bcb85aadSSteve Yin  /** @brief Unselects one column, leaving other selected columns selected (if any).
4599*bcb85aadSSteve Yin
4600*bcb85aadSSteve Yin   The behavior should mimic that of the application, but for those applications
4601*bcb85aadSSteve Yin    which do not have a means in the GUI to unselect a full column of cells the
4602*bcb85aadSSteve Yin    behavior should be as follows:  The entire column of cells for the specified
4603*bcb85aadSSteve Yin    column is unselected.  If any of the cells in the selected column span additional
4604*bcb85aadSSteve Yin    columns, the cells in those columns are also unselected.
4605*bcb85aadSSteve Yin   @param [in] column
4606*bcb85aadSSteve Yin    0 based index of the column to be unselected.
4607*bcb85aadSSteve Yin   @retval S_OK
4608*bcb85aadSSteve Yin   @retval E_INVALIDARG if bad [in] passed
4609*bcb85aadSSteve Yin  */
4610*bcb85aadSSteve Yin  HRESULT unselectColumn
4611*bcb85aadSSteve Yin    (
4612*bcb85aadSSteve Yin     [in] long column
4613*bcb85aadSSteve Yin    );
4614*bcb85aadSSteve Yin
4615*bcb85aadSSteve Yin  /** @brief Returns the type and extents describing how a table changed.
4616*bcb85aadSSteve Yin
4617*bcb85aadSSteve Yin   Provided for use by the IA2_EVENT_TABLE_MODEL_CHANGED event handler.
4618*bcb85aadSSteve Yin
4619*bcb85aadSSteve Yin   This data is only guaranteed to be valid while the thread notifying the event
4620*bcb85aadSSteve Yin   continues. Once the handler has returned, the validity of the data depends on
4621*bcb85aadSSteve Yin   how the server manages the life cycle of its objects. Also, note that the server
4622*bcb85aadSSteve Yin   may have different life cycle management strategies for controls depending on
4623*bcb85aadSSteve Yin   whether or not a control manages its children. Lists, trees, and tables can have
4624*bcb85aadSSteve Yin   a large number of children and thus it's possible that the child objects for those
4625*bcb85aadSSteve Yin   controls would only be created as needed. Servers should document their life cycle
4626*bcb85aadSSteve Yin   strategy as this will be of interest to assistive technology or script engines
4627*bcb85aadSSteve Yin   accessing data out of process or from other threads. Servers only need to save the
4628*bcb85aadSSteve Yin   most recent row and column values associated with the change and a scope of the
4629*bcb85aadSSteve Yin   entire application is adequate.
4630*bcb85aadSSteve Yin
4631*bcb85aadSSteve Yin   @param [out] modelChange
4632*bcb85aadSSteve Yin    A struct of (type(insert, delete, update), firstRow, lastRow, firstColumn, lastColumn).
4633*bcb85aadSSteve Yin   @retval S_OK
4634*bcb85aadSSteve Yin   @retval S_FALSE if there is nothing to return, [out] value is NULL
4635*bcb85aadSSteve Yin  */
4636*bcb85aadSSteve Yin  [propget] HRESULT modelChange
4637*bcb85aadSSteve Yin    (
4638*bcb85aadSSteve Yin     [out, retval] IA2TableModelChange *modelChange
4639*bcb85aadSSteve Yin    );
4640*bcb85aadSSteve Yin
4641*bcb85aadSSteve Yin}
4642*bcb85aadSSteve Yin/*************************************************************************
4643*bcb85aadSSteve Yin *
4644*bcb85aadSSteve Yin *  File Name (AccessibleTableCell.idl)
4645*bcb85aadSSteve Yin *
4646*bcb85aadSSteve Yin *  IAccessible2 IDL Specification
4647*bcb85aadSSteve Yin *
4648*bcb85aadSSteve Yin *  Copyright (c) 2007, 2013 Linux Foundation
4649*bcb85aadSSteve Yin *  Copyright (c) 2006 IBM Corporation
4650*bcb85aadSSteve Yin *  Copyright (c) 2000, 2006 Sun Microsystems, Inc.
4651*bcb85aadSSteve Yin *  All rights reserved.
4652*bcb85aadSSteve Yin *
4653*bcb85aadSSteve Yin *
4654*bcb85aadSSteve Yin *  Redistribution and use in source and binary forms, with or without
4655*bcb85aadSSteve Yin *  modification, are permitted provided that the following conditions
4656*bcb85aadSSteve Yin *  are met:
4657*bcb85aadSSteve Yin *
4658*bcb85aadSSteve Yin *   1. Redistributions of source code must retain the above copyright
4659*bcb85aadSSteve Yin *      notice, this list of conditions and the following disclaimer.
4660*bcb85aadSSteve Yin *
4661*bcb85aadSSteve Yin *   2. Redistributions in binary form must reproduce the above
4662*bcb85aadSSteve Yin *      copyright notice, this list of conditions and the following
4663*bcb85aadSSteve Yin *      disclaimer in the documentation and/or other materials
4664*bcb85aadSSteve Yin *      provided with the distribution.
4665*bcb85aadSSteve Yin *
4666*bcb85aadSSteve Yin *   3. Neither the name of the Linux Foundation nor the names of its
4667*bcb85aadSSteve Yin *      contributors may be used to endorse or promote products
4668*bcb85aadSSteve Yin *      derived from this software without specific prior written
4669*bcb85aadSSteve Yin *      permission.
4670*bcb85aadSSteve Yin *
4671*bcb85aadSSteve Yin *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
4672*bcb85aadSSteve Yin *  CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
4673*bcb85aadSSteve Yin *  INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
4674*bcb85aadSSteve Yin *  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
4675*bcb85aadSSteve Yin *  DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
4676*bcb85aadSSteve Yin *  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
4677*bcb85aadSSteve Yin *  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
4678*bcb85aadSSteve Yin *  NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
4679*bcb85aadSSteve Yin *  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
4680*bcb85aadSSteve Yin *  HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
4681*bcb85aadSSteve Yin *  CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
4682*bcb85aadSSteve Yin *  OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
4683*bcb85aadSSteve Yin *  EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
4684*bcb85aadSSteve Yin *
4685*bcb85aadSSteve Yin *  This BSD License conforms to the Open Source Initiative "Simplified
4686*bcb85aadSSteve Yin *  BSD License" as published at:
4687*bcb85aadSSteve Yin *  http://www.opensource.org/licenses/bsd-license.php
4688*bcb85aadSSteve Yin *
4689*bcb85aadSSteve Yin *  IAccessible2 is a trademark of the Linux Foundation. The IAccessible2
4690*bcb85aadSSteve Yin *  mark may be used in accordance with the Linux Foundation Trademark
4691*bcb85aadSSteve Yin *  Policy to indicate compliance with the IAccessible2 specification.
4692*bcb85aadSSteve Yin *
4693*bcb85aadSSteve Yin ************************************************************************/
4694*bcb85aadSSteve Yin
4695*bcb85aadSSteve Yin
4696*bcb85aadSSteve Yin
4697*bcb85aadSSteve Yin
4698*bcb85aadSSteve Yin
4699*bcb85aadSSteve Yin
4700*bcb85aadSSteve Yin/** @brief This interface gives access to the cells of a two-dimensional table.
4701*bcb85aadSSteve Yin
4702*bcb85aadSSteve Yin Please also refer to the IAccessibleTable2 interface.
4703*bcb85aadSSteve Yin
4704*bcb85aadSSteve Yin*/
4705*bcb85aadSSteve Yin[object, uuid(594116B1-C99F-4847-AD06-0A7A86ECE645)]
4706*bcb85aadSSteve Yininterface IAccessibleTableCell : IUnknown
4707*bcb85aadSSteve Yin{
4708*bcb85aadSSteve Yin
4709*bcb85aadSSteve Yin  /** @brief Returns the number of columns occupied by this cell accessible.
4710*bcb85aadSSteve Yin
4711*bcb85aadSSteve Yin   The result is greater than 1 if the specified cell spans multiple columns.
4712*bcb85aadSSteve Yin   @param [out] nColumnsSpanned
4713*bcb85aadSSteve Yin    Returns the 1 based column extent of the specified cell.
4714*bcb85aadSSteve Yin   @retval S_OK
4715*bcb85aadSSteve Yin  */
4716*bcb85aadSSteve Yin  [propget] HRESULT columnExtent
4717*bcb85aadSSteve Yin    (
4718*bcb85aadSSteve Yin     [out, retval] long *nColumnsSpanned
4719*bcb85aadSSteve Yin    );
4720*bcb85aadSSteve Yin
4721*bcb85aadSSteve Yin  /** @brief Returns the column headers as an array of cell accessibles.
4722*bcb85aadSSteve Yin
4723*bcb85aadSSteve Yin   @param [out] cellAccessibles
4724*bcb85aadSSteve Yin    Pointer to an array of references to cell accessibles.  The array is allocated
4725*bcb85aadSSteve Yin	by the server.  The client must free it with CoTaskMemFree.
4726*bcb85aadSSteve Yin   @param [out] nColumnHeaderCells
4727*bcb85aadSSteve Yin    The number of accessibles returned; the size of the returned array.
4728*bcb85aadSSteve Yin   @retval S_OK
4729*bcb85aadSSteve Yin   @retval S_FALSE if there is no header, [out] values are NULL and 0 respectively
4730*bcb85aadSSteve Yin  */
4731*bcb85aadSSteve Yin  [propget] HRESULT columnHeaderCells
4732*bcb85aadSSteve Yin    (
4733*bcb85aadSSteve Yin     [out, size_is(,*nColumnHeaderCells)] IUnknown ***cellAccessibles,
4734*bcb85aadSSteve Yin     [out, retval] long *nColumnHeaderCells
4735*bcb85aadSSteve Yin    );
4736*bcb85aadSSteve Yin
4737*bcb85aadSSteve Yin  /** @brief Translates this cell accessible into the corresponding column index.
4738*bcb85aadSSteve Yin
4739*bcb85aadSSteve Yin   @param [out] columnIndex
4740*bcb85aadSSteve Yin    Returns the 0 based column index of the cell of the specified cell or the index of
4741*bcb85aadSSteve Yin    the first column if the cell spans multiple columns.
4742*bcb85aadSSteve Yin   @retval S_OK
4743*bcb85aadSSteve Yin  */
4744*bcb85aadSSteve Yin  [propget] HRESULT columnIndex
4745*bcb85aadSSteve Yin    (
4746*bcb85aadSSteve Yin     [out, retval] long *columnIndex
4747*bcb85aadSSteve Yin    );
4748*bcb85aadSSteve Yin
4749*bcb85aadSSteve Yin  /** @brief Returns the number of rows occupied by this cell accessible.
4750*bcb85aadSSteve Yin
4751*bcb85aadSSteve Yin   @param [out] nRowsSpanned
4752*bcb85aadSSteve Yin    Returns the row extent of the specified cell.
4753*bcb85aadSSteve Yin   @retval S_OK
4754*bcb85aadSSteve Yin  */
4755*bcb85aadSSteve Yin  [propget] HRESULT rowExtent
4756*bcb85aadSSteve Yin    (
4757*bcb85aadSSteve Yin     [out, retval] long *nRowsSpanned
4758*bcb85aadSSteve Yin    );
4759*bcb85aadSSteve Yin
4760*bcb85aadSSteve Yin  /** @brief Returns the row headers as an array of cell accessibles.
4761*bcb85aadSSteve Yin
4762*bcb85aadSSteve Yin   @param [out] cellAccessibles
4763*bcb85aadSSteve Yin    Pointer to an array of references to cell accessibles.  The array is allocated
4764*bcb85aadSSteve Yin	by the server.  The client must free it with CoTaskMemFree.
4765*bcb85aadSSteve Yin   @param [out] nRowHeaderCells
4766*bcb85aadSSteve Yin    The number of accessibles returned; the size of the returned array.
4767*bcb85aadSSteve Yin   @retval S_OK
4768*bcb85aadSSteve Yin   @retval S_FALSE if there is no header, [out] values are NULL and 0 respectively
4769*bcb85aadSSteve Yin  */
4770*bcb85aadSSteve Yin  [propget] HRESULT rowHeaderCells
4771*bcb85aadSSteve Yin    (
4772*bcb85aadSSteve Yin     [out, size_is(,*nRowHeaderCells)] IUnknown ***cellAccessibles,
4773*bcb85aadSSteve Yin     [out, retval] long *nRowHeaderCells
4774*bcb85aadSSteve Yin    );
4775*bcb85aadSSteve Yin
4776*bcb85aadSSteve Yin  /** @brief Translates this cell accessible into the corresponding row index.
4777*bcb85aadSSteve Yin
4778*bcb85aadSSteve Yin   @param [out] rowIndex
4779*bcb85aadSSteve Yin    Returns the 0 based row index of the specified cell or the index of
4780*bcb85aadSSteve Yin    the first row if the cell spans multiple rows.
4781*bcb85aadSSteve Yin   @retval S_OK
4782*bcb85aadSSteve Yin  */
4783*bcb85aadSSteve Yin  [propget] HRESULT rowIndex
4784*bcb85aadSSteve Yin    (
4785*bcb85aadSSteve Yin     [out, retval] long *rowIndex
4786*bcb85aadSSteve Yin    );
4787*bcb85aadSSteve Yin
4788*bcb85aadSSteve Yin  /** @brief Returns a boolean value indicating whether this cell is selected.
4789*bcb85aadSSteve Yin
4790*bcb85aadSSteve Yin   @param [out] isSelected
4791*bcb85aadSSteve Yin    Returns TRUE if the specified cell is selected and FALSE otherwise.
4792*bcb85aadSSteve Yin   @retval S_OK
4793*bcb85aadSSteve Yin  */
4794*bcb85aadSSteve Yin  [propget] HRESULT isSelected
4795*bcb85aadSSteve Yin    (
4796*bcb85aadSSteve Yin     [out, retval] boolean *isSelected
4797*bcb85aadSSteve Yin    );
4798*bcb85aadSSteve Yin
4799*bcb85aadSSteve Yin  /** @brief Gets the row and column indexes and extents of this cell accessible
4800*bcb85aadSSteve Yin    and whether or not it is selected.
4801*bcb85aadSSteve Yin
4802*bcb85aadSSteve Yin   This is a convenience function.  It is not mandatory to implement it.
4803*bcb85aadSSteve Yin   @param [out] row
4804*bcb85aadSSteve Yin    0 based row index.
4805*bcb85aadSSteve Yin   @param [out] column
4806*bcb85aadSSteve Yin    0 based column index.
4807*bcb85aadSSteve Yin   @param [out] rowExtents
4808*bcb85aadSSteve Yin    Number of cells spanned by this cell in this row.
4809*bcb85aadSSteve Yin   @param [out] columnExtents
4810*bcb85aadSSteve Yin    Number of cells spanned by this cell in this column.
4811*bcb85aadSSteve Yin   @param [out] isSelected
4812*bcb85aadSSteve Yin    Indicates if the specified cell is selected.
4813*bcb85aadSSteve Yin   @retval S_OK
4814*bcb85aadSSteve Yin  */
4815*bcb85aadSSteve Yin  [propget] HRESULT rowColumnExtents
4816*bcb85aadSSteve Yin    (
4817*bcb85aadSSteve Yin     [out] long *row,
4818*bcb85aadSSteve Yin     [out] long *column,
4819*bcb85aadSSteve Yin     [out] long *rowExtents,
4820*bcb85aadSSteve Yin     [out] long *columnExtents,
4821*bcb85aadSSteve Yin     [out, retval] boolean *isSelected
4822*bcb85aadSSteve Yin    );
4823*bcb85aadSSteve Yin
4824*bcb85aadSSteve Yin  /** @brief Returns a reference to the accessbile of the containing table.
4825*bcb85aadSSteve Yin
4826*bcb85aadSSteve Yin   @param [out] table
4827*bcb85aadSSteve Yin    Returns a reference to the IUnknown of the containing table.
4828*bcb85aadSSteve Yin   @retval S_OK
4829*bcb85aadSSteve Yin  */
4830*bcb85aadSSteve Yin  [propget] HRESULT table
4831*bcb85aadSSteve Yin    (
4832*bcb85aadSSteve Yin     [out, retval] IUnknown **table
4833*bcb85aadSSteve Yin    );
4834*bcb85aadSSteve Yin
4835*bcb85aadSSteve Yin}
4836*bcb85aadSSteve Yin/*************************************************************************
4837*bcb85aadSSteve Yin *
4838*bcb85aadSSteve Yin *  File Name (AccessibleImage.idl)
4839*bcb85aadSSteve Yin *
4840*bcb85aadSSteve Yin *  IAccessible2 IDL Specification
4841*bcb85aadSSteve Yin *
4842*bcb85aadSSteve Yin *  Copyright (c) 2007, 2010 Linux Foundation
4843*bcb85aadSSteve Yin *  Copyright (c) 2006 IBM Corporation
4844*bcb85aadSSteve Yin *  Copyright (c) 2000, 2006 Sun Microsystems, Inc.
4845*bcb85aadSSteve Yin *  All rights reserved.
4846*bcb85aadSSteve Yin *
4847*bcb85aadSSteve Yin *
4848*bcb85aadSSteve Yin *  Redistribution and use in source and binary forms, with or without
4849*bcb85aadSSteve Yin *  modification, are permitted provided that the following conditions
4850*bcb85aadSSteve Yin *  are met:
4851*bcb85aadSSteve Yin *
4852*bcb85aadSSteve Yin *   1. Redistributions of source code must retain the above copyright
4853*bcb85aadSSteve Yin *      notice, this list of conditions and the following disclaimer.
4854*bcb85aadSSteve Yin *
4855*bcb85aadSSteve Yin *   2. Redistributions in binary form must reproduce the above
4856*bcb85aadSSteve Yin *      copyright notice, this list of conditions and the following
4857*bcb85aadSSteve Yin *      disclaimer in the documentation and/or other materials
4858*bcb85aadSSteve Yin *      provided with the distribution.
4859*bcb85aadSSteve Yin *
4860*bcb85aadSSteve Yin *   3. Neither the name of the Linux Foundation nor the names of its
4861*bcb85aadSSteve Yin *      contributors may be used to endorse or promote products
4862*bcb85aadSSteve Yin *      derived from this software without specific prior written
4863*bcb85aadSSteve Yin *      permission.
4864*bcb85aadSSteve Yin *
4865*bcb85aadSSteve Yin *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
4866*bcb85aadSSteve Yin *  CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
4867*bcb85aadSSteve Yin *  INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
4868*bcb85aadSSteve Yin *  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
4869*bcb85aadSSteve Yin *  DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
4870*bcb85aadSSteve Yin *  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
4871*bcb85aadSSteve Yin *  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
4872*bcb85aadSSteve Yin *  NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
4873*bcb85aadSSteve Yin *  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
4874*bcb85aadSSteve Yin *  HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
4875*bcb85aadSSteve Yin *  CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
4876*bcb85aadSSteve Yin *  OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
4877*bcb85aadSSteve Yin *  EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
4878*bcb85aadSSteve Yin *
4879*bcb85aadSSteve Yin *  This BSD License conforms to the Open Source Initiative "Simplified
4880*bcb85aadSSteve Yin *  BSD License" as published at:
4881*bcb85aadSSteve Yin *  http://www.opensource.org/licenses/bsd-license.php
4882*bcb85aadSSteve Yin *
4883*bcb85aadSSteve Yin *  IAccessible2 is a trademark of the Linux Foundation. The IAccessible2
4884*bcb85aadSSteve Yin *  mark may be used in accordance with the Linux Foundation Trademark
4885*bcb85aadSSteve Yin *  Policy to indicate compliance with the IAccessible2 specification.
4886*bcb85aadSSteve Yin *
4887*bcb85aadSSteve Yin ************************************************************************/
4888*bcb85aadSSteve Yin
4889*bcb85aadSSteve Yin
4890*bcb85aadSSteve Yin
4891*bcb85aadSSteve Yin
4892*bcb85aadSSteve Yin
4893*bcb85aadSSteve Yin
4894*bcb85aadSSteve Yin/** @brief This interface represents images and icons.
4895*bcb85aadSSteve Yin
4896*bcb85aadSSteve Yin This interface is used for a representation of images like icons on buttons.
4897*bcb85aadSSteve Yin  %IAccessibleImage only needs to be implemented in certain situations.  Some
4898*bcb85aadSSteve Yin  examples are:
4899*bcb85aadSSteve Yin  <ol>
4900*bcb85aadSSteve Yin   <li>The accessible name and description are not enough to fully
4901*bcb85aadSSteve Yin    describe the image, e.g. when the accessible description is used to define the
4902*bcb85aadSSteve Yin    behavior of an actionable image and the image itself conveys semantically
4903*bcb85aadSSteve Yin    significant information.
4904*bcb85aadSSteve Yin   <li>The user can edit the content that includes an
4905*bcb85aadSSteve Yin    image and therefore the user needs to be able to review the image's position.
4906*bcb85aadSSteve Yin  </ol>
4907*bcb85aadSSteve Yin*/
4908*bcb85aadSSteve Yin[object, uuid(FE5ABB3D-615E-4f7b-909F-5F0EDA9E8DDE)]
4909*bcb85aadSSteve Yininterface IAccessibleImage : IUnknown
4910*bcb85aadSSteve Yin{
4911*bcb85aadSSteve Yin  /** @brief Returns the localized description of the image.
4912*bcb85aadSSteve Yin   @param [out] description
4913*bcb85aadSSteve Yin   @retval S_OK
4914*bcb85aadSSteve Yin   @retval S_FALSE if there is nothing to return, [out] value is NULL
4915*bcb85aadSSteve Yin  */
4916*bcb85aadSSteve Yin  [propget] HRESULT description
4917*bcb85aadSSteve Yin    (
4918*bcb85aadSSteve Yin     [out, retval] BSTR *description
4919*bcb85aadSSteve Yin    );
4920*bcb85aadSSteve Yin
4921*bcb85aadSSteve Yin  /** @brief Returns the coordinates of the image.
4922*bcb85aadSSteve Yin   @param [in] coordinateType
4923*bcb85aadSSteve Yin    Specifies whether the returned coordinates should be relative to the screen or the parent object.
4924*bcb85aadSSteve Yin   @param [out] x
4925*bcb85aadSSteve Yin   @param [out] y
4926*bcb85aadSSteve Yin   @retval S_OK
4927*bcb85aadSSteve Yin  */
4928*bcb85aadSSteve Yin  [propget] HRESULT imagePosition
4929*bcb85aadSSteve Yin    (
4930*bcb85aadSSteve Yin	 [in] enum IA2CoordinateType coordinateType,
4931*bcb85aadSSteve Yin	 [out] long *x,
4932*bcb85aadSSteve Yin     [out, retval] long *y
4933*bcb85aadSSteve Yin    );
4934*bcb85aadSSteve Yin
4935*bcb85aadSSteve Yin  /** @brief Returns the size of the image in units specified by parent's coordinate system.
4936*bcb85aadSSteve Yin   @param [out] height
4937*bcb85aadSSteve Yin   @param [out] width
4938*bcb85aadSSteve Yin   @retval S_OK
4939*bcb85aadSSteve Yin  */
4940*bcb85aadSSteve Yin
4941*bcb85aadSSteve Yin  [propget] HRESULT imageSize
4942*bcb85aadSSteve Yin    (
4943*bcb85aadSSteve Yin     [out] long *height,
4944*bcb85aadSSteve Yin	 [out, retval] long *width
4945*bcb85aadSSteve Yin    );
4946*bcb85aadSSteve Yin}
4947*bcb85aadSSteve Yin/*************************************************************************
4948*bcb85aadSSteve Yin *
4949*bcb85aadSSteve Yin *  File Name (AccessibleEventID.idl)
4950*bcb85aadSSteve Yin *
4951*bcb85aadSSteve Yin *  IAccessible2 IDL Specification
4952*bcb85aadSSteve Yin *
4953*bcb85aadSSteve Yin *  Copyright (c) 2007, 2010 Linux Foundation
4954*bcb85aadSSteve Yin *  Copyright (c) 2006 IBM Corporation
4955*bcb85aadSSteve Yin *  Copyright (c) 2000, 2006 Sun Microsystems, Inc.
4956*bcb85aadSSteve Yin *  All rights reserved.
4957*bcb85aadSSteve Yin *
4958*bcb85aadSSteve Yin *
4959*bcb85aadSSteve Yin *  Redistribution and use in source and binary forms, with or without
4960*bcb85aadSSteve Yin *  modification, are permitted provided that the following conditions
4961*bcb85aadSSteve Yin *  are met:
4962*bcb85aadSSteve Yin *
4963*bcb85aadSSteve Yin *   1. Redistributions of source code must retain the above copyright
4964*bcb85aadSSteve Yin *      notice, this list of conditions and the following disclaimer.
4965*bcb85aadSSteve Yin *
4966*bcb85aadSSteve Yin *   2. Redistributions in binary form must reproduce the above
4967*bcb85aadSSteve Yin *      copyright notice, this list of conditions and the following
4968*bcb85aadSSteve Yin *      disclaimer in the documentation and/or other materials
4969*bcb85aadSSteve Yin *      provided with the distribution.
4970*bcb85aadSSteve Yin *
4971*bcb85aadSSteve Yin *   3. Neither the name of the Linux Foundation nor the names of its
4972*bcb85aadSSteve Yin *      contributors may be used to endorse or promote products
4973*bcb85aadSSteve Yin *      derived from this software without specific prior written
4974*bcb85aadSSteve Yin *      permission.
4975*bcb85aadSSteve Yin *
4976*bcb85aadSSteve Yin *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
4977*bcb85aadSSteve Yin *  CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
4978*bcb85aadSSteve Yin *  INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
4979*bcb85aadSSteve Yin *  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
4980*bcb85aadSSteve Yin *  DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
4981*bcb85aadSSteve Yin *  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
4982*bcb85aadSSteve Yin *  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
4983*bcb85aadSSteve Yin *  NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
4984*bcb85aadSSteve Yin *  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
4985*bcb85aadSSteve Yin *  HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
4986*bcb85aadSSteve Yin *  CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
4987*bcb85aadSSteve Yin *  OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
4988*bcb85aadSSteve Yin *  EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
4989*bcb85aadSSteve Yin *
4990*bcb85aadSSteve Yin *  This BSD License conforms to the Open Source Initiative "Simplified
4991*bcb85aadSSteve Yin *  BSD License" as published at:
4992*bcb85aadSSteve Yin *  http://www.opensource.org/licenses/bsd-license.php
4993*bcb85aadSSteve Yin *
4994*bcb85aadSSteve Yin *  IAccessible2 is a trademark of the Linux Foundation. The IAccessible2
4995*bcb85aadSSteve Yin *  mark may be used in accordance with the Linux Foundation Trademark
4996*bcb85aadSSteve Yin *  Policy to indicate compliance with the IAccessible2 specification.
4997*bcb85aadSSteve Yin *
4998*bcb85aadSSteve Yin ************************************************************************/
4999*bcb85aadSSteve Yin
5000*bcb85aadSSteve Yin/** %IAccessible2 specific event constants
5001*bcb85aadSSteve Yin
5002*bcb85aadSSteve Yin This enum defines the event IDs fired by %IAccessible2 objects.  The event IDs
5003*bcb85aadSSteve Yin are in addition to those used by MSAA.
5004*bcb85aadSSteve Yin*/
5005*bcb85aadSSteve Yinenum IA2EventID {
5006*bcb85aadSSteve Yin
5007*bcb85aadSSteve Yin  /** The change of the number or attributes of actions of an accessible
5008*bcb85aadSSteve Yin    object is signaled by events of this type.
5009*bcb85aadSSteve Yin  */
5010*bcb85aadSSteve Yin  IA2_EVENT_ACTION_CHANGED = 0x101,
5011*bcb85aadSSteve Yin
5012*bcb85aadSSteve Yin  /** <b>Deprecated.</b> The active descendant of a component has changed.
5013*bcb85aadSSteve Yin
5014*bcb85aadSSteve Yin	Note: This event constant is misspelled and thus is deprecated and will be
5015*bcb85aadSSteve Yin	removed in a later version. Please use the correctly spelled version which
5016*bcb85aadSSteve Yin	follows.
5017*bcb85aadSSteve Yin  */
5018*bcb85aadSSteve Yin  IA2_EVENT_ACTIVE_DECENDENT_CHANGED,
5019*bcb85aadSSteve Yin
5020*bcb85aadSSteve Yin  /** The active descendant of a component has changed.  The active descendant
5021*bcb85aadSSteve Yin    is used in objects with transient children.
5022*bcb85aadSSteve Yin
5023*bcb85aadSSteve Yin    Note: Due to the fact that MSAA's WinEvents don't allow the active child index
5024*bcb85aadSSteve Yin	to be passed on the IA2_EVENT_ACTIVE_DESCENDANT_CHANGED event the manages
5025*bcb85aadSSteve Yin	descendants	scheme can't be used.  Instead the active child object has to fire
5026*bcb85aadSSteve Yin	MSAA's EVENT_OBJECT_FOCUS.  In a future release a new event mechanism may be
5027*bcb85aadSSteve Yin	added to provide for event specific data to be passed with the event.  At that
5028*bcb85aadSSteve Yin	time the IA2_EVENT_ACTIVE_DECENDENT_CHANGED event and
5029*bcb85aadSSteve Yin	IA2_STATE_MANAGES_DESCENDANTS state would be useful.
5030*bcb85aadSSteve Yin  */
5031*bcb85aadSSteve Yin  IA2_EVENT_ACTIVE_DESCENDANT_CHANGED = IA2_EVENT_ACTIVE_DECENDENT_CHANGED,
5032*bcb85aadSSteve Yin
5033*bcb85aadSSteve Yin  /** The document wide attributes of the document object have changed.
5034*bcb85aadSSteve Yin  */
5035*bcb85aadSSteve Yin  IA2_EVENT_DOCUMENT_ATTRIBUTE_CHANGED,
5036*bcb85aadSSteve Yin
5037*bcb85aadSSteve Yin  /** The contents of the document have changed.
5038*bcb85aadSSteve Yin  */
5039*bcb85aadSSteve Yin  IA2_EVENT_DOCUMENT_CONTENT_CHANGED,
5040*bcb85aadSSteve Yin
5041*bcb85aadSSteve Yin  /** The loading of the document has completed.
5042*bcb85aadSSteve Yin  */
5043*bcb85aadSSteve Yin  IA2_EVENT_DOCUMENT_LOAD_COMPLETE,
5044*bcb85aadSSteve Yin
5045*bcb85aadSSteve Yin  /** The loading of the document was interrupted.
5046*bcb85aadSSteve Yin  */
5047*bcb85aadSSteve Yin  IA2_EVENT_DOCUMENT_LOAD_STOPPED,
5048*bcb85aadSSteve Yin
5049*bcb85aadSSteve Yin  /** The document contents are being reloaded.
5050*bcb85aadSSteve Yin  */
5051*bcb85aadSSteve Yin  IA2_EVENT_DOCUMENT_RELOAD,
5052*bcb85aadSSteve Yin
5053*bcb85aadSSteve Yin  /** The ending index of this link within the containing string has changed.
5054*bcb85aadSSteve Yin  */
5055*bcb85aadSSteve Yin  IA2_EVENT_HYPERLINK_END_INDEX_CHANGED,
5056*bcb85aadSSteve Yin
5057*bcb85aadSSteve Yin  /** The number of anchors associated with this hyperlink object has changed.
5058*bcb85aadSSteve Yin  */
5059*bcb85aadSSteve Yin  IA2_EVENT_HYPERLINK_NUMBER_OF_ANCHORS_CHANGED,
5060*bcb85aadSSteve Yin
5061*bcb85aadSSteve Yin  /** The hyperlink selected state changed from selected to unselected or
5062*bcb85aadSSteve Yin    from unselected to selected.
5063*bcb85aadSSteve Yin  */
5064*bcb85aadSSteve Yin  IA2_EVENT_HYPERLINK_SELECTED_LINK_CHANGED,
5065*bcb85aadSSteve Yin
5066*bcb85aadSSteve Yin  /** One of the links associated with the hypertext object has been activated.
5067*bcb85aadSSteve Yin  */
5068*bcb85aadSSteve Yin  IA2_EVENT_HYPERTEXT_LINK_ACTIVATED,
5069*bcb85aadSSteve Yin
5070*bcb85aadSSteve Yin  /** One of the links associated with the hypertext object has been selected.
5071*bcb85aadSSteve Yin  */
5072*bcb85aadSSteve Yin  IA2_EVENT_HYPERTEXT_LINK_SELECTED,
5073*bcb85aadSSteve Yin
5074*bcb85aadSSteve Yin  /** The starting index of this link within the containing string has changed.
5075*bcb85aadSSteve Yin  */
5076*bcb85aadSSteve Yin  IA2_EVENT_HYPERLINK_START_INDEX_CHANGED,
5077*bcb85aadSSteve Yin
5078*bcb85aadSSteve Yin  /** Focus has changed from one hypertext object to another, or focus moved
5079*bcb85aadSSteve Yin   from a non-hypertext object to a hypertext object, or focus moved from a
5080*bcb85aadSSteve Yin   hypertext object to a non-hypertext object.
5081*bcb85aadSSteve Yin  */
5082*bcb85aadSSteve Yin  IA2_EVENT_HYPERTEXT_CHANGED,
5083*bcb85aadSSteve Yin
5084*bcb85aadSSteve Yin  /** The number of hyperlinks associated with a hypertext object changed
5085*bcb85aadSSteve Yin  */
5086*bcb85aadSSteve Yin  IA2_EVENT_HYPERTEXT_NLINKS_CHANGED,
5087*bcb85aadSSteve Yin
5088*bcb85aadSSteve Yin  /** An object's attributes changed.
5089*bcb85aadSSteve Yin  Also see ::IA2_EVENT_TEXT_ATTRIBUTE_CHANGED.
5090*bcb85aadSSteve Yin  */
5091*bcb85aadSSteve Yin  IA2_EVENT_OBJECT_ATTRIBUTE_CHANGED,
5092*bcb85aadSSteve Yin
5093*bcb85aadSSteve Yin  /** A slide changed in a presentation document or a page boundary was
5094*bcb85aadSSteve Yin   crossed in a word processing document.
5095*bcb85aadSSteve Yin  */
5096*bcb85aadSSteve Yin  IA2_EVENT_PAGE_CHANGED,
5097*bcb85aadSSteve Yin
5098*bcb85aadSSteve Yin  /** The caret moved from one section to the next.
5099*bcb85aadSSteve Yin  */
5100*bcb85aadSSteve Yin  IA2_EVENT_SECTION_CHANGED,
5101*bcb85aadSSteve Yin
5102*bcb85aadSSteve Yin  /** A table caption changed.
5103*bcb85aadSSteve Yin  */
5104*bcb85aadSSteve Yin  IA2_EVENT_TABLE_CAPTION_CHANGED,
5105*bcb85aadSSteve Yin
5106*bcb85aadSSteve Yin  /** A table's column description changed.
5107*bcb85aadSSteve Yin  */
5108*bcb85aadSSteve Yin  IA2_EVENT_TABLE_COLUMN_DESCRIPTION_CHANGED,
5109*bcb85aadSSteve Yin
5110*bcb85aadSSteve Yin  /** A table's column header changed.
5111*bcb85aadSSteve Yin  */
5112*bcb85aadSSteve Yin  IA2_EVENT_TABLE_COLUMN_HEADER_CHANGED,
5113*bcb85aadSSteve Yin
5114*bcb85aadSSteve Yin  /** A table's data changed.
5115*bcb85aadSSteve Yin  */
5116*bcb85aadSSteve Yin  IA2_EVENT_TABLE_MODEL_CHANGED,
5117*bcb85aadSSteve Yin
5118*bcb85aadSSteve Yin  /** A table's row description changed.
5119*bcb85aadSSteve Yin  */
5120*bcb85aadSSteve Yin  IA2_EVENT_TABLE_ROW_DESCRIPTION_CHANGED,
5121*bcb85aadSSteve Yin
5122*bcb85aadSSteve Yin  /** A table's row header changed.
5123*bcb85aadSSteve Yin  */
5124*bcb85aadSSteve Yin  IA2_EVENT_TABLE_ROW_HEADER_CHANGED,
5125*bcb85aadSSteve Yin
5126*bcb85aadSSteve Yin  /** A table's summary changed.
5127*bcb85aadSSteve Yin  */
5128*bcb85aadSSteve Yin  IA2_EVENT_TABLE_SUMMARY_CHANGED,
5129*bcb85aadSSteve Yin
5130*bcb85aadSSteve Yin  /** A text object's attributes changed.
5131*bcb85aadSSteve Yin  Also see ::IA2_EVENT_OBJECT_ATTRIBUTE_CHANGED.
5132*bcb85aadSSteve Yin  */
5133*bcb85aadSSteve Yin  IA2_EVENT_TEXT_ATTRIBUTE_CHANGED,
5134*bcb85aadSSteve Yin
5135*bcb85aadSSteve Yin  /** The caret has moved to a new position.
5136*bcb85aadSSteve Yin  */
5137*bcb85aadSSteve Yin  IA2_EVENT_TEXT_CARET_MOVED,
5138*bcb85aadSSteve Yin
5139*bcb85aadSSteve Yin  /** <b>Deprecated.</b>  This event is equivalent to ::IA2_EVENT_TEXT_UPDATED.
5140*bcb85aadSSteve Yin  */
5141*bcb85aadSSteve Yin  IA2_EVENT_TEXT_CHANGED,
5142*bcb85aadSSteve Yin
5143*bcb85aadSSteve Yin  /** The caret moved from one column to the next.
5144*bcb85aadSSteve Yin  */
5145*bcb85aadSSteve Yin  IA2_EVENT_TEXT_COLUMN_CHANGED,
5146*bcb85aadSSteve Yin
5147*bcb85aadSSteve Yin  /** Text was inserted.
5148*bcb85aadSSteve Yin  */
5149*bcb85aadSSteve Yin  IA2_EVENT_TEXT_INSERTED,
5150*bcb85aadSSteve Yin
5151*bcb85aadSSteve Yin  /** Text was removed.
5152*bcb85aadSSteve Yin  */
5153*bcb85aadSSteve Yin  IA2_EVENT_TEXT_REMOVED,
5154*bcb85aadSSteve Yin
5155*bcb85aadSSteve Yin  /** This event indicates general text changes, i.e. changes to text that are
5156*bcb85aadSSteve Yin    exposed through the IAccessibleText interface.  For compatibility with ATK/AT-SPI
5157*bcb85aadSSteve Yin	which does not have an equivalent event, servers can alternatively fire
5158*bcb85aadSSteve Yin	::IA2_EVENT_TEXT_REMOVED and ::IA2_EVENT_TEXT_INSERTED.
5159*bcb85aadSSteve Yin  */
5160*bcb85aadSSteve Yin  IA2_EVENT_TEXT_UPDATED,
5161*bcb85aadSSteve Yin
5162*bcb85aadSSteve Yin  /** The text selection changed.  Later versions of Microsoft development environments
5163*bcb85aadSSteve Yin   have an equivalent event identified, EVENT_OBJECT_TEXTSELECTIONCHANGED.  Servers
5164*bcb85aadSSteve Yin   should use that if it is available and use IA2_EVENT_TEXT_SELECTION_CHANGED otherwise.
5165*bcb85aadSSteve Yin   Clients should be prepared to respond to either event.
5166*bcb85aadSSteve Yin
5167*bcb85aadSSteve Yin  */
5168*bcb85aadSSteve Yin  IA2_EVENT_TEXT_SELECTION_CHANGED,
5169*bcb85aadSSteve Yin
5170*bcb85aadSSteve Yin  /** A visible data event indicates the change of the visual appearance
5171*bcb85aadSSteve Yin    of an accessible object.  This includes for example most of the
5172*bcb85aadSSteve Yin    attributes available via the IAccessibleComponent interface.
5173*bcb85aadSSteve Yin  */
5174*bcb85aadSSteve Yin  IA2_EVENT_VISIBLE_DATA_CHANGED
5175*bcb85aadSSteve Yin
5176*bcb85aadSSteve Yin};
5177*bcb85aadSSteve Yin/*************************************************************************
5178*bcb85aadSSteve Yin *
5179*bcb85aadSSteve Yin *  File Name (AccessibleApplication.idl)
5180*bcb85aadSSteve Yin *
5181*bcb85aadSSteve Yin *  IAccessible2 IDL Specification
5182*bcb85aadSSteve Yin *
5183*bcb85aadSSteve Yin *  Copyright (c) 2007, 2010 Linux Foundation
5184*bcb85aadSSteve Yin *  Copyright (c) 2006 IBM Corporation
5185*bcb85aadSSteve Yin *  Copyright (c) 2000, 2006 Sun Microsystems, Inc.
5186*bcb85aadSSteve Yin *  All rights reserved.
5187*bcb85aadSSteve Yin *
5188*bcb85aadSSteve Yin *
5189*bcb85aadSSteve Yin *  Redistribution and use in source and binary forms, with or without
5190*bcb85aadSSteve Yin *  modification, are permitted provided that the following conditions
5191*bcb85aadSSteve Yin *  are met:
5192*bcb85aadSSteve Yin *
5193*bcb85aadSSteve Yin *   1. Redistributions of source code must retain the above copyright
5194*bcb85aadSSteve Yin *      notice, this list of conditions and the following disclaimer.
5195*bcb85aadSSteve Yin *
5196*bcb85aadSSteve Yin *   2. Redistributions in binary form must reproduce the above
5197*bcb85aadSSteve Yin *      copyright notice, this list of conditions and the following
5198*bcb85aadSSteve Yin *      disclaimer in the documentation and/or other materials
5199*bcb85aadSSteve Yin *      provided with the distribution.
5200*bcb85aadSSteve Yin *
5201*bcb85aadSSteve Yin *   3. Neither the name of the Linux Foundation nor the names of its
5202*bcb85aadSSteve Yin *      contributors may be used to endorse or promote products
5203*bcb85aadSSteve Yin *      derived from this software without specific prior written
5204*bcb85aadSSteve Yin *      permission.
5205*bcb85aadSSteve Yin *
5206*bcb85aadSSteve Yin *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
5207*bcb85aadSSteve Yin *  CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
5208*bcb85aadSSteve Yin *  INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
5209*bcb85aadSSteve Yin *  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
5210*bcb85aadSSteve Yin *  DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
5211*bcb85aadSSteve Yin *  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
5212*bcb85aadSSteve Yin *  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
5213*bcb85aadSSteve Yin *  NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
5214*bcb85aadSSteve Yin *  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
5215*bcb85aadSSteve Yin *  HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
5216*bcb85aadSSteve Yin *  CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
5217*bcb85aadSSteve Yin *  OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
5218*bcb85aadSSteve Yin *  EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
5219*bcb85aadSSteve Yin *
5220*bcb85aadSSteve Yin *  This BSD License conforms to the Open Source Initiative "Simplified
5221*bcb85aadSSteve Yin *  BSD License" as published at:
5222*bcb85aadSSteve Yin *  http://www.opensource.org/licenses/bsd-license.php
5223*bcb85aadSSteve Yin *
5224*bcb85aadSSteve Yin *  IAccessible2 is a trademark of the Linux Foundation. The IAccessible2
5225*bcb85aadSSteve Yin *  mark may be used in accordance with the Linux Foundation Trademark
5226*bcb85aadSSteve Yin *  Policy to indicate compliance with the IAccessible2 specification.
5227*bcb85aadSSteve Yin *
5228*bcb85aadSSteve Yin ************************************************************************/
5229*bcb85aadSSteve Yin
5230*bcb85aadSSteve Yin
5231*bcb85aadSSteve Yin
5232*bcb85aadSSteve Yin
5233*bcb85aadSSteve Yin
5234*bcb85aadSSteve Yin
5235*bcb85aadSSteve Yin/** @brief This interface gives access to the application's name and version information.
5236*bcb85aadSSteve Yin
5237*bcb85aadSSteve Yin This interface provides the AT with the information it needs to differentiate
5238*bcb85aadSSteve Yin this application from other applications, from other versions of this
5239*bcb85aadSSteve Yin application, or from other versions of this application running on different
5240*bcb85aadSSteve Yin versions of an accessibility bridge or accessibility toolkit.
5241*bcb85aadSSteve Yin
5242*bcb85aadSSteve Yin Servers implementing IAccessible2 should provide access to the %IAccessibleApplication
5243*bcb85aadSSteve Yin interface via QueryService from any object so that ATs can easily determine specific
5244*bcb85aadSSteve Yin information about the application such as its name or version.
5245*bcb85aadSSteve Yin*/
5246*bcb85aadSSteve Yin[object, uuid(D49DED83-5B25-43F4-9B95-93B44595979E)]
5247*bcb85aadSSteve Yininterface IAccessibleApplication : IUnknown
5248*bcb85aadSSteve Yin{
5249*bcb85aadSSteve Yin
5250*bcb85aadSSteve Yin  /** @brief Returns the application name.
5251*bcb85aadSSteve Yin   @param [out] name
5252*bcb85aadSSteve Yin   @retval S_OK
5253*bcb85aadSSteve Yin   @retval S_FALSE if there is nothing to return, [out] value is NULL
5254*bcb85aadSSteve Yin  */
5255*bcb85aadSSteve Yin  [propget] HRESULT appName
5256*bcb85aadSSteve Yin    (
5257*bcb85aadSSteve Yin     [out, retval] BSTR *name
5258*bcb85aadSSteve Yin    );
5259*bcb85aadSSteve Yin
5260*bcb85aadSSteve Yin  /** @brief Returns the application version.
5261*bcb85aadSSteve Yin   @param [out] version
5262*bcb85aadSSteve Yin    The version string must not contain levels when it is know beforehand that
5263*bcb85aadSSteve Yin    this information will never require a change in a client's behavior.
5264*bcb85aadSSteve Yin    For example, use "3.6.0" rather than "3.6.0.v201005131500".
5265*bcb85aadSSteve Yin   @retval S_OK
5266*bcb85aadSSteve Yin   @retval S_FALSE if there is nothing to return, [out] value is NULL
5267*bcb85aadSSteve Yin  */
5268*bcb85aadSSteve Yin  [propget] HRESULT appVersion
5269*bcb85aadSSteve Yin    (
5270*bcb85aadSSteve Yin     [out, retval] BSTR *version
5271*bcb85aadSSteve Yin    );
5272*bcb85aadSSteve Yin
5273*bcb85aadSSteve Yin  /** @brief Returns the toolkit/bridge name.
5274*bcb85aadSSteve Yin   @param [out] name
5275*bcb85aadSSteve Yin   @retval S_OK
5276*bcb85aadSSteve Yin   @retval S_FALSE if there is nothing to return, [out] value is NULL
5277*bcb85aadSSteve Yin  */
5278*bcb85aadSSteve Yin  [propget] HRESULT toolkitName
5279*bcb85aadSSteve Yin    (
5280*bcb85aadSSteve Yin     [out, retval] BSTR *name
5281*bcb85aadSSteve Yin    );
5282*bcb85aadSSteve Yin
5283*bcb85aadSSteve Yin  /** @brief Returns the toolkit/bridge version.
5284*bcb85aadSSteve Yin   @param [out] version
5285*bcb85aadSSteve Yin    The version string must not contain levels when it is know beforehand that
5286*bcb85aadSSteve Yin    this information will never require a change in a client's behavior.
5287*bcb85aadSSteve Yin    For example, use "3.6.0" rather than "3.6.0.v201005131500".
5288*bcb85aadSSteve Yin   @retval S_OK
5289*bcb85aadSSteve Yin   @retval S_FALSE if there is nothing to return, [out] value is NULL
5290*bcb85aadSSteve Yin  */
5291*bcb85aadSSteve Yin  [propget] HRESULT toolkitVersion
5292*bcb85aadSSteve Yin    (
5293*bcb85aadSSteve Yin     [out, retval] BSTR *version
5294*bcb85aadSSteve Yin    );
5295*bcb85aadSSteve Yin
5296*bcb85aadSSteve Yin}
5297*bcb85aadSSteve Yin
5298*bcb85aadSSteve Yin/*************************************************************************
5299*bcb85aadSSteve Yin *
5300*bcb85aadSSteve Yin *  File Name (AccessibleDocument.idl)
5301*bcb85aadSSteve Yin *
5302*bcb85aadSSteve Yin *  IAccessible2 IDL Specification
5303*bcb85aadSSteve Yin *
5304*bcb85aadSSteve Yin *  Copyright (c) 2013 Linux Foundation
5305*bcb85aadSSteve Yin *  All rights reserved.
5306*bcb85aadSSteve Yin *
5307*bcb85aadSSteve Yin *
5308*bcb85aadSSteve Yin *  Redistribution and use in source and binary forms, with or without
5309*bcb85aadSSteve Yin *  modification, are permitted provided that the following conditions
5310*bcb85aadSSteve Yin *  are met:
5311*bcb85aadSSteve Yin *
5312*bcb85aadSSteve Yin *   1. Redistributions of source code must retain the above copyright
5313*bcb85aadSSteve Yin *      notice, this list of conditions and the following disclaimer.
5314*bcb85aadSSteve Yin *
5315*bcb85aadSSteve Yin *   2. Redistributions in binary form must reproduce the above
5316*bcb85aadSSteve Yin *      copyright notice, this list of conditions and the following
5317*bcb85aadSSteve Yin *      disclaimer in the documentation and/or other materials
5318*bcb85aadSSteve Yin *      provided with the distribution.
5319*bcb85aadSSteve Yin *
5320*bcb85aadSSteve Yin *   3. Neither the name of the Linux Foundation nor the names of its
5321*bcb85aadSSteve Yin *      contributors may be used to endorse or promote products
5322*bcb85aadSSteve Yin *      derived from this software without specific prior written
5323*bcb85aadSSteve Yin *      permission.
5324*bcb85aadSSteve Yin *
5325*bcb85aadSSteve Yin *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
5326*bcb85aadSSteve Yin *  CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
5327*bcb85aadSSteve Yin *  INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
5328*bcb85aadSSteve Yin *  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
5329*bcb85aadSSteve Yin *  DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
5330*bcb85aadSSteve Yin *  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
5331*bcb85aadSSteve Yin *  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
5332*bcb85aadSSteve Yin *  NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
5333*bcb85aadSSteve Yin *  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
5334*bcb85aadSSteve Yin *  HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
5335*bcb85aadSSteve Yin *  CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
5336*bcb85aadSSteve Yin *  OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
5337*bcb85aadSSteve Yin *  EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
5338*bcb85aadSSteve Yin *
5339*bcb85aadSSteve Yin *  This BSD License conforms to the Open Source Initiative "Simplified
5340*bcb85aadSSteve Yin *  BSD License" as published at:
5341*bcb85aadSSteve Yin *  http://www.opensource.org/licenses/bsd-license.php
5342*bcb85aadSSteve Yin *
5343*bcb85aadSSteve Yin *  IAccessible2 is a trademark of the Linux Foundation. The IAccessible2
5344*bcb85aadSSteve Yin *  mark may be used in accordance with the Linux Foundation Trademark
5345*bcb85aadSSteve Yin *  Policy to indicate compliance with the IAccessible2 specification.
5346*bcb85aadSSteve Yin *
5347*bcb85aadSSteve Yin ************************************************************************/
5348*bcb85aadSSteve Yin
5349*bcb85aadSSteve Yin
5350*bcb85aadSSteve Yin
5351*bcb85aadSSteve Yin
5352*bcb85aadSSteve Yin
5353*bcb85aadSSteve Yin/** @brief This interface represents documents.
5354*bcb85aadSSteve Yin
5355*bcb85aadSSteve Yin This interface is used for a representation of documents.
5356*bcb85aadSSteve Yin*/
5357*bcb85aadSSteve Yin[object, uuid(C48C7FCF-4AB5-4056-AFA6-902D6E1D1149)]
5358*bcb85aadSSteve Yininterface IAccessibleDocument : IUnknown
5359*bcb85aadSSteve Yin{
5360*bcb85aadSSteve Yin  /** @brief Returns the most recently used anchor target within a document.
5361*bcb85aadSSteve Yin
5362*bcb85aadSSteve Yin   A document's most recently targeted in-page anchor is returned.  A typical use
5363*bcb85aadSSteve Yin    of this method is to fetch the anchor target within an HTML document.  In this
5364*bcb85aadSSteve Yin    case anchor targets are those which have been defined with the &lt;a&gt; tag.
5365*bcb85aadSSteve Yin
5366*bcb85aadSSteve Yin   @param [out] accessible
5367*bcb85aadSSteve Yin   @retval S_OK
5368*bcb85aadSSteve Yin   @retval S_FALSE if there are no existing valid anchor targets, [out] value is NULL.
5369*bcb85aadSSteve Yin  */
5370*bcb85aadSSteve Yin  [propget] HRESULT anchorTarget
5371*bcb85aadSSteve Yin    (
5372*bcb85aadSSteve Yin     [out, retval] IUnknown **accessible
5373*bcb85aadSSteve Yin    );
5374*bcb85aadSSteve Yin
5375*bcb85aadSSteve Yin}
5376*bcb85aadSSteve Yin/*************************************************************************
5377*bcb85aadSSteve Yin *
5378*bcb85aadSSteve Yin *  File Name (IA2TypeLibrary.idl)
5379*bcb85aadSSteve Yin *
5380*bcb85aadSSteve Yin *  IAccessible2 IDL Specification
5381*bcb85aadSSteve Yin *
5382*bcb85aadSSteve Yin *  Copyright (c) 2007, 2012 Linux Foundation
5383*bcb85aadSSteve Yin *  Copyright (c) 2006 IBM Corporation
5384*bcb85aadSSteve Yin *  Copyright (c) 2000, 2006 Sun Microsystems, Inc.
5385*bcb85aadSSteve Yin *  All rights reserved.
5386*bcb85aadSSteve Yin *
5387*bcb85aadSSteve Yin *
5388*bcb85aadSSteve Yin *  Redistribution and use in source and binary forms, with or without
5389*bcb85aadSSteve Yin *  modification, are permitted provided that the following conditions
5390*bcb85aadSSteve Yin *  are met:
5391*bcb85aadSSteve Yin *
5392*bcb85aadSSteve Yin *   1. Redistributions of source code must retain the above copyright
5393*bcb85aadSSteve Yin *      notice, this list of conditions and the following disclaimer.
5394*bcb85aadSSteve Yin *
5395*bcb85aadSSteve Yin *   2. Redistributions in binary form must reproduce the above
5396*bcb85aadSSteve Yin *      copyright notice, this list of conditions and the following
5397*bcb85aadSSteve Yin *      disclaimer in the documentation and/or other materials
5398*bcb85aadSSteve Yin *      provided with the distribution.
5399*bcb85aadSSteve Yin *
5400*bcb85aadSSteve Yin *   3. Neither the name of the Linux Foundation nor the names of its
5401*bcb85aadSSteve Yin *      contributors may be used to endorse or promote products
5402*bcb85aadSSteve Yin *      derived from this software without specific prior written
5403*bcb85aadSSteve Yin *      permission.
5404*bcb85aadSSteve Yin *
5405*bcb85aadSSteve Yin *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
5406*bcb85aadSSteve Yin *  CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
5407*bcb85aadSSteve Yin *  INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
5408*bcb85aadSSteve Yin *  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
5409*bcb85aadSSteve Yin *  DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
5410*bcb85aadSSteve Yin *  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
5411*bcb85aadSSteve Yin *  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
5412*bcb85aadSSteve Yin *  NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
5413*bcb85aadSSteve Yin *  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
5414*bcb85aadSSteve Yin *  HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
5415*bcb85aadSSteve Yin *  CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
5416*bcb85aadSSteve Yin *  OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
5417*bcb85aadSSteve Yin *  EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
5418*bcb85aadSSteve Yin *
5419*bcb85aadSSteve Yin *  This BSD License conforms to the Open Source Initiative "Simplified
5420*bcb85aadSSteve Yin *  BSD License" as published at:
5421*bcb85aadSSteve Yin *  http://www.opensource.org/licenses/bsd-license.php
5422*bcb85aadSSteve Yin *
5423*bcb85aadSSteve Yin *  IAccessible2 is a trademark of the Linux Foundation. The IAccessible2
5424*bcb85aadSSteve Yin *  mark may be used in accordance with the Linux Foundation Trademark
5425*bcb85aadSSteve Yin *  Policy to indicate compliance with the IAccessible2 specification.
5426*bcb85aadSSteve Yin *
5427*bcb85aadSSteve Yin ************************************************************************/
5428*bcb85aadSSteve Yin
5429*bcb85aadSSteve Yin// This is not a standalone file.  It is to be appended to the end of the
5430*bcb85aadSSteve Yin// merged IDL file.
5431*bcb85aadSSteve Yin
5432*bcb85aadSSteve Yincpp_quote("")
5433*bcb85aadSSteve Yincpp_quote("// Type Library Definitions")
5434*bcb85aadSSteve Yincpp_quote("")
5435*bcb85aadSSteve Yin
5436*bcb85aadSSteve Yin[
5437*bcb85aadSSteve Yin    uuid(CE3F726E-D1D3-44FE-B995-FF1DB3B48B2B),
5438*bcb85aadSSteve Yin    helpstring("IAccessible2 Type Library"),
5439*bcb85aadSSteve Yin    version(1.3),
5440*bcb85aadSSteve Yin    hidden
5441*bcb85aadSSteve Yin]
5442*bcb85aadSSteve Yin
5443*bcb85aadSSteve Yinlibrary IAccessible2Lib
5444*bcb85aadSSteve Yin{
5445*bcb85aadSSteve Yin    importlib ("stdole2.tlb");
5446*bcb85aadSSteve Yin    importlib ("oleacc.dll");
5447*bcb85aadSSteve Yin    interface IAccessible2;
5448*bcb85aadSSteve Yin    interface IAccessible2_2;
5449*bcb85aadSSteve Yin    interface IAccessibleAction;
5450*bcb85aadSSteve Yin    interface IAccessibleApplication;
5451*bcb85aadSSteve Yin    interface IAccessibleComponent;
5452*bcb85aadSSteve Yin    interface IAccessibleDocument;
5453*bcb85aadSSteve Yin    interface IAccessibleEditableText;
5454*bcb85aadSSteve Yin    interface IAccessibleHyperlink;
5455*bcb85aadSSteve Yin    interface IAccessibleHypertext;
5456*bcb85aadSSteve Yin    interface IAccessibleHypertext2;
5457*bcb85aadSSteve Yin    interface IAccessibleImage;
5458*bcb85aadSSteve Yin    interface IAccessibleRelation;
5459*bcb85aadSSteve Yin    interface IAccessibleTable;
5460*bcb85aadSSteve Yin    interface IAccessibleTable2;
5461*bcb85aadSSteve Yin    interface IAccessibleTableCell;
5462*bcb85aadSSteve Yin    interface IAccessibleText;
5463*bcb85aadSSteve Yin    interface IAccessibleText2;
5464*bcb85aadSSteve Yin    interface IAccessibleValue;
5465*bcb85aadSSteve Yin    enum IA2CoordinateType;
5466*bcb85aadSSteve Yin    enum IA2EventID;
5467*bcb85aadSSteve Yin    enum IA2Role;
5468*bcb85aadSSteve Yin    enum IA2ScrollType;
5469*bcb85aadSSteve Yin    enum IA2States;
5470*bcb85aadSSteve Yin    enum IA2TableModelChangeType;
5471*bcb85aadSSteve Yin    enum IA2TextBoundaryType;
5472*bcb85aadSSteve Yin    enum IA2TextSpecialOffsets;
5473*bcb85aadSSteve Yin}
5474