Version 7.6.3.2-android, tag libreoffice-7.6.3.2-android
[LibreOffice.git] / winaccessibility / source / UAccCOMIDL / ia2_api_all.idl
blobea2730f23e71ae98a3c71fae76f06f6633382ce3
1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 /*************************************************************************
4 * File Name (api_all_headers.idl)
6 * IAccessible2 IDL Specification
8 * Copyright (c) 2013 Linux Foundation
9 * All rights reserved.
12 * Redistribution and use in source and binary forms, with or without
13 * modification, are permitted provided that the following conditions
14 * are met:
16 * 1. Redistributions of source code must retain the above copyright
17 * notice, this list of conditions and the following disclaimer.
19 * 2. Redistributions in binary form must reproduce the above
20 * copyright notice, this list of conditions and the following
21 * disclaimer in the documentation and/or other materials
22 * provided with the distribution.
24 * 3. Neither the name of the Linux Foundation nor the names of its
25 * contributors may be used to endorse or promote products
26 * derived from this software without specific prior written
27 * permission.
29 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
30 * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
31 * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
32 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
33 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
34 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
35 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
36 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
37 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
38 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
39 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
40 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
41 * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
43 * This BSD License conforms to the Open Source Initiative "Simplified
44 * BSD License" as published at:
45 * http://www.opensource.org/licenses/bsd-license.php
47 * IAccessible2 is a trademark of the Linux Foundation. The IAccessible2
48 * mark may be used in accordance with the Linux Foundation Trademark
49 * Policy to indicate compliance with the IAccessible2 specification.
51 ************************************************************************/
53 import "objidl.idl";
54 import "oaidl.idl";
55 import "oleacc.idl";
57 /*************************************************************************
59 * File Name (IA2CommonTypes.idl)
61 * IAccessible2 IDL Specification
63 * Copyright (c) 2007, 2013 Linux Foundation
64 * Copyright (c) 2006 IBM Corporation
65 * Copyright (c) 2000, 2006 Sun Microsystems, Inc.
66 * All rights reserved.
69 * Redistribution and use in source and binary forms, with or without
70 * modification, are permitted provided that the following conditions
71 * are met:
73 * 1. Redistributions of source code must retain the above copyright
74 * notice, this list of conditions and the following disclaimer.
76 * 2. Redistributions in binary form must reproduce the above
77 * copyright notice, this list of conditions and the following
78 * disclaimer in the documentation and/or other materials
79 * provided with the distribution.
81 * 3. Neither the name of the Linux Foundation nor the names of its
82 * contributors may be used to endorse or promote products
83 * derived from this software without specific prior written
84 * permission.
86 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
87 * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
88 * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
89 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
90 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
91 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
92 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
93 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
94 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
95 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
96 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
97 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
98 * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
100 * This BSD License conforms to the Open Source Initiative "Simplified
101 * BSD License" as published at:
102 * http://www.opensource.org/licenses/bsd-license.php
104 * IAccessible2 is a trademark of the Linux Foundation. The IAccessible2
105 * mark may be used in accordance with the Linux Foundation Trademark
106 * Policy to indicate compliance with the IAccessible2 specification.
108 ************************************************************************/
110 /** These constants control the scrolling of an object or substring into a window.
112 This enum is used in IAccessible2::scrollTo and IAccessibleText::scrollSubstringTo.
114 enum IA2ScrollType {
116 /** Scroll the top left corner of the object or substring such that the top left
117 corner (and as much as possible of the rest of the object or substring) is within
118 the top level window. In cases where the entire object or substring fits within
119 the top level window, the placement of the object or substring is dependent on
120 the application. For example, the object or substring may be scrolled to the
121 closest edge, the furthest edge, or midway between those two edges. In cases
122 where there is a hierarchy of nested scrollable controls, more than one control
123 may have to be scrolled.
125 IA2_SCROLL_TYPE_TOP_LEFT,
127 /** Scroll the bottom right corner of the object or substring such that the bottom right
128 corner (and as much as possible of the rest of the object or substring) is within
129 the top level window. In cases where the entire object or substring fits within
130 the top level window, the placement of the object or substring is dependent on
131 the application. For example, the object or substring may be scrolled to the
132 closest edge, the furthest edge, or midway between those two edges. In cases
133 where there is a hierarchy of nested scrollable controls, more than one control
134 may have to be scrolled.
136 IA2_SCROLL_TYPE_BOTTOM_RIGHT,
138 /** Scroll the top edge of the object or substring such that the top edge
139 (and as much as possible of the rest of the object or substring) is within the
140 top level window. In cases where the entire object or substring fits within
141 the top level window, the placement of the object or substring is dependent on
142 the application. For example, the object or substring may be scrolled to the
143 closest edge, the furthest edge, or midway between those two edges. In cases
144 where there is a hierarchy of nested scrollable controls, more than one control
145 may have to be scrolled.
147 IA2_SCROLL_TYPE_TOP_EDGE,
149 /** Scroll the bottom edge of the object or substring such that the bottom edge
150 (and as much as possible of the rest of the object or substring) is within the
151 top level window. In cases where the entire object or substring fits within
152 the top level window, the placement of the object or substring is dependent on
153 the application. For example, the object or substring may be scrolled to the
154 closest edge, the furthest edge, or midway between those two edges. In cases
155 where there is a hierarchy of nested scrollable controls, more than one control
156 may have to be scrolled.
158 IA2_SCROLL_TYPE_BOTTOM_EDGE,
160 /** Scroll the left edge of the object or substring such that the left edge
161 (and as much as possible of the rest of the object or substring) is within the
162 top level window. In cases where the entire object or substring fits within
163 the top level window, the placement of the object or substring is dependent on
164 the application. For example, the object or substring may be scrolled to the
165 closest edge, the furthest edge, or midway between those two edges. In cases
166 where there is a hierarchy of nested scrollable controls, more than one control
167 may have to be scrolled.
169 IA2_SCROLL_TYPE_LEFT_EDGE,
171 /** Scroll the right edge of the object or substring such that the right edge
172 (and as much as possible of the rest of the object or substring) is within the
173 top level window. In cases where the entire object or substring fits within
174 the top level window, the placement of the object or substring is dependent on
175 the application. For example, the object or substring may be scrolled to the
176 closest edge, the furthest edge, or midway between those two edges. In cases
177 where there is a hierarchy of nested scrollable controls, more than one control
178 may have to be scrolled.
180 IA2_SCROLL_TYPE_RIGHT_EDGE,
182 /** Scroll the object or substring such that as much as possible of the
183 object or substring is within the top level window. The placement of
184 the object is dependent on the application. For example, the object or
185 substring may be scrolled to closest edge, the furthest edge, or midway
186 between those two edges.
188 IA2_SCROLL_TYPE_ANYWHERE
191 /** These constants define which coordinate system a point is located in.
193 This enum is used in IAccessible2::scrollToPoint, IAccessibleImage::imagePosition,
194 IAccessibleText::characterExtents, and IAccessibleText::offsetAtPoint, and
195 IAccessibleText::scrollSubstringToPoint.
197 enum IA2CoordinateType {
199 /// The coordinates are relative to the screen.
200 IA2_COORDTYPE_SCREEN_RELATIVE,
202 /** The coordinates are relative to the upper left corner of the bounding box
203 of the immediate parent.
205 IA2_COORDTYPE_PARENT_RELATIVE
209 /** Special offsets for use in IAccessibleText and IAccessibleEditableText methods
211 Refer to @ref _specialOffsets
212 "Special Offsets for use in the IAccessibleText and IAccessibleEditableText Methods"
213 for more information.
215 enum IA2TextSpecialOffsets {
216 IA2_TEXT_OFFSET_LENGTH = -1, /**< This offset is equivalent to the length of the string. It eliminates
217 the need to call IAccessibleText::nCharacters. */
218 IA2_TEXT_OFFSET_CARET = -2 /**< This offset signifies that the text related to the physical location
219 of the caret should be used. */
222 /** These constants specify the kind of change made to a table.
224 This enum is used in the IA2TableModelChange struct which in turn is used by
225 IAccessibleTable::modelChange and IAccessibleTable2::modelChange.
227 enum IA2TableModelChangeType {
228 IA2_TABLE_MODEL_CHANGE_INSERT, // = 0;
229 IA2_TABLE_MODEL_CHANGE_DELETE,
230 IA2_TABLE_MODEL_CHANGE_UPDATE
233 /** A structure defining the type of and extents of changes made to a table
235 IAccessibleTable::modelChange and IAccessibleTable2::modelChange return this struct.
236 In the case of an insertion or change the row and column offsets define the boundaries
237 of the inserted or changed subtable after the operation. In the case of a deletion
238 the row and column offsets define the boundaries of the subtable being removed before
239 the removal.
241 typedef struct IA2TableModelChange {
242 enum IA2TableModelChangeType type; // insert, delete, update
243 long firstRow; ///< 0 based, inclusive
244 long lastRow; ///< 0 based, inclusive
245 long firstColumn; ///< 0 based, inclusive
246 long lastColumn; ///< 0 based, inclusive
247 } IA2TableModelChange;
248 /*************************************************************************
250 * File Name (AccessibleRelation.idl)
252 * IAccessible2 IDL Specification
254 * Copyright (c) 2007, 2013 Linux Foundation
255 * Copyright (c) 2006 IBM Corporation
256 * Copyright (c) 2000, 2006 Sun Microsystems, Inc.
257 * All rights reserved.
260 * Redistribution and use in source and binary forms, with or without
261 * modification, are permitted provided that the following conditions
262 * are met:
264 * 1. Redistributions of source code must retain the above copyright
265 * notice, this list of conditions and the following disclaimer.
267 * 2. Redistributions in binary form must reproduce the above
268 * copyright notice, this list of conditions and the following
269 * disclaimer in the documentation and/or other materials
270 * provided with the distribution.
272 * 3. Neither the name of the Linux Foundation nor the names of its
273 * contributors may be used to endorse or promote products
274 * derived from this software without specific prior written
275 * permission.
277 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
278 * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
279 * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
280 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
281 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
282 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
283 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
284 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
285 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
286 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
287 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
288 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
289 * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
291 * This BSD License conforms to the Open Source Initiative "Simplified
292 * BSD License" as published at:
293 * http://www.opensource.org/licenses/bsd-license.php
295 * IAccessible2 is a trademark of the Linux Foundation. The IAccessible2
296 * mark may be used in accordance with the Linux Foundation Trademark
297 * Policy to indicate compliance with the IAccessible2 specification.
299 ************************************************************************/
305 /** @defgroup grpRelations Relations
306 Use the following constants to compare against the BSTRs returned by
307 IAccessibleRelation::relationType.
309 ///@{
311 /** The target object is the containing application object. */
312 const WCHAR *const IA2_RELATION_CONTAINING_APPLICATION = L"containingApplication";
314 /** The target object is the containing document object. The target object implements
315 the IAccessibleDocument interface.
317 const WCHAR *const IA2_RELATION_CONTAINING_DOCUMENT = L"containingDocument";
319 /** The target object is the containing tab pane object. */
320 const WCHAR *const IA2_RELATION_CONTAINING_TAB_PANE = L"containingTabPane";
322 /** The target object is the containing window object. */
323 const WCHAR *const IA2_RELATION_CONTAINING_WINDOW = L"containingWindow";
325 /** Some attribute of this object is affected by a target object. */
326 const WCHAR *const IA2_RELATION_CONTROLLED_BY = L"controlledBy";
328 /** This object is interactive and controls some attribute of a target object. */
329 const WCHAR *const IA2_RELATION_CONTROLLER_FOR = L"controllerFor";
331 /** This object is described by the target object. */
332 const WCHAR *const IA2_RELATION_DESCRIBED_BY = L"describedBy";
334 /** This object is describes the target object. */
335 const WCHAR *const IA2_RELATION_DESCRIPTION_FOR = L"descriptionFor";
337 /** This object is embedded by a target object. */
338 const WCHAR *const IA2_RELATION_EMBEDDED_BY = L"embeddedBy";
340 /** This object embeds a target object. This relation can be used on the
341 OBJID_CLIENT accessible for a top level window to show where the content
342 areas are.
344 const WCHAR *const IA2_RELATION_EMBEDS = L"embeds";
346 /** Content flows to this object from a target object.
347 This relation and IA2_RELATION_FLOWS_TO are useful to tie text and non-text
348 objects together in order to allow assistive technology to follow the
349 intended reading order.
351 const WCHAR *const IA2_RELATION_FLOWS_FROM = L"flowsFrom";
353 /** Content flows from this object to a target object. */
354 const WCHAR *const IA2_RELATION_FLOWS_TO = L"flowsTo";
356 /** This object is label for a target object. */
357 const WCHAR *const IA2_RELATION_LABEL_FOR = L"labelFor";
359 /** This object is labelled by a target object. Note that the double L spelling
360 which follows is preferred. Please use it instead. This single L version may
361 be removed in a later version.
363 const WCHAR *const IA2_RELATION_LABELED_BY = L"labelledBy";
365 /** This object is labelled by a target object. */
366 const WCHAR *const IA2_RELATION_LABELLED_BY = L"labelledBy";
368 /** This object is a member of a group of one or more objects. When
369 there is more than one object in the group each member may have one and the
370 same target, e.g. a grouping object. It is also possible that each member has
371 multiple additional targets, e.g. one for every other member in the group.
373 const WCHAR *const IA2_RELATION_MEMBER_OF = L"memberOf";
375 /** The target object is the next object in the tab order. */
376 const WCHAR *const IA2_RELATION_NEXT_TABBABLE = L"nextTabbable";
378 /** This object is a logical child of a target object. This relation is the reciprocal
379 of the IA2_RELATION_NODE_PARENT_OF relation. In some cases an application's accessible
380 tree is such that objects can be in a logical parent-child relationship which is
381 different from the hierarchy of the accessible tree. */
382 const WCHAR *const IA2_RELATION_NODE_CHILD_OF = L"nodeChildOf";
384 /** This object is a logical parent of a target object. This relation is the reciprocal
385 of the IA2_RELATION_NODE_CHILD_OF relation. In some cases an application's accessible
386 tree is such that objects can be in a logical parent-child relationship which is
387 different from the hierarchy of the accessible tree. */
388 const WCHAR *const IA2_RELATION_NODE_PARENT_OF = L"nodeParentOf";
390 /** This object is a parent window of the target object. */
391 const WCHAR *const IA2_RELATION_PARENT_WINDOW_OF = L"parentWindowOf";
393 /** This object is a transient component related to the target object.
394 When this object is activated the target object doesn't lose focus.
396 const WCHAR *const IA2_RELATION_POPUP_FOR = L"popupFor";
398 /** The target object is the previous object in the tab order. */
399 const WCHAR *const IA2_RELATION_PREVIOUS_TABBABLE = L"previousTabbable";
401 /** This object is a sub window of a target object. */
402 const WCHAR *const IA2_RELATION_SUBWINDOW_OF = L"subwindowOf";
404 ///@}
406 /** This interface gives access to an object's set of relations.
408 [object, uuid(7CDF86EE-C3DA-496a-BDA4-281B336E1FDC)]
409 interface IAccessibleRelation : IUnknown
411 /** @brief Returns the type of the relation.
412 @param [out] relationType
413 The strings returned are defined @ref grpRelations "in this section of the documentation".
414 @retval S_OK
416 [propget] HRESULT relationType
418 [out, retval] BSTR *relationType
421 /** @brief Returns a localized version of the relation type.
422 @param [out] localizedRelationType
423 @retval S_OK
425 [propget] HRESULT localizedRelationType
427 [out, retval] BSTR *localizedRelationType
430 /** @brief Returns the number of targets for this relation.
431 @param [out] nTargets
432 @retval S_OK
434 [propget] HRESULT nTargets
436 [out, retval] long *nTargets
439 /** @brief Returns one accessible relation target.
440 @param [in] targetIndex
441 0 based index
442 @param [out] target
443 @retval S_OK
444 @retval E_INVALIDARG if bad [in] passed
445 @note Use QueryInterface to get IAccessible2.
447 [propget] HRESULT target
449 [in] long targetIndex,
450 [out, retval] IUnknown **target
453 /** @brief Returns multiple accessible relation targets
454 @param [in] maxTargets
455 maximum size of the array allocated by the client
456 @param [out] targets
457 The array of target objects. Note that this array is to be allocated by the
458 client and freed when no longer needed. Refer to @ref _arrayConsideration
459 "Special Consideration when using Arrays" for more details. You will need to use
460 QueryInterface on the IUnknown to get the IAccessible2.
461 @param [out] nTargets
462 actual number of targets in the returned array (not more than maxTargets)
463 @retval S_OK
464 @retval E_INVALIDARG if bad [in] passed, e.g. a negative value
466 [propget] HRESULT targets
468 [in] long maxTargets,
469 [out, size_is(maxTargets), length_is(*nTargets)]
470 IUnknown **targets,
471 [out, retval] long *nTargets
475 /*************************************************************************
477 * File Name (AccessibleAction.idl)
479 * IAccessible2 IDL Specification
481 * Copyright (c) 2007, 2013 Linux Foundation
482 * Copyright (c) 2006 IBM Corporation
483 * Copyright (c) 2000, 2006 Sun Microsystems, Inc.
484 * All rights reserved.
487 * Redistribution and use in source and binary forms, with or without
488 * modification, are permitted provided that the following conditions
489 * are met:
491 * 1. Redistributions of source code must retain the above copyright
492 * notice, this list of conditions and the following disclaimer.
494 * 2. Redistributions in binary form must reproduce the above
495 * copyright notice, this list of conditions and the following
496 * disclaimer in the documentation and/or other materials
497 * provided with the distribution.
499 * 3. Neither the name of the Linux Foundation nor the names of its
500 * contributors may be used to endorse or promote products
501 * derived from this software without specific prior written
502 * permission.
504 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
505 * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
506 * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
507 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
508 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
509 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
510 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
511 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
512 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
513 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
514 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
515 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
516 * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
518 * This BSD License conforms to the Open Source Initiative "Simplified
519 * BSD License" as published at:
520 * http://www.opensource.org/licenses/bsd-license.php
522 * IAccessible2 is a trademark of the Linux Foundation. The IAccessible2
523 * mark may be used in accordance with the Linux Foundation Trademark
524 * Policy to indicate compliance with the IAccessible2 specification.
526 ************************************************************************/
532 /** This enum defines values which are predefined actions for use when implementing
533 support for media.
535 This enum is used when specifying an action for IAccessibleAction::doAction.
538 enum IA2Actions {
539 IA2_ACTION_OPEN = -1, /**< Used to inform the server that the client will
540 signal via IA2_ACTION_COMPLETE when it has consumed
541 the content provided by the object. This action
542 allows the object's server to wait for all clients
543 to signal their readiness for additional content.
544 Any form of content generation that requires
545 synchronization with an AT would require use of this
546 action. One example is the generation of text describing
547 visual content not obvious from a video's sound track.
548 In this scenario the Text to Speech or Braille output
549 may take more time than the related length of silence
550 in the video's sound track. */
551 IA2_ACTION_COMPLETE = -2, /**< Used by the client to inform the server that it has
552 consumed the most recent content provided by this object. */
553 IA2_ACTION_CLOSE = -3 /**< Used to inform the server that the client no longer
554 requires synchronization. */
557 /** @brief This interface gives access to actions that can be executed
558 for accessible objects.
560 Every accessible object that can be manipulated via the native GUI beyond the
561 methods available either in the MSAA IAccessible interface or in the set of
562 IAccessible2 interfaces (other than this IAccessibleAction interface) should
563 support the IAccessibleAction interface in order to provide Assistive Technology
564 access to all the actions that can be performed by the object. Each action can
565 be performed or queried for a name, description or associated key bindings.
566 Actions are needed more for ATs that assist the mobility impaired, such as
567 on-screen keyboards and voice command software. By providing actions directly,
568 the AT can present them to the user without the user having to perform the extra
569 steps to navigate a context menu.
571 The first action should be equivalent to the MSAA default action. If there is
572 only one action, %IAccessibleAction should also be implemented.
574 [object, uuid(B70D9F59-3B5A-4dba-AB9E-22012F607DF5)]
575 interface IAccessibleAction : IUnknown
578 /** @brief Returns the number of accessible actions available in this object.
580 If there are more than one, the first one is considered the
581 "default" action of the object.
582 @param [out] nActions
583 The returned value of the number of actions is zero if there are
584 no actions.
585 @retval S_OK
586 @note This method is missing a [propget] prefix in the IDL. The result is the
587 method is named nActions in generated C++ code instead of get_nActions.
589 HRESULT nActions
591 [out,retval] long* nActions
594 /** @brief Performs the specified Action on the object.
595 @param [in] actionIndex
596 0 based index specifying the action to perform. If it lies outside
597 the valid range no action is performed.
598 @retval S_OK
599 @retval S_FALSE if action could not be performed
600 @retval E_INVALIDARG if bad [in] passed
601 @note If implementing support for media, refer to the predefined constants in the ::IA2Actions enum.
603 HRESULT doAction
605 [in] long actionIndex
608 /** @brief Returns a description of the specified action of the object.
609 @param [in] actionIndex
610 0 based index specifying which action's description to return.
611 If it lies outside the valid range an empty string is returned.
612 @param [out] description
613 The returned value is a localized string of the specified action.
614 @retval S_OK
615 @retval S_FALSE if there is nothing to return, [out] value is NULL
616 @retval E_INVALIDARG if bad [in] passed
618 [propget] HRESULT description
620 [in] long actionIndex,
621 [out, retval] BSTR *description
624 /** @brief Returns an array of BSTRs describing one or more key bindings, if
625 there are any, associated with the specified action.
627 The returned strings are the localized human readable key sequences to be
628 used to activate each action, e.g. "Ctrl+Shift+D". Since these key
629 sequences are to be used when the object has focus, they are like
630 mnemonics (access keys), and not like shortcut (accelerator) keys.
632 There is no need to implement this method for single action controls since
633 that would be redundant with the standard MSAA programming practice of
634 getting the mnemonic from get_accKeyboardShortcut.
636 An AT such as an On Screen Keyboard might not expose these bindings but
637 provide alternative means of activation.
639 Note: the client allocates and passes in an array of pointers. The server
640 allocates the BSTRs and passes back one or more pointers to these BSTRs into
641 the array of pointers allocated by the client. The client is responsible
642 for deallocating the BSTRs.
644 @param [in] actionIndex
645 0 based index specifying which action's key bindings should be returned.
646 @param [in] nMaxBindings
647 This parameter is ignored. Refer to @ref _arrayConsideration
648 "Special Consideration when using Arrays" for more details.
649 @param [out] keyBindings
650 An array of BSTRs, allocated by the server, one for each key binding.
651 The client must free it with CoTaskMemFree.
652 @param [out] nBindings
653 The number of key bindings returned; the size of the returned array.
654 @retval S_OK
655 @retval S_FALSE if there are no key bindings, [out] values are NULL and 0 respectively
656 @retval E_INVALIDARG if bad [in] passed
658 [propget] HRESULT keyBinding
660 [in] long actionIndex,
661 [in] long nMaxBindings,
662 [out, size_is(,nMaxBindings), length_is(,*nBindings)] BSTR **keyBindings,
663 [out, retval] long *nBindings
666 /** @brief Returns the non-localized name of specified action.
667 @param [in] actionIndex
668 0 based index specifying which action's non-localized name should be returned.
669 @param [out] name
670 @retval S_OK
671 @retval S_FALSE if there is nothing to return, [out] value is NULL
672 @retval E_INVALIDARG if bad [in] passed
674 [propget] HRESULT name
676 [in] long actionIndex,
677 [out, retval] BSTR *name
680 /** @brief Returns the localized name of specified action.
681 @param [in] actionIndex
682 0 based index specifying which action's localized name should be returned.
683 @param [out] localizedName
684 @retval S_OK
685 @retval S_FALSE if there is nothing to return, [out] value is NULL
686 @retval E_INVALIDARG if bad [in] passed
688 [propget] HRESULT localizedName
690 [in] long actionIndex,
691 [out, retval] BSTR *localizedName
695 /*************************************************************************
697 * File Name (AccessibleRole.idl)
699 * IAccessible2 IDL Specification
701 * Copyright (c) 2007, 2013 Linux Foundation
702 * Copyright (c) 2006 IBM Corporation
703 * Copyright (c) 2000, 2006 Sun Microsystems, Inc.
704 * All rights reserved.
707 * Redistribution and use in source and binary forms, with or without
708 * modification, are permitted provided that the following conditions
709 * are met:
711 * 1. Redistributions of source code must retain the above copyright
712 * notice, this list of conditions and the following disclaimer.
714 * 2. Redistributions in binary form must reproduce the above
715 * copyright notice, this list of conditions and the following
716 * disclaimer in the documentation and/or other materials
717 * provided with the distribution.
719 * 3. Neither the name of the Linux Foundation nor the names of its
720 * contributors may be used to endorse or promote products
721 * derived from this software without specific prior written
722 * permission.
724 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
725 * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
726 * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
727 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
728 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
729 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
730 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
731 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
732 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
733 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
734 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
735 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
736 * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
738 * This BSD License conforms to the Open Source Initiative "Simplified
739 * BSD License" as published at:
740 * http://www.opensource.org/licenses/bsd-license.php
742 * IAccessible2 is a trademark of the Linux Foundation. The IAccessible2
743 * mark may be used in accordance with the Linux Foundation Trademark
744 * Policy to indicate compliance with the IAccessible2 specification.
746 ************************************************************************/
750 /** Collection of roles
752 This enumerator defines an extended set of accessible roles of objects implementing
753 the %IAccessible2 interface. These roles are in addition to the MSAA roles obtained
754 through the MSAA get_accRole method. Examples are 'footnote', 'heading', and
755 'label'. You obtain an object's %IAccessible2 roles by calling IAccessible2::role.
757 enum IA2Role {
759 /** Unknown role. The object contains some Accessible information, but its
760 role is not known.
762 IA2_ROLE_UNKNOWN = 0,
764 /** An object that can be drawn into and to manage events from the objects
765 drawn into it. Also refer to ::IA2_ROLE_FRAME,
766 ::IA2_ROLE_GLASS_PANE, and ::IA2_ROLE_LAYERED_PANE.
768 IA2_ROLE_CANVAS = 0x401,
770 /// A caption describing another object.
771 IA2_ROLE_CAPTION,
773 /// Used for check buttons that are menu items.
774 IA2_ROLE_CHECK_MENU_ITEM,
776 /// A specialized dialog that lets the user choose a color.
777 IA2_ROLE_COLOR_CHOOSER,
779 /// A date editor.
780 IA2_ROLE_DATE_EDITOR,
782 /** An iconified internal frame in an ::IA2_ROLE_DESKTOP_PANE.
783 Also refer to ::IA2_ROLE_INTERNAL_FRAME.
785 IA2_ROLE_DESKTOP_ICON,
787 /** A desktop pane. A pane that supports internal frames and iconified
788 versions of those internal frames. Also refer to ::IA2_ROLE_INTERNAL_FRAME.
790 IA2_ROLE_DESKTOP_PANE,
792 /** A directory pane. A pane that allows the user to navigate through
793 and select the contents of a directory. May be used by a file chooser.
794 Also refer to ::IA2_ROLE_FILE_CHOOSER.
796 IA2_ROLE_DIRECTORY_PANE,
798 /** An editable text object in a toolbar. <b>Deprecated.</b>
799 The edit bar role was meant for a text area in a tool bar. However, to detect
800 a text area in a tool bar the AT can query the parent.
802 IA2_ROLE_EDITBAR,
804 /// Embedded (OLE) object.
805 IA2_ROLE_EMBEDDED_OBJECT,
807 /// Text that is used as an endnote (footnote at the end of a chapter or section).
808 IA2_ROLE_ENDNOTE,
810 /** A file chooser. A specialized dialog that displays the files in the
811 directory and lets the user select a file, browse a different directory,
812 or specify a filename. May use the directory pane to show the contents of
813 a directory.
814 Also refer to ::IA2_ROLE_DIRECTORY_PANE.
816 IA2_ROLE_FILE_CHOOSER,
818 /** A font chooser. A font chooser is a component that lets the user pick
819 various attributes for fonts.
821 IA2_ROLE_FONT_CHOOSER,
823 /** Footer of a document page.
824 Also refer to ::IA2_ROLE_HEADER.
826 IA2_ROLE_FOOTER,
828 /// Text that is used as a footnote. Also refer to ::IA2_ROLE_ENDNOTE.
829 IA2_ROLE_FOOTNOTE,
831 /** A container of form controls. An example of the use of this role is to
832 represent an HTML FORM tag.
834 IA2_ROLE_FORM,
836 /** Frame role. A top level window with a title bar, border, menu bar, etc.
837 It is often used as the primary window for an application. Also refer to
838 ::IA2_ROLE_CANVAS and the MSAA roles of dialog and window.
840 IA2_ROLE_FRAME,
842 /** A glass pane. A pane that is guaranteed to be painted on top of all panes
843 beneath it. Also refer to ::IA2_ROLE_CANVAS, ::IA2_ROLE_INTERNAL_FRAME, and
844 ::IA2_ROLE_ROOT_PANE.
846 IA2_ROLE_GLASS_PANE,
848 /** Header of a document page.
849 Also refer to ::IA2_ROLE_FOOTER.
851 IA2_ROLE_HEADER,
853 /// Heading. Use the IAccessible2::attributes level attribute to determine the heading level.
854 IA2_ROLE_HEADING,
856 /// A small fixed size picture, typically used to decorate components.
857 IA2_ROLE_ICON,
859 /** An image map object. Usually a graphic with multiple hotspots, where
860 each hotspot can be activated resulting in the loading of another document
861 or section of a document.
863 IA2_ROLE_IMAGE_MAP,
865 /** An object which is used to allow input of characters not found on a keyboard,
866 such as the input of Chinese characters on a Western keyboard.
868 IA2_ROLE_INPUT_METHOD_WINDOW,
870 /** An internal frame. A frame-like object that is clipped by a desktop pane.
871 The desktop pane, internal frame, and desktop icon objects are often used to
872 create multiple document interfaces within an application.
873 Also refer to ::IA2_ROLE_DESKTOP_ICON, ::IA2_ROLE_DESKTOP_PANE, and ::IA2_ROLE_FRAME.
875 IA2_ROLE_INTERNAL_FRAME,
877 /// An object used to present an icon or short string in an interface.
878 IA2_ROLE_LABEL,
880 /** A layered pane. A specialized pane that allows its children to be drawn
881 in layers, providing a form of stacking order. This is usually the pane that
882 holds the menu bar as well as the pane that contains most of the visual
883 components in a window.
884 Also refer to ::IA2_ROLE_CANVAS, ::IA2_ROLE_GLASS_PANE, and ::IA2_ROLE_ROOT_PANE.
886 IA2_ROLE_LAYERED_PANE,
888 /** A section whose content is parenthetic or ancillary to the main content
889 of the resource.
891 IA2_ROLE_NOTE,
893 /** A specialized pane whose primary use is inside a dialog.
894 Also refer to MSAA's dialog role.
896 IA2_ROLE_OPTION_PANE,
898 /** An object representing a page of document content. It is used in documents
899 which are accessed by the user on a page by page basis.
901 IA2_ROLE_PAGE,
903 /// A paragraph of text.
904 IA2_ROLE_PARAGRAPH,
906 /** A radio button that is a menu item.
907 Also refer to MSAA's button and menu item roles.
909 IA2_ROLE_RADIO_MENU_ITEM,
911 /** An object which is redundant with another object in the accessible hierarchy.
912 ATs typically ignore objects with this role.
914 IA2_ROLE_REDUNDANT_OBJECT,
916 /** A root pane. A specialized pane that has a glass pane and a layered pane
917 as its children.
918 Also refer to ::IA2_ROLE_GLASS_PANE and ::IA2_ROLE_LAYERED_PANE
920 IA2_ROLE_ROOT_PANE,
922 /** A ruler such as those used in word processors.
924 IA2_ROLE_RULER,
926 /** A scroll pane. An object that allows a user to incrementally view a large
927 amount of information. Its children can include scroll bars and a viewport.
928 Also refer to ::IA2_ROLE_VIEW_PORT and MSAA's scroll bar role.
930 IA2_ROLE_SCROLL_PANE,
932 /** A container of document content. An example of the use of this role is to
933 represent an HTML DIV tag. A section may be used as a region. A region is a
934 group of elements that together form a perceivable unit. A region does not
935 necessarily follow the logical structure of the content, but follows the
936 perceivable structure of the page. A region may have an attribute in the set
937 of IAccessible2::attributes which indicates that it is "live". A live region
938 is content that is likely to change in response to a timed change, a user
939 event, or some other programmed logic or event.
941 IA2_ROLE_SECTION,
943 /// Object with graphical representation used to represent content on draw pages.
944 IA2_ROLE_SHAPE,
946 /** A split pane. A specialized panel that presents two other panels at the
947 same time. Between the two panels is a divider the user can manipulate to make
948 one panel larger and the other panel smaller.
950 IA2_ROLE_SPLIT_PANE,
952 /** An object that forms part of a menu system but which can be "undocked"
953 from or "torn off" the menu system to exist as a separate window.
955 IA2_ROLE_TEAR_OFF_MENU,
957 /// An object used as a terminal emulator.
958 IA2_ROLE_TERMINAL,
960 /// Collection of objects that constitute a logical text entity.
961 IA2_ROLE_TEXT_FRAME,
963 /** A toggle button. A specialized push button that can be checked or unchecked,
964 but does not provide a separate indicator for the current state.
965 Also refer to MSAA's roles of push button, check box, and radio button.
966 <BR><B>Note:</B> IA2_ROLE_TOGGLE_BUTTON should not be used. Instead, use MSAA's
967 ROLE_SYSTEM_PUSHBUTTON and STATE_SYSTEM_PRESSED.
969 IA2_ROLE_TOGGLE_BUTTON,
971 /** A viewport. An object usually used in a scroll pane. It represents the
972 portion of the entire data that the user can see. As the user manipulates
973 the scroll bars, the contents of the viewport can change.
974 Also refer to ::IA2_ROLE_SCROLL_PANE.
976 IA2_ROLE_VIEW_PORT,
978 /** An object containing content which is complementary to the main content of
979 a document, but remains meaningful when separated from the main content. There
980 are various types of content that would appropriately have this role. For example,
981 in the case where content is delivered via a web portal to a web browser, this may
982 include but not be limited to show times, current weather, related articles, or
983 stocks to watch. The complementary role indicates that contained content is relevant
984 to the main content. If the complementary content is completely separable main
985 content, it may be appropriate to use a more general role.
987 IA2_ROLE_COMPLEMENTARY_CONTENT
990 /*************************************************************************
992 * File Name (AccessibleStates.idl)
994 * IAccessible2 IDL Specification
996 * Copyright (c) 2007, 2010 Linux Foundation
997 * Copyright (c) 2006 IBM Corporation
998 * Copyright (c) 2000, 2006 Sun Microsystems, Inc.
999 * All rights reserved.
1002 * Redistribution and use in source and binary forms, with or without
1003 * modification, are permitted provided that the following conditions
1004 * are met:
1006 * 1. Redistributions of source code must retain the above copyright
1007 * notice, this list of conditions and the following disclaimer.
1009 * 2. Redistributions in binary form must reproduce the above
1010 * copyright notice, this list of conditions and the following
1011 * disclaimer in the documentation and/or other materials
1012 * provided with the distribution.
1014 * 3. Neither the name of the Linux Foundation nor the names of its
1015 * contributors may be used to endorse or promote products
1016 * derived from this software without specific prior written
1017 * permission.
1019 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
1020 * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
1021 * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
1022 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
1023 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
1024 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
1025 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
1026 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
1027 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
1028 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
1029 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
1030 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
1031 * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
1033 * This BSD License conforms to the Open Source Initiative "Simplified
1034 * BSD License" as published at:
1035 * http://www.opensource.org/licenses/bsd-license.php
1037 * IAccessible2 is a trademark of the Linux Foundation. The IAccessible2
1038 * mark may be used in accordance with the Linux Foundation Trademark
1039 * Policy to indicate compliance with the IAccessible2 specification.
1041 ************************************************************************/
1045 typedef long AccessibleStates;
1047 /** %IAccessible2 specific state bit constants
1049 This enum defines the state bits returned by IAccessible2::states. The
1050 %IAccessible2 state bits are in addition to those returned by MSAA.
1052 enum IA2States {
1054 /** Indicates a window is currently the active window, or is an active subelement
1055 within a container or table.
1057 This state can be used to indicate the current active item in a container, even
1058 if the container itself is not currently active. In other words this would indicate
1059 the item that will get focus if you tab to the container.
1061 This information is important for knowing what to report for trees and potentially
1062 other containers in a virtual buffer.
1064 Also, see ::IA2_STATE_MANAGES_DESCENDANTS for more information.
1066 IA2_STATE_ACTIVE = 0x1,
1068 /** Indicates that the object is armed.
1070 Used to indicate that the control is "pressed" and will be invoked when the
1071 actuator, e.g. a mouse button, is "released". An AT which either monitors the
1072 mouse or synthesizes mouse events might need to know that, and possibly a talking
1073 interface would even let the user know about it. It could also potentially be
1074 useful to on screen keyboards or test tools since the information does indicate
1075 something about the state of the interface, for example, code operating asynchronously
1076 might need to wait for the armed state to change before doing something else.
1079 IA2_STATE_ARMED = 0x2,
1081 /** Indicates the user interface object corresponding to this object no longer exists. */
1082 IA2_STATE_DEFUNCT = 0x4,
1084 /** An object with this state has a caret and implements the IAccessibleText interface.
1086 Such fields may be read-only, so STATE_SYSTEM_READONLY is valid in combination
1087 with IA2_STATE_EDITABLE.
1090 IA2_STATE_EDITABLE = 0x8,
1092 /** Indicates the orientation of this object is horizontal. */
1093 IA2_STATE_HORIZONTAL = 0x10,
1095 /** Indicates this object is minimized and is represented only by an icon. */
1096 IA2_STATE_ICONIFIED = 0x20,
1098 /** Indicates an input validation failure. */
1099 IA2_STATE_INVALID_ENTRY = 0x40,
1101 /** Indicates that this object manages its children.
1103 Note: Due to the fact that MSAA's WinEvents don't allow the active child index
1104 to be passed on the IA2_EVENT_ACTIVE_DESCENDANT_CHANGED event, the manages
1105 descendants scheme can't be used. Instead the active child object has to fire
1106 MSAA's EVENT_OBJECT_FOCUS. In a future release a new event mechanism may be
1107 added to provide for event specific data to be passed with the event. At that
1108 time the IA2_EVENT_ACTIVE_DECENDENT_CHANGED event and
1109 IA2_STATE_MANAGES_DESCENDANTS state would be useful.
1111 IA2_STATE_MANAGES_DESCENDANTS = 0x80,
1113 /** Indicates that an object is modal.
1115 Modal objects have the behavior that something must be done with the object
1116 before the user can interact with an object in a different window.
1118 IA2_STATE_MODAL = 0x100,
1120 /** Indicates this text object can contain multiple lines of text. */
1121 IA2_STATE_MULTI_LINE = 0x200,
1123 /** Indicates this object paints every pixel within its rectangular region. */
1124 IA2_STATE_OPAQUE = 0x400,
1126 /** Indicates that user interaction is required.
1128 An example of when this state is used is when a field in a form must be filled
1129 before a form can be processed.
1131 IA2_STATE_REQUIRED = 0x800,
1133 /** Indicates an object which supports text selection.
1135 Note: This is different than MSAA STATE_SYSTEM_SELECTABLE.
1137 IA2_STATE_SELECTABLE_TEXT = 0x1000,
1139 /** Indicates that this text object can contain only a single line of text. */
1140 IA2_STATE_SINGLE_LINE = 0x2000,
1142 /** Indicates that the accessible object is stale.
1144 This state is used when the accessible object no longer accurately
1145 represents the state of the object which it is representing such as when an
1146 object is transient or when an object has been or is in the process of being
1147 destroyed or when the object's index in its parent has changed.
1149 IA2_STATE_STALE = 0x4000,
1151 /** Indicates that the object implements autocompletion.
1153 This state indicates that a text control will respond to the input of
1154 one or more characters and cause a sub-item to become selected. The
1155 selection may also result in events fired on the parent object.
1157 IA2_STATE_SUPPORTS_AUTOCOMPLETION = 0x8000,
1159 /** Indicates this object is transient.
1161 An object has this state when its parent object has the state ::IA2_STATE_MANAGES_DESCENDANTS.
1162 For example, a list item object may be managed by its parent list object and may only
1163 exist as long as the object is actually rendered. Similarly a table cell's accessible
1164 object may exist only while the cell has focus. However, from the perspective of an
1165 assistive technology a transient object behaves like a non-transient object. As a
1166 result it is likely that this state is not of use to an assistive technology, but it
1167 is provided in case an assistive technology determines that knowledge of the transient
1168 nature of the object is useful and also for harmony with the Linux accessibility API.
1170 Also, see ::IA2_STATE_MANAGES_DESCENDANTS for more information.
1172 IA2_STATE_TRANSIENT = 0x10000,
1174 /** Indicates the orientation of this object is vertical. */
1175 IA2_STATE_VERTICAL = 0x20000,
1177 /** Indicates this object is checkable.
1179 The standard checkable objects are check boxes, radio buttons, check box menu
1180 items, radio menu items, and toggle buttons. Since assistive technology will
1181 determine that these objects are checkable via the object's role the checkable
1182 state is not required. However, this state is necessary in those cases where
1183 an object has a role which is not one of the previously mentioned roles. An
1184 example is a table cell which indicates whether or not an email has an attachment,
1185 whether or not a mail is considered spam, and whether or not an email has been read.
1187 IA2_STATE_CHECKABLE = 0x40000,
1189 /** Indicates this object is pinned.
1191 This state indicates that an object is fixed at a certain location. One example
1192 is a browser tab that when pinned cannot be moved until unpinned. Another example
1193 is a movable or floating object that when pinned remains in its pinned location
1194 until being unpinned.
1196 IA2_STATE_PINNED = 0x80000
1199 /*************************************************************************
1201 * File Name (Accessible2.idl)
1203 * IAccessible2 IDL Specification
1205 * Copyright (c) 2007, 2013 Linux Foundation
1206 * Copyright (c) 2006 IBM Corporation
1207 * Copyright (c) 2000, 2006 Sun Microsystems, Inc.
1208 * All rights reserved.
1211 * Redistribution and use in source and binary forms, with or without
1212 * modification, are permitted provided that the following conditions
1213 * are met:
1215 * 1. Redistributions of source code must retain the above copyright
1216 * notice, this list of conditions and the following disclaimer.
1218 * 2. Redistributions in binary form must reproduce the above
1219 * copyright notice, this list of conditions and the following
1220 * disclaimer in the documentation and/or other materials
1221 * provided with the distribution.
1223 * 3. Neither the name of the Linux Foundation nor the names of its
1224 * contributors may be used to endorse or promote products
1225 * derived from this software without specific prior written
1226 * permission.
1228 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
1229 * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
1230 * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
1231 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
1232 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
1233 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
1234 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
1235 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
1236 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
1237 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
1238 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
1239 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
1240 * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
1242 * This BSD License conforms to the Open Source Initiative "Simplified
1243 * BSD License" as published at:
1244 * http://www.opensource.org/licenses/bsd-license.php
1246 * IAccessible2 is a trademark of the Linux Foundation. The IAccessible2
1247 * mark may be used in accordance with the Linux Foundation Trademark
1248 * Policy to indicate compliance with the IAccessible2 specification.
1250 ************************************************************************/
1252 /** @mainpage
1254 @section _interfaces Interfaces
1255 IAccessible2\n
1256 IAccessible2_2\n
1257 IAccessibleAction\n
1258 IAccessibleApplication\n
1259 IAccessibleComponent\n
1260 IAccessibleDocument\n
1261 IAccessibleEditableText\n
1262 IAccessibleHypertext\n
1263 IAccessibleHypertext2\n
1264 IAccessibleHyperlink\n
1265 IAccessibleImage\n
1266 IAccessibleRelation\n
1267 IAccessibleTable [Deprecated]\n
1268 IAccessibleTable2\n
1269 IAccessibleTableCell\n
1270 IAccessibleText\n
1271 IAccessibleText2\n
1272 IAccessibleValue
1274 @section _structs Structs
1275 IA2Locale\n
1276 IA2TableModelChange\n
1277 IA2TextSegment
1279 @section _enums Enums
1280 ::IA2Actions values are predefined actions for use when implementing support for HTML5 media.\n
1281 ::IA2CoordinateType values define the requested coordinate type (screen or parent window).\n
1282 ::IA2EventID values identify events.\n
1283 ::IA2Role values defines roles which are in addition to the existing MSAA roles.\n
1284 ::IA2ScrollType values define where to place an object or substring on the screen.\n
1285 ::IA2States values define states which are in addition to the existing MSAA states.\n
1286 ::IA2TableModelChangeType values describe the kinds of changes made to a table (insert, delete, update).\n
1287 ::IA2TextBoundaryType values define the requested text unit (character, word, sentence, line, paragraph).\n
1288 ::IA2TextSpecialOffsets values define special offsets for use in the text interfaces.
1290 @section _constants Constants
1291 @ref grpRelations
1293 @section _misc Miscellaneous
1294 @ref _licensePage "BSD License"\n
1295 @ref _generalInfo "General Information"\n
1297 @page _licensePage BSD License
1298 %IAccessible2 IDL Specification
1300 Copyright (c) 2007, 2013 Linux Foundation\n
1301 Copyright (c) 2006 IBM Corporation\n
1302 Copyright (c) 2000, 2006 Sun Microsystems, Inc.\n
1303 All rights reserved.
1305 Redistribution and use in source and binary forms, with or without
1306 modification, are permitted provided that the following conditions
1307 are met:
1309 1. Redistributions of source code must retain the above copyright
1310 notice, this list of conditions and the following disclaimer.
1312 2. Redistributions in binary form must reproduce the above
1313 copyright notice, this list of conditions and the following
1314 disclaimer in the documentation and/or other materials
1315 provided with the distribution.
1317 3. Neither the name of the Linux Foundation nor the names of its
1318 contributors may be used to endorse or promote products
1319 derived from this software without specific prior written
1320 permission.
1322 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
1323 CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
1324 INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
1325 MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
1326 DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
1327 CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
1328 SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
1329 NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
1330 LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
1331 HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
1332 CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
1333 OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
1334 EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
1336 This BSD License conforms to the Open Source Initiative "Simplified
1337 BSD License" as published at:
1338 http://www.opensource.org/licenses/bsd-license.php
1340 %IAccessible2 is a trademark of the Linux Foundation. The %IAccessible2
1341 mark may be used in accordance with the
1342 <a href="http://www.linuxfoundation.org/collaborate/workgroups/accessibility/trademark-policy">
1343 Linux Foundation Trademark Policy</a> to indicate compliance with the %IAccessible2 specification.
1345 @page _generalInfo General Information
1346 The following information is applicable to two or more interfaces.
1348 @ref _errors\n
1349 @ref _memory\n
1350 &nbsp;&nbsp;@ref _arrayConsideration\n
1351 @ref _indexes\n
1352 @ref _enumBase\n
1353 @ref _specialOffsets\n
1354 @ref _discoveringInterfaces\n
1355 @ref _changingInterfaces\n
1356 @ref _applicationInfo\n
1357 @ref _childIDs\n
1358 @ref _variants\n
1359 @ref _iaaction-iahyperlink\n
1360 @ref _trademark
1362 @section _errors Error Handling
1363 HRESULT values are defined by the Microsoft&reg; Win32&reg; API. For more information, refer to
1364 <a href="http://msdn.microsoft.com/en-us/library/windows/desktop/aa378137%28v=vs.85%29.aspx">
1365 Interpreting HRESULT Values</a> in MSDN&reg;.
1367 Note that the S_FALSE return value is considered a non-error value and the
1368 SUCCEEDED macro will return TRUE. S_FALSE is used when there is no failure
1369 but there was nothing valid to return, e.g. in IAccessible2::attributes when
1370 there are no attributes. When S_FALSE is returned [out] pointer types should
1371 be NULL and [out] longs should generally be 0, but sometimes -1 is used such
1372 as IAccessible2::indexInParent, IAccessibleText::caretOffset, and
1373 IAccessibleHypertext::hyperlinkIndex.
1375 Note that for BSTR [out] variables common COM practice is that the server does
1376 the SysAllocString and the client does the SysFreeString. Also note that when
1377 NULL is returned there is no need for the client to call SysFreeString. Please
1378 refer to the documentation for each method for more details regarding error handling.
1380 @section _memory Memory Management
1381 The following memory management issues should be considered:
1382 @li Although [out] BSTR variables are declared by the client, their space is
1383 allocated by the server. They need to be freed with SysFreeString by the
1384 client at end of life; the same is true when BSTRs are used in structs or
1385 arrays which are passed to the server.
1386 @li If there is no valid [out] BSTR to return, the server should return S_FALSE and
1387 assign NULL to the output, e.g. *theOutBSTR = NULL;.
1388 @li COM interfaces need to be referenced with AddRef when used and dereferenced
1389 with Release at end of life.
1390 @li Single [out] longs, HWNDs, booleans, and structs are declared by the caller
1391 and passed by reference. The marshaller does all the memory management.
1393 The following articles may be helpful for understanding memory management issues:
1394 @li An article by Don Box in a
1395 <a href="http://www.microsoft.com/msj/1196/activex1196.aspx">Q & A section</a>
1396 of the November 1996 edition of the Microsoft Systems Journal.
1397 @li A posting to a CodeGuru forum,
1398 <a href="http://www.codeguru.com/forum/showthread.php?t=364511">Windows SDK
1399 String: What are the rules for BSTR allocation and deallocation?</a>
1401 @subsection _arrayConsideration Special Consideration when using Arrays
1402 There are several methods which return arrays. In the case of IAccessible2::relations
1403 and IAccessibleRelation::targets the client must allocate and free the arrays.
1405 For the remaining methods which return arrays, the server must allocate the array
1406 and the client must free the array when no longer needed. These methods are
1407 IAccessible2::extendedStates, IAccessible2::localizedExtendedStates,
1408 IAccessible2_2::relationTargetsOfType, IAccessibleAction::keyBinding,
1409 IAccessibleHypertext2::hyperlinks, IAccessibleTable::selectedChildren,
1410 IAccessibleTable::selectedColumns, IAccessibleTable::selectedRows,
1411 IAccessibleTable2::selectedCells, IAccessibleTable2::selectedColumns,
1412 IAccessibleTable2::selectedRows, IAccessibleTableCell::columnHeaderCells,
1413 and IAccessibleTableCell::rowHeaderCells.
1414 For those methods, the server must allocate both the top level array and any storage
1415 associated with it, e.g. for BSTRs. The server must allocate the arrays with
1416 CoTaskMemAlloc and any BSTRs with SysAllocString. The client must use CoTaskMemFree
1417 to free the array and any BSTRs must be freed with SysFreeString.
1419 Also, the IDL for IAccessible2::extendedStates, IAccessible2::localizedExtendedStates,
1420 IAccessibleAction::keyBinding, IAccessibleTable::selectedChildren,
1421 IAccessibleTable::selectedColumns, and IAccessibleTable::selectedRows includes an
1422 extraneous [in] parameter for the caller to specify the max size of the array.
1423 This parameter will be ignored by the COM server.
1425 @section _indexes Zero and One Based Indexes
1426 Unless otherwise specified all offsets and indexes are 0 based.
1428 @section _enumBase Enum Base
1429 Note that enums start at 0.
1431 @section _specialOffsets Special Offsets for use in the IAccessibleText and IAccessibleEditableText Methods
1432 IAccessibleText and IAccessibleEditableText can use one or more of the following
1433 special offset values. They are defined in the ::IA2TextSpecialOffsets enum.
1434 @li Using ::IA2_TEXT_OFFSET_LENGTH (-1) as an offset in any of the IAccessibleText or
1435 IAccessibleEditableText methods is the same as specifying the length of the string.
1436 @li Using ::IA2_TEXT_OFFSET_CARET (-2) as an offset for IAccessibleText::textBeforeOffset,
1437 IAccessibleText::textAtOffset, and IAccessibleText::textAfterOffset indicates that the
1438 text related to the physical location of the caret should be used. This is needed for
1439 applications that consider the character offset of the end of one line (as reached by
1440 pressing the End key) the same as the offset of the first character on the next line.
1441 Since the same offset is associated with two different lines a special means is needed
1442 to fetch text from the line where the caret is physically located.
1444 @section _discoveringInterfaces Discovery of Interfaces
1445 In general AT (Assistive Technology) should try IAccessible2 interfaces, followed by using
1446 the MSAA (Microsoft&reg; Active Accessibility&reg;) interfaces. (In cases where the an application
1447 is known to have custom interfaces which provide information not supplied by IAccessible2
1448 or MSAA, then those custom interfaces can be used.) The AT can then, by default, support
1449 unknown IAccessible2/MSAA applications, without the application developers having to request
1450 AT vendors for support on an individual application by application basis.
1452 When you have a reference to an IAccessible and require a reference to an IAccessible2 use
1453 QueryService as follows:
1454 @code
1455 // pAcc is a reference to the accessible object's IAccessible interface.
1456 IServiceProvider *pService = NULL;
1457 hr = pAcc->QueryInterface(IID_IServiceProvider, (void **)&pService);
1458 if(SUCCEEDED(hr)) {
1459 IAccessible2 *pIA2 = NULL;
1460 hr = pService->QueryService(IID_IAccessible, IID_IAccessible2, (void**)&pIA2);
1461 if (SUCCEEDED(hr) && pIA2) {
1462 // The control supports IAccessible2.
1463 // pIA2 is the reference to the accessible object's IAccessible2 interface.
1466 @endcode
1468 @section _changingInterfaces Changing between Accessible Interfaces
1469 Note that developers must always implement MSAA's IAccessible and, if needed, some
1470 of the interfaces in the set of IAccessible2 interfaces. Although the IAccessible2
1471 IDL is coded such that IAccessible2 is a subclass of MSAA's IAccessible, none of
1472 MSAA's IAccessible methods are redefined by IAccessible2.
1474 QueryService must be used to switch from a reference to an MSAA IAccessible interface
1475 to another interface. This has been
1476 <a href="http://www.atia.org/files/public/Introducing_IAccessibleEx.doc">
1477 documented</a> and the pertinent facts have been extracted below:
1479 @par
1480 Why use QueryService instead of just using QueryInterface to get IAccessibleEx
1481 directly? The reason is that since MSAA 2.0, clients don't talk to a server's
1482 IAccessible interface directly; instead they talk to an intermediate MSAA-provided
1483 wrapper that calls through to the original IAccessible. This wrapper provides services
1484 such as implementing IDispatch, supplying information from MSAA 2.0's Dynamic Annotation
1485 service, and scaling locations when running on Windows Vista with DPI scaling enabled.
1486 QueryService is the supported way to expose additional interfaces from an existing
1487 IAccessible and was originally used by MSHTML to expose IHTMLElement objects corresponding
1488 to IAccessibles. QueryService is often more convenient for servers to implement than
1489 QueryInterface because it does not have the same requirements for preserving object
1490 identity or symmetry/transitivity as QueryInterface, so QueryService allows servers to
1491 easily implement the interface on the same object or a separate object. The latter is
1492 often hard to do with QueryInterface unless the original object supports aggregation.
1494 Two related references in MSDN&reg; are:
1495 @li <a href="http://msdn.microsoft.com/en-us/library/ms696078(VS.85).aspx">
1496 "Using QueryService to expose a native object model interface for an IAccessible object"</a>
1497 @li <a href="http://msdn.microsoft.com/en-us/library/ms528415.aspx#acc_obj">
1498 "Accessing the Internet Explorer Object Associated with an Accessible Object"</a>
1500 Based on this information from Microsoft, QueryService must be used to switch back and forth
1501 between a reference to an MSAA IAccessible interface and any of the IAccessible2 interfaces.
1503 Regarding switching between any of the IAccessible2 interfaces, applications implementing
1504 IAccessible2 should implement the IAccessible2 interfaces on a single object since ATs
1505 will be using QueryInterface to switch between the IAccessible2 interfaces. Implementing
1506 the IAccessible2 interfaces on separate objects would require the use of QueryService.
1507 There is one exception, IAccessibleApplication can be implemented on a separate object so
1508 its common code doesn't have to be included in each accessible object. ATs should use
1509 QueryService to access IAccessibleApplication.
1511 @section _applicationInfo Access to Information about the Application
1512 Servers implementing IAccessible2 should provide access to the IAccessibleApplication
1513 interface via QueryService from any object so that ATs can easily determine specific
1514 information about the application such as its name or version.
1516 @section _childIDs Child IDs
1517 The IAccessible2 interfaces do not support child IDs, i.e. simple child elements.
1518 Full accessible objects must be created for each object that supports IAccessible2.
1519 Therefore MSAA's get_accChild should never return a child ID (other than CHILDID_SELF)
1520 for an object that implements any of the IAccessible2 interfaces.
1522 Microsoft's UI Automation specification has the same limitation and this was resolved
1523 in the UI Automation Express specification by adding IAccessibleEx::GetObjectForChild
1524 and IAccessibleEx::GetIAccessiblePair. These methods allow mapping back and forth
1525 between an IAccessibleEx and an {IAccessible, Child ID} pair. A future version of
1526 IAccessible2 may include similar methods to map back and forth between an IAccessible2
1527 and an {IAccessible, Child ID} pair.
1529 @section _variants VARIANTs
1530 Some methods return a VARIANT. Implementers need to make sure that the return type is
1531 specified, i.e. VT_I4, VT_IDISPATCH, etc. The methods that return VARIANTs are
1532 IAccessibleHyperlink::anchor, IAccessibleHyperlink::anchorTarget, IAccessibleValue::currentValue,
1533 IAccessibleValue::maximumValue, IAccessibleValue::minimumValue.
1535 @section _iaaction-iahyperlink IAccessibleHyperlink as subclass of IAccessibleAction
1536 In this version of the IDL, IAccessibleHyperlink is a subclass of IAccessibleAction.
1537 However, there is no practical need for that inheritance and in some cases, such as
1538 an image map of smart tags, it doesn't make sense because such an image map doesn't
1539 have actionable objects; it's the secondary smart tags that are actionable. As a
1540 result, implementations should not rely on the inheritance as it may be removed in
1541 a later version of the IDL.
1543 @section _trademark Trademark Attribution
1544 The names of actual companies and products mentioned herein may be the trademarks of
1545 their respective owners. In particular, Active Accessibility, Microsoft, MSDN, and Win32
1546 are trademarks of the Microsoft group of companies in the U.S.A. and/or other countries.
1557 /** A structure defining the locale of an accessible object.
1559 IAccessible2::locale returns this struct.
1561 typedef struct IA2Locale {
1562 BSTR language; ///< ISO 639-1 Alpha-2 two character language code
1563 BSTR country; ///< ISO 3166-1 Alpha-2 two character country code
1564 BSTR variant; ///< Application specific variant of the locale
1565 } IA2Locale;
1567 /** @brief This interface exposes the primary set of information about an
1568 IAccessible2 enabled accessible object.
1570 This interface must always be provided for objects that support some
1571 portion of the collection of the %IAccessible2 interfaces.
1573 Please refer to @ref _changingInterfaces "Changing between Accessible Interfaces"
1574 for special considerations related to use of the MSAA IAccessible interface and
1575 the set of %IAccessible2 interfaces.
1577 [object, uuid(E89F726E-C4F4-4c19-BB19-B647D7FA8478)]
1578 interface IAccessible2 : IAccessible
1581 /** @brief Returns the number of accessible relations for this object.
1582 @param [out] nRelations
1583 @retval S_OK
1585 [propget] HRESULT nRelations
1587 [out, retval] long *nRelations
1590 /** @brief Returns one accessible relation for this object.
1591 @param [in] relationIndex
1592 0 based
1593 @param [out] relation
1594 @retval S_OK
1595 @retval E_INVALIDARG if bad [in] passed
1597 [propget] HRESULT relation
1599 [in] long relationIndex,
1600 [out, retval] IAccessibleRelation **relation
1603 /** @brief Returns multiple accessible relations for this object.
1604 @param [in] maxRelations
1605 maximum size of the array allocated by the client
1606 @param [out] relations
1607 The array of accessible relation objects. Note that this array is to be
1608 allocated by the client and freed when no longer needed. Refer to @ref
1609 _arrayConsideration "Special Consideration when using Arrays" for more details.
1610 @param [out] nRelations
1611 actual number of relations in the returned array (not more than maxRelations)
1612 @retval S_OK
1613 @retval S_FALSE if there are no relations, nRelations is set to 0
1614 @note As a performant alternative, client code should consider using IAccessible2_2::relationTargetsOfType.
1616 [propget] HRESULT relations
1618 [in] long maxRelations,
1619 [out, size_is(maxRelations), length_is(*nRelations)]
1620 IAccessibleRelation **relations,
1621 [out, retval] long *nRelations
1624 /** @brief Returns the role of an %IAccessible2 object.
1625 @param [out] role
1626 The role of an %IAccessible2 object.
1627 @retval S_OK
1628 @note
1629 @li For convenience MSAA roles are also passed through this method so the
1630 AT doesn't have to also fetch roles through MSAA's get_accRole.
1631 @li %IAccessible2 roles should not be passed through MSAA's get_accRole.
1632 @li For compatibility with non IAccessible2 enabled ATs, IAccessible2
1633 applications should also add support to get_accRole to return the closest
1634 MSAA role or ROLE_SYSTEM_CLIENT (the MSAA defined default role) if there
1635 is not a good match.
1636 @li This method is missing a [propget] prefix in the IDL. The result is the
1637 method is named role in generated C++ code instead of get_role.
1639 HRESULT role
1641 [out, retval] long *role
1644 /** @brief Makes an object visible on the screen.
1645 @param [in] scrollType
1646 Defines where the object should be placed on the screen.
1647 @retval S_OK
1648 @retval E_INVALIDARG if bad [in] passed
1650 HRESULT scrollTo
1652 [in] enum IA2ScrollType scrollType
1655 /** @brief Moves the top left of an object to a specified location.
1657 @param [in] coordinateType
1658 Specifies whether the coordinates are relative to the screen or the parent object.
1659 @param [in] x
1660 Defines the x coordinate.
1661 @param [in] y
1662 Defines the y coordinate.
1663 @retval S_OK
1664 @retval E_INVALIDARG if bad [in] passed
1666 HRESULT scrollToPoint
1668 [in] enum IA2CoordinateType coordinateType,
1669 [in] long x,
1670 [in] long y
1673 /** @brief Returns grouping information.
1675 Used for tree items, list items, tab panel labels, radio buttons, etc.
1676 Also used for collections of non-text objects.
1678 @param [out] groupLevel
1679 1 based, 0 indicates that this value is not applicable
1680 @param [out] similarItemsInGroup
1681 1 based, 0 indicates that this value is not applicable
1682 @param [out] positionInGroup
1683 1 based, 0 indicates that this value is not applicable. This is an index
1684 into the objects in the current group, not an index into all the objects
1685 at the same group level.
1686 @retval S_OK if at least one value is valid
1687 @retval S_FALSE if no values are valid, [out] values are 0s
1688 @note This method is meant to describe the nature of an object's containment
1689 structure. It's exposed by trees, tree grids, nested lists, nested menus,
1690 but not headings, which uses the level object attribute. It is also exposed
1691 by radio buttons (with groupLevel == 0).
1692 @note This is normally not implemented on a combo box to describe the nature
1693 of its contents. Normally an AT will get that information from its child list
1694 object. However, in some cases when non-edit combo boxes are not able to be structured
1695 such that the list is a child of the combo box, this method is implemented on
1696 the combo box itself. ATs can use this interface if a child list is not found.
1698 [propget] HRESULT groupPosition
1700 [out] long *groupLevel,
1701 [out] long *similarItemsInGroup,
1702 [out, retval] long *positionInGroup
1705 /** @brief Returns the bit strip containing any IAccessible2 states.
1707 The IAccessible2 states are in addition to the MSAA states and are defined in
1708 the IA2States enum.
1710 @param [out] states
1711 @retval S_OK
1713 [propget] HRESULT states
1715 [out, retval] AccessibleStates *states
1718 /** @brief Returns the extended role.
1720 An extended role is a role which is dynamically generated by the application.
1721 It is not predefined by the %IAccessible2 specification.
1723 @param [out] extendedRole
1724 @retval S_OK
1725 @retval S_FALSE if there is nothing to return, [out] value is NULL
1727 [propget] HRESULT extendedRole
1729 [out, retval] BSTR *extendedRole
1732 /** @brief Returns the localized extended role.
1733 @param [out] localizedExtendedRole
1734 @retval S_OK
1735 @retval S_FALSE if there is nothing to return, [out] value is NULL
1737 [propget] HRESULT localizedExtendedRole
1739 [out, retval] BSTR *localizedExtendedRole
1742 /** @brief Returns the number of extended states.
1743 @param [out] nExtendedStates
1744 @retval S_OK
1746 [propget] HRESULT nExtendedStates
1748 [out, retval] long *nExtendedStates
1751 /** @brief Returns the extended states (array of strings).
1753 An extended state is a state which is dynamically generated by the application.
1754 It is not predefined by the %IAccessible2 specification.
1756 @param [in] maxExtendedStates
1757 This parameter is ignored. Refer to @ref _arrayConsideration
1758 "Special Consideration when using Arrays" for more details.
1759 @param [out] extendedStates
1760 This array is allocated by the server. The client must free it with CoTaskMemFree.
1761 @param [out] nExtendedStates
1762 The number of extended states returned; the size of the returned array.
1763 @retval S_OK
1764 @retval S_FALSE if there are no states, [out] values are NULL and 0 respectively
1766 [propget] HRESULT extendedStates
1768 [in] long maxExtendedStates,
1769 [out, size_is(,maxExtendedStates), length_is(,*nExtendedStates)] BSTR **extendedStates,
1770 [out, retval] long *nExtendedStates
1773 /** @brief Returns the localized extended states (array of strings).
1775 @param [in] maxLocalizedExtendedStates
1776 This parameter is ignored. Refer to @ref _arrayConsideration
1777 "Special Consideration when using Arrays" for more details.
1778 @param [out] localizedExtendedStates
1779 This array is allocated by the server. The client must free it with CoTaskMemFree.
1780 @param [out] nLocalizedExtendedStates
1781 The number of localized extended states returned; the size of the returned array.
1782 @retval S_OK
1783 @retval S_FALSE if there are no states, [out] values are NULL and 0 respectively
1785 [propget] HRESULT localizedExtendedStates
1787 [in] long maxLocalizedExtendedStates,
1788 [out, size_is(,maxLocalizedExtendedStates), length_is(,*nLocalizedExtendedStates)] BSTR **localizedExtendedStates,
1789 [out, retval] long *nLocalizedExtendedStates
1792 /** @brief Returns the unique ID.
1794 The uniqueID is an identifier for this object, is unique within the
1795 current window, and remains the same for the lifetime of the accessible
1796 object.
1798 The uniqueID is not related to:
1799 - the MSAA objectID which is used by the server to disambiguate between
1800 IAccessibles per HWND or
1801 - the MSAA childID which is used to disambiguate between children being
1802 managed by an IAccessible.
1804 This value is provided so the AT can have access to a unique runtime persistent
1805 identifier even when not handling an event for the object.
1807 An example of when this value is useful is if the AT wants to build a cache.
1808 The AT could cache the uniqueIDs in addition to other data being cached.
1809 When an event is fired the AT could map the uniqueID to its internal model.
1810 Thus, if there's a REORDER/SHOW/HIDE event the AT knows which part of the
1811 internal structure has been invalidated and can refetch just that part.
1813 This value can also be used by an AT to determine when the current control
1814 has changed. If the role is the same for two controls that are adjacent in
1815 the tab order, this can be used to detect the new control.
1817 Another use of this value by an AT is to identify when a grouping object has
1818 changed, e.g. when moving from a radio button in one group to a radio button in a
1819 different group.
1821 One means of implementing this would be to create a factory with a 32 bit number
1822 generator and a reuse pool. The number generator would emit numbers starting
1823 at 1. Each time an object's life cycle ended, its number would be saved into a
1824 reuse pool. The number generator would be used whenever the reuse pool was empty.
1826 Another way to create a unique ID is to generate it from a pointer value, e.g. an
1827 object's address. That would be unique because no two active objects can use the
1828 same allocated memory space.
1830 @param [out] uniqueID
1831 @retval S_OK
1833 [propget] HRESULT uniqueID
1835 [out, retval] long *uniqueID
1838 /** @brief Returns the window handle for the parent window which contains this object.
1840 This is the same window handle which will be passed for any events that occur on the
1841 object, but is cached in the accessible object for use when it would be helpful to
1842 access the window handle in cases where an event isn't fired on this object.
1844 A use case is when a screen reader is grabbing an entire web page on a page load.
1845 Without the availability of windowHandle, the AT would have to get the window handle
1846 by using WindowFromAccessibleObject on each IAccessible, which is slow because it's
1847 implemented by oleacc.dll as a loop which crawls up the ancestor chain and looks for
1848 a ROLE_WINDOW object, mapping that back to a window handle.
1850 @param [out] windowHandle
1851 @retval S_OK
1853 [propget] HRESULT windowHandle
1855 [out, retval] HWND *windowHandle
1858 /** @brief Returns the index of this object in its parent object.
1859 @param [out] indexInParent
1860 0 based; -1 indicates there is no parent; the upper bound is the value
1861 returned by the parent's IAccessible::get_accChildCount.
1862 @retval S_OK
1863 @retval S_FALSE if no parent, [out] value is -1
1865 [propget] HRESULT indexInParent
1867 [out, retval] long *indexInParent
1870 /** @brief Returns the IA2Locale of the accessible object.
1871 @param [out] locale
1872 @retval S_OK
1874 [propget] HRESULT locale
1876 [out, retval] IA2Locale *locale
1879 /** @brief Returns the attributes specific to this object, such as a cell's formula.
1880 @param [out] attributes
1881 @retval S_OK
1882 @retval S_FALSE returned if there is nothing to return, [out] value is NULL
1884 [propget] HRESULT attributes
1886 [out, retval] BSTR *attributes
1891 /*************************************************************************
1893 * File Name (Accessible2_2.idl)
1895 * IAccessible2 IDL Specification
1897 * Copyright (c) 2007, 2013 Linux Foundation
1898 * Copyright (c) 2006 IBM Corporation
1899 * Copyright (c) 2000, 2006 Sun Microsystems, Inc.
1900 * All rights reserved.
1903 * Redistribution and use in source and binary forms, with or without
1904 * modification, are permitted provided that the following conditions
1905 * are met:
1907 * 1. Redistributions of source code must retain the above copyright
1908 * notice, this list of conditions and the following disclaimer.
1910 * 2. Redistributions in binary form must reproduce the above
1911 * copyright notice, this list of conditions and the following
1912 * disclaimer in the documentation and/or other materials
1913 * provided with the distribution.
1915 * 3. Neither the name of the Linux Foundation nor the names of its
1916 * contributors may be used to endorse or promote products
1917 * derived from this software without specific prior written
1918 * permission.
1920 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
1921 * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
1922 * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
1923 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
1924 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
1925 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
1926 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
1927 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
1928 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
1929 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
1930 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
1931 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
1932 * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
1934 * This BSD License conforms to the Open Source Initiative "Simplified
1935 * BSD License" as published at:
1936 * http://www.opensource.org/licenses/bsd-license.php
1938 * IAccessible2 is a trademark of the Linux Foundation. The IAccessible2
1939 * mark may be used in accordance with the Linux Foundation Trademark
1940 * Policy to indicate compliance with the IAccessible2 specification.
1942 ************************************************************************/
1949 /** @brief This interface exposes the primary set of information about an
1950 IAccessible2 enabled accessible object.
1952 This interface must always be provided for objects that support some
1953 portion of the collection of the %IAccessible2 interfaces.
1955 Please refer to @ref _changingInterfaces "Changing between Accessible Interfaces"
1956 for special considerations related to use of the MSAA IAccessible interface and
1957 the set of %IAccessible2 interfaces.
1959 [object, uuid(6C9430E9-299D-4E6F-BD01-A82A1E88D3FF)]
1960 interface IAccessible2_2 : IAccessible2
1962 /** @brief Returns the attribute value of a specified attribute specific to this object.
1963 @param [in] name
1964 @param [out] attribute
1965 @retval S_OK
1966 @retval S_FALSE returned if there is nothing to return, [out] value is NULL.
1967 @retval E_INVALIDARG if bad [in] passed.
1968 @note The output value is a VARIANT. Typically it will be a VT_BSTR, but there
1969 are some cases where it will be a VT_I4 or VT_BOOL. Refer to the <a href=
1970 "http://www.linuxfoundation.org/collaborate/workgroups/accessibility/iaccessible2/objectattributesIAccessible2">
1971 Object Attributes specification</a> for more information.
1973 [propget] HRESULT attribute
1975 [in] BSTR name,
1976 [out, retval] VARIANT *attribute
1979 /** @brief Returns the deepest hypertext accessible in the subtree of this object, and the caret offset within it.
1980 @param [out] accessible
1981 @param [out] caretOffset
1982 @retval S_OK
1983 @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.
1985 [propget] HRESULT accessibleWithCaret
1987 [out] IUnknown **accessible,
1988 [out, retval] long *caretOffset
1991 /** @brief Returns relation targets for a specified target type.
1992 @param [in] type
1993 The requested @ref grpRelations "relation type".
1994 @param [in] maxTargets
1995 The number of targets requested. 0 indicates that all targets should be returned.
1996 @param [out] targets
1997 This array is allocated by the server. The client must free it with CoTaskMemFree.
1998 @param [out] nTargets
1999 The number of targets returned; the size of the returned array.
2000 @retval S_OK
2001 @retval S_FALSE if there are no targets, [out] values are NULL and 0 respectively.
2002 @retval E_INVALIDARG if bad [in] passed.
2004 [propget] HRESULT relationTargetsOfType
2006 [in] BSTR type,
2007 [in] long maxTargets,
2008 [out, size_is(,*nTargets)] IUnknown ***targets,
2009 [out, retval] long *nTargets
2014 /*************************************************************************
2016 * File Name (AccessibleComponent.idl)
2018 * IAccessible2 IDL Specification
2020 * Copyright (c) 2007, 2010 Linux Foundation
2021 * Copyright (c) 2006 IBM Corporation
2022 * Copyright (c) 2000, 2006 Sun Microsystems, Inc.
2023 * All rights reserved.
2026 * Redistribution and use in source and binary forms, with or without
2027 * modification, are permitted provided that the following conditions
2028 * are met:
2030 * 1. Redistributions of source code must retain the above copyright
2031 * notice, this list of conditions and the following disclaimer.
2033 * 2. Redistributions in binary form must reproduce the above
2034 * copyright notice, this list of conditions and the following
2035 * disclaimer in the documentation and/or other materials
2036 * provided with the distribution.
2038 * 3. Neither the name of the Linux Foundation nor the names of its
2039 * contributors may be used to endorse or promote products
2040 * derived from this software without specific prior written
2041 * permission.
2043 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
2044 * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
2045 * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
2046 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
2047 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
2048 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
2049 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
2050 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
2051 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
2052 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
2053 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
2054 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
2055 * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
2057 * This BSD License conforms to the Open Source Initiative "Simplified
2058 * BSD License" as published at:
2059 * http://www.opensource.org/licenses/bsd-license.php
2061 * IAccessible2 is a trademark of the Linux Foundation. The IAccessible2
2062 * mark may be used in accordance with the Linux Foundation Trademark
2063 * Policy to indicate compliance with the IAccessible2 specification.
2065 ************************************************************************/
2071 /** A value specifying a color in ARGB format, where each 8 bit color component
2072 specifies alpha, red, green, and blue respectively. The alpha value is optional.
2074 typedef long IA2Color;
2076 /** @brief This interface is implemented by any object that can be rendered
2077 on the screen.
2079 This interface provides the standard mechanism for an assistive technology
2080 to retrieve information concerning the graphical representation of an object.
2081 Coordinates used by the functions of this interface are specified in
2082 different coordinate systems. Their scale is the same and is equal to
2083 that of the screen coordinate system. In other words all coordinates
2084 are measured in pixels. They differ in their respective origin:
2085 <ul>
2086 <li>The screen coordinate system has its origin in the upper left
2087 corner of the current screen.</li>
2088 <li>The origin of the parent coordinate system is the upper left corner
2089 of the parent's bounding box. With no parent the screen coordinate
2090 system is used instead.</li>
2091 </ul>
2093 [object, uuid(1546D4B0-4C98-4bda-89AE-9A64748BDDE4)]
2094 interface IAccessibleComponent : IUnknown
2097 /** @brief Returns the location of the upper left corner of the object's
2098 bounding box relative to the immediate parent object.
2100 The coordinates of the bounding box are given relative to the parent's
2101 coordinate system. The coordinates of the returned position are relative
2102 to this object's parent or relative to the screen on which this object
2103 is rendered if it has no parent. If the object is not on any screen
2104 the returned position is (0,0).
2106 @param [out] x
2107 @param [out] y
2108 @retval S_OK
2110 [propget] HRESULT locationInParent
2112 [out] long *x,
2113 [out, retval] long *y
2116 /** @brief Returns the foreground color of this object.
2117 @param [out] foreground
2118 The returned color is the foreground color of this object or, if
2119 that is not supported, the default foreground color.
2120 @retval S_OK
2122 [propget] HRESULT foreground
2124 [out, retval] IA2Color *foreground
2127 /** @brief Returns the background color of this object.
2128 @param [out] background
2129 The returned color is the background color of this object or, if
2130 that is not supported, the default background color.
2131 @retval S_OK
2133 [propget] HRESULT background
2135 [out, retval] IA2Color *background
2138 /*************************************************************************
2140 * File Name (AccessibleValue.idl)
2142 * IAccessible2 IDL Specification
2144 * Copyright (c) 2007, 2010 Linux Foundation
2145 * Copyright (c) 2006 IBM Corporation
2146 * Copyright (c) 2000, 2006 Sun Microsystems, Inc.
2147 * All rights reserved.
2150 * Redistribution and use in source and binary forms, with or without
2151 * modification, are permitted provided that the following conditions
2152 * are met:
2154 * 1. Redistributions of source code must retain the above copyright
2155 * notice, this list of conditions and the following disclaimer.
2157 * 2. Redistributions in binary form must reproduce the above
2158 * copyright notice, this list of conditions and the following
2159 * disclaimer in the documentation and/or other materials
2160 * provided with the distribution.
2162 * 3. Neither the name of the Linux Foundation nor the names of its
2163 * contributors may be used to endorse or promote products
2164 * derived from this software without specific prior written
2165 * permission.
2167 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
2168 * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
2169 * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
2170 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
2171 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
2172 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
2173 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
2174 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
2175 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
2176 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
2177 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
2178 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
2179 * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
2181 * This BSD License conforms to the Open Source Initiative "Simplified
2182 * BSD License" as published at:
2183 * http://www.opensource.org/licenses/bsd-license.php
2185 * IAccessible2 is a trademark of the Linux Foundation. The IAccessible2
2186 * mark may be used in accordance with the Linux Foundation Trademark
2187 * Policy to indicate compliance with the IAccessible2 specification.
2189 ************************************************************************/
2195 /** @brief This interface gives access to a single numerical value.
2197 The %IAccessibleValue interface represents a single numerical value and should
2198 be implemented by any class that supports numerical value like progress bars
2199 and spin boxes. This interface lets you access the value and its upper and
2200 lower bounds.
2202 [object, uuid(35855B5B-C566-4fd0-A7B1-E65465600394)]
2203 interface IAccessibleValue : IUnknown
2206 /** @brief Returns the value of this object as a number.
2208 The exact return type is implementation dependent. Typical types are long and
2209 double.
2210 @param [out] currentValue
2211 Returns the current value represented by this object. See the section about
2212 @ref _variants "VARIANTs" for additional information.
2213 @retval S_OK
2214 @retval S_FALSE if there is nothing to return, [out] value is a VARIANT with vt = VT_EMPTY
2216 [propget] HRESULT currentValue
2218 [out, retval] VARIANT *currentValue
2221 /** @brief Sets the value of this object to the given number.
2223 The argument is clipped to the valid interval whose upper and lower
2224 bounds are returned by the methods IAccessibleValue::maximumValue and
2225 IAccessibleValue::minimumValue, i.e. if it is lower than the minimum
2226 value the new value will be the minimum and if it is greater than the
2227 maximum then the new value will be the maximum.
2229 @param [in] value
2230 The new value represented by this object. The set of admissible types for
2231 this argument is implementation dependent.
2232 @retval S_OK
2234 HRESULT setCurrentValue
2236 [in] VARIANT value
2239 /** @brief Returns the maximal value that can be represented by this object.
2241 The type of the returned value is implementation dependent. It does not have
2242 to be the same type as that returned by method IAccessibleValue::currentValue.
2244 @param [out] maximumValue
2245 Returns the maximal value in an implementation dependent type. If this object
2246 has no upper bound then an empty object is returned. See the section about
2247 @ref _variants "VARIANTs" for additional information.
2248 @retval S_OK
2249 @retval S_FALSE if there is nothing to return, [out] value is a VARIANT with vt = VT_EMPTY
2251 [propget] HRESULT maximumValue
2253 [out, retval] VARIANT *maximumValue
2256 /** @brief Returns the minimal value that can be represented by this object.
2258 The type of the returned value is implementation dependent. It does not have
2259 to be the same type as that returned by method IAccessibleValue::currentValue.
2261 @param [out] minimumValue
2262 Returns the minimal value in an implementation dependent type. If this object
2263 has no lower bound then an empty object is returned. See the section about
2264 @ref _variants "VARIANTs" for additional information.
2265 @retval S_OK
2266 @retval S_FALSE if there is nothing to return, [out] value is a VARIANT with vt = VT_EMPTY
2268 [propget] HRESULT minimumValue
2270 [out, retval] VARIANT *minimumValue
2274 /*************************************************************************
2276 * File Name (AccessibleText.idl)
2278 * IAccessible2 IDL Specification
2280 * Copyright (c) 2007, 2013 Linux Foundation
2281 * Copyright (c) 2006 IBM Corporation
2282 * Copyright (c) 2000, 2006 Sun Microsystems, Inc.
2283 * All rights reserved.
2286 * Redistribution and use in source and binary forms, with or without
2287 * modification, are permitted provided that the following conditions
2288 * are met:
2290 * 1. Redistributions of source code must retain the above copyright
2291 * notice, this list of conditions and the following disclaimer.
2293 * 2. Redistributions in binary form must reproduce the above
2294 * copyright notice, this list of conditions and the following
2295 * disclaimer in the documentation and/or other materials
2296 * provided with the distribution.
2298 * 3. Neither the name of the Linux Foundation nor the names of its
2299 * contributors may be used to endorse or promote products
2300 * derived from this software without specific prior written
2301 * permission.
2303 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
2304 * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
2305 * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
2306 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
2307 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
2308 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
2309 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
2310 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
2311 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
2312 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
2313 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
2314 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
2315 * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
2317 * This BSD License conforms to the Open Source Initiative "Simplified
2318 * BSD License" as published at:
2319 * http://www.opensource.org/licenses/bsd-license.php
2321 * IAccessible2 is a trademark of the Linux Foundation. The IAccessible2
2322 * mark may be used in accordance with the Linux Foundation Trademark
2323 * Policy to indicate compliance with the IAccessible2 specification.
2325 ************************************************************************/
2332 /** A structure containing a substring and the start and end offsets in the enclosing string.
2334 IAccessibleText::newText and IAccessibleText::oldText return this struct.
2336 typedef struct IA2TextSegment {
2337 BSTR text; ///< A copy of a segment of text taken from an enclosing paragraph.
2338 long start; ///< Index of the first character of the segment in the enclosing text.
2339 long end; ///< Index of the character following the last character of the segment in the enclosing text.
2340 } IA2TextSegment;
2342 /** This enum defines values which specify a text boundary type.
2344 IA2_TEXT_BOUNDARY_SENTENCE is optional. When a method doesn't implement this
2345 method it must return S_FALSE. Typically this feature would not be implemented
2346 by an application. However, if the application developer was not satisfied with
2347 how screen readers have handled the reading of sentences this boundary type
2348 could be implemented and screen readers could use the application's version of a
2349 sentence rather than the screen reader's.
2351 The rest of the boundary types must be supported.
2353 This enum is used in IAccessibleText::textBeforeOffset, IAccessibleText::textAtOffset,
2354 and IAccessibleText::textAfterOffset.
2357 enum IA2TextBoundaryType {
2358 IA2_TEXT_BOUNDARY_CHAR, /**< Typically, a single character is returned. In some cases more than
2359 one character is returned, for example, when a document contains field
2360 data such as a field containing a date, time, or footnote reference.
2361 In this case the caret can move over several characters in one movement
2362 of the caret. Note that after the caret moves, the caret offset changes
2363 by the number of characters in the field, e.g. by 8 characters in the
2364 following date: 03/26/07. */
2365 IA2_TEXT_BOUNDARY_WORD, /**< The range provided matches the range observed when the application
2366 processes the Ctrl + left arrow and Ctrl + right arrow key sequences.
2367 Typically this is from the start of one word to the start of the next, but
2368 various applications are inconsistent in the handling of the end of a line. */
2369 IA2_TEXT_BOUNDARY_SENTENCE, ///< Range is from start of one sentence to the start of another sentence.
2370 IA2_TEXT_BOUNDARY_PARAGRAPH, ///< Range is from start of one paragraph to the start of another paragraph.
2371 IA2_TEXT_BOUNDARY_LINE, /**< Range is from start of one line to the start of another line. This
2372 often means that an end-of-line character will appear at the end of the
2373 range. However in the case of some applications an end-of-line character
2374 indicates the end of a paragraph and the lines composing the paragraph,
2375 other than the last line, do not contain an end of line character. */
2376 IA2_TEXT_BOUNDARY_ALL ///< Using this value will cause all text to be returned.
2379 /** @brief This interface gives read-only access to text.
2381 The %IAccessibleText interface should be implemented by all components
2382 that present textual information on the display like buttons,
2383 text entry fields, or text portions of the document window. The interface
2384 provides access to the text's content, attributes, and spatial location.
2385 However, text can not be modified with this interface. That is the task
2386 of the IAccessibleEditableText interface.
2388 The text length, i.e. the number of characters in the text, is
2389 returned by IAccessibleText::nCharacters. All methods that operate
2390 on particular characters (e.g. IAccessibleText::textAtOffset) use character
2391 indices from 0 to length-1. All methods that operate on character positions
2392 (e.g. IAccessibleText::text) use indices from 0 to length.
2394 Please note that accessible text does not necessarily support selection.
2395 In this case it should behave as if there where no selection. An empty
2396 selection is used for example to express the current cursor position.
2398 Refer to @ref _specialOffsets
2399 "Special Offsets for use in the IAccessibleText and IAccessibleEditableText Methods"
2400 for information about special offsets that can be used in %IAccessibleText methods.
2402 E_FAIL is returned in the following cases
2403 @li endOffset < startOffset
2404 @li endoffset > length
2406 [object, uuid(24FD2FFB-3AAD-4a08-8335-A3AD89C0FB4B)]
2407 interface IAccessibleText : IUnknown
2410 /** @brief Adds a text selection
2411 @param [in] startOffset
2412 Starting offset ( 0 based).
2413 @param [in] endOffset
2414 Offset of first character after new selection (0 based).
2415 @retval S_OK
2416 @retval E_INVALIDARG if bad [in] passed
2417 @note Refer to @ref _specialOffsets
2418 "Special Offsets for use in the IAccessibleText and IAccessibleEditableText Methods"
2419 for information about special offsets that can be used in %IAccessibleText methods.
2421 HRESULT addSelection
2423 [in] long startOffset,
2424 [in] long endOffset
2427 /** @brief Returns text attributes.
2428 @param [in] offset
2429 Text offset (0 based). Refer to @ref _specialOffsets
2430 "Special Offsets for use in the IAccessibleText and IAccessibleEditableText Methods"
2431 for information about special offsets that can be used in %IAccessibleText methods.
2432 @param [out] startOffset
2433 The starting offset of the character range over which all text attributes match
2434 those of offset. (0 based)
2435 @param [out] endOffset
2436 The offset of the first character past the character range over which all text
2437 attributes match those of offset. (0 based)
2438 @param [out] textAttributes
2439 A string of attributes describing the text. The attributes are described in the
2440 <a href="http://www.linuxfoundation.org/en/Accessibility/IAccessible2/TextAttributes">
2441 text attributes specification</a> on the %IAccessible2 web site.
2442 @retval S_OK
2443 @retval S_FALSE if there is nothing to return, [out] values are 0s and NULL respectively
2444 @retval E_INVALIDARG if bad [in] passed
2446 [propget] HRESULT attributes
2448 [in] long offset,
2449 [out] long *startOffset,
2450 [out] long *endOffset,
2451 [out, retval] BSTR *textAttributes
2454 /** @brief Returns the position of the caret.
2456 Returns the 0-based offset of the caret within the text. If the text is
2457 implemented as a tree of text objects with embed characters in higher levels
2458 representing substrings of child text objects and the caret is in one of the
2459 child text objects, then the offset in the higher level text object would be
2460 at the embed character representing child text object that contains the caret.
2462 For example, if the string "one two three" is implemented as a two text objects,
2463 with a top level text object containing an embed character "one ? three" and a
2464 child text object containing "two" and if the caret is in the descendant object
2465 just before the 'o' in "two", then:
2466 <ul>
2467 <li>the caretOffset for the "one ? three" object would be 4, matching the embed character</li>
2468 <li>the caretOffset for "two" would be 2, matching the "o"</li>
2469 </ul>
2470 The caret position/offset is that of the character logically following it, e.g.
2471 to the right of it in a left to right language, or to the left of it in a right
2472 to left language.
2473 @param [out] offset
2474 The returned offset is relative to the text represented by this object.
2475 @retval S_OK
2476 @retval S_FALSE if the caret is not currently active on this object, i.e. the
2477 caret is located on some other object. The returned offset value will be -1.
2478 @note S_FALSE (and an offset of -1) will not be returned if the caret is somewhere
2479 in the text object or one of its descendants.
2481 [propget] HRESULT caretOffset
2483 [out, retval] long *offset
2487 /** @brief Returns the bounding box of the specified position.
2489 The virtual character after the last character of the represented
2490 text, i.e. the one at position length is a special case. It represents the
2491 current input position and will therefore typically be queried by AT more
2492 often than other positions. Because it does not represent an existing character
2493 its bounding box is defined in relation to preceding characters. It should be
2494 roughly equivalent to the bounding box of some character when inserted at the
2495 end of the text. Its height typically being the maximal height of all the
2496 characters in the text or the height of the preceding character, its width being
2497 at least one pixel so that the bounding box is not degenerate.
2499 Note that the index 'length' is not always valid. Whether it is or not is
2500 implementation dependent. It typically is when text is editable or otherwise
2501 when on the screen the caret can be placed behind the text. You can be sure
2502 that the index is valid after you have received a ::IA2_EVENT_TEXT_CARET_MOVED
2503 event for this index.
2504 @param [in] offset
2505 Index of the character for which to return its bounding box. The valid range
2506 is 0..length. Refer to @ref _specialOffsets
2507 "Special Offsets for use in the IAccessibleText and IAccessibleEditableText Methods"
2508 for information about special offsets that can be used in %IAccessibleText methods.
2509 @param [in] coordType
2510 Specifies if the coordinates are relative to the screen or to the parent window.
2511 @param [out] x
2512 X coordinate of the top left corner of the bounding box of the referenced character.
2513 @param [out] y
2514 Y coordinate of the top left corner of the bounding box of the referenced character.
2515 @param [out] width
2516 Width of the bounding box of the referenced character.
2517 @param [out] height
2518 Height of the bounding box of the referenced character.
2519 @retval S_OK
2520 @retval E_INVALIDARG if bad [in] passed
2522 [propget] HRESULT characterExtents
2524 [in] long offset,
2525 [in] enum IA2CoordinateType coordType,
2526 [out] long *x,
2527 [out] long *y,
2528 [out] long *width,
2529 [out, retval] long *height
2533 /** @brief Returns the number of active non-contiguous selections
2534 @param [out] nSelections
2535 @retval S_OK
2537 [propget] HRESULT nSelections
2539 [out, retval] long *nSelections
2542 /** @brief Returns the text position for the specified screen position.
2544 Given a point return the zero-based index of the character under that
2545 point. The same functionality could be achieved by using the bounding
2546 boxes for each character as returned by IAccessibleText::characterExtents.
2547 The method IAccessibleText::offsetAtPoint, however, can be implemented
2548 more efficiently.
2550 @param [in] x
2551 The position's x value for which to look up the index of the character that
2552 is rendered on to the display at that point.
2553 @param [in] y
2554 The position's y value for which to look up the index of the character that
2555 is rendered on to the display at that point.
2556 @param [in] coordType
2557 Screen coordinates or window coordinates.
2558 @param [out] offset
2559 Index of the character under the given point or -1 if the point
2560 is invalid or there is no character under the point.
2561 @retval S_OK
2562 @retval S_FALSE if nothing to return, [out] value is -1
2564 @retval E_INVALIDARG if bad [in] passed
2566 [propget] HRESULT offsetAtPoint
2568 [in] long x,
2569 [in] long y,
2570 [in] enum IA2CoordinateType coordType,
2571 [out, retval] long *offset
2574 /** @brief Returns the character offsets of Nth active text selection
2576 Returns the 0-based starting and ending offsets of the Nth selection. If the
2577 text is implemented as a tree of text objects with embed characters in higher
2578 levels representing substrings of child text objects, consider the following.
2579 If the starting selection offset is in one of the child text objects, then the
2580 starting offset in the higher level text object would be at the embed character
2581 representing the child text object that contains the starting selection offset.
2582 If the ending selection offset is in one of the child text objects, then the
2583 ending offset in the higher level text object would be just after the embed
2584 character representing the child text object that contains the ending selection
2585 offset.
2587 For example, if the string "one two three" is implemented as a two text objects,
2588 with a top level text object containing an embed character "one ? three" and a
2589 child text object containing "two" and if the selection is the string "two" then:
2590 <ul>
2591 <li>the startOffset for the "one ? three" object would be 4, matching the embed character and the endOffset would be 5.</li>
2592 <li>the startOffset for the "two" object would be 0, and the endOffset would be 3</li>
2593 </ul>
2594 Selection offsets are that of the character logically following it, e.g.
2595 to the right of it in a left to right language or to the left of it in a right to left language.
2596 @param [in] selectionIndex
2597 Index of selection (0 based).
2598 @param [out] startOffset
2599 0 based offset of first selected character
2600 @param [out] endOffset
2601 0 based offset of one past the last selected character.
2602 @retval S_OK
2603 @retval E_INVALIDARG if bad [in] passed
2605 [propget] HRESULT selection
2607 [in] long selectionIndex,
2608 [out] long *startOffset,
2609 [out, retval] long *endOffset
2612 /** @brief Returns the substring between the two given indices.
2614 The substring starts with the character at startOffset (inclusive) and up to
2615 the character at endOffset (exclusive), if startOffset is less or equal
2616 endOffset. If endOffset is lower than startOffset, the result is the same
2617 as a call with the two arguments being exchanged.
2619 The whole text can be requested by passing the indices zero and
2620 IAccessibleText::nCharacters. If both indices have the same value, an empty
2621 string is returned.
2622 @param [in] startOffset
2623 Index of the first character to include in the returned string. The valid range
2624 is 0..length.
2625 @param [in] endOffset
2626 Index of the last character to exclude in the returned string. The valid range
2627 is 0..length.
2628 @param [out] text
2629 Returns the substring starting with the character at startOffset (inclusive)
2630 and up to the character at endOffset (exclusive), if startOffset is less than
2631 or equal to endOffset.
2632 @retval S_OK
2633 @retval E_INVALIDARG if bad [in] passed
2634 @note
2635 @li The returned string may be longer than endOffset-startOffset bytes if text
2636 contains multi-byte characters.
2637 @li Refer to @ref _specialOffsets
2638 "Special Offsets for use in the IAccessibleText and IAccessibleEditableText Methods"
2639 for information about special offsets that can be used in %IAccessibleText methods.
2641 [propget] HRESULT text
2643 [in] long startOffset,
2644 [in] long endOffset,
2645 [out, retval] BSTR *text
2648 /** @brief Returns a text portion before the given position.
2650 Returns the substring of the specified text type that is located before the
2651 given character and does not include it. The result of this method should be
2652 same as a result for IAccessibleText::textAtOffset with a suitably decreased
2653 index value.
2655 For example, if text type is ::IA2_TEXT_BOUNDARY_WORD, then the complete
2656 word that is closest to and located before offset is returned.
2658 If the index is valid, but no text is found, S_FALSE is returned along without
2659 values of 0, 0, and a NULL pointer. This would happen for boundary types other
2660 than character when the text consists entirely of whitespace.
2662 @param [in] offset
2663 Index of the character for which to return the text part before it. The index
2664 character will not be part of the returned string. The valid range is 0..length.
2665 Refer to @ref _specialOffsets
2666 "Special Offsets for use in the IAccessibleText and IAccessibleEditableText Methods"
2667 for information about special offsets that can be used in %IAccessibleText methods.
2668 @param [in] boundaryType
2669 The type of the text portion to return. See ::IA2TextBoundaryType for the
2670 complete list.
2671 @param [out] startOffset
2672 0 based offset of first character.
2673 @param [out] endOffset
2674 0 based offset of one past the last character.
2675 @param [out] text
2676 Returns the requested text portion. This portion may be empty or invalid when
2677 no appropriate text portion is found or text type is invalid.
2678 @retval S_OK
2679 @retval S_FALSE if the requested boundary type is not implemented, such as
2680 ::IA2_TEXT_BOUNDARY_SENTENCE, or if there is nothing to return;
2681 [out] values are 0s and NULL respectively
2682 @retval E_INVALIDARG if bad [in] passed
2684 [propget] HRESULT textBeforeOffset
2686 [in] long offset,
2687 [in] enum IA2TextBoundaryType boundaryType,
2688 [out] long *startOffset,
2689 [out] long *endOffset,
2690 [out, retval] BSTR *text
2693 /** @brief Returns a text portion after the given position.
2695 Returns the substring of the specified text type that is located after the
2696 given character and does not include it. The result of this method should be
2697 same as a result for IAccessibleText::textAtOffset with a suitably increased
2698 index value.
2700 For example, if text type is ::IA2_TEXT_BOUNDARY_WORD, then the complete
2701 word that is closest to and located after offset is returned.
2703 If the index is valid, but no text is found, S_FALSE is returned along without
2704 values of 0, 0, and a NULL pointer. This would happen for boundary types other
2705 than character when the text consists entirely of whitespace.
2707 @param [in] offset
2708 Index of the character for which to return the text part after it. The index
2709 character will not be part of the returned string. The valid range is 0..length.
2710 Refer to @ref _specialOffsets
2711 "Special Offsets for use in the IAccessibleText and IAccessibleEditableText Methods"
2712 for information about special offsets that can be used in %IAccessibleText methods.
2713 @param [in] boundaryType
2714 The type of the text portion to return. See ::IA2TextBoundaryType for the complete
2715 list.
2716 @param [out] startOffset
2717 0 based offset of first character.
2718 @param [out] endOffset
2719 0 based offset of one past the last character.
2720 @param [out] text
2721 Returns the requested text portion. This portion may be empty or invalid when
2722 no appropriate text portion is found or text type is invalid.
2723 @retval S_OK
2724 @retval S_FALSE if the requested boundary type is not implemented, such as
2725 ::IA2_TEXT_BOUNDARY_SENTENCE, or if there is nothing to return;
2726 [out] values are 0s and NULL respectively
2727 @retval E_INVALIDARG if bad [in] passed
2729 [propget] HRESULT textAfterOffset
2731 [in] long offset,
2732 [in] enum IA2TextBoundaryType boundaryType,
2733 [out] long *startOffset,
2734 [out] long *endOffset,
2735 [out, retval] BSTR *text
2738 /** @brief Returns a text portion that spans the given position.
2740 Returns the substring defined by the specified boundary type at the specified
2741 offset. Refer to IA2TextBoundaryType for more details.
2743 For the word boundary type the returned string will contain the word at the
2744 offset if the offset is inside a word and will contain the word before the
2745 offset if the offset is not inside a word. All offsets from the first to the
2746 last characters of a word are considered inside the word. Boundary types of
2747 sentence and paragraph should exhibit similar behavior.
2749 If the index is valid, but no text is found, S_FALSE is returned along without
2750 values of 0, 0, and a NULL pointer. This would happen for boundary types other
2751 than character when the text consists entirely of whitespace.
2753 @param [in] offset
2754 Index of the character for which to return the text part it belongs to. The valid
2755 range is 0..length.
2756 Refer to @ref _specialOffsets
2757 "Special Offsets for use in the IAccessibleText and IAccessibleEditableText Methods"
2758 for information about special offsets that can be used in %IAccessibleText methods.
2759 @param [in] boundaryType
2760 The type of the text portion to return. See ::IA2TextBoundaryType for the complete
2761 list.
2762 @param [out] startOffset
2763 0 based offset of first character.
2764 @param [out] endOffset
2765 0 based offset of one past the last character.
2766 @param [out] text
2767 Returns the requested text portion. This portion may be empty or invalid when
2768 no appropriate text portion is found or text type is invalid.
2769 @retval S_OK
2770 @retval S_FALSE if the requested boundary type is not implemented, such as
2771 ::IA2_TEXT_BOUNDARY_SENTENCE, or if there is nothing to return;
2772 [out] values are 0s and NULL respectively
2773 @retval E_INVALIDARG if bad [in] passed
2775 [propget] HRESULT textAtOffset
2777 [in] long offset,
2778 [in] enum IA2TextBoundaryType boundaryType,
2779 [out] long *startOffset,
2780 [out] long *endOffset,
2781 [out, retval] BSTR *text
2784 /** @brief Unselects a range of text.
2785 @param [in] selectionIndex
2786 Index of selection to remove (0 based).
2787 @retval S_OK
2788 @retval E_INVALIDARG if bad [in] passed
2790 HRESULT removeSelection
2792 [in] long selectionIndex
2795 /** @brief Sets the position of the caret.
2797 The caret position/offset is that of the character logically following it,
2798 e.g. to the right of it in a left to right language.
2800 Setting the caret position may or may not alter the current selection. A
2801 change of the selection is notified to the accessibility event listeners with
2802 an ::IA2_EVENT_TEXT_SELECTION_CHANGED event.
2804 When the new caret position differs from the old one (which, of course, is the
2805 standard case) this is notified to the accessibility event listeners with an
2806 ::IA2_EVENT_TEXT_CARET_MOVED event.
2807 @param [in] offset
2808 The new index of the caret. This caret is actually placed to the left side of
2809 the character with that index. An index of 0 places the caret so that the next
2810 insertion goes before the first character. An index of IAccessibleText::nCharacters
2811 leads to insertion after the last character. Refer to @ref _specialOffsets
2812 "Special Offsets for use in the IAccessibleText and IAccessibleEditableText Methods"
2813 for information about special offsets that can be used in %IAccessibleText methods.
2814 @retval S_OK
2815 @retval E_FAIL if the caret cannot be set
2816 @retval E_INVALIDARG if bad [in] passed
2818 HRESULT setCaretOffset
2820 [in] long offset
2823 /** @brief Changes the bounds of an existing selection.
2824 @param [in] selectionIndex
2825 Index of selection to change (0 based)
2826 @param [in] startOffset
2827 New starting offset (0 based)
2828 @param [in] endOffset
2829 New ending offset (0 based) - the offset of the character just past the last character of the selection.
2830 @retval S_OK
2831 @retval E_INVALIDARG if bad [in] passed
2832 @note Refer to @ref _specialOffsets
2833 "Special Offsets for use in the IAccessibleText and IAccessibleEditableText Methods"
2834 for information about special offsets that can be used in %IAccessibleText methods.
2836 HRESULT setSelection
2838 [in] long selectionIndex,
2839 [in] long startOffset,
2840 [in] long endOffset
2843 /** @brief Returns total number of characters.
2845 Note that this may be different than the total number of bytes required to store the
2846 text, if the text contains multi-byte characters.
2847 @param [out] nCharacters
2848 @retval S_OK
2850 [propget] HRESULT nCharacters
2852 [out, retval] long *nCharacters
2855 /** @brief Makes a specific part of string visible on screen.
2856 @param [in] startIndex
2857 0 based character offset.
2858 @param [in] endIndex
2859 0 based character offset - the offset of the character just past the last character of the string.
2860 @param [in] scrollType
2861 Defines where the object should be placed on the screen.
2862 @retval S_OK
2863 @retval E_INVALIDARG if bad [in] passed
2864 @note Refer to @ref _specialOffsets
2865 "Special Offsets for use in the IAccessibleText and IAccessibleEditableText Methods"
2866 for information about special offsets that can be used in %IAccessibleText methods.
2868 HRESULT scrollSubstringTo
2870 [in] long startIndex,
2871 [in] long endIndex,
2872 [in] enum IA2ScrollType scrollType
2875 /** @brief Moves the top left of a substring to a specified location.
2877 @param [in] startIndex
2878 0 based character offset.
2879 @param [in] endIndex
2880 0 based character offset - the offset of the character just past the last character of the string.
2881 @param [in] coordinateType
2882 Specifies whether the coordinates are relative to the screen or the parent object.
2883 @param [in] x
2884 Defines the x coordinate.
2885 @param [in] y
2886 Defines the y coordinate.
2887 @retval S_OK
2888 @retval S_FALSE if the object is already at the specified location.
2889 @retval E_INVALIDARG if bad [in] passed
2890 @note Refer to @ref _specialOffsets
2891 "Special Offsets for use in the IAccessibleText and IAccessibleEditableText Methods"
2892 for information about special offsets that can be used in %IAccessibleText methods.
2894 HRESULT scrollSubstringToPoint
2896 [in] long startIndex,
2897 [in] long endIndex,
2898 [in] enum IA2CoordinateType coordinateType,
2899 [in] long x,
2900 [in] long y
2903 /** @brief Returns any inserted text.
2905 Provided for use by the ::IA2_EVENT_TEXT_INSERTED and ::IA2_EVENT_TEXT_UPDATED
2906 event handlers.
2908 This data is only guaranteed to be valid while the thread notifying the event
2909 continues. Once the handler has returned, the validity of the data depends on
2910 how the server manages the life cycle of its objects. Also, note that the server
2911 may have different life cycle management strategies for controls depending on
2912 whether or not a control manages its children. Lists, trees, and tables can have
2913 a large number of children and thus it's possible that the child objects for those
2914 controls would only be created as needed. Servers should document their life cycle
2915 strategy as this will be of interest to assistive technology or script engines
2916 accessing data out of process or from other threads. Servers only need to save the
2917 last inserted block of text and a scope of the entire application is adequate.
2919 @param [out] newText
2920 The text that was just inserted.
2921 @retval S_OK
2922 @retval S_FALSE If there is nothing to return, the values of IA2TextSegment
2923 struct are set as follows: text = NULL, start = 0, end = 0.
2926 [propget] HRESULT newText
2928 [out, retval] IA2TextSegment *newText
2931 /** @brief Returns any removed text.
2933 Provided for use by the IA2_EVENT_TEXT_REMOVED/UPDATED event handlers.
2935 This data is only guaranteed to be valid while the thread notifying the event
2936 continues. Once the handler has returned, the validity of the data depends on
2937 how the server manages the life cycle of its objects. Also, note that the server
2938 may have different life cycle management strategies for controls depending on
2939 whether or not a control manages its children. Lists, trees, and tables can have
2940 a large number of children and thus it's possible that the child objects for those
2941 controls would only be created as needed. Servers should document their life cycle
2942 strategy as this will be of interest to assistive technology or script engines
2943 accessing data out of process or from other threads. Servers only need to save the
2944 last removed block of text and a scope of the entire application is adequate.
2946 @param [out] oldText
2947 The text that was just removed.
2948 @retval S_OK
2949 @retval S_FALSE If there is nothing to return, the values of IA2TextSegment
2950 struct are set as follows: text = NULL, start = 0, end = 0.
2952 [propget] HRESULT oldText
2954 [out, retval] IA2TextSegment *oldText
2958 /*************************************************************************
2960 * File Name (AccessibleText2.idl)
2962 * IAccessible2 IDL Specification
2964 * Copyright (c) 2007, 2013 Linux Foundation
2965 * Copyright (c) 2006 IBM Corporation
2966 * Copyright (c) 2000, 2006 Sun Microsystems, Inc.
2967 * All rights reserved.
2970 * Redistribution and use in source and binary forms, with or without
2971 * modification, are permitted provided that the following conditions
2972 * are met:
2974 * 1. Redistributions of source code must retain the above copyright
2975 * notice, this list of conditions and the following disclaimer.
2977 * 2. Redistributions in binary form must reproduce the above
2978 * copyright notice, this list of conditions and the following
2979 * disclaimer in the documentation and/or other materials
2980 * provided with the distribution.
2982 * 3. Neither the name of the Linux Foundation nor the names of its
2983 * contributors may be used to endorse or promote products
2984 * derived from this software without specific prior written
2985 * permission.
2987 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
2988 * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
2989 * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
2990 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
2991 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
2992 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
2993 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
2994 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
2995 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
2996 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
2997 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
2998 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
2999 * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
3001 * This BSD License conforms to the Open Source Initiative "Simplified
3002 * BSD License" as published at:
3003 * http://www.opensource.org/licenses/bsd-license.php
3005 * IAccessible2 is a trademark of the Linux Foundation. The IAccessible2
3006 * mark may be used in accordance with the Linux Foundation Trademark
3007 * Policy to indicate compliance with the IAccessible2 specification.
3009 ************************************************************************/
3017 /** @brief This interface gives read-only access to text.
3019 The %IAccessibleText2 interface extends the functionality of the
3020 %IAccessibleText interface.
3022 [object, uuid(9690A9CC-5C80-4DF5-852E-2D5AE4189A54)]
3023 interface IAccessibleText2 : IAccessibleText
3026 /** @brief Returns the range and of the specified set of attributes.
3028 Return the range (start and end offsets) and text attributes that correspond
3029 to the given attributes filter at the given offset.
3031 @param [in] offset
3032 The offset at which to search for the attributes specified in the filter.
3033 @param [in] filter
3034 The requested attribute names. The filter format is "attribute1, attribute2".
3035 @param [out] startOffset
3036 The starting (0-based) offset of the text containing the specified attributes.
3037 @param [out] endOffset
3038 The (0-based) offset one past the last character of the text containing the
3039 specified attributes.
3040 @param [out] attributeValues
3041 The values of the requested attributes.
3042 @retval S_OK
3043 @retval S_FALSE if nothing to return, [out] values are -1, -1, NULL respectively.
3044 @retval E_INVALIDARG if bad [in] passed.
3046 [propget] HRESULT attributeRange
3048 [in] long offset,
3049 [in] BSTR filter,
3050 [out] long *startOffset,
3051 [out] long *endOffset,
3052 [out, retval] BSTR *attributeValues
3056 /*************************************************************************
3058 * File Name (AccessibleEditableText.idl)
3060 * IAccessible2 IDL Specification
3062 * Copyright (c) 2007, 2012 Linux Foundation
3063 * Copyright (c) 2006 IBM Corporation
3064 * Copyright (c) 2000, 2006 Sun Microsystems, Inc.
3065 * All rights reserved.
3068 * Redistribution and use in source and binary forms, with or without
3069 * modification, are permitted provided that the following conditions
3070 * are met:
3072 * 1. Redistributions of source code must retain the above copyright
3073 * notice, this list of conditions and the following disclaimer.
3075 * 2. Redistributions in binary form must reproduce the above
3076 * copyright notice, this list of conditions and the following
3077 * disclaimer in the documentation and/or other materials
3078 * provided with the distribution.
3080 * 3. Neither the name of the Linux Foundation nor the names of its
3081 * contributors may be used to endorse or promote products
3082 * derived from this software without specific prior written
3083 * permission.
3085 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
3086 * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
3087 * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
3088 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
3089 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
3090 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
3091 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
3092 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
3093 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
3094 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
3095 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
3096 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
3097 * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
3099 * This BSD License conforms to the Open Source Initiative "Simplified
3100 * BSD License" as published at:
3101 * http://www.opensource.org/licenses/bsd-license.php
3103 * IAccessible2 is a trademark of the Linux Foundation. The IAccessible2
3104 * mark may be used in accordance with the Linux Foundation Trademark
3105 * Policy to indicate compliance with the IAccessible2 specification.
3107 ************************************************************************/
3114 /** @brief This interface provides clipboard capability to text objects.
3116 This interface is typically used in conjunction with the IAccessibleText
3117 interface and complements that interface with the additional capability of
3118 clipboard operations. Note that even a read only text object can support
3119 the copy capability so this interface is not limited to editable objects.
3121 The substrings used with this interface are specified as follows:
3122 If startOffset is less than endOffset, the substring starts with the
3123 character at startOffset and ends with the character just before endOffset.
3124 If endOffset is lower than startOffset, the result is the same as a call
3125 with the two arguments exchanged. The whole text can be defined by passing
3126 the indices zero and IAccessibleText::nCharacters. If both indices have the
3127 same value, an empty string is defined.
3129 Refer to the @ref _specialOffsets
3130 "Special Offsets for use in the IAccessibleText and IAccessibleEditableText Methods"
3131 for information about a special offset constant that can be used in %IAccessibleEditableText methods.
3133 [object, uuid(A59AA09A-7011-4b65-939D-32B1FB5547E3)]
3134 interface IAccessibleEditableText : IUnknown
3137 /** @brief Copies the text range into the clipboard.
3139 The selection is set to the specified offsets and then selection is copied into
3140 the system clipboard.
3142 @param [in] startOffset
3143 Start index of the text to moved into the clipboard.
3144 The valid range is 0..length.
3145 @param [in] endOffset
3146 End index of the text to moved into the clipboard.
3147 The valid range is 0..length.
3148 @retval S_OK
3149 @retval E_INVALIDARG if bad [in] passed
3150 @note Refer to @ref _specialOffsets
3151 "Special Offsets for use in the IAccessibleText and IAccessibleEditableText Methods"
3152 for information about special offsets that can be used in %IAccessibleEditableText
3153 methods.
3154 @deprecated This function is available via the application's GUI.
3156 HRESULT copyText
3158 [in] long startOffset,
3159 [in] long endOffset
3162 /** @brief Deletes a range of text.
3164 The text between and including the two given indices is deleted
3165 from the text represented by this object.
3167 @param [in] startOffset
3168 Start index of the text to be deleted.
3169 The valid range is 0..length.
3170 @param [in] endOffset
3171 End index of the text to be deleted.
3172 The valid range is 0..length.
3173 @retval S_OK
3174 @retval E_INVALIDARG if bad [in] passed
3175 @note Refer to @ref _specialOffsets
3176 "Special Offsets for use in the IAccessibleText and IAccessibleEditableText Methods"
3177 for information about special offsets that can be used in %IAccessibleEditableText
3178 methods.
3180 HRESULT deleteText
3182 [in] long startOffset,
3183 [in] long endOffset
3186 /** @brief Inserts text at the specified position.
3188 The specified string is inserted at the given index into the text
3189 represented by this object.
3191 @param [in] offset
3192 Index at which to insert the text.
3193 The valid range is 0..length.
3194 Refer to @ref _specialOffsets
3195 "Special Offsets for use in the IAccessibleText and IAccessibleEditableText Methods"
3196 for information about special offsets that can be used in %IAccessibleEditableText
3197 methods.
3198 @param [in] text
3199 Text that is inserted.
3200 @retval S_OK
3201 @retval E_INVALIDARG if bad [in] passed
3203 HRESULT insertText
3205 [in] long offset,
3206 [in] BSTR *text
3209 /** @brief Deletes a range of text and copies it to the clipboard.
3211 The selection is set to the specified offsets, the selection is then copied into
3212 the system clipboard, and then the selection is deleted.
3214 @param [in] startOffset
3215 Start index of the text to be deleted.
3216 The valid range is 0..length.
3217 @param [in] endOffset
3218 End index of the text to be deleted.
3219 The valid range is 0..length.
3220 @retval S_OK
3221 @retval E_INVALIDARG if bad [in] passed
3222 @note Refer to @ref _specialOffsets
3223 "Special Offsets for use in the IAccessibleText and IAccessibleEditableText Methods"
3224 for information about special offsets that can be used in %IAccessibleEditableText
3225 methods.
3226 @deprecated This function is available via the application's GUI.
3228 HRESULT cutText
3230 [in] long startOffset,
3231 [in] long endOffset
3234 /** @brief Pastes content from the clipboard.
3236 Any existing selection is removed, the clipboard content is then pasted into
3237 this object's text at the given offset. This method is similar to the insertText
3238 method. If the index is not valid the system clipboard content is not inserted. The
3239 behavior is the same as when Ctrl+V is used, i.e. the pasted contents are not
3240 necessarily plain text.
3242 @param [in] offset
3243 Index at which to insert the content from the system clipboard into
3244 the text represented by this object.
3245 The valid range is 0..length.
3246 Refer to @ref _specialOffsets
3247 "Special Offsets for use in the IAccessibleText and IAccessibleEditableText Methods"
3248 for information about special offsets that can be used in %IAccessibleEditableText
3249 methods.
3250 @retval S_OK
3251 @retval E_INVALIDARG if bad [in] passed
3252 @deprecated This function is available via the application's GUI.
3254 HRESULT pasteText
3256 [in] long offset
3259 /** @brief Replaces text.
3261 The text between the two given indices is replaced by the specified
3262 replacement string. This method is equivalent to calling first
3263 IAccessibleEditableText::deleteText with the two indices and then
3264 calling IAccessibleEditableText::insertText with the replacement text
3265 at the start index.
3267 @param [in] startOffset
3268 Start index of the text to be replaced.
3269 The valid range is 0..length.
3270 @param [in] endOffset
3271 End index of the text to be replaced.
3272 The valid range is 0..length.
3273 @param [in] text
3274 The Text that replaces the text between the given indices.
3275 @retval S_OK
3276 @retval E_INVALIDARG if bad [in] passed
3277 @note Refer to @ref _specialOffsets
3278 "Special Offsets for use in the IAccessibleText and IAccessibleEditableText Methods"
3279 for information about special offsets that can be used in %IAccessibleEditableText
3280 methods.
3282 HRESULT replaceText
3284 [in] long startOffset,
3285 [in] long endOffset,
3286 [in] BSTR *text
3289 /** @brief Replaces the attributes of a text range by the given set of attributes.
3291 Sets the attributes for the text between the two given indices. The old
3292 attributes are replaced by the new list of attributes.
3294 @param [in] startOffset
3295 Start index of the text whose attributes are modified.
3296 The valid range is 0..length.
3297 @param [in] endOffset
3298 End index of the text whose attributes are modified.
3299 The valid range is 0..length.
3300 @param [in] attributes
3301 Set of attributes that replaces the old list of attributes of
3302 the specified text portion.
3303 @retval S_OK
3304 @retval E_INVALIDARG if bad [in] passed
3305 @note Refer to @ref _specialOffsets
3306 "Special Offsets for use in the IAccessibleText and IAccessibleEditableText Methods"
3307 for information about special offsets that can be used in %IAccessibleEditableText
3308 methods.
3310 HRESULT setAttributes
3312 [in] long startOffset,
3313 [in] long endOffset,
3314 [in] BSTR *attributes
3318 /*************************************************************************
3320 * File Name (AccessibleHyperlink.idl)
3322 * IAccessible2 IDL Specification
3324 * Copyright (c) 2007, 2010 Linux Foundation
3325 * Copyright (c) 2006 IBM Corporation
3326 * Copyright (c) 2000, 2006 Sun Microsystems, Inc.
3327 * All rights reserved.
3330 * Redistribution and use in source and binary forms, with or without
3331 * modification, are permitted provided that the following conditions
3332 * are met:
3334 * 1. Redistributions of source code must retain the above copyright
3335 * notice, this list of conditions and the following disclaimer.
3337 * 2. Redistributions in binary form must reproduce the above
3338 * copyright notice, this list of conditions and the following
3339 * disclaimer in the documentation and/or other materials
3340 * provided with the distribution.
3342 * 3. Neither the name of the Linux Foundation nor the names of its
3343 * contributors may be used to endorse or promote products
3344 * derived from this software without specific prior written
3345 * permission.
3347 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
3348 * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
3349 * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
3350 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
3351 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
3352 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
3353 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
3354 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
3355 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
3356 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
3357 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
3358 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
3359 * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
3361 * This BSD License conforms to the Open Source Initiative "Simplified
3362 * BSD License" as published at:
3363 * http://www.opensource.org/licenses/bsd-license.php
3365 * IAccessible2 is a trademark of the Linux Foundation. The IAccessible2
3366 * mark may be used in accordance with the Linux Foundation Trademark
3367 * Policy to indicate compliance with the IAccessible2 specification.
3369 ************************************************************************/
3376 /** @brief This interface represents hyperlinks.
3378 This interface represents a hyperlink associated with a single substring
3379 of text or single non-text object. Non-text objects can have either a
3380 single link or a collection of links such as when the non-text object is
3381 an image map.
3383 Linked objects and anchors are implementation dependent. This interface is derived
3384 from IAccessibleAction. IAccessibleAction::nActions is one greater than the
3385 maximum value for the indices used with the methods of this interface.
3387 Furthermore, the object that implements this interface has to be connected
3388 implicitly or explicitly with an object that implements IAccessibleText.
3389 IAccessibleHyperlink::startIndex and IAccessibleHyperlink::endIndex are
3390 indices with respect to the text exposed by IAccessibleText.
3392 This interface provides access to a single object which can have multiple actions.
3393 An example is an image map which is an image with multiple links each of which is
3394 associated with a separate non-overlapping area of the image. This interface could
3395 also be applied to other kinds of objects with multiple actions such as "smart tags"
3396 which are objects, typically strings, which have multiple actions such as
3397 "Activate URI", "Bookmark URI", etc.
3399 An interesting use case is an image map where each area is associated with multiple
3400 actions, e.g. an image map of smart tags. In this case you would have to implement
3401 two levels of accessible hyperlinks. The first level hyperlinks would only implement
3402 anchor and anchorTarget. The anchors would all reference the image object. The
3403 anchorTargets would reference the second level accessible hyperlink objects. None
3404 of the IAccessibleAction methods would be implemented on the first level hyperlink
3405 objects. The second level hyperlink objects would implement the IAccessibleAction
3406 methods. Their anchors would also reference the image object and their anchorTargets
3407 would reference URLs or the objects that would be activated.
3409 This use case demonstrates that in some cases there is no need for IAccessibleHyperlink
3410 to derive from IAccessibleAction. As a result it may be removed in a later version of
3411 the IDL and it is suggested that implementations should not rely on the inheritance.
3414 [object, uuid(01C20F2B-3DD2-400f-949F-AD00BDAB1D41)]
3415 interface IAccessibleHyperlink : IAccessibleAction
3418 /** @brief Returns an object that represents the link anchor, as appropriate
3419 for the link at the specified index.
3420 @param [in] index
3421 A 0 based index identifies the anchor when, as in the case of an image map,
3422 there is more than one link represented by this object. The valid maximal
3423 index is indicated by IAccessibleAction::nActions.
3424 @param [out] anchor
3425 This is an implementation dependent value. For example, for a text link this
3426 method could return the substring of the containing string where the substring
3427 is overridden with link behavior, and for an image link this method could return
3428 an IUnknown VARIANT for IAccessibleImage. See the section about
3429 @ref _variants "VARIANTs" for additional information.
3430 @retval S_OK
3431 @retval E_INVALIDARG if bad [in] passed
3433 [propget] HRESULT anchor
3435 [in] long index,
3436 [out, retval] VARIANT *anchor
3439 /** @brief Returns an object representing the target of the link, as appropriate
3440 for the link at the specified index.
3441 @param [in] index
3442 A 0 based index identifies the anchor when, as in the case of an image map,
3443 there is more than one link represented by this object. The valid maximal
3444 index is indicated by IAccessibleAction::nActions.
3445 @param [out] anchorTarget
3446 This is an implementation dependent value. For example this method could
3447 return a BSTR VARIANT of the URI. Alternatively this method could return an
3448 IUnknown VARIANT of a COM interface representing a target object to be
3449 activated when the link is activated. See the section about
3450 @ref _variants "VARIANTs" for additional information.
3451 @retval S_OK
3452 @retval E_INVALIDARG if bad [in] passed
3454 [propget] HRESULT anchorTarget
3456 [in] long index,
3457 [out, retval] VARIANT *anchorTarget
3460 /** @brief Returns the 0 based character offset at which the textual representation of the hyperlink starts.
3462 The returned value is related to the IAccessibleText interface of the object that
3463 owns this hyperlink.
3464 @param [out] index
3465 @retval S_OK
3467 [propget] HRESULT startIndex
3469 [out, retval] long *index
3472 /** @brief Returns the 0 based character offset at which the textual representation of the hyperlink ends.
3474 The returned value is related to the IAccessibleText interface of the object that
3475 owns this hyperlink. The character at the index is not part of the hypertext.
3476 @param [out] index
3477 @retval S_OK
3479 [propget] HRESULT endIndex
3481 [out, retval] long *index
3484 /** @brief Returns whether the target object referenced by this link is still valid.
3486 This is a volatile state that may change without sending an appropriate event.
3487 Returns TRUE if the referenced target is still valid and FALSE otherwise.
3489 This has also been used to indicate whether or not the URI of the anchorTarget
3490 is malformed.
3492 @param [out] valid
3493 If false, one or more of the object's links are invalid.
3494 If true, all of the object's links are valid.
3495 @retval S_OK
3496 @retval S_FALSE if there is nothing to return, [out] value is FALSE
3497 @note This method is not being used, is deprecated, and should not be implemented or
3498 used. It is likely that this method will be removed in a later version of the IDL.
3500 [propget] HRESULT valid
3502 [out, retval] boolean *valid
3505 /*************************************************************************
3507 * File Name (AccessibleHypertext.idl)
3509 * IAccessible2 IDL Specification
3511 * Copyright (c) 2007, 2010 Linux Foundation
3512 * Copyright (c) 2006 IBM Corporation
3513 * Copyright (c) 2000, 2006 Sun Microsystems, Inc.
3514 * All rights reserved.
3517 * Redistribution and use in source and binary forms, with or without
3518 * modification, are permitted provided that the following conditions
3519 * are met:
3521 * 1. Redistributions of source code must retain the above copyright
3522 * notice, this list of conditions and the following disclaimer.
3524 * 2. Redistributions in binary form must reproduce the above
3525 * copyright notice, this list of conditions and the following
3526 * disclaimer in the documentation and/or other materials
3527 * provided with the distribution.
3529 * 3. Neither the name of the Linux Foundation nor the names of its
3530 * contributors may be used to endorse or promote products
3531 * derived from this software without specific prior written
3532 * permission.
3534 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
3535 * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
3536 * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
3537 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
3538 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
3539 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
3540 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
3541 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
3542 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
3543 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
3544 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
3545 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
3546 * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
3548 * This BSD License conforms to the Open Source Initiative "Simplified
3549 * BSD License" as published at:
3550 * http://www.opensource.org/licenses/bsd-license.php
3552 * IAccessible2 is a trademark of the Linux Foundation. The IAccessible2
3553 * mark may be used in accordance with the Linux Foundation Trademark
3554 * Policy to indicate compliance with the IAccessible2 specification.
3556 ************************************************************************/
3564 /** @brief This interface exposes information about hypertext in a document.
3566 The %IAccessibleHypertext interface is the main interface to expose
3567 hyperlinks in a document, typically a text document, that are used
3568 to reference other documents. A typical implementation is to implement
3569 this interface on the smallest text object such as a paragraph of text.
3571 [object, uuid(6B4F8BBF-F1F2-418a-B35E-A195BC4103B9)]
3572 interface IAccessibleHypertext : IAccessibleText
3575 /** @brief Returns the number of links and link groups contained within this hypertext
3576 paragraph.
3577 @param [out] hyperlinkCount
3578 The number of links and link groups within this hypertext paragraph.
3579 Returns 0 if there is no link.
3580 @retval S_OK
3582 [propget] HRESULT nHyperlinks
3584 [out, retval] long *hyperlinkCount
3587 /** @brief Returns the specified link.
3589 The returned IAccessibleHyperlink object encapsulates the hyperlink and
3590 provides several kinds of information describing it.
3591 @param [in] index
3592 This 0 based index specifies the hyperlink to return.
3593 @param [out] hyperlink
3594 If the given index is valid, i.e. lies in the interval from 0 to the number
3595 of links minus one, a reference to the specified hyperlink object is returned.
3596 If the index is invalid then a NULL pointer is returned.
3597 @retval S_OK
3598 @retval E_INVALIDARG if bad [in] passed
3600 [propget] HRESULT hyperlink
3602 [in] long index,
3603 [out, retval] IAccessibleHyperlink **hyperlink
3606 /** @brief Returns the index of the hyperlink that is associated with this character index.
3608 This is the case when a link spans the given character index.
3609 @param [in] charIndex
3610 A 0 based index of the character for which to return the link index. If
3611 IAccessibleText is used to represent the text containing the link, then the
3612 character index is only valid if it is greater than or equal to zero and
3613 lower than the number of characters in the text.
3614 @param [out] hyperlinkIndex
3615 Returns the 0 based index of the hyperlink that is associated with this
3616 character index, or -1 if charIndex is not on a link.
3617 @retval S_OK
3618 @retval S_FALSE if there is nothing to return, [out] value is -1
3619 @retval E_INVALIDARG if bad [in] passed
3621 [propget] HRESULT hyperlinkIndex
3623 [in] long charIndex,
3624 [out, retval] long *hyperlinkIndex
3628 /*************************************************************************
3630 * File Name (AccessibleHypertext2.idl)
3632 * IAccessible2 IDL Specification
3634 * Copyright (c) 2007, 2013 Linux Foundation
3635 * Copyright (c) 2006 IBM Corporation
3636 * Copyright (c) 2000, 2006 Sun Microsystems, Inc.
3637 * All rights reserved.
3640 * Redistribution and use in source and binary forms, with or without
3641 * modification, are permitted provided that the following conditions
3642 * are met:
3644 * 1. Redistributions of source code must retain the above copyright
3645 * notice, this list of conditions and the following disclaimer.
3647 * 2. Redistributions in binary form must reproduce the above
3648 * copyright notice, this list of conditions and the following
3649 * disclaimer in the documentation and/or other materials
3650 * provided with the distribution.
3652 * 3. Neither the name of the Linux Foundation nor the names of its
3653 * contributors may be used to endorse or promote products
3654 * derived from this software without specific prior written
3655 * permission.
3657 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
3658 * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
3659 * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
3660 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
3661 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
3662 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
3663 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
3664 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
3665 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
3666 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
3667 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
3668 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
3669 * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
3671 * This BSD License conforms to the Open Source Initiative "Simplified
3672 * BSD License" as published at:
3673 * http://www.opensource.org/licenses/bsd-license.php
3675 * IAccessible2 is a trademark of the Linux Foundation. The IAccessible2
3676 * mark may be used in accordance with the Linux Foundation Trademark
3677 * Policy to indicate compliance with the IAccessible2 specification.
3679 ************************************************************************/
3687 /** @brief This interface exposes information about hypertext in a document.
3689 The %IAccessibleHypertext2 interface extends the functionality of the
3690 %IAccessibleHypertext interface.
3692 [object, uuid(CF64D89F-8287-4B44-8501-A827453A6077)]
3693 interface IAccessibleHypertext2 : IAccessibleHypertext
3696 /** @brief Returns the links for this object.
3698 The returned IAccessibleHyperlink objects encapsulate the hyperlink and
3699 provides several kinds of information describing it.
3701 @param [out] hyperlinks
3702 This array is allocated by the server. The client must free it with CoTaskMemFree.
3703 @param [out] nHyperlinks
3704 The number of links returned; the size of the returned array.
3705 @retval S_OK
3706 @retval S_FALSE if there are no links, [out] values are NULL and 0 respectively
3708 [propget] HRESULT hyperlinks
3710 [out, size_is(,*nHyperlinks)] IAccessibleHyperlink ***hyperlinks,
3711 [out, retval] long *nHyperlinks
3715 /*************************************************************************
3717 * File Name (AccessibleTable.idl)
3719 * IAccessible2 IDL Specification
3721 * Copyright (c) 2007, 2013 Linux Foundation
3722 * Copyright (c) 2006 IBM Corporation
3723 * Copyright (c) 2000, 2006 Sun Microsystems, Inc.
3724 * All rights reserved.
3727 * Redistribution and use in source and binary forms, with or without
3728 * modification, are permitted provided that the following conditions
3729 * are met:
3731 * 1. Redistributions of source code must retain the above copyright
3732 * notice, this list of conditions and the following disclaimer.
3734 * 2. Redistributions in binary form must reproduce the above
3735 * copyright notice, this list of conditions and the following
3736 * disclaimer in the documentation and/or other materials
3737 * provided with the distribution.
3739 * 3. Neither the name of the Linux Foundation nor the names of its
3740 * contributors may be used to endorse or promote products
3741 * derived from this software without specific prior written
3742 * permission.
3744 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
3745 * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
3746 * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
3747 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
3748 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
3749 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
3750 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
3751 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
3752 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
3753 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
3754 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
3755 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
3756 * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
3758 * This BSD License conforms to the Open Source Initiative "Simplified
3759 * BSD License" as published at:
3760 * http://www.opensource.org/licenses/bsd-license.php
3762 * IAccessible2 is a trademark of the Linux Foundation. The IAccessible2
3763 * mark may be used in accordance with the Linux Foundation Trademark
3764 * Policy to indicate compliance with the IAccessible2 specification.
3766 ************************************************************************/
3774 /** @brief This interface gives access to a two-dimensional table.
3776 Typically all accessible objects that represent cells or cell-clusters of a table
3777 will be at the same time children of the table. In this case IAccessible2::indexInParent
3778 will return the child index which then can be used when calling IAccessibleTable::rowIndex
3779 and IAccessibleTable::columnIndex.
3781 However, in some cases that kind of implementation will not be possible. When
3782 the table cells are not direct children of a table, the object representing
3783 the cell can define a "table-cell-index" object attribute identifying the 0
3784 based table cell index. This object attribute is obtained by parsing the
3785 attribute string returned by IAccessible2::attributes. The "table-cell-index"
3786 attribute can be used just like a child index of the typical case. ATs should
3787 first test for the presence of the "table-cell-index" attribute and if it is not
3788 present then IAccessible2::indexInParent can be used as in the typical case
3789 where cells are direct children of the table.
3791 The range of valid coordinates for this interface are implementation dependent.
3792 However, that range includes at least the intervals from the first row
3793 or column with the index 0 up to the last (but not including) used row or column
3794 as returned by IAccessibleTable::nRows and IAccessibleTable::nColumns.
3796 Note that newer implementations are now using IAccessibleTable2 and IAccessibleTableCell
3797 rather than this interface.
3799 [object, uuid(35AD8070-C20C-4fb4-B094-F4F7275DD469)]
3800 interface IAccessibleTable : IUnknown
3803 /** @brief Returns the accessible object at the specified row and column in
3804 the table. This object could be an IAccessible or an IAccessible2.
3805 @param [in] row
3806 The 0 based row index for which to retrieve the cell.
3807 @param [in] column
3808 The 0 based column index for which to retrieve the cell.
3809 @param [out] accessible
3810 If both row and column index are valid then the corresponding accessible
3811 object is returned that represents the requested cell regardless of whether
3812 the cell is currently visible (on the screen).
3813 @retval S_OK
3814 @retval E_INVALIDARG if bad [in] passed, [out] value is NULL
3816 [propget] HRESULT accessibleAt
3818 [in] long row,
3819 [in] long column,
3820 [out, retval] IUnknown **accessible
3823 /** @brief Returns the caption for the table. The returned object could be
3824 an IAccessible or an IAccessible2.
3825 @param [out] accessible
3826 If the table has a caption then a reference to it is returned, else a NULL
3827 pointer is returned.
3828 @retval S_OK
3829 @retval S_FALSE if there is nothing to return, [out] value is NULL
3831 [propget] HRESULT caption
3833 [out, retval] IUnknown **accessible
3836 /** @brief Translates the given row and column indexes into the corresponding cell index.
3837 @param [in] rowIndex
3838 0 based row index for the cell.
3839 @param [in] columnIndex
3840 0 based column index for the cell.
3841 @param [out] cellIndex
3842 Returns the 0 based index of the cell at the specified row and column indexes.
3843 @retval S_OK
3844 @retval E_INVALIDARG if bad [in] passed, [out] value is 0
3845 @note The returned value is not necessarily a child index of the immediate parent.
3846 In cases where the table cells are not direct children of the table the index
3847 is actually the cell index, i.e. conceptually it's an index into a one dimensional
3848 array of cells laid out in row order.
3850 [propget] HRESULT childIndex
3852 [in] long rowIndex,
3853 [in] long columnIndex,
3854 [out, retval] long *cellIndex
3857 /** @brief Returns the description text of the specified column in the table.
3858 @param [in] column
3859 The 0 based index of the column for which to retrieve the description.
3860 @param [out] description
3861 Returns the description text of the specified column in the table if such a
3862 description exists. Otherwise a NULL pointer is returned.
3863 @retval S_OK
3864 @retval S_FALSE if there is nothing to return, [out] value is NULL
3865 @retval E_INVALIDARG if bad [in] passed, [out] value is NULL
3867 [propget] HRESULT columnDescription
3869 [in] long column,
3870 [out, retval] BSTR *description
3873 /** @brief Returns the number of columns occupied by the accessible object
3874 at the specified row and column in the table.
3876 The result is greater than 1 if the specified cell spans multiple columns.
3877 @param [in] row
3878 0 based row index of the accessible for which to return the column extent.
3879 @param [in] column
3880 0 based column index of the accessible for which to return the column extent.
3881 @param [out] nColumnsSpanned
3882 Returns the 1 based column extent of the specified cell.
3883 @retval S_OK
3884 @retval E_INVALIDARG if bad [in] passed, [out] value is 0
3886 [propget] HRESULT columnExtentAt
3888 [in] long row,
3889 [in] long column,
3890 [out, retval] long *nColumnsSpanned
3893 /** @brief Returns the column headers as an %IAccessibleTable object.
3895 Content and size of the returned table are implementation dependent.
3896 @param [out] accessibleTable
3897 The column header
3898 @param [out] startingRowIndex
3899 The 0 based row index where the header starts, usually 0.
3900 @retval S_OK
3901 @retval S_FALSE if there is no header, [out] values are NULL and 0 respectively
3903 [propget] HRESULT columnHeader
3905 [out] IAccessibleTable **accessibleTable,
3906 [out, retval] long *startingRowIndex
3909 /** @brief Translates the given cell index into the corresponding column index.
3910 @param [in] cellIndex
3911 0 based index of the cell in the parent or closest ancestor table. Typically this
3912 is the value returned from IAccessible2::indexInParent, but in the case where the
3913 table cells are not direct children of the table this is the cell index specified
3914 by the "table-cell-index" object attribute obtained from parsing the attributes
3915 string returned by calling IAccessible2::attributes on the cell object.
3916 @param [out] columnIndex
3917 Returns the 0 based column index of the cell of the specified child or the index of
3918 the first column if the child spans multiple columns.
3919 @retval S_OK
3920 @retval E_INVALIDARG if bad [in] passed, [out] value is 0
3922 [propget] HRESULT columnIndex
3924 [in] long cellIndex,
3925 [out, retval] long *columnIndex
3928 /** @brief Returns the total number of columns in table
3929 @param [out] columnCount
3930 Number of columns in table (including columns outside the current viewport)
3931 @retval S_OK
3933 [propget] HRESULT nColumns
3935 [out, retval] long *columnCount
3938 /** @brief Returns the total number of rows in table
3939 @param [out] rowCount
3940 Number of rows in table (including rows outside the current viewport)
3941 @retval S_OK
3943 [propget] HRESULT nRows
3945 [out, retval] long *rowCount
3948 /** @brief Returns the total number of selected cells
3949 @param [out] cellCount
3950 Number of cells currently selected
3951 @retval S_OK
3953 [propget] HRESULT nSelectedChildren
3955 [out, retval] long *cellCount
3958 /** @brief Returns the total number of selected columns
3959 @param [out] columnCount
3960 Number of columns currently selected
3961 @retval S_OK
3963 [propget] HRESULT nSelectedColumns
3965 [out, retval] long *columnCount
3968 /** @brief Returns the total number of selected rows
3969 @param [out] rowCount
3970 Number of rows currently selected
3971 @retval S_OK
3973 [propget] HRESULT nSelectedRows
3975 [out, retval] long *rowCount
3978 /** @brief Returns the description text of the specified row in the table.
3979 @param [in] row
3980 The 0 based index of the row for which to retrieve the description.
3981 @param [out] description
3982 Returns the description text of the specified row in the table if such a
3983 description exists. Otherwise a NULL pointer is returned.
3984 @retval S_OK
3985 @retval S_FALSE if there is nothing to return, [out] value is NULL
3986 @retval E_INVALIDARG if bad [in] passed, [out] value is NULL
3988 [propget] HRESULT rowDescription
3990 [in] long row,
3991 [out, retval] BSTR *description
3994 /** @brief Returns the number of rows occupied by the accessible object
3995 at the specified row and column in the table.
3997 The result is greater than 1 if the specified cell spans multiple rows.
3998 @param [in] row
3999 0 based row index of the accessible for which to return the row extent.
4000 @param [in] column
4001 0 based column index of the accessible for which to return the row extent.
4002 @param [out] nRowsSpanned
4003 Returns the row extent of the specified cell.
4004 @retval S_OK
4005 @retval E_INVALIDARG if bad [in] passed, [out] value is 0
4007 [propget] HRESULT rowExtentAt
4009 [in] long row,
4010 [in] long column,
4011 [out, retval] long *nRowsSpanned
4014 /** @brief Returns the row headers as an %IAccessibleTable object.
4016 Content and size of the returned table are implementation dependent.
4017 @param [out] accessibleTable
4018 The row header.
4019 @param [out] startingColumnIndex
4020 The 0 based column index where the header starts, usually 0.
4021 @retval S_OK
4022 @retval S_FALSE if there is no header, [out] values are NULL and 0 respectively
4024 [propget] HRESULT rowHeader
4026 [out] IAccessibleTable **accessibleTable,
4027 [out, retval] long *startingColumnIndex
4030 /** @brief Translates the given cell index into a row index.
4031 @param [in] cellIndex
4032 0 based index of the cell in the parent or closest ancestor table. Typically this
4033 is the value returned from IAccessible2::indexInParent, but in the case where the
4034 table cells are not direct children of the table this is the cell index specified
4035 by the "table-cell-index" object attribute obtained from parsing the attributes
4036 string returned by calling IAccessible2::attributes on the cell object.
4037 @param [out] rowIndex
4038 0 based row index
4039 @retval S_OK
4040 @retval E_INVALIDARG if bad [in] passed, [out] value is 0
4042 [propget] HRESULT rowIndex
4044 [in] long cellIndex,
4045 [out, retval] long *rowIndex
4048 /** @brief Returns a list of cell indexes currently selected (0 based).
4049 @param [in] maxChildren
4050 This parameter is ignored. Refer to @ref _arrayConsideration
4051 "Special Consideration when using Arrays" for more details.
4052 @param [out] children
4053 An array of cell indexes of selected cells (each index is 0 based),
4054 allocated by the server. The client must free it with CoTaskMemFree.
4055 @param [out] nChildren
4056 The number of cell indexes returned; the size of the returned array.
4057 @retval S_OK
4058 @retval S_FALSE if there are none, [out] values are NULL and 0 respectively
4060 [propget] HRESULT selectedChildren
4062 [in] long maxChildren,
4063 [out, size_is(,maxChildren), length_is(,*nChildren)] long **children,
4064 [out, retval] long *nChildren
4067 /** @brief Returns a list of column indexes currently selected (0 based).
4068 @param [in] maxColumns
4069 This parameter is ignored. Refer to @ref _arrayConsideration
4070 "Special Consideration when using Arrays" for more details.
4071 @param [out] columns
4072 An array of column indexes of selected columns (each index is 0 based), allocated
4073 by the server. The client must free it with CoTaskMemFree.
4074 @param [out] nColumns
4075 The number of column indexes returned; the size of the returned array.
4076 @retval S_OK
4077 @retval S_FALSE if there are none, [out] values are NULL and 0 respectively
4079 [propget] HRESULT selectedColumns
4081 [in] long maxColumns,
4082 [out, size_is(,maxColumns), length_is(,*nColumns)] long **columns,
4083 [out, retval] long *nColumns
4086 /** @brief Returns a list of row indexes currently selected (0 based).
4087 @param [in] maxRows
4088 This parameter is ignored. Refer to @ref _arrayConsideration
4089 "Special Consideration when using Arrays" for more details.
4090 @param [out] rows
4091 An array of row indexes of selected rows (each index is 0 based), allocated
4092 by the server. The client must free it with CoTaskMemFree.
4093 @param [out] nRows
4094 The number of row indexes returned; the size of the returned array.
4095 @retval S_OK
4096 @retval S_FALSE if there are none, [out] values are NULL and 0 respectively
4098 [propget] HRESULT selectedRows
4100 [in] long maxRows,
4101 [out, size_is(,maxRows), length_is(,*nRows)] long **rows,
4102 [out, retval] long *nRows
4105 /** @brief Returns the summary description of the table. The returned object could be
4106 an IAccessible or an IAccessible2.
4107 @param [out] accessible
4108 Returns a reference to an implementation dependent accessible object
4109 representing the table's summary or a NULL pointer if the table
4110 does not support a summary.
4111 @retval S_OK
4112 @retval S_FALSE if there is nothing to return, [out] value is NULL
4114 [propget] HRESULT summary
4116 [out, retval] IUnknown **accessible
4119 /** @brief Returns a boolean value indicating whether the specified column is
4120 completely selected.
4121 @param [in] column
4122 0 based index of the column for which to determine whether it is selected.
4123 @param [out] isSelected
4124 Returns TRUE if the specified column is selected completely and FALSE otherwise.
4125 @retval S_OK
4126 @retval E_INVALIDARG if bad [in] passed, [out] value is FALSE
4128 [propget] HRESULT isColumnSelected
4130 [in] long column,
4131 [out, retval] boolean *isSelected
4134 /** @brief Returns a boolean value indicating whether the specified row is completely
4135 selected.
4136 @param [in] row
4137 0 based index of the row for which to determine whether it is selected.
4138 @param [out] isSelected
4139 Returns TRUE if the specified row is selected completely and FALSE otherwise.
4140 @retval S_OK
4141 @retval E_INVALIDARG if bad [in] passed, [out] value is FALSE
4143 [propget] HRESULT isRowSelected
4145 [in] long row,
4146 [out, retval] boolean *isSelected
4149 /** @brief Returns a boolean value indicating whether the specified cell is selected.
4150 @param [in] row
4151 0 based index of the row for the cell to determine whether it is selected.
4152 @param [in] column
4153 0 based index of the column for the cell to determine whether it is selected.
4154 @param [out] isSelected
4155 Returns TRUE if the specified cell is selected and FALSE otherwise.
4156 @retval S_OK
4157 @retval E_INVALIDARG if bad [in] passed, [out] value is FALSE
4159 [propget] HRESULT isSelected
4161 [in] long row,
4162 [in] long column,
4163 [out, retval] boolean *isSelected
4166 /** @brief Selects a row and unselects all previously selected rows.
4167 @param [in] row
4168 0 based index of the row to be selected.
4169 @retval S_OK
4170 @retval E_INVALIDARG if bad [in] passed
4172 HRESULT selectRow
4174 [in] long row
4177 /** @brief Selects a column and unselects all previously selected columns.
4178 @param [in] column
4179 0 based index of the column to be selected.
4180 @retval S_OK
4181 @retval E_INVALIDARG if bad [in] passed
4183 HRESULT selectColumn
4185 [in] long column
4188 /** @brief Unselects one row, leaving other selected rows selected (if any).
4189 @param [in] row
4190 0 based index of the row to be unselected.
4191 @retval S_OK
4192 @retval E_INVALIDARG if bad [in] passed
4194 HRESULT unselectRow
4196 [in] long row
4199 /** @brief Unselects one column, leaving other selected columns selected (if any).
4200 @param [in] column
4201 0 based index of the column to be unselected.
4202 @retval S_OK
4203 @retval E_INVALIDARG if bad [in] passed
4205 HRESULT unselectColumn
4207 [in] long column
4210 /** @brief Given a cell index, gets the row and column indexes and extents of a cell
4211 and whether or not it is selected.
4213 This is a convenience function. It is not mandatory to implement it.
4214 @param [in] index
4215 0 based index of this cell in the table.
4216 @param [out] row
4217 0 based row index.
4218 @param [out] column
4219 0 based column index.
4220 @param [out] rowExtents
4221 Number of cells spanned by this cell in this row.
4222 @param [out] columnExtents
4223 Number of cells spanned by this cell in this column.
4224 @param [out] isSelected
4225 Indicates if the specified cell is selected.
4226 @retval S_OK
4227 @retval E_INVALIDARG if bad [in] passed, [out] values are 0s and FALSE respectively
4229 [propget] HRESULT rowColumnExtentsAtIndex
4231 [in] long index,
4232 [out] long *row,
4233 [out] long *column,
4234 [out] long *rowExtents,
4235 [out] long *columnExtents,
4236 [out, retval] boolean *isSelected
4239 /** @brief Returns the type and extents describing how a table changed.
4241 Provided for use by the IA2_EVENT_TABLE_MODEL_CHANGED event handler.
4243 This data is only guaranteed to be valid while the thread notifying the event
4244 continues. Once the handler has returned, the validity of the data depends on
4245 how the server manages the life cycle of its objects. Also, note that the server
4246 may have different life cycle management strategies for controls depending on
4247 whether or not a control manages its children. Lists, trees, and tables can have
4248 a large number of children and thus it's possible that the child objects for those
4249 controls would only be created as needed. Servers should document their life cycle
4250 strategy as this will be of interest to assistive technology or script engines
4251 accessing data out of process or from other threads. Servers only need to save the
4252 most recent row and column values associated with the change and a scope of the
4253 entire application is adequate.
4255 @param [out] modelChange
4256 A struct of (type(insert, delete, update), firstRow, lastRow, firstColumn, lastColumn).
4257 @retval S_OK
4258 @retval S_FALSE if there is nothing to return, [out] value is NULL
4260 [propget] HRESULT modelChange
4262 [out, retval] IA2TableModelChange *modelChange
4266 /*************************************************************************
4268 * File Name (AccessibleTable2.idl)
4270 * IAccessible2 IDL Specification
4272 * Copyright (c) 2007, 2012 Linux Foundation
4273 * Copyright (c) 2006 IBM Corporation
4274 * Copyright (c) 2000, 2006 Sun Microsystems, Inc.
4275 * All rights reserved.
4278 * Redistribution and use in source and binary forms, with or without
4279 * modification, are permitted provided that the following conditions
4280 * are met:
4282 * 1. Redistributions of source code must retain the above copyright
4283 * notice, this list of conditions and the following disclaimer.
4285 * 2. Redistributions in binary form must reproduce the above
4286 * copyright notice, this list of conditions and the following
4287 * disclaimer in the documentation and/or other materials
4288 * provided with the distribution.
4290 * 3. Neither the name of the Linux Foundation nor the names of its
4291 * contributors may be used to endorse or promote products
4292 * derived from this software without specific prior written
4293 * permission.
4295 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
4296 * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
4297 * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
4298 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
4299 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
4300 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
4301 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
4302 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
4303 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
4304 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
4305 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
4306 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
4307 * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
4309 * This BSD License conforms to the Open Source Initiative "Simplified
4310 * BSD License" as published at:
4311 * http://www.opensource.org/licenses/bsd-license.php
4313 * IAccessible2 is a trademark of the Linux Foundation. The IAccessible2
4314 * mark may be used in accordance with the Linux Foundation Trademark
4315 * Policy to indicate compliance with the IAccessible2 specification.
4317 ************************************************************************/
4325 /** @brief This interface gives access to a two-dimensional table.
4327 Please also refer to the IAccessibleTableCell interface.
4329 If you want to support older applications you should also support the
4330 IAccessibleTable interface.
4332 [object, uuid(6167f295-06f0-4cdd-a1fa-02e25153d869)]
4333 interface IAccessibleTable2 : IUnknown
4336 /** @brief Returns the accessible object at the specified row and column in
4337 the table. This object could be an IAccessible or an IAccessible2.
4338 @param [in] row
4339 The 0 based row index for which to retrieve the cell.
4340 @param [in] column
4341 The 0 based column index for which to retrieve the cell.
4342 @param [out] cell
4343 If both row and column index are valid then the corresponding accessible
4344 object is returned that represents the requested cell regardless of whether
4345 the cell is currently visible (on the screen).
4346 @retval S_OK
4347 @retval E_INVALIDARG if bad [in] passed
4349 [propget] HRESULT cellAt
4351 [in] long row,
4352 [in] long column,
4353 [out, retval] IUnknown **cell
4356 /** @brief Returns the caption for the table. The returned object could be
4357 an IAccessible or an IAccessible2.
4358 @param [out] accessible
4359 If the table has a caption then a reference to it is returned, else a NULL
4360 pointer is returned.
4361 @retval S_OK
4362 @retval S_FALSE if there is nothing to return, [out] value is NULL
4363 @deprecated use a describedBy relation
4365 [propget] HRESULT caption
4367 [out, retval] IUnknown **accessible
4370 /** @brief Returns the description text of the specified column in the table.
4371 @param [in] column
4372 The 0 based index of the column for which to retrieve the description.
4373 @param [out] description
4374 Returns the description text of the specified column in the table if such a
4375 description exists. Otherwise a NULL pointer is returned.
4376 @retval S_OK
4377 @retval S_FALSE if there is nothing to return, [out] value is NULL
4378 @retval E_INVALIDARG if bad [in] passed
4380 [propget] HRESULT columnDescription
4382 [in] long column,
4383 [out, retval] BSTR *description
4387 /** @brief Returns the total number of columns in table
4388 @param [out] columnCount
4389 Number of columns in table (including columns outside the current viewport)
4390 @retval S_OK
4392 [propget] HRESULT nColumns
4394 [out, retval] long *columnCount
4397 /** @brief Returns the total number of rows in table
4398 @param [out] rowCount
4399 Number of rows in table (including rows outside the current viewport)
4400 @retval S_OK
4402 [propget] HRESULT nRows
4404 [out, retval] long *rowCount
4407 /** @brief Returns the total number of selected cells
4408 @param [out] cellCount
4409 Number of cells currently selected
4410 @retval S_OK
4412 [propget] HRESULT nSelectedCells
4414 [out, retval] long *cellCount
4417 /** @brief Returns the total number of selected columns
4418 @param [out] columnCount
4419 Number of columns currently selected
4420 @retval S_OK
4422 [propget] HRESULT nSelectedColumns
4424 [out, retval] long *columnCount
4427 /** @brief Returns the total number of selected rows
4428 @param [out] rowCount
4429 Number of rows currently selected
4430 @retval S_OK
4432 [propget] HRESULT nSelectedRows
4434 [out, retval] long *rowCount
4437 /** @brief Returns the description text of the specified row in the table.
4438 @param [in] row
4439 The 0 based index of the row for which to retrieve the description.
4440 @param [out] description
4441 Returns the description text of the specified row in the table if such a
4442 description exists. Otherwise a NULL pointer is returned.
4443 @retval S_OK
4444 @retval S_FALSE if there is nothing to return, [out] value is NULL
4445 @retval E_INVALIDARG if bad [in] passed
4447 [propget] HRESULT rowDescription
4449 [in] long row,
4450 [out, retval] BSTR *description
4453 /** @brief Returns a list of accessibles currently selected.
4454 @param [out] cells
4455 Pointer to an array of references to selected accessibles. The array is
4456 allocated by the server with CoTaskMemAlloc and freed by the client with
4457 CoTaskMemFree.
4458 @param [out] nSelectedCells
4459 The number of accessibles returned; the size of the returned array.
4460 @retval S_OK
4461 @retval S_FALSE if there are none, [out] values are NULL and 0 respectively
4463 [propget] HRESULT selectedCells
4465 [out, size_is(,*nSelectedCells)] IUnknown ***cells,
4466 [out, retval] long *nSelectedCells
4469 /** @brief Returns a list of column indexes currently selected (0 based).
4470 @param [out] selectedColumns
4471 A pointer to an array of column indexes of selected columns (each index is
4472 0 based). The array is allocated by the server with CoTaskMemAlloc and
4473 freed by the client with CoTaskMemFree.
4474 @param [out] nColumns
4475 The number of column indexes returned; the size of the returned array.
4476 @retval S_OK
4477 @retval S_FALSE if there are none, [out] values are NULL and 0 respectively
4479 [propget] HRESULT selectedColumns
4481 [out, size_is(,*nColumns)] long **selectedColumns,
4482 [out, retval] long *nColumns
4485 /** @brief Returns a list of row indexes currently selected (0 based).
4486 @param [out] selectedRows
4487 An array of row indexes of selected rows (each index is 0 based). The array
4488 is allocated by the server with CoTaskMemAlloc and freed by the client with
4489 CoTaskMemFree.
4490 @param [out] nRows
4491 The number of row indexes returned; the size of the returned array.
4492 @retval S_OK
4493 @retval S_FALSE if there are none, [out] values are NULL and 0 respectively
4495 [propget] HRESULT selectedRows
4497 [out, size_is(,*nRows)] long **selectedRows,
4498 [out, retval] long *nRows
4501 /** @brief Returns the summary description of the table. The returned object could be
4502 an IAccessible or an IAccessible2.
4503 @param [out] accessible
4504 Returns a reference to an implementation dependent accessible object
4505 representing the table's summary or a NULL pointer if the table
4506 does not support a summary.
4507 @retval S_OK
4508 @retval S_FALSE if there is nothing to return, [out] value is NULL
4509 @deprecated Use the labeledBy relation
4511 [propget] HRESULT summary
4513 [out, retval] IUnknown **accessible
4516 /** @brief Returns a boolean value indicating whether the specified column is
4517 completely selected.
4518 @param [in] column
4519 0 based index of the column for which to determine whether it is selected.
4520 @param [out] isSelected
4521 Returns TRUE if the specified column is selected completely and FALSE otherwise.
4522 @retval S_OK
4523 @retval E_INVALIDARG if bad [in] passed
4525 [propget] HRESULT isColumnSelected
4527 [in] long column,
4528 [out, retval] boolean *isSelected
4531 /** @brief Returns a boolean value indicating whether the specified row is completely
4532 selected.
4533 @param [in] row
4534 0 based index of the row for which to determine whether it is selected.
4535 @param [out] isSelected
4536 Returns TRUE if the specified row is selected completely and FALSE otherwise.
4537 @retval S_OK
4538 @retval E_INVALIDARG if bad [in] passed
4540 [propget] HRESULT isRowSelected
4542 [in] long row,
4543 [out, retval] boolean *isSelected
4546 /** @brief Selects a row and unselects all previously selected rows.
4548 The behavior should mimic that of the application, but for those applications
4549 which do not have a means in the GUI to select a full row of cells the behavior
4550 should be as follows: First any selected rows in the table are unselected. Then
4551 the entire row of cells for the specified row is selected. If any of the
4552 cells in the selected row span additional rows, the cells in those rows
4553 are also selected.
4554 @param [in] row
4555 0 based index of the row to be selected.
4556 @retval S_OK
4557 @retval E_INVALIDARG if bad [in] passed
4559 HRESULT selectRow
4561 [in] long row
4564 /** @brief Selects a column and unselects all previously selected columns.
4566 The behavior should mimic that of the application, but for those applications
4567 which do not have a means in the GUI to select a full column of cells the behavior
4568 should be as follows: First any selected columns in the table are unselected. Then
4569 the entire column of cells for the specified column is selected. If any of the
4570 cells in the selected column span additional columns, the cells in those columns
4571 are also selected.
4572 @param [in] column
4573 0 based index of the column to be selected.
4574 @retval S_OK
4575 @retval E_INVALIDARG if bad [in] passed
4577 HRESULT selectColumn
4579 [in] long column
4582 /** @brief Unselects one row, leaving other selected rows selected (if any).
4584 The behavior should mimic that of the application, but for those applications
4585 which do not have a means in the GUI to unselect a full row of cells the
4586 behavior should be as follows: The entire row of cells for the specified
4587 row is unselected. If any of the cells in the selected row span additional
4588 rows, the cells in those rows are also unselected.
4589 @param [in] row
4590 0 based index of the row to be unselected.
4591 @retval S_OK
4592 @retval E_INVALIDARG if bad [in] passed
4594 HRESULT unselectRow
4596 [in] long row
4599 /** @brief Unselects one column, leaving other selected columns selected (if any).
4601 The behavior should mimic that of the application, but for those applications
4602 which do not have a means in the GUI to unselect a full column of cells the
4603 behavior should be as follows: The entire column of cells for the specified
4604 column is unselected. If any of the cells in the selected column span additional
4605 columns, the cells in those columns are also unselected.
4606 @param [in] column
4607 0 based index of the column to be unselected.
4608 @retval S_OK
4609 @retval E_INVALIDARG if bad [in] passed
4611 HRESULT unselectColumn
4613 [in] long column
4616 /** @brief Returns the type and extents describing how a table changed.
4618 Provided for use by the IA2_EVENT_TABLE_MODEL_CHANGED event handler.
4620 This data is only guaranteed to be valid while the thread notifying the event
4621 continues. Once the handler has returned, the validity of the data depends on
4622 how the server manages the life cycle of its objects. Also, note that the server
4623 may have different life cycle management strategies for controls depending on
4624 whether or not a control manages its children. Lists, trees, and tables can have
4625 a large number of children and thus it's possible that the child objects for those
4626 controls would only be created as needed. Servers should document their life cycle
4627 strategy as this will be of interest to assistive technology or script engines
4628 accessing data out of process or from other threads. Servers only need to save the
4629 most recent row and column values associated with the change and a scope of the
4630 entire application is adequate.
4632 @param [out] modelChange
4633 A struct of (type(insert, delete, update), firstRow, lastRow, firstColumn, lastColumn).
4634 @retval S_OK
4635 @retval S_FALSE if there is nothing to return, [out] value is NULL
4637 [propget] HRESULT modelChange
4639 [out, retval] IA2TableModelChange *modelChange
4643 /*************************************************************************
4645 * File Name (AccessibleTableCell.idl)
4647 * IAccessible2 IDL Specification
4649 * Copyright (c) 2007, 2013 Linux Foundation
4650 * Copyright (c) 2006 IBM Corporation
4651 * Copyright (c) 2000, 2006 Sun Microsystems, Inc.
4652 * All rights reserved.
4655 * Redistribution and use in source and binary forms, with or without
4656 * modification, are permitted provided that the following conditions
4657 * are met:
4659 * 1. Redistributions of source code must retain the above copyright
4660 * notice, this list of conditions and the following disclaimer.
4662 * 2. Redistributions in binary form must reproduce the above
4663 * copyright notice, this list of conditions and the following
4664 * disclaimer in the documentation and/or other materials
4665 * provided with the distribution.
4667 * 3. Neither the name of the Linux Foundation nor the names of its
4668 * contributors may be used to endorse or promote products
4669 * derived from this software without specific prior written
4670 * permission.
4672 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
4673 * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
4674 * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
4675 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
4676 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
4677 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
4678 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
4679 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
4680 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
4681 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
4682 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
4683 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
4684 * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
4686 * This BSD License conforms to the Open Source Initiative "Simplified
4687 * BSD License" as published at:
4688 * http://www.opensource.org/licenses/bsd-license.php
4690 * IAccessible2 is a trademark of the Linux Foundation. The IAccessible2
4691 * mark may be used in accordance with the Linux Foundation Trademark
4692 * Policy to indicate compliance with the IAccessible2 specification.
4694 ************************************************************************/
4701 /** @brief This interface gives access to the cells of a two-dimensional table.
4703 Please also refer to the IAccessibleTable2 interface.
4706 [object, uuid(594116B1-C99F-4847-AD06-0A7A86ECE645)]
4707 interface IAccessibleTableCell : IUnknown
4710 /** @brief Returns the number of columns occupied by this cell accessible.
4712 The result is greater than 1 if the specified cell spans multiple columns.
4713 @param [out] nColumnsSpanned
4714 Returns the 1 based column extent of the specified cell.
4715 @retval S_OK
4717 [propget] HRESULT columnExtent
4719 [out, retval] long *nColumnsSpanned
4722 /** @brief Returns the column headers as an array of cell accessibles.
4724 @param [out] cellAccessibles
4725 Pointer to an array of references to cell accessibles. The array is allocated
4726 by the server. The client must free it with CoTaskMemFree.
4727 @param [out] nColumnHeaderCells
4728 The number of accessibles returned; the size of the returned array.
4729 @retval S_OK
4730 @retval S_FALSE if there is no header, [out] values are NULL and 0 respectively
4732 [propget] HRESULT columnHeaderCells
4734 [out, size_is(,*nColumnHeaderCells)] IUnknown ***cellAccessibles,
4735 [out, retval] long *nColumnHeaderCells
4738 /** @brief Translates this cell accessible into the corresponding column index.
4740 @param [out] columnIndex
4741 Returns the 0 based column index of the cell of the specified cell or the index of
4742 the first column if the cell spans multiple columns.
4743 @retval S_OK
4745 [propget] HRESULT columnIndex
4747 [out, retval] long *columnIndex
4750 /** @brief Returns the number of rows occupied by this cell accessible.
4752 @param [out] nRowsSpanned
4753 Returns the row extent of the specified cell.
4754 @retval S_OK
4756 [propget] HRESULT rowExtent
4758 [out, retval] long *nRowsSpanned
4761 /** @brief Returns the row headers as an array of cell accessibles.
4763 @param [out] cellAccessibles
4764 Pointer to an array of references to cell accessibles. The array is allocated
4765 by the server. The client must free it with CoTaskMemFree.
4766 @param [out] nRowHeaderCells
4767 The number of accessibles returned; the size of the returned array.
4768 @retval S_OK
4769 @retval S_FALSE if there is no header, [out] values are NULL and 0 respectively
4771 [propget] HRESULT rowHeaderCells
4773 [out, size_is(,*nRowHeaderCells)] IUnknown ***cellAccessibles,
4774 [out, retval] long *nRowHeaderCells
4777 /** @brief Translates this cell accessible into the corresponding row index.
4779 @param [out] rowIndex
4780 Returns the 0 based row index of the specified cell or the index of
4781 the first row if the cell spans multiple rows.
4782 @retval S_OK
4784 [propget] HRESULT rowIndex
4786 [out, retval] long *rowIndex
4789 /** @brief Returns a boolean value indicating whether this cell is selected.
4791 @param [out] isSelected
4792 Returns TRUE if the specified cell is selected and FALSE otherwise.
4793 @retval S_OK
4795 [propget] HRESULT isSelected
4797 [out, retval] boolean *isSelected
4800 /** @brief Gets the row and column indexes and extents of this cell accessible
4801 and whether or not it is selected.
4803 This is a convenience function. It is not mandatory to implement it.
4804 @param [out] row
4805 0 based row index.
4806 @param [out] column
4807 0 based column index.
4808 @param [out] rowExtents
4809 Number of cells spanned by this cell in this row.
4810 @param [out] columnExtents
4811 Number of cells spanned by this cell in this column.
4812 @param [out] isSelected
4813 Indicates if the specified cell is selected.
4814 @retval S_OK
4816 [propget] HRESULT rowColumnExtents
4818 [out] long *row,
4819 [out] long *column,
4820 [out] long *rowExtents,
4821 [out] long *columnExtents,
4822 [out, retval] boolean *isSelected
4825 /** @brief Returns a reference to the accessible of the containing table.
4827 @param [out] table
4828 Returns a reference to the IUnknown of the containing table.
4829 @retval S_OK
4831 [propget] HRESULT table
4833 [out, retval] IUnknown **table
4837 /*************************************************************************
4839 * File Name (AccessibleImage.idl)
4841 * IAccessible2 IDL Specification
4843 * Copyright (c) 2007, 2010 Linux Foundation
4844 * Copyright (c) 2006 IBM Corporation
4845 * Copyright (c) 2000, 2006 Sun Microsystems, Inc.
4846 * All rights reserved.
4849 * Redistribution and use in source and binary forms, with or without
4850 * modification, are permitted provided that the following conditions
4851 * are met:
4853 * 1. Redistributions of source code must retain the above copyright
4854 * notice, this list of conditions and the following disclaimer.
4856 * 2. Redistributions in binary form must reproduce the above
4857 * copyright notice, this list of conditions and the following
4858 * disclaimer in the documentation and/or other materials
4859 * provided with the distribution.
4861 * 3. Neither the name of the Linux Foundation nor the names of its
4862 * contributors may be used to endorse or promote products
4863 * derived from this software without specific prior written
4864 * permission.
4866 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
4867 * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
4868 * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
4869 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
4870 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
4871 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
4872 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
4873 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
4874 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
4875 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
4876 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
4877 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
4878 * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
4880 * This BSD License conforms to the Open Source Initiative "Simplified
4881 * BSD License" as published at:
4882 * http://www.opensource.org/licenses/bsd-license.php
4884 * IAccessible2 is a trademark of the Linux Foundation. The IAccessible2
4885 * mark may be used in accordance with the Linux Foundation Trademark
4886 * Policy to indicate compliance with the IAccessible2 specification.
4888 ************************************************************************/
4895 /** @brief This interface represents images and icons.
4897 This interface is used for a representation of images like icons on buttons.
4898 %IAccessibleImage only needs to be implemented in certain situations. Some
4899 examples are:
4900 <ol>
4901 <li>The accessible name and description are not enough to fully
4902 describe the image, e.g. when the accessible description is used to define the
4903 behavior of an actionable image and the image itself conveys semantically
4904 significant information.
4905 <li>The user can edit the content that includes an
4906 image and therefore the user needs to be able to review the image's position.
4907 </ol>
4909 [object, uuid(FE5ABB3D-615E-4f7b-909F-5F0EDA9E8DDE)]
4910 interface IAccessibleImage : IUnknown
4912 /** @brief Returns the localized description of the image.
4913 @param [out] description
4914 @retval S_OK
4915 @retval S_FALSE if there is nothing to return, [out] value is NULL
4917 [propget] HRESULT description
4919 [out, retval] BSTR *description
4922 /** @brief Returns the coordinates of the image.
4923 @param [in] coordinateType
4924 Specifies whether the returned coordinates should be relative to the screen or the parent object.
4925 @param [out] x
4926 @param [out] y
4927 @retval S_OK
4929 [propget] HRESULT imagePosition
4931 [in] enum IA2CoordinateType coordinateType,
4932 [out] long *x,
4933 [out, retval] long *y
4936 /** @brief Returns the size of the image in units specified by parent's coordinate system.
4937 @param [out] height
4938 @param [out] width
4939 @retval S_OK
4942 [propget] HRESULT imageSize
4944 [out] long *height,
4945 [out, retval] long *width
4948 /*************************************************************************
4950 * File Name (AccessibleEventID.idl)
4952 * IAccessible2 IDL Specification
4954 * Copyright (c) 2007, 2010 Linux Foundation
4955 * Copyright (c) 2006 IBM Corporation
4956 * Copyright (c) 2000, 2006 Sun Microsystems, Inc.
4957 * All rights reserved.
4960 * Redistribution and use in source and binary forms, with or without
4961 * modification, are permitted provided that the following conditions
4962 * are met:
4964 * 1. Redistributions of source code must retain the above copyright
4965 * notice, this list of conditions and the following disclaimer.
4967 * 2. Redistributions in binary form must reproduce the above
4968 * copyright notice, this list of conditions and the following
4969 * disclaimer in the documentation and/or other materials
4970 * provided with the distribution.
4972 * 3. Neither the name of the Linux Foundation nor the names of its
4973 * contributors may be used to endorse or promote products
4974 * derived from this software without specific prior written
4975 * permission.
4977 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
4978 * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
4979 * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
4980 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
4981 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
4982 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
4983 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
4984 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
4985 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
4986 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
4987 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
4988 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
4989 * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
4991 * This BSD License conforms to the Open Source Initiative "Simplified
4992 * BSD License" as published at:
4993 * http://www.opensource.org/licenses/bsd-license.php
4995 * IAccessible2 is a trademark of the Linux Foundation. The IAccessible2
4996 * mark may be used in accordance with the Linux Foundation Trademark
4997 * Policy to indicate compliance with the IAccessible2 specification.
4999 ************************************************************************/
5001 /** %IAccessible2 specific event constants
5003 This enum defines the event IDs fired by %IAccessible2 objects. The event IDs
5004 are in addition to those used by MSAA.
5006 enum IA2EventID {
5008 /** The change of the number or attributes of actions of an accessible
5009 object is signaled by events of this type.
5011 IA2_EVENT_ACTION_CHANGED = 0x101,
5013 /** <b>Deprecated.</b> The active descendant of a component has changed.
5015 Note: This event constant is misspelled and thus is deprecated and will be
5016 removed in a later version. Please use the correctly spelled version which
5017 follows.
5019 IA2_EVENT_ACTIVE_DECENDENT_CHANGED,
5021 /** The active descendant of a component has changed. The active descendant
5022 is used in objects with transient children.
5024 Note: Due to the fact that MSAA's WinEvents don't allow the active child index
5025 to be passed on the IA2_EVENT_ACTIVE_DESCENDANT_CHANGED event the manages
5026 descendants scheme can't be used. Instead the active child object has to fire
5027 MSAA's EVENT_OBJECT_FOCUS. In a future release a new event mechanism may be
5028 added to provide for event specific data to be passed with the event. At that
5029 time the IA2_EVENT_ACTIVE_DECENDENT_CHANGED event and
5030 IA2_STATE_MANAGES_DESCENDANTS state would be useful.
5032 IA2_EVENT_ACTIVE_DESCENDANT_CHANGED = IA2_EVENT_ACTIVE_DECENDENT_CHANGED,
5034 /** The document wide attributes of the document object have changed.
5036 IA2_EVENT_DOCUMENT_ATTRIBUTE_CHANGED,
5038 /** The contents of the document have changed.
5040 IA2_EVENT_DOCUMENT_CONTENT_CHANGED,
5042 /** The loading of the document has completed.
5044 IA2_EVENT_DOCUMENT_LOAD_COMPLETE,
5046 /** The loading of the document was interrupted.
5048 IA2_EVENT_DOCUMENT_LOAD_STOPPED,
5050 /** The document contents are being reloaded.
5052 IA2_EVENT_DOCUMENT_RELOAD,
5054 /** The ending index of this link within the containing string has changed.
5056 IA2_EVENT_HYPERLINK_END_INDEX_CHANGED,
5058 /** The number of anchors associated with this hyperlink object has changed.
5060 IA2_EVENT_HYPERLINK_NUMBER_OF_ANCHORS_CHANGED,
5062 /** The hyperlink selected state changed from selected to unselected or
5063 from unselected to selected.
5065 IA2_EVENT_HYPERLINK_SELECTED_LINK_CHANGED,
5067 /** One of the links associated with the hypertext object has been activated.
5069 IA2_EVENT_HYPERTEXT_LINK_ACTIVATED,
5071 /** One of the links associated with the hypertext object has been selected.
5073 IA2_EVENT_HYPERTEXT_LINK_SELECTED,
5075 /** The starting index of this link within the containing string has changed.
5077 IA2_EVENT_HYPERLINK_START_INDEX_CHANGED,
5079 /** Focus has changed from one hypertext object to another, or focus moved
5080 from a non-hypertext object to a hypertext object, or focus moved from a
5081 hypertext object to a non-hypertext object.
5083 IA2_EVENT_HYPERTEXT_CHANGED,
5085 /** The number of hyperlinks associated with a hypertext object changed
5087 IA2_EVENT_HYPERTEXT_NLINKS_CHANGED,
5089 /** An object's attributes changed.
5090 Also see ::IA2_EVENT_TEXT_ATTRIBUTE_CHANGED.
5092 IA2_EVENT_OBJECT_ATTRIBUTE_CHANGED,
5094 /** A slide changed in a presentation document or a page boundary was
5095 crossed in a word processing document.
5097 IA2_EVENT_PAGE_CHANGED,
5099 /** The caret moved from one section to the next.
5101 IA2_EVENT_SECTION_CHANGED,
5103 /** A table caption changed.
5105 IA2_EVENT_TABLE_CAPTION_CHANGED,
5107 /** A table's column description changed.
5109 IA2_EVENT_TABLE_COLUMN_DESCRIPTION_CHANGED,
5111 /** A table's column header changed.
5113 IA2_EVENT_TABLE_COLUMN_HEADER_CHANGED,
5115 /** A table's data changed.
5117 IA2_EVENT_TABLE_MODEL_CHANGED,
5119 /** A table's row description changed.
5121 IA2_EVENT_TABLE_ROW_DESCRIPTION_CHANGED,
5123 /** A table's row header changed.
5125 IA2_EVENT_TABLE_ROW_HEADER_CHANGED,
5127 /** A table's summary changed.
5129 IA2_EVENT_TABLE_SUMMARY_CHANGED,
5131 /** A text object's attributes changed.
5132 Also see ::IA2_EVENT_OBJECT_ATTRIBUTE_CHANGED.
5134 IA2_EVENT_TEXT_ATTRIBUTE_CHANGED,
5136 /** The caret has moved to a new position.
5138 IA2_EVENT_TEXT_CARET_MOVED,
5140 /** <b>Deprecated.</b> This event is equivalent to ::IA2_EVENT_TEXT_UPDATED.
5142 IA2_EVENT_TEXT_CHANGED,
5144 /** The caret moved from one column to the next.
5146 IA2_EVENT_TEXT_COLUMN_CHANGED,
5148 /** Text was inserted.
5150 IA2_EVENT_TEXT_INSERTED,
5152 /** Text was removed.
5154 IA2_EVENT_TEXT_REMOVED,
5156 /** This event indicates general text changes, i.e. changes to text that are
5157 exposed through the IAccessibleText interface. For compatibility with ATK/AT-SPI
5158 which does not have an equivalent event, servers can alternatively fire
5159 ::IA2_EVENT_TEXT_REMOVED and ::IA2_EVENT_TEXT_INSERTED.
5161 IA2_EVENT_TEXT_UPDATED,
5163 /** The text selection changed. Later versions of Microsoft development environments
5164 have an equivalent event identified, EVENT_OBJECT_TEXTSELECTIONCHANGED. Servers
5165 should use that if it is available and use IA2_EVENT_TEXT_SELECTION_CHANGED otherwise.
5166 Clients should be prepared to respond to either event.
5169 IA2_EVENT_TEXT_SELECTION_CHANGED,
5171 /** A visible data event indicates the change of the visual appearance
5172 of an accessible object. This includes for example most of the
5173 attributes available via the IAccessibleComponent interface.
5175 IA2_EVENT_VISIBLE_DATA_CHANGED
5178 /*************************************************************************
5180 * File Name (AccessibleApplication.idl)
5182 * IAccessible2 IDL Specification
5184 * Copyright (c) 2007, 2010 Linux Foundation
5185 * Copyright (c) 2006 IBM Corporation
5186 * Copyright (c) 2000, 2006 Sun Microsystems, Inc.
5187 * All rights reserved.
5190 * Redistribution and use in source and binary forms, with or without
5191 * modification, are permitted provided that the following conditions
5192 * are met:
5194 * 1. Redistributions of source code must retain the above copyright
5195 * notice, this list of conditions and the following disclaimer.
5197 * 2. Redistributions in binary form must reproduce the above
5198 * copyright notice, this list of conditions and the following
5199 * disclaimer in the documentation and/or other materials
5200 * provided with the distribution.
5202 * 3. Neither the name of the Linux Foundation nor the names of its
5203 * contributors may be used to endorse or promote products
5204 * derived from this software without specific prior written
5205 * permission.
5207 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
5208 * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
5209 * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
5210 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
5211 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
5212 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
5213 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
5214 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
5215 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
5216 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
5217 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
5218 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
5219 * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
5221 * This BSD License conforms to the Open Source Initiative "Simplified
5222 * BSD License" as published at:
5223 * http://www.opensource.org/licenses/bsd-license.php
5225 * IAccessible2 is a trademark of the Linux Foundation. The IAccessible2
5226 * mark may be used in accordance with the Linux Foundation Trademark
5227 * Policy to indicate compliance with the IAccessible2 specification.
5229 ************************************************************************/
5236 /** @brief This interface gives access to the application's name and version information.
5238 This interface provides the AT with the information it needs to differentiate
5239 this application from other applications, from other versions of this
5240 application, or from other versions of this application running on different
5241 versions of an accessibility bridge or accessibility toolkit.
5243 Servers implementing IAccessible2 should provide access to the %IAccessibleApplication
5244 interface via QueryService from any object so that ATs can easily determine specific
5245 information about the application such as its name or version.
5247 [object, uuid(D49DED83-5B25-43F4-9B95-93B44595979E)]
5248 interface IAccessibleApplication : IUnknown
5251 /** @brief Returns the application name.
5252 @param [out] name
5253 @retval S_OK
5254 @retval S_FALSE if there is nothing to return, [out] value is NULL
5256 [propget] HRESULT appName
5258 [out, retval] BSTR *name
5261 /** @brief Returns the application version.
5262 @param [out] version
5263 The version string must not contain levels when it is know beforehand that
5264 this information will never require a change in a client's behavior.
5265 For example, use "3.6.0" rather than "3.6.0.v201005131500".
5266 @retval S_OK
5267 @retval S_FALSE if there is nothing to return, [out] value is NULL
5269 [propget] HRESULT appVersion
5271 [out, retval] BSTR *version
5274 /** @brief Returns the toolkit/bridge name.
5275 @param [out] name
5276 @retval S_OK
5277 @retval S_FALSE if there is nothing to return, [out] value is NULL
5279 [propget] HRESULT toolkitName
5281 [out, retval] BSTR *name
5284 /** @brief Returns the toolkit/bridge version.
5285 @param [out] version
5286 The version string must not contain levels when it is know beforehand that
5287 this information will never require a change in a client's behavior.
5288 For example, use "3.6.0" rather than "3.6.0.v201005131500".
5289 @retval S_OK
5290 @retval S_FALSE if there is nothing to return, [out] value is NULL
5292 [propget] HRESULT toolkitVersion
5294 [out, retval] BSTR *version
5299 /*************************************************************************
5301 * File Name (AccessibleDocument.idl)
5303 * IAccessible2 IDL Specification
5305 * Copyright (c) 2013 Linux Foundation
5306 * All rights reserved.
5309 * Redistribution and use in source and binary forms, with or without
5310 * modification, are permitted provided that the following conditions
5311 * are met:
5313 * 1. Redistributions of source code must retain the above copyright
5314 * notice, this list of conditions and the following disclaimer.
5316 * 2. Redistributions in binary form must reproduce the above
5317 * copyright notice, this list of conditions and the following
5318 * disclaimer in the documentation and/or other materials
5319 * provided with the distribution.
5321 * 3. Neither the name of the Linux Foundation nor the names of its
5322 * contributors may be used to endorse or promote products
5323 * derived from this software without specific prior written
5324 * permission.
5326 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
5327 * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
5328 * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
5329 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
5330 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
5331 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
5332 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
5333 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
5334 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
5335 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
5336 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
5337 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
5338 * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
5340 * This BSD License conforms to the Open Source Initiative "Simplified
5341 * BSD License" as published at:
5342 * http://www.opensource.org/licenses/bsd-license.php
5344 * IAccessible2 is a trademark of the Linux Foundation. The IAccessible2
5345 * mark may be used in accordance with the Linux Foundation Trademark
5346 * Policy to indicate compliance with the IAccessible2 specification.
5348 ************************************************************************/
5354 /** @brief This interface represents documents.
5356 This interface is used for a representation of documents.
5358 [object, uuid(C48C7FCF-4AB5-4056-AFA6-902D6E1D1149)]
5359 interface IAccessibleDocument : IUnknown
5361 /** @brief Returns the most recently used anchor target within a document.
5363 A document's most recently targeted in-page anchor is returned. A typical use
5364 of this method is to fetch the anchor target within an HTML document. In this
5365 case anchor targets are those which have been defined with the &lt;a&gt; tag.
5367 @param [out] accessible
5368 @retval S_OK
5369 @retval S_FALSE if there are no existing valid anchor targets, [out] value is NULL.
5371 [propget] HRESULT anchorTarget
5373 [out, retval] IUnknown **accessible
5377 /*************************************************************************
5379 * File Name (IA2TypeLibrary.idl)
5381 * IAccessible2 IDL Specification
5383 * Copyright (c) 2007, 2012 Linux Foundation
5384 * Copyright (c) 2006 IBM Corporation
5385 * Copyright (c) 2000, 2006 Sun Microsystems, Inc.
5386 * All rights reserved.
5389 * Redistribution and use in source and binary forms, with or without
5390 * modification, are permitted provided that the following conditions
5391 * are met:
5393 * 1. Redistributions of source code must retain the above copyright
5394 * notice, this list of conditions and the following disclaimer.
5396 * 2. Redistributions in binary form must reproduce the above
5397 * copyright notice, this list of conditions and the following
5398 * disclaimer in the documentation and/or other materials
5399 * provided with the distribution.
5401 * 3. Neither the name of the Linux Foundation nor the names of its
5402 * contributors may be used to endorse or promote products
5403 * derived from this software without specific prior written
5404 * permission.
5406 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
5407 * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
5408 * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
5409 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
5410 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
5411 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
5412 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
5413 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
5414 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
5415 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
5416 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
5417 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
5418 * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
5420 * This BSD License conforms to the Open Source Initiative "Simplified
5421 * BSD License" as published at:
5422 * http://www.opensource.org/licenses/bsd-license.php
5424 * IAccessible2 is a trademark of the Linux Foundation. The IAccessible2
5425 * mark may be used in accordance with the Linux Foundation Trademark
5426 * Policy to indicate compliance with the IAccessible2 specification.
5428 ************************************************************************/
5430 // This is not a standalone file. It is to be appended to the end of the
5431 // merged IDL file.
5433 cpp_quote("")
5434 cpp_quote("// Type Library Definitions")
5435 cpp_quote("")
5438 uuid(CE3F726E-D1D3-44FE-B995-FF1DB3B48B2B),
5439 helpstring("IAccessible2 Type Library"),
5440 version(1.3),
5441 hidden
5444 library IAccessible2Lib
5446 importlib ("stdole2.tlb");
5447 importlib ("oleacc.dll");
5448 interface IAccessible2;
5449 interface IAccessible2_2;
5450 interface IAccessibleAction;
5451 interface IAccessibleApplication;
5452 interface IAccessibleComponent;
5453 interface IAccessibleDocument;
5454 interface IAccessibleEditableText;
5455 interface IAccessibleHyperlink;
5456 interface IAccessibleHypertext;
5457 interface IAccessibleHypertext2;
5458 interface IAccessibleImage;
5459 interface IAccessibleRelation;
5460 interface IAccessibleTable;
5461 interface IAccessibleTable2;
5462 interface IAccessibleTableCell;
5463 interface IAccessibleText;
5464 interface IAccessibleText2;
5465 interface IAccessibleValue;
5466 enum IA2CoordinateType;
5467 enum IA2EventID;
5468 enum IA2Role;
5469 enum IA2ScrollType;
5470 enum IA2States;
5471 enum IA2TableModelChangeType;
5472 enum IA2TextBoundaryType;
5473 enum IA2TextSpecialOffsets;
5476 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */