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