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