1/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2/*************************************************************************
3 *
4 *  File Name (api_all_headers.idl)
5 *
6 *  IAccessible2 IDL Specification
7 *
8 *  Copyright (c) 2013 Linux Foundation
9 *  All rights reserved.
10 *
11 *
12 *  Redistribution and use in source and binary forms, with or without
13 *  modification, are permitted provided that the following conditions
14 *  are met:
15 *
16 *   1. Redistributions of source code must retain the above copyright
17 *      notice, this list of conditions and the following disclaimer.
18 *
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.
23 *
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.
28 *
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.
42 *
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
46 *
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.
50 *
51 ************************************************************************/
52
53import "objidl.idl";
54import "oaidl.idl";
55import "oleacc.idl";
56
57/*************************************************************************
58 *
59 *  File Name (IA2CommonTypes.idl)
60 *
61 *  IAccessible2 IDL Specification
62 *
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.
67 *
68 *
69 *  Redistribution and use in source and binary forms, with or without
70 *  modification, are permitted provided that the following conditions
71 *  are met:
72 *
73 *   1. Redistributions of source code must retain the above copyright
74 *      notice, this list of conditions and the following disclaimer.
75 *
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.
80 *
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.
85 *
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.
99 *
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
103 *
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.
107 *
108 ************************************************************************/
109
110 /** These constants control the scrolling of an object or substring into a window.
111
112 This enum is used in IAccessible2::scrollTo and IAccessibleText::scrollSubstringTo.
113*/
114enum IA2ScrollType {
115
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.
124  */
125  IA2_SCROLL_TYPE_TOP_LEFT,
126
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.
135  */
136  IA2_SCROLL_TYPE_BOTTOM_RIGHT,
137
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.
146  */
147  IA2_SCROLL_TYPE_TOP_EDGE,
148
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.
157  */
158  IA2_SCROLL_TYPE_BOTTOM_EDGE,
159
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.
168  */
169  IA2_SCROLL_TYPE_LEFT_EDGE,
170
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.
179  */
180  IA2_SCROLL_TYPE_RIGHT_EDGE,
181
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.
187  */
188  IA2_SCROLL_TYPE_ANYWHERE
189};
190
191/** These constants define which coordinate system a point is located in.
192
193 This enum is used in IAccessible2::scrollToPoint, IAccessibleImage::imagePosition,
194 IAccessibleText::characterExtents, and IAccessibleText::offsetAtPoint, and
195 IAccessibleText::scrollSubstringToPoint.
196*/
197enum IA2CoordinateType {
198
199  /// The coordinates are relative to the screen.
200  IA2_COORDTYPE_SCREEN_RELATIVE,
201
202  /** The coordinates are relative to the upper left corner of the bounding box
203   of the immediate parent.
204  */
205  IA2_COORDTYPE_PARENT_RELATIVE
206
207};
208
209/** Special offsets for use in IAccessibleText and IAccessibleEditableText methods
210
211  Refer to @ref _specialOffsets
212  "Special Offsets for use in the IAccessibleText and IAccessibleEditableText Methods"
213  for more information.
214*/
215enum 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. */
220};
221
222/** These constants specify the kind of change made to a table.
223
224   This enum is used in the IA2TableModelChange struct which in turn is used by
225   IAccessibleTable::modelChange and IAccessibleTable2::modelChange.
226*/
227enum IA2TableModelChangeType {
228  IA2_TABLE_MODEL_CHANGE_INSERT,  // = 0;
229  IA2_TABLE_MODEL_CHANGE_DELETE,
230  IA2_TABLE_MODEL_CHANGE_UPDATE
231};
232
233/** A structure defining the type of and extents of changes made to a table
234
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.
240*/
241typedef 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/*************************************************************************
249 *
250 *  File Name (AccessibleRelation.idl)
251 *
252 *  IAccessible2 IDL Specification
253 *
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.
258 *
259 *
260 *  Redistribution and use in source and binary forms, with or without
261 *  modification, are permitted provided that the following conditions
262 *  are met:
263 *
264 *   1. Redistributions of source code must retain the above copyright
265 *      notice, this list of conditions and the following disclaimer.
266 *
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.
271 *
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.
276 *
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.
290 *
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
294 *
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.
298 *
299 ************************************************************************/
300
301
302
303
304
305/** @defgroup grpRelations Relations
306  Use the following constants to compare against the BSTRs returned by
307  IAccessibleRelation::relationType.
308*/
309///@{
310
311/** The target object is the containing application object. */
312const WCHAR *const IA2_RELATION_CONTAINING_APPLICATION = L"containingApplication";
313
314/** The target object is the containing document object. The target object implements
315 the IAccessibleDocument interface.
316*/
317const WCHAR *const IA2_RELATION_CONTAINING_DOCUMENT = L"containingDocument";
318
319/** The target object is the containing tab pane object. */
320const WCHAR *const IA2_RELATION_CONTAINING_TAB_PANE = L"containingTabPane";
321
322/** The target object is the containing window object. */
323const WCHAR *const IA2_RELATION_CONTAINING_WINDOW = L"containingWindow";
324
325/** Some attribute of this object is affected by a target object. */
326const WCHAR *const IA2_RELATION_CONTROLLED_BY = L"controlledBy";
327
328/** This object is interactive and controls some attribute of a target object. */
329const WCHAR *const IA2_RELATION_CONTROLLER_FOR = L"controllerFor";
330
331/** This object is described by the target object. */
332const WCHAR *const IA2_RELATION_DESCRIBED_BY = L"describedBy";
333
334/** This object is describes the target object. */
335const WCHAR *const IA2_RELATION_DESCRIPTION_FOR = L"descriptionFor";
336
337/** This object is embedded by a target object. */
338const WCHAR *const IA2_RELATION_EMBEDDED_BY = L"embeddedBy";
339
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.
343*/
344const WCHAR *const IA2_RELATION_EMBEDS = L"embeds";
345
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.
350*/
351const WCHAR *const IA2_RELATION_FLOWS_FROM = L"flowsFrom";
352
353/** Content flows from this object to a target object. */
354const WCHAR *const IA2_RELATION_FLOWS_TO = L"flowsTo";
355
356/** This object is label for a target object. */
357const WCHAR *const IA2_RELATION_LABEL_FOR = L"labelFor";
358
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.
362*/
363const WCHAR *const IA2_RELATION_LABELED_BY = L"labelledBy";
364
365/** This object is labelled by a target object. */
366const WCHAR *const IA2_RELATION_LABELLED_BY = L"labelledBy";
367
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.
372*/
373const WCHAR *const IA2_RELATION_MEMBER_OF = L"memberOf";
374
375/** The target object is the next object in the tab order. */
376const WCHAR *const IA2_RELATION_NEXT_TABBABLE = L"nextTabbable";
377
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. */
382const WCHAR *const IA2_RELATION_NODE_CHILD_OF = L"nodeChildOf";
383
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. */
388const WCHAR *const IA2_RELATION_NODE_PARENT_OF = L"nodeParentOf";
389
390/** This object is a parent window of the target object. */
391const WCHAR *const IA2_RELATION_PARENT_WINDOW_OF = L"parentWindowOf";
392
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.
395*/
396const WCHAR *const IA2_RELATION_POPUP_FOR = L"popupFor";
397
398/** The target object is the previous object in the tab order. */
399const WCHAR *const IA2_RELATION_PREVIOUS_TABBABLE = L"previousTabbable";
400
401/** This object is a sub window of a target object. */
402const WCHAR *const IA2_RELATION_SUBWINDOW_OF = L"subwindowOf";
403
404///@}
405
406/** This interface gives access to an object's set of relations.
407*/
408[object, uuid(7CDF86EE-C3DA-496a-BDA4-281B336E1FDC)]
409interface IAccessibleRelation : IUnknown
410{
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
415  */
416  [propget] HRESULT relationType
417    (
418     [out, retval] BSTR *relationType
419    );
420
421  /** @brief Returns a localized version of the relation type.
422   @param [out] localizedRelationType
423   @retval S_OK
424  */
425  [propget] HRESULT localizedRelationType
426    (
427     [out, retval] BSTR *localizedRelationType
428    );
429
430  /** @brief Returns the number of targets for this relation.
431   @param [out] nTargets
432   @retval S_OK
433  */
434  [propget] HRESULT nTargets
435    (
436     [out, retval] long *nTargets
437    );
438
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.
446  */
447  [propget] HRESULT target
448    (
449     [in] long targetIndex,
450     [out, retval] IUnknown **target
451    );
452
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
465  */
466  [propget] HRESULT targets
467    (
468     [in] long maxTargets,
469     [out, size_is(maxTargets), length_is(*nTargets)]
470       IUnknown **targets,
471     [out, retval] long *nTargets
472    );
473
474}
475/*************************************************************************
476 *
477 *  File Name (AccessibleAction.idl)
478 *
479 *  IAccessible2 IDL Specification
480 *
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.
485 *
486 *
487 *  Redistribution and use in source and binary forms, with or without
488 *  modification, are permitted provided that the following conditions
489 *  are met:
490 *
491 *   1. Redistributions of source code must retain the above copyright
492 *      notice, this list of conditions and the following disclaimer.
493 *
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.
498 *
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.
503 *
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.
517 *
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
521 *
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.
525 *
526 ************************************************************************/
527
528
529
530
531
532/** This enum defines values which are predefined actions for use when implementing
533 support for media.
534
535 This enum is used when specifying an action for IAccessibleAction::doAction.
536*/
537
538enum 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. */
555};
556
557/** @brief This interface gives access to actions that can be executed
558  for accessible objects.
559
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.
570
571 The first action should be equivalent to the MSAA default action.  If there is
572  only one action, %IAccessibleAction should also be implemented.
573*/
574[object, uuid(B70D9F59-3B5A-4dba-AB9E-22012F607DF5)]
575interface IAccessibleAction : IUnknown
576{
577
578  /** @brief Returns the number of accessible actions available in this object.
579
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.
588  */
589  HRESULT nActions
590    (
591     [out,retval] long* nActions
592    );
593
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.
602    */
603  HRESULT doAction
604    (
605     [in] long actionIndex
606    );
607
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
617    */
618  [propget] HRESULT description
619    (
620     [in] long actionIndex,
621     [out, retval] BSTR *description
622    );
623
624  /** @brief Returns an array of BSTRs describing one or more key bindings, if
625   there are any, associated with the specified action.
626
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.
631
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.
635
636   An AT such as an On Screen Keyboard might not expose these bindings but
637   provide alternative means of activation.
638
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.
643
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
657    */
658  [propget] HRESULT keyBinding
659    (
660     [in] long actionIndex,
661     [in] long nMaxBindings,
662     [out, size_is(,nMaxBindings), length_is(,*nBindings)] BSTR **keyBindings,
663     [out, retval] long *nBindings
664    );
665
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
673   */
674  [propget] HRESULT name
675    (
676     [in] long actionIndex,
677     [out, retval] BSTR *name
678    );
679
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
687   */
688  [propget] HRESULT localizedName
689    (
690     [in] long actionIndex,
691     [out, retval] BSTR *localizedName
692    );
693
694}
695/*************************************************************************
696 *
697 *  File Name (AccessibleRole.idl)
698 *
699 *  IAccessible2 IDL Specification
700 *
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.
705 *
706 *
707 *  Redistribution and use in source and binary forms, with or without
708 *  modification, are permitted provided that the following conditions
709 *  are met:
710 *
711 *   1. Redistributions of source code must retain the above copyright
712 *      notice, this list of conditions and the following disclaimer.
713 *
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.
718 *
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.
723 *
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.
737 *
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
741 *
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.
745 *
746 ************************************************************************/
747
748
749
750/** Collection of roles
751
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.
756*/
757enum IA2Role {
758
759  /** Unknown role. The object contains some Accessible information, but its
760   role is not known.
761  */
762  IA2_ROLE_UNKNOWN = 0,
763
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.
767  */
768  IA2_ROLE_CANVAS = 0x401,
769
770  /// A caption describing another object.
771  IA2_ROLE_CAPTION,
772
773  /// Used for check buttons that are menu items.
774  IA2_ROLE_CHECK_MENU_ITEM,
775
776  /// A specialized dialog that lets the user choose a color.
777  IA2_ROLE_COLOR_CHOOSER,
778
779  /// A date editor.
780  IA2_ROLE_DATE_EDITOR,
781
782  /** An iconified internal frame in an ::IA2_ROLE_DESKTOP_PANE.
783   Also refer to ::IA2_ROLE_INTERNAL_FRAME.
784  */
785  IA2_ROLE_DESKTOP_ICON,
786
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.
789  */
790  IA2_ROLE_DESKTOP_PANE,
791
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.
795  */
796  IA2_ROLE_DIRECTORY_PANE,
797
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.
801  */
802  IA2_ROLE_EDITBAR,
803
804  /// Embedded (OLE) object.
805  IA2_ROLE_EMBEDDED_OBJECT,
806
807  /// Text that is used as an endnote (footnote at the end of a chapter or section).
808  IA2_ROLE_ENDNOTE,
809
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.
815  */
816  IA2_ROLE_FILE_CHOOSER,
817
818  /** A font chooser. A font chooser is a component that lets the user pick
819   various attributes for fonts.
820  */
821  IA2_ROLE_FONT_CHOOSER,
822
823  /** Footer of a document page.
824   Also refer to ::IA2_ROLE_HEADER.
825  */
826  IA2_ROLE_FOOTER,
827
828  /// Text that is used as a footnote.  Also refer to ::IA2_ROLE_ENDNOTE.
829  IA2_ROLE_FOOTNOTE,
830
831  /** A container of form controls.  An example of the use of this role is to
832   represent an HTML FORM tag.
833  */
834  IA2_ROLE_FORM,
835
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.
839  */
840  IA2_ROLE_FRAME,
841
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.
845  */
846  IA2_ROLE_GLASS_PANE,
847
848  /** Header of a document page.
849   Also refer to ::IA2_ROLE_FOOTER.
850  */
851  IA2_ROLE_HEADER,
852
853  /// Heading.  Use the IAccessible2::attributes level attribute to determine the heading level.
854  IA2_ROLE_HEADING,
855
856  /// A small fixed size picture, typically used to decorate components.
857  IA2_ROLE_ICON,
858
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.
862  */
863  IA2_ROLE_IMAGE_MAP,
864
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.
867  */
868  IA2_ROLE_INPUT_METHOD_WINDOW,
869
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.
874  */
875  IA2_ROLE_INTERNAL_FRAME,
876
877  /// An object used to present an icon or short string in an interface.
878  IA2_ROLE_LABEL,
879
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.
885  */
886  IA2_ROLE_LAYERED_PANE,
887
888  /** A section whose content is parenthetic or ancillary to the main content
889   of the resource.
890  */
891  IA2_ROLE_NOTE,
892
893 /** A specialized pane whose primary use is inside a dialog.
894   Also refer to MSAA's dialog role.
895  */
896  IA2_ROLE_OPTION_PANE,
897
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.
900  */
901  IA2_ROLE_PAGE,
902
903  /// A paragraph of text.
904  IA2_ROLE_PARAGRAPH,
905
906  /** A radio button that is a menu item.
907   Also refer to MSAA's button and menu item roles.
908  */
909  IA2_ROLE_RADIO_MENU_ITEM,
910
911  /** An object which is redundant with another object in the accessible hierarchy.
912   ATs typically ignore objects with this role.
913  */
914  IA2_ROLE_REDUNDANT_OBJECT,
915
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
919  */
920  IA2_ROLE_ROOT_PANE,
921
922  /** A ruler such as those used in word processors.
923  */
924  IA2_ROLE_RULER,
925
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.
929  */
930  IA2_ROLE_SCROLL_PANE,
931
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.
940  */
941  IA2_ROLE_SECTION,
942
943  /// Object with graphical representation used to represent content on draw pages.
944  IA2_ROLE_SHAPE,
945
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.
949  */
950  IA2_ROLE_SPLIT_PANE,
951
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.
954  */
955  IA2_ROLE_TEAR_OFF_MENU,
956
957  /// An object used as a terminal emulator.
958  IA2_ROLE_TERMINAL,
959
960  /// Collection of objects that constitute a logical text entity.
961  IA2_ROLE_TEXT_FRAME,
962
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.
968  */
969  IA2_ROLE_TOGGLE_BUTTON,
970
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.
975  */
976  IA2_ROLE_VIEW_PORT,
977
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.
986  */
987  IA2_ROLE_COMPLEMENTARY_CONTENT
988
989};
990/*************************************************************************
991 *
992 *  File Name (AccessibleStates.idl)
993 *
994 *  IAccessible2 IDL Specification
995 *
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.
1000 *
1001 *
1002 *  Redistribution and use in source and binary forms, with or without
1003 *  modification, are permitted provided that the following conditions
1004 *  are met:
1005 *
1006 *   1. Redistributions of source code must retain the above copyright
1007 *      notice, this list of conditions and the following disclaimer.
1008 *
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.
1013 *
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.
1018 *
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.
1032 *
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
1036 *
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.
1040 *
1041 ************************************************************************/
1042
1043
1044
1045typedef long AccessibleStates;
1046
1047/** %IAccessible2 specific state bit constants
1048
1049  This enum defines the state bits returned by IAccessible2::states.  The
1050  %IAccessible2 state bits are in addition to those returned by MSAA.
1051*/
1052enum IA2States {
1053
1054/** Indicates a window is currently the active window, or is an active subelement
1055  within a container or table.
1056
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.
1060
1061 This information is important for knowing what to report for trees and potentially
1062  other containers in a virtual buffer.
1063
1064 Also, see ::IA2_STATE_MANAGES_DESCENDANTS for more information.
1065*/
1066IA2_STATE_ACTIVE =                  0x1,
1067
1068/** Indicates that the object is armed.
1069
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.
1077
1078*/
1079IA2_STATE_ARMED =                   0x2,
1080
1081/** Indicates the user interface object corresponding to this object no longer exists. */
1082IA2_STATE_DEFUNCT =                 0x4,
1083
1084/** An object with this state has a caret and implements the IAccessibleText interface.
1085
1086 Such fields may be read-only, so STATE_SYSTEM_READONLY is valid in combination
1087  with IA2_STATE_EDITABLE.
1088
1089*/
1090IA2_STATE_EDITABLE =                0x8,
1091
1092/** Indicates the orientation of this object is horizontal. */
1093IA2_STATE_HORIZONTAL =              0x10,
1094
1095/** Indicates this object is minimized and is represented only by an icon. */
1096IA2_STATE_ICONIFIED =               0x20,
1097
1098/** Indicates an input validation failure. */
1099IA2_STATE_INVALID_ENTRY =           0x40,
1100
1101/** Indicates that this object manages its children.
1102
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.
1110*/
1111IA2_STATE_MANAGES_DESCENDANTS =     0x80,
1112
1113/** Indicates that an object is modal.
1114
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.
1117*/
1118IA2_STATE_MODAL =                   0x100,
1119
1120/** Indicates this text object can contain multiple lines of text. */
1121IA2_STATE_MULTI_LINE =              0x200,
1122
1123/** Indicates this object paints every pixel within its rectangular region. */
1124IA2_STATE_OPAQUE =                  0x400,
1125
1126/** Indicates that user interaction is required.
1127
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.
1130*/
1131IA2_STATE_REQUIRED =                0x800,
1132
1133/** Indicates an object which supports text selection.
1134
1135 Note: This is different than MSAA STATE_SYSTEM_SELECTABLE.
1136*/
1137IA2_STATE_SELECTABLE_TEXT =         0x1000,
1138
1139/** Indicates that this text object can contain only a single line of text. */
1140IA2_STATE_SINGLE_LINE =             0x2000,
1141
1142/** Indicates that the accessible object is stale.
1143
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.
1148*/
1149IA2_STATE_STALE =                   0x4000,
1150
1151/** Indicates that the object implements autocompletion.
1152
1153 This state indicates that a text control will respond to the input of
1154 one ore more characters and cause a sub-item to become selected.  The
1155 selection may also result in events fired on the parent object.
1156*/
1157IA2_STATE_SUPPORTS_AUTOCOMPLETION = 0x8000,
1158
1159/** Indicates this object is transient.
1160
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.
1169
1170 Also, see ::IA2_STATE_MANAGES_DESCENDANTS for more information.
1171 */
1172IA2_STATE_TRANSIENT =               0x10000,
1173
1174/** Indicates the orientation of this object is vertical. */
1175IA2_STATE_VERTICAL =                0x20000,
1176
1177/** Indicates this object is checkable.
1178
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.
1186 */
1187IA2_STATE_CHECKABLE =               0x40000,
1188
1189/** Indicates this object is pinned.
1190
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.
1195 */
1196IA2_STATE_PINNED =                  0x80000
1197
1198};
1199/*************************************************************************
1200 *
1201 *  File Name (Accessible2.idl)
1202 *
1203 *  IAccessible2 IDL Specification
1204 *
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.
1209 *
1210 *
1211 *  Redistribution and use in source and binary forms, with or without
1212 *  modification, are permitted provided that the following conditions
1213 *  are met:
1214 *
1215 *   1. Redistributions of source code must retain the above copyright
1216 *      notice, this list of conditions and the following disclaimer.
1217 *
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.
1222 *
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.
1227 *
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.
1241 *
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
1245 *
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.
1249 *
1250 ************************************************************************/
1251
1252/** @mainpage
1253
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
1273
1274 @section _structs Structs
1275  IA2Locale\n
1276  IA2TableModelChange\n
1277  IA2TextSegment
1278
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.
1289
1290 @section _constants Constants
1291  @ref grpRelations
1292
1293 @section _misc Miscellaneous
1294  @ref _licensePage "BSD License"\n
1295  @ref _generalInfo "General Information"\n
1296
1297 @page _licensePage BSD License
1298  %IAccessible2 IDL Specification
1299
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.
1304
1305  Redistribution and use in source and binary forms, with or without
1306  modification, are permitted provided that the following conditions
1307  are met:
1308
1309   1. Redistributions of source code must retain the above copyright
1310      notice, this list of conditions and the following disclaimer.
1311
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.
1316
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.
1321
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.
1335
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
1339
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.
1344
1345 @page _generalInfo General Information
1346  The following information is applicable to two or more interfaces.
1347
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
1361
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;.
1366
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.
1374
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.
1379
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.
1392
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>
1400
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.
1404
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.
1418
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.
1424
1425 @section _indexes Zero and One Based Indexes
1426  Unless otherwise specified all offsets and indexes are 0 based.
1427
1428 @section _enumBase Enum Base
1429  Note that enums start at 0.
1430
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.
1443
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.
1451
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.
1464    }
1465  }
1466  @endcode
1467
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.
1473
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:
1478
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.
1493
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>
1499
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.
1502
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.
1510
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.
1515
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.
1521
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.
1528
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.
1534
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.
1542
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.
1547
1548**/
1549
1550
1551
1552
1553
1554
1555
1556
1557/** A structure defining the locale of an accessible object.
1558
1559IAccessible2::locale returns this struct.
1560*/
1561typedef 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;
1566
1567/** @brief This interface exposes the primary set of information about an
1568 IAccessible2 enabled accessible object.
1569
1570 This interface must always be provided for objects that support some
1571 portion of the collection of the %IAccessible2 interfaces.
1572
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.
1576 */
1577[object, uuid(E89F726E-C4F4-4c19-BB19-B647D7FA8478)]
1578interface IAccessible2 : IAccessible
1579{
1580
1581  /** @brief Returns the number of accessible relations for this object.
1582   @param [out] nRelations
1583   @retval S_OK
1584  */
1585  [propget] HRESULT nRelations
1586    (
1587     [out, retval] long *nRelations
1588    );
1589
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
1596  */
1597  [propget] HRESULT relation
1598    (
1599     [in] long relationIndex,
1600     [out, retval] IAccessibleRelation **relation
1601    );
1602
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.
1615  */
1616  [propget] HRESULT relations
1617    (
1618     [in] long maxRelations,
1619     [out, size_is(maxRelations), length_is(*nRelations)]
1620       IAccessibleRelation **relations,
1621     [out, retval] long *nRelations
1622    );
1623
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.
1638  */
1639  HRESULT role
1640    (
1641     [out, retval] long *role
1642    );
1643
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
1649  */
1650  HRESULT scrollTo
1651    (
1652     [in] enum IA2ScrollType scrollType
1653    );
1654
1655  /** @brief Moves the top left of an object to a specified location.
1656
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
1665  */
1666  HRESULT scrollToPoint
1667    (
1668     [in] enum IA2CoordinateType coordinateType,
1669     [in] long x,
1670     [in] long y
1671    );
1672
1673  /** @brief Returns grouping information.
1674
1675   Used for tree items, list items, tab panel labels, radio buttons, etc.
1676   Also used for collections of non-text objects.
1677
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.
1697    */
1698  [propget] HRESULT groupPosition
1699    (
1700     [out] long *groupLevel,
1701     [out] long *similarItemsInGroup,
1702     [out, retval] long *positionInGroup
1703    );
1704
1705  /** @brief Returns the bit strip containing any IAccessible2 states.
1706
1707   The IAccessible2 states are in addition to the MSAA states and are defined in
1708   the IA2States enum.
1709
1710   @param [out] states
1711   @retval S_OK
1712  */
1713  [propget] HRESULT states
1714    (
1715     [out, retval] AccessibleStates *states
1716    );
1717
1718  /** @brief Returns the extended role.
1719
1720   An extended role is a role which is dynamically generated by the application.
1721   It is not predefined by the %IAccessible2 specification.
1722
1723   @param [out] extendedRole
1724   @retval S_OK
1725   @retval S_FALSE if there is nothing to return, [out] value is NULL
1726  */
1727  [propget] HRESULT extendedRole
1728    (
1729     [out, retval] BSTR *extendedRole
1730    );
1731
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
1736  */
1737  [propget] HRESULT localizedExtendedRole
1738    (
1739     [out, retval] BSTR *localizedExtendedRole
1740    );
1741
1742  /** @brief Returns the number of extended states.
1743   @param [out] nExtendedStates
1744   @retval S_OK
1745  */
1746  [propget] HRESULT nExtendedStates
1747    (
1748     [out, retval] long *nExtendedStates
1749    );
1750
1751  /** @brief Returns the extended states (array of strings).
1752
1753   An extended state is a state which is dynamically generated by the application.
1754   It is not predefined by the %IAccessible2 specification.
1755
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
1765  */
1766  [propget] HRESULT extendedStates
1767    (
1768     [in] long maxExtendedStates,
1769     [out, size_is(,maxExtendedStates), length_is(,*nExtendedStates)] BSTR **extendedStates,
1770     [out, retval] long *nExtendedStates
1771    );
1772
1773  /** @brief Returns the localized extended states (array of strings).
1774
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
1784  */
1785  [propget] HRESULT localizedExtendedStates
1786    (
1787     [in] long maxLocalizedExtendedStates,
1788     [out, size_is(,maxLocalizedExtendedStates), length_is(,*nLocalizedExtendedStates)] BSTR **localizedExtendedStates,
1789     [out, retval] long *nLocalizedExtendedStates
1790    );
1791
1792  /** @brief Returns the unique ID.
1793
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.
1797
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.
1803
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.
1806
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.
1812
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.
1816
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.
1820
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.
1825
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.
1829
1830   @param [out] uniqueID
1831   @retval S_OK
1832  */
1833  [propget] HRESULT uniqueID
1834    (
1835     [out, retval] long *uniqueID
1836    );
1837
1838  /** @brief Returns the window handle for the parent window which contains this object.
1839
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.
1843
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.
1849
1850   @param [out] windowHandle
1851   @retval S_OK
1852  */
1853  [propget] HRESULT windowHandle
1854    (
1855     [out, retval] HWND *windowHandle
1856    );
1857
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
1864  */
1865  [propget] HRESULT indexInParent
1866    (
1867     [out, retval] long *indexInParent
1868    );
1869
1870  /** @brief Returns the IA2Locale of the accessible object.
1871   @param [out] locale
1872   @retval S_OK
1873  */
1874  [propget] HRESULT locale
1875    (
1876     [out, retval] IA2Locale *locale
1877    );
1878
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
1883  */
1884  [propget] HRESULT attributes
1885    (
1886     [out, retval] BSTR *attributes
1887    );
1888
1889}
1890
1891/*************************************************************************
1892 *
1893 *  File Name (Accessible2_2.idl)
1894 *
1895 *  IAccessible2 IDL Specification
1896 *
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.
1901 *
1902 *
1903 *  Redistribution and use in source and binary forms, with or without
1904 *  modification, are permitted provided that the following conditions
1905 *  are met:
1906 *
1907 *   1. Redistributions of source code must retain the above copyright
1908 *      notice, this list of conditions and the following disclaimer.
1909 *
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.
1914 *
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.
1919 *
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.
1933 *
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
1937 *
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.
1941 *
1942 ************************************************************************/
1943
1944
1945
1946
1947
1948
1949/** @brief This interface exposes the primary set of information about an
1950 IAccessible2 enabled accessible object.
1951
1952 This interface must always be provided for objects that support some
1953 portion of the collection of the %IAccessible2 interfaces.
1954
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.
1958 */
1959[object, uuid(6C9430E9-299D-4E6F-BD01-A82A1E88D3FF)]
1960interface IAccessible2_2 : IAccessible2
1961{
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.
1972  */
1973  [propget] HRESULT attribute
1974    (
1975     [in] BSTR name,
1976     [out, retval] VARIANT *attribute
1977    );
1978
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.
1984  */
1985  [propget] HRESULT accessibleWithCaret
1986    (
1987     [out] IUnknown **accessible,
1988     [out, retval] long *caretOffset
1989    );
1990
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.
2003  */
2004  [propget] HRESULT relationTargetsOfType
2005    (
2006     [in] BSTR type,
2007     [in] long maxTargets,
2008     [out, size_is(,*nTargets)] IUnknown ***targets,
2009     [out, retval] long *nTargets
2010    );
2011
2012}
2013
2014/*************************************************************************
2015 *
2016 *  File Name (AccessibleComponent.idl)
2017 *
2018 *  IAccessible2 IDL Specification
2019 *
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.
2024 *
2025 *
2026 *  Redistribution and use in source and binary forms, with or without
2027 *  modification, are permitted provided that the following conditions
2028 *  are met:
2029 *
2030 *   1. Redistributions of source code must retain the above copyright
2031 *      notice, this list of conditions and the following disclaimer.
2032 *
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.
2037 *
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.
2042 *
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.
2056 *
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
2060 *
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.
2064 *
2065 ************************************************************************/
2066
2067
2068
2069
2070
2071/** A value specifying a color in ARGB format, where each 8 bit color component
2072specifies alpha, red, green, and blue respectively.  The alpha value is optional.
2073*/
2074typedef long IA2Color;
2075
2076/** @brief This interface is implemented by any object that can be rendered
2077 on the screen.
2078
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>
2092*/
2093[object, uuid(1546D4B0-4C98-4bda-89AE-9A64748BDDE4)]
2094interface IAccessibleComponent : IUnknown
2095{
2096
2097  /** @brief Returns the location of the upper left corner of the object's
2098    bounding box relative to the immediate parent object.
2099
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).
2105
2106   @param [out] x
2107   @param [out] y
2108   @retval S_OK
2109  */
2110  [propget] HRESULT locationInParent
2111    (
2112     [out] long *x,
2113     [out, retval] long *y
2114    );
2115
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
2121  */
2122  [propget] HRESULT foreground
2123    (
2124     [out, retval] IA2Color *foreground
2125    );
2126
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
2132   */
2133  [propget] HRESULT background
2134    (
2135     [out, retval] IA2Color *background
2136    );
2137}
2138/*************************************************************************
2139 *
2140 *  File Name (AccessibleValue.idl)
2141 *
2142 *  IAccessible2 IDL Specification
2143 *
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.
2148 *
2149 *
2150 *  Redistribution and use in source and binary forms, with or without
2151 *  modification, are permitted provided that the following conditions
2152 *  are met:
2153 *
2154 *   1. Redistributions of source code must retain the above copyright
2155 *      notice, this list of conditions and the following disclaimer.
2156 *
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.
2161 *
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.
2166 *
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.
2180 *
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
2184 *
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.
2188 *
2189 ************************************************************************/
2190
2191
2192
2193
2194
2195/** @brief This interface gives access to a single numerical value.
2196
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.
2201*/
2202[object, uuid(35855B5B-C566-4fd0-A7B1-E65465600394)]
2203interface IAccessibleValue : IUnknown
2204{
2205
2206  /** @brief Returns the value of this object as a number.
2207
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
2215  */
2216  [propget] HRESULT currentValue
2217    (
2218     [out, retval] VARIANT *currentValue
2219    );
2220
2221  /** @brief Sets the value of this object to the given number.
2222
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.
2228
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
2233  */
2234  HRESULT setCurrentValue
2235    (
2236     [in] VARIANT value
2237    );
2238
2239  /** @brief Returns the maximal value that can be represented by this object.
2240
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.
2243
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
2250  */
2251  [propget] HRESULT maximumValue
2252    (
2253     [out, retval] VARIANT *maximumValue
2254    );
2255
2256  /** @brief Returns the minimal value that can be represented by this object.
2257
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.
2260
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
2267  */
2268  [propget] HRESULT minimumValue
2269    (
2270     [out, retval] VARIANT *minimumValue
2271    );
2272
2273};
2274/*************************************************************************
2275 *
2276 *  File Name (AccessibleText.idl)
2277 *
2278 *  IAccessible2 IDL Specification
2279 *
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.
2284 *
2285 *
2286 *  Redistribution and use in source and binary forms, with or without
2287 *  modification, are permitted provided that the following conditions
2288 *  are met:
2289 *
2290 *   1. Redistributions of source code must retain the above copyright
2291 *      notice, this list of conditions and the following disclaimer.
2292 *
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.
2297 *
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.
2302 *
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.
2316 *
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
2320 *
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.
2324 *
2325 ************************************************************************/
2326
2327
2328
2329
2330
2331
2332/** A structure containing a substring and the start and end offsets in the enclosing string.
2333
2334 IAccessibleText::newText and IAccessibleText::oldText return this struct.
2335*/
2336typedef 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;
2341
2342/** This enum defines values which specify a text boundary type.
2343
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.
2350
2351 The rest of the boundary types must be supported.
2352
2353 This enum is used in IAccessibleText::textBeforeOffset, IAccessibleText::textAtOffset,
2354 and IAccessibleText::textAfterOffset.
2355*/
2356
2357enum 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.
2377};
2378
2379/** @brief This interface gives read-only access to text.
2380
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.
2387
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.
2393
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.
2397
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.
2401
2402 E_FAIL is returned in the following cases
2403 @li endOffset < startOffset
2404 @li endoffset > length
2405*/
2406[object, uuid(24FD2FFB-3AAD-4a08-8335-A3AD89C0FB4B)]
2407interface IAccessibleText : IUnknown
2408{
2409
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.
2420  */
2421  HRESULT addSelection
2422    (
2423     [in] long startOffset,
2424     [in] long endOffset
2425    );
2426
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
2445  */
2446  [propget] HRESULT attributes
2447    (
2448     [in] long offset,
2449     [out] long *startOffset,
2450     [out] long *endOffset,
2451     [out, retval] BSTR *textAttributes
2452    );
2453
2454  /** @brief Returns the position of the caret.
2455
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.
2461
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.
2480  */
2481  [propget] HRESULT caretOffset
2482    (
2483     [out, retval] long *offset
2484    );
2485
2486
2487  /** @brief Returns the bounding box of the specified position.
2488
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.
2498
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
2521  */
2522  [propget] HRESULT characterExtents
2523    (
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
2530    );
2531
2532
2533  /** @brief Returns the number of active non-contiguous selections
2534   @param [out] nSelections
2535   @retval S_OK
2536  */
2537  [propget] HRESULT nSelections
2538    (
2539     [out, retval] long *nSelections
2540    );
2541
2542  /** @brief Returns the text position for the specified screen position.
2543
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.
2549
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
2563
2564   @retval E_INVALIDARG if bad [in] passed
2565    */
2566  [propget] HRESULT offsetAtPoint
2567    (
2568     [in] long x,
2569     [in] long y,
2570     [in] enum IA2CoordinateType coordType,
2571     [out, retval] long *offset
2572    );
2573
2574  /** @brief Returns the character offsets of Nth active text selection
2575
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.
2586
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
2604  */
2605  [propget] HRESULT selection
2606    (
2607     [in] long selectionIndex,
2608     [out] long *startOffset,
2609     [out, retval] long *endOffset
2610    );
2611
2612  /** @brief Returns the substring between the two given indices.
2613
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.
2618
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.
2640  */
2641  [propget] HRESULT text
2642    (
2643     [in] long startOffset,
2644     [in] long endOffset,
2645     [out, retval] BSTR *text
2646    );
2647
2648  /** @brief Returns a text portion before the given position.
2649
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.
2654
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.
2657
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.
2661
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
2683  */
2684  [propget] HRESULT textBeforeOffset
2685    (
2686     [in] long offset,
2687     [in] enum IA2TextBoundaryType boundaryType,
2688     [out] long *startOffset,
2689     [out] long *endOffset,
2690     [out, retval] BSTR *text
2691    );
2692
2693  /** @brief Returns a text portion after the given position.
2694
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.
2699
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.
2702
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.
2706
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
2728  */
2729  [propget] HRESULT textAfterOffset
2730    (
2731     [in] long offset,
2732     [in] enum IA2TextBoundaryType boundaryType,
2733     [out] long *startOffset,
2734     [out] long *endOffset,
2735     [out, retval] BSTR *text
2736    );
2737
2738  /** @brief Returns a text portion that spans the given position.
2739
2740   Returns the substring defined by the specified boundary type at the specified
2741    offset.  Refer to IA2TextBoundaryType for more details.
2742
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.
2748
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.
2752
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
2774  */
2775  [propget] HRESULT textAtOffset
2776    (
2777     [in] long offset,
2778     [in] enum IA2TextBoundaryType boundaryType,
2779     [out] long *startOffset,
2780     [out] long *endOffset,
2781     [out, retval] BSTR *text
2782    );
2783
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
2789  */
2790  HRESULT removeSelection
2791    (
2792     [in] long selectionIndex
2793    );
2794
2795  /** @brief Sets the position of the caret.
2796
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.
2799
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.
2803
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
2817  */
2818  HRESULT setCaretOffset
2819    (
2820     [in] long offset
2821    );
2822
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.
2835  */
2836  HRESULT setSelection
2837    (
2838     [in] long selectionIndex,
2839     [in] long startOffset,
2840     [in] long endOffset
2841    );
2842
2843  /** @brief Returns total number of characters.
2844
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
2849  */
2850  [propget] HRESULT nCharacters
2851    (
2852     [out, retval] long *nCharacters
2853    );
2854
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.
2867  */
2868  HRESULT scrollSubstringTo
2869    (
2870     [in] long startIndex,
2871     [in] long endIndex,
2872     [in] enum IA2ScrollType scrollType
2873    );
2874
2875  /** @brief Moves the top left of a substring to a specified location.
2876
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.
2893  */
2894  HRESULT scrollSubstringToPoint
2895    (
2896     [in] long startIndex,
2897     [in] long endIndex,
2898     [in] enum IA2CoordinateType coordinateType,
2899     [in] long x,
2900     [in] long y
2901    );
2902
2903  /** @brief Returns any inserted text.
2904
2905   Provided for use by the ::IA2_EVENT_TEXT_INSERTED and ::IA2_EVENT_TEXT_UPDATED
2906    event handlers.
2907
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.
2918
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.
2924
2925  */
2926  [propget] HRESULT newText
2927    (
2928     [out, retval] IA2TextSegment *newText
2929    );
2930
2931  /** @brief Returns any removed text.
2932
2933   Provided for use by the IA2_EVENT_TEXT_REMOVED/UPDATED event handlers.
2934
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.
2945
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.
2951  */
2952  [propget] HRESULT oldText
2953    (
2954     [out, retval] IA2TextSegment *oldText
2955    );
2956
2957}
2958/*************************************************************************
2959 *
2960 *  File Name (AccessibleText2.idl)
2961 *
2962 *  IAccessible2 IDL Specification
2963 *
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.
2968 *
2969 *
2970 *  Redistribution and use in source and binary forms, with or without
2971 *  modification, are permitted provided that the following conditions
2972 *  are met:
2973 *
2974 *   1. Redistributions of source code must retain the above copyright
2975 *      notice, this list of conditions and the following disclaimer.
2976 *
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.
2981 *
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.
2986 *
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.
3000 *
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
3004 *
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.
3008 *
3009 ************************************************************************/
3010
3011
3012
3013
3014
3015
3016
3017/** @brief This interface gives read-only access to text.
3018
3019 The %IAccessibleText2 interface extends the functionality of the
3020 %IAccessibleText interface.
3021*/
3022[object, uuid(9690A9CC-5C80-4DF5-852E-2D5AE4189A54)]
3023interface IAccessibleText2 : IAccessibleText
3024{
3025
3026  /** @brief Returns the range and of the specified set of attributes.
3027
3028   Return the range (start and end offsets) and text attributes that correspond
3029    to the given attributes filter at the given offset.
3030
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.
3045   */
3046  [propget] HRESULT attributeRange
3047    (
3048     [in] long offset,
3049     [in] BSTR filter,
3050     [out] long *startOffset,
3051     [out] long *endOffset,
3052     [out, retval] BSTR *attributeValues
3053    );
3054
3055}
3056/*************************************************************************
3057 *
3058 *  File Name (AccessibleEditableText.idl)
3059 *
3060 *  IAccessible2 IDL Specification
3061 *
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.
3066 *
3067 *
3068 *  Redistribution and use in source and binary forms, with or without
3069 *  modification, are permitted provided that the following conditions
3070 *  are met:
3071 *
3072 *   1. Redistributions of source code must retain the above copyright
3073 *      notice, this list of conditions and the following disclaimer.
3074 *
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.
3079 *
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.
3084 *
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.
3098 *
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
3102 *
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.
3106 *
3107 ************************************************************************/
3108
3109
3110
3111
3112
3113
3114/** @brief This interface provides clipboard capability to text objects.
3115
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.
3120
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.
3128
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.
3132*/
3133[object, uuid(A59AA09A-7011-4b65-939D-32B1FB5547E3)]
3134interface IAccessibleEditableText : IUnknown
3135{
3136
3137  /** @brief Copies the text range into the clipboard.
3138
3139   The selection is set to the specified offsets and then selection is copied into
3140   the system clipboard.
3141
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.
3155  */
3156  HRESULT copyText
3157    (
3158     [in] long startOffset,
3159     [in] long endOffset
3160    );
3161
3162  /** @brief Deletes a range of text.
3163
3164   The text between and including the two given indices is deleted
3165    from the text represented by this object.
3166
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.
3179  */
3180  HRESULT deleteText
3181    (
3182     [in] long startOffset,
3183     [in] long endOffset
3184    );
3185
3186  /** @brief Inserts text at the specified position.
3187
3188   The specified string is inserted at the given index into the text
3189    represented by this object.
3190
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
3202  */
3203  HRESULT insertText
3204    (
3205     [in] long offset,
3206     [in] BSTR *text
3207    );
3208
3209  /** @brief Deletes a range of text and copies it to the clipboard.
3210
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.
3213
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.
3227  */
3228  HRESULT cutText
3229    (
3230     [in] long startOffset,
3231     [in] long endOffset
3232    );
3233
3234  /** @brief Pastes content from the clipboard.
3235
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.
3241
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.
3253  */
3254  HRESULT pasteText
3255    (
3256     [in] long offset
3257    );
3258
3259  /** @brief Replaces text.
3260
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.
3266
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.
3281  */
3282  HRESULT replaceText
3283    (
3284     [in] long startOffset,
3285     [in] long endOffset,
3286     [in] BSTR *text
3287    );
3288
3289  /** @brief Replaces the attributes of a text range by the given set of attributes.
3290
3291   Sets the attributes for the text between the two given indices. The old
3292    attributes are replaced by the new list of attributes.
3293
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.
3309  */
3310  HRESULT setAttributes
3311    (
3312     [in] long startOffset,
3313     [in] long endOffset,
3314     [in] BSTR *attributes
3315    );
3316}
3317
3318/*************************************************************************
3319 *
3320 *  File Name (AccessibleHyperlink.idl)
3321 *
3322 *  IAccessible2 IDL Specification
3323 *
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.
3328 *
3329 *
3330 *  Redistribution and use in source and binary forms, with or without
3331 *  modification, are permitted provided that the following conditions
3332 *  are met:
3333 *
3334 *   1. Redistributions of source code must retain the above copyright
3335 *      notice, this list of conditions and the following disclaimer.
3336 *
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.
3341 *
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.
3346 *
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.
3360 *
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
3364 *
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.
3368 *
3369 ************************************************************************/
3370
3371
3372
3373
3374
3375
3376/** @brief This interface represents hyperlinks.
3377
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.
3382
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.
3386
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.
3391
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.
3398
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.
3408
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.
3412
3413*/
3414[object, uuid(01C20F2B-3DD2-400f-949F-AD00BDAB1D41)]
3415interface IAccessibleHyperlink : IAccessibleAction
3416{
3417
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
3432  */
3433  [propget] HRESULT anchor
3434    (
3435     [in] long index,
3436     [out, retval] VARIANT *anchor
3437    );
3438
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
3453  */
3454  [propget] HRESULT anchorTarget
3455    (
3456     [in] long index,
3457     [out, retval] VARIANT *anchorTarget
3458    );
3459
3460  /** @brief Returns the 0 based character offset at which the textual representation of the hyperlink starts.
3461
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
3466  */
3467  [propget] HRESULT startIndex
3468    (
3469     [out, retval] long *index
3470    );
3471
3472  /** @brief Returns the 0 based character offset at which the textual representation of the hyperlink ends.
3473
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
3478  */
3479  [propget] HRESULT endIndex
3480    (
3481     [out, retval] long *index
3482    );
3483
3484  /** @brief Returns whether the target object referenced by this link is still valid.
3485
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.
3488
3489   This has also been used to indicate whether or not the URI of the anchorTarget
3490   is malformed.
3491
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.
3499  */
3500  [propget] HRESULT valid
3501    (
3502     [out, retval] boolean *valid
3503    );
3504}
3505/*************************************************************************
3506 *
3507 *  File Name (AccessibleHypertext.idl)
3508 *
3509 *  IAccessible2 IDL Specification
3510 *
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.
3515 *
3516 *
3517 *  Redistribution and use in source and binary forms, with or without
3518 *  modification, are permitted provided that the following conditions
3519 *  are met:
3520 *
3521 *   1. Redistributions of source code must retain the above copyright
3522 *      notice, this list of conditions and the following disclaimer.
3523 *
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.
3528 *
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.
3533 *
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.
3547 *
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
3551 *
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.
3555 *
3556 ************************************************************************/
3557
3558
3559
3560
3561
3562
3563
3564/** @brief This interface exposes information about hypertext in a document.
3565
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.
3570*/
3571[object, uuid(6B4F8BBF-F1F2-418a-B35E-A195BC4103B9)]
3572interface IAccessibleHypertext : IAccessibleText
3573{
3574
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
3581  */
3582  [propget] HRESULT nHyperlinks
3583    (
3584     [out, retval] long *hyperlinkCount
3585    );
3586
3587  /** @brief Returns the specified link.
3588
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
3599  */
3600  [propget] HRESULT hyperlink
3601    (
3602     [in] long index,
3603     [out, retval] IAccessibleHyperlink **hyperlink
3604    );
3605
3606  /** @brief Returns the index of the hyperlink that is associated with this character index.
3607
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
3620  */
3621  [propget] HRESULT hyperlinkIndex
3622    (
3623     [in] long charIndex,
3624     [out, retval] long *hyperlinkIndex
3625    );
3626
3627}
3628/*************************************************************************
3629 *
3630 *  File Name (AccessibleHypertext2.idl)
3631 *
3632 *  IAccessible2 IDL Specification
3633 *
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.
3638 *
3639 *
3640 *  Redistribution and use in source and binary forms, with or without
3641 *  modification, are permitted provided that the following conditions
3642 *  are met:
3643 *
3644 *   1. Redistributions of source code must retain the above copyright
3645 *      notice, this list of conditions and the following disclaimer.
3646 *
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.
3651 *
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.
3656 *
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.
3670 *
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
3674 *
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.
3678 *
3679 ************************************************************************/
3680
3681
3682
3683
3684
3685
3686
3687/** @brief This interface exposes information about hypertext in a document.
3688
3689 The %IAccessibleHypertext2 interface extends the functionality of the
3690 %IAccessibleHypertext interface.
3691*/
3692[object, uuid(CF64D89F-8287-4B44-8501-A827453A6077)]
3693interface IAccessibleHypertext2 : IAccessibleHypertext
3694{
3695
3696 /** @brief Returns the links for this object.
3697
3698   The returned IAccessibleHyperlink objects encapsulate the hyperlink and
3699    provides several kinds of information describing it.
3700
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
3707  */
3708  [propget] HRESULT hyperlinks
3709    (
3710     [out, size_is(,*nHyperlinks)] IAccessibleHyperlink ***hyperlinks,
3711     [out, retval] long *nHyperlinks
3712    );
3713
3714}
3715/*************************************************************************
3716 *
3717 *  File Name (AccessibleTable.idl)
3718 *
3719 *  IAccessible2 IDL Specification
3720 *
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.
3725 *
3726 *
3727 *  Redistribution and use in source and binary forms, with or without
3728 *  modification, are permitted provided that the following conditions
3729 *  are met:
3730 *
3731 *   1. Redistributions of source code must retain the above copyright
3732 *      notice, this list of conditions and the following disclaimer.
3733 *
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.
3738 *
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.
3743 *
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.
3757 *
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
3761 *
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.
3765 *
3766 ************************************************************************/
3767
3768
3769
3770
3771
3772
3773
3774/** @brief This interface gives access to a two-dimensional table.
3775
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.
3780
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.
3790
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.
3795
3796 Note that newer implementations are now using IAccessibleTable2 and IAccessibleTableCell
3797  rather than this interface.
3798*/
3799[object, uuid(35AD8070-C20C-4fb4-B094-F4F7275DD469)]
3800interface IAccessibleTable : IUnknown
3801{
3802
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
3815  */
3816  [propget] HRESULT accessibleAt
3817    (
3818     [in] long row,
3819     [in] long column,
3820     [out, retval] IUnknown **accessible
3821    );
3822
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
3830  */
3831  [propget] HRESULT caption
3832    (
3833     [out, retval] IUnknown **accessible
3834    );
3835
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.
3849  */
3850  [propget] HRESULT childIndex
3851    (
3852     [in] long rowIndex,
3853     [in] long columnIndex,
3854     [out, retval] long *cellIndex
3855    );
3856
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
3866  */
3867  [propget] HRESULT columnDescription
3868    (
3869     [in] long column,
3870     [out, retval] BSTR *description
3871    );
3872
3873  /** @brief Returns the number of columns occupied by the accessible object
3874    at the specified row and column in the table.
3875
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
3885  */
3886  [propget] HRESULT columnExtentAt
3887    (
3888     [in] long row,
3889     [in] long column,
3890     [out, retval] long *nColumnsSpanned
3891    );
3892
3893  /** @brief Returns the column headers as an %IAccessibleTable object.
3894
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
3902  */
3903  [propget] HRESULT columnHeader
3904    (
3905     [out] IAccessibleTable **accessibleTable,
3906     [out, retval] long *startingRowIndex
3907    );
3908
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
3921  */
3922  [propget] HRESULT columnIndex
3923    (
3924     [in] long cellIndex,
3925     [out, retval] long *columnIndex
3926    );
3927
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
3932  */
3933  [propget] HRESULT nColumns
3934    (
3935     [out, retval] long *columnCount
3936    );
3937
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
3942  */
3943  [propget] HRESULT nRows
3944    (
3945     [out, retval] long *rowCount
3946    );
3947
3948  /** @brief Returns the total number of selected cells
3949   @param [out] cellCount
3950    Number of cells currently selected
3951   @retval S_OK
3952  */
3953  [propget] HRESULT nSelectedChildren
3954    (
3955     [out, retval] long *cellCount
3956    );
3957
3958  /** @brief Returns the total number of selected columns
3959   @param [out] columnCount
3960    Number of columns currently selected
3961   @retval S_OK
3962  */
3963  [propget] HRESULT nSelectedColumns
3964    (
3965     [out, retval] long *columnCount
3966    );
3967
3968  /** @brief Returns the total number of selected rows
3969   @param [out] rowCount
3970    Number of rows currently selected
3971   @retval S_OK
3972  */
3973  [propget] HRESULT nSelectedRows
3974    (
3975     [out, retval] long *rowCount
3976    );
3977
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
3987  */
3988  [propget] HRESULT rowDescription
3989    (
3990     [in] long row,
3991     [out, retval] BSTR *description
3992    );
3993
3994  /** @brief Returns the number of rows occupied by the accessible object
3995    at the specified row and column in the table.
3996
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
4006  */
4007  [propget] HRESULT rowExtentAt
4008    (
4009     [in] long row,
4010     [in] long column,
4011     [out, retval] long *nRowsSpanned
4012    );
4013
4014  /** @brief Returns the row headers as an %IAccessibleTable object.
4015
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
4023  */
4024  [propget] HRESULT rowHeader
4025    (
4026     [out] IAccessibleTable **accessibleTable,
4027     [out, retval] long *startingColumnIndex
4028    );
4029
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
4041  */
4042  [propget] HRESULT rowIndex
4043    (
4044     [in] long cellIndex,
4045     [out, retval] long *rowIndex
4046    );
4047
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
4059  */
4060  [propget] HRESULT selectedChildren
4061    (
4062     [in] long maxChildren,
4063     [out, size_is(,maxChildren), length_is(,*nChildren)] long **children,
4064     [out, retval] long *nChildren
4065    );
4066
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
4078  */
4079  [propget] HRESULT selectedColumns
4080    (
4081     [in] long maxColumns,
4082     [out, size_is(,maxColumns), length_is(,*nColumns)] long **columns,
4083     [out, retval] long *nColumns
4084    );
4085
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
4097  */
4098  [propget] HRESULT selectedRows
4099    (
4100     [in] long maxRows,
4101     [out, size_is(,maxRows), length_is(,*nRows)] long **rows,
4102     [out, retval] long *nRows
4103    );
4104
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
4113  */
4114  [propget] HRESULT summary
4115    (
4116     [out, retval] IUnknown **accessible
4117    );
4118
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
4127  */
4128  [propget] HRESULT isColumnSelected
4129    (
4130     [in] long column,
4131     [out, retval] boolean *isSelected
4132    );
4133
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
4142  */
4143  [propget] HRESULT isRowSelected
4144    (
4145     [in] long row,
4146     [out, retval] boolean *isSelected
4147    );
4148
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
4158  */
4159  [propget] HRESULT isSelected
4160    (
4161     [in] long row,
4162     [in] long column,
4163     [out, retval] boolean *isSelected
4164    );
4165
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
4171  */
4172  HRESULT selectRow
4173    (
4174     [in] long row
4175    );
4176
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
4182  */
4183  HRESULT selectColumn
4184    (
4185     [in] long column
4186    );
4187
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
4193  */
4194  HRESULT unselectRow
4195    (
4196     [in] long row
4197    );
4198
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
4204  */
4205  HRESULT unselectColumn
4206    (
4207     [in] long column
4208    );
4209
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.
4212
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
4228  */
4229  [propget] HRESULT rowColumnExtentsAtIndex
4230    (
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
4237    );
4238
4239  /** @brief Returns the type and extents describing how a table changed.
4240
4241   Provided for use by the IA2_EVENT_TABLE_MODEL_CHANGED event handler.
4242
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.
4254
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
4259  */
4260  [propget] HRESULT modelChange
4261    (
4262     [out, retval] IA2TableModelChange *modelChange
4263    );
4264
4265}
4266/*************************************************************************
4267 *
4268 *  File Name (AccessibleTable2.idl)
4269 *
4270 *  IAccessible2 IDL Specification
4271 *
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.
4276 *
4277 *
4278 *  Redistribution and use in source and binary forms, with or without
4279 *  modification, are permitted provided that the following conditions
4280 *  are met:
4281 *
4282 *   1. Redistributions of source code must retain the above copyright
4283 *      notice, this list of conditions and the following disclaimer.
4284 *
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.
4289 *
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.
4294 *
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.
4308 *
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
4312 *
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.
4316 *
4317 ************************************************************************/
4318
4319
4320
4321
4322
4323
4324
4325/** @brief This interface gives access to a two-dimensional table.
4326
4327 Please also refer to the IAccessibleTableCell interface.
4328
4329 If you want to support older applications you should also support the
4330  IAccessibleTable interface.
4331*/
4332[object, uuid(6167f295-06f0-4cdd-a1fa-02e25153d869)]
4333interface IAccessibleTable2 : IUnknown
4334{
4335
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
4348  */
4349  [propget] HRESULT cellAt
4350    (
4351     [in] long row,
4352     [in] long column,
4353     [out, retval] IUnknown **cell
4354    );
4355
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
4364  */
4365  [propget] HRESULT caption
4366    (
4367     [out, retval] IUnknown **accessible
4368    );
4369
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
4379  */
4380  [propget] HRESULT columnDescription
4381    (
4382     [in] long column,
4383     [out, retval] BSTR *description
4384    );
4385
4386
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
4391  */
4392  [propget] HRESULT nColumns
4393    (
4394     [out, retval] long *columnCount
4395    );
4396
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
4401  */
4402  [propget] HRESULT nRows
4403    (
4404     [out, retval] long *rowCount
4405    );
4406
4407  /** @brief Returns the total number of selected cells
4408   @param [out] cellCount
4409    Number of cells currently selected
4410   @retval S_OK
4411  */
4412  [propget] HRESULT nSelectedCells
4413    (
4414     [out, retval] long *cellCount
4415    );
4416
4417  /** @brief Returns the total number of selected columns
4418   @param [out] columnCount
4419    Number of columns currently selected
4420   @retval S_OK
4421  */
4422  [propget] HRESULT nSelectedColumns
4423    (
4424     [out, retval] long *columnCount
4425    );
4426
4427  /** @brief Returns the total number of selected rows
4428   @param [out] rowCount
4429    Number of rows currently selected
4430   @retval S_OK
4431  */
4432  [propget] HRESULT nSelectedRows
4433    (
4434     [out, retval] long *rowCount
4435    );
4436
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
4446  */
4447  [propget] HRESULT rowDescription
4448    (
4449     [in] long row,
4450     [out, retval] BSTR *description
4451    );
4452
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
4462  */
4463  [propget] HRESULT selectedCells
4464    (
4465     [out, size_is(,*nSelectedCells)] IUnknown ***cells,
4466     [out, retval] long *nSelectedCells
4467    );
4468
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
4478  */
4479  [propget] HRESULT selectedColumns
4480    (
4481     [out, size_is(,*nColumns)] long **selectedColumns,
4482     [out, retval] long *nColumns
4483    );
4484
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
4494  */
4495  [propget] HRESULT selectedRows
4496    (
4497     [out, size_is(,*nRows)] long **selectedRows,
4498     [out, retval] long *nRows
4499    );
4500
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
4510  */
4511  [propget] HRESULT summary
4512    (
4513     [out, retval] IUnknown **accessible
4514    );
4515
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
4524  */
4525  [propget] HRESULT isColumnSelected
4526    (
4527     [in] long column,
4528     [out, retval] boolean *isSelected
4529    );
4530
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
4539  */
4540  [propget] HRESULT isRowSelected
4541    (
4542     [in] long row,
4543     [out, retval] boolean *isSelected
4544    );
4545
4546  /** @brief Selects a row and unselects all previously selected rows.
4547
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
4558  */
4559  HRESULT selectRow
4560    (
4561     [in] long row
4562    );
4563
4564  /** @brief Selects a column and unselects all previously selected columns.
4565
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
4576  */
4577  HRESULT selectColumn
4578    (
4579     [in] long column
4580    );
4581
4582  /** @brief Unselects one row, leaving other selected rows selected (if any).
4583
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
4593  */
4594  HRESULT unselectRow
4595    (
4596     [in] long row
4597    );
4598
4599  /** @brief Unselects one column, leaving other selected columns selected (if any).
4600
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
4610  */
4611  HRESULT unselectColumn
4612    (
4613     [in] long column
4614    );
4615
4616  /** @brief Returns the type and extents describing how a table changed.
4617
4618   Provided for use by the IA2_EVENT_TABLE_MODEL_CHANGED event handler.
4619
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.
4631
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
4636  */
4637  [propget] HRESULT modelChange
4638    (
4639     [out, retval] IA2TableModelChange *modelChange
4640    );
4641
4642}
4643/*************************************************************************
4644 *
4645 *  File Name (AccessibleTableCell.idl)
4646 *
4647 *  IAccessible2 IDL Specification
4648 *
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.
4653 *
4654 *
4655 *  Redistribution and use in source and binary forms, with or without
4656 *  modification, are permitted provided that the following conditions
4657 *  are met:
4658 *
4659 *   1. Redistributions of source code must retain the above copyright
4660 *      notice, this list of conditions and the following disclaimer.
4661 *
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.
4666 *
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.
4671 *
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.
4685 *
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
4689 *
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.
4693 *
4694 ************************************************************************/
4695
4696
4697
4698
4699
4700
4701/** @brief This interface gives access to the cells of a two-dimensional table.
4702
4703 Please also refer to the IAccessibleTable2 interface.
4704
4705*/
4706[object, uuid(594116B1-C99F-4847-AD06-0A7A86ECE645)]
4707interface IAccessibleTableCell : IUnknown
4708{
4709
4710  /** @brief Returns the number of columns occupied by this cell accessible.
4711
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
4716  */
4717  [propget] HRESULT columnExtent
4718    (
4719     [out, retval] long *nColumnsSpanned
4720    );
4721
4722  /** @brief Returns the column headers as an array of cell accessibles.
4723
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
4731  */
4732  [propget] HRESULT columnHeaderCells
4733    (
4734     [out, size_is(,*nColumnHeaderCells)] IUnknown ***cellAccessibles,
4735     [out, retval] long *nColumnHeaderCells
4736    );
4737
4738  /** @brief Translates this cell accessible into the corresponding column index.
4739
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
4744  */
4745  [propget] HRESULT columnIndex
4746    (
4747     [out, retval] long *columnIndex
4748    );
4749
4750  /** @brief Returns the number of rows occupied by this cell accessible.
4751
4752   @param [out] nRowsSpanned
4753    Returns the row extent of the specified cell.
4754   @retval S_OK
4755  */
4756  [propget] HRESULT rowExtent
4757    (
4758     [out, retval] long *nRowsSpanned
4759    );
4760
4761  /** @brief Returns the row headers as an array of cell accessibles.
4762
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
4770  */
4771  [propget] HRESULT rowHeaderCells
4772    (
4773     [out, size_is(,*nRowHeaderCells)] IUnknown ***cellAccessibles,
4774     [out, retval] long *nRowHeaderCells
4775    );
4776
4777  /** @brief Translates this cell accessible into the corresponding row index.
4778
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
4783  */
4784  [propget] HRESULT rowIndex
4785    (
4786     [out, retval] long *rowIndex
4787    );
4788
4789  /** @brief Returns a boolean value indicating whether this cell is selected.
4790
4791   @param [out] isSelected
4792    Returns TRUE if the specified cell is selected and FALSE otherwise.
4793   @retval S_OK
4794  */
4795  [propget] HRESULT isSelected
4796    (
4797     [out, retval] boolean *isSelected
4798    );
4799
4800  /** @brief Gets the row and column indexes and extents of this cell accessible
4801    and whether or not it is selected.
4802
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
4815  */
4816  [propget] HRESULT rowColumnExtents
4817    (
4818     [out] long *row,
4819     [out] long *column,
4820     [out] long *rowExtents,
4821     [out] long *columnExtents,
4822     [out, retval] boolean *isSelected
4823    );
4824
4825  /** @brief Returns a reference to the accessible of the containing table.
4826
4827   @param [out] table
4828    Returns a reference to the IUnknown of the containing table.
4829   @retval S_OK
4830  */
4831  [propget] HRESULT table
4832    (
4833     [out, retval] IUnknown **table
4834    );
4835
4836}
4837/*************************************************************************
4838 *
4839 *  File Name (AccessibleImage.idl)
4840 *
4841 *  IAccessible2 IDL Specification
4842 *
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.
4847 *
4848 *
4849 *  Redistribution and use in source and binary forms, with or without
4850 *  modification, are permitted provided that the following conditions
4851 *  are met:
4852 *
4853 *   1. Redistributions of source code must retain the above copyright
4854 *      notice, this list of conditions and the following disclaimer.
4855 *
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.
4860 *
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.
4865 *
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.
4879 *
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
4883 *
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.
4887 *
4888 ************************************************************************/
4889
4890
4891
4892
4893
4894
4895/** @brief This interface represents images and icons.
4896
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>
4908*/
4909[object, uuid(FE5ABB3D-615E-4f7b-909F-5F0EDA9E8DDE)]
4910interface IAccessibleImage : IUnknown
4911{
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
4916  */
4917  [propget] HRESULT description
4918    (
4919     [out, retval] BSTR *description
4920    );
4921
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
4928  */
4929  [propget] HRESULT imagePosition
4930    (
4931     [in] enum IA2CoordinateType coordinateType,
4932     [out] long *x,
4933     [out, retval] long *y
4934    );
4935
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
4940  */
4941
4942  [propget] HRESULT imageSize
4943    (
4944     [out] long *height,
4945     [out, retval] long *width
4946    );
4947}
4948/*************************************************************************
4949 *
4950 *  File Name (AccessibleEventID.idl)
4951 *
4952 *  IAccessible2 IDL Specification
4953 *
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.
4958 *
4959 *
4960 *  Redistribution and use in source and binary forms, with or without
4961 *  modification, are permitted provided that the following conditions
4962 *  are met:
4963 *
4964 *   1. Redistributions of source code must retain the above copyright
4965 *      notice, this list of conditions and the following disclaimer.
4966 *
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.
4971 *
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.
4976 *
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.
4990 *
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
4994 *
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.
4998 *
4999 ************************************************************************/
5000
5001/** %IAccessible2 specific event constants
5002
5003 This enum defines the event IDs fired by %IAccessible2 objects.  The event IDs
5004 are in addition to those used by MSAA.
5005*/
5006enum IA2EventID {
5007
5008  /** The change of the number or attributes of actions of an accessible
5009    object is signaled by events of this type.
5010  */
5011  IA2_EVENT_ACTION_CHANGED = 0x101,
5012
5013  /** <b>Deprecated.</b> The active descendant of a component has changed.
5014
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.
5018  */
5019  IA2_EVENT_ACTIVE_DECENDENT_CHANGED,
5020
5021  /** The active descendant of a component has changed.  The active descendant
5022    is used in objects with transient children.
5023
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.
5031  */
5032  IA2_EVENT_ACTIVE_DESCENDANT_CHANGED = IA2_EVENT_ACTIVE_DECENDENT_CHANGED,
5033
5034  /** The document wide attributes of the document object have changed.
5035  */
5036  IA2_EVENT_DOCUMENT_ATTRIBUTE_CHANGED,
5037
5038  /** The contents of the document have changed.
5039  */
5040  IA2_EVENT_DOCUMENT_CONTENT_CHANGED,
5041
5042  /** The loading of the document has completed.
5043  */
5044  IA2_EVENT_DOCUMENT_LOAD_COMPLETE,
5045
5046  /** The loading of the document was interrupted.
5047  */
5048  IA2_EVENT_DOCUMENT_LOAD_STOPPED,
5049
5050  /** The document contents are being reloaded.
5051  */
5052  IA2_EVENT_DOCUMENT_RELOAD,
5053
5054  /** The ending index of this link within the containing string has changed.
5055  */
5056  IA2_EVENT_HYPERLINK_END_INDEX_CHANGED,
5057
5058  /** The number of anchors associated with this hyperlink object has changed.
5059  */
5060  IA2_EVENT_HYPERLINK_NUMBER_OF_ANCHORS_CHANGED,
5061
5062  /** The hyperlink selected state changed from selected to unselected or
5063    from unselected to selected.
5064  */
5065  IA2_EVENT_HYPERLINK_SELECTED_LINK_CHANGED,
5066
5067  /** One of the links associated with the hypertext object has been activated.
5068  */
5069  IA2_EVENT_HYPERTEXT_LINK_ACTIVATED,
5070
5071  /** One of the links associated with the hypertext object has been selected.
5072  */
5073  IA2_EVENT_HYPERTEXT_LINK_SELECTED,
5074
5075  /** The starting index of this link within the containing string has changed.
5076  */
5077  IA2_EVENT_HYPERLINK_START_INDEX_CHANGED,
5078
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.
5082  */
5083  IA2_EVENT_HYPERTEXT_CHANGED,
5084
5085  /** The number of hyperlinks associated with a hypertext object changed
5086  */
5087  IA2_EVENT_HYPERTEXT_NLINKS_CHANGED,
5088
5089  /** An object's attributes changed.
5090  Also see ::IA2_EVENT_TEXT_ATTRIBUTE_CHANGED.
5091  */
5092  IA2_EVENT_OBJECT_ATTRIBUTE_CHANGED,
5093
5094  /** A slide changed in a presentation document or a page boundary was
5095   crossed in a word processing document.
5096  */
5097  IA2_EVENT_PAGE_CHANGED,
5098
5099  /** The caret moved from one section to the next.
5100  */
5101  IA2_EVENT_SECTION_CHANGED,
5102
5103  /** A table caption changed.
5104  */
5105  IA2_EVENT_TABLE_CAPTION_CHANGED,
5106
5107  /** A table's column description changed.
5108  */
5109  IA2_EVENT_TABLE_COLUMN_DESCRIPTION_CHANGED,
5110
5111  /** A table's column header changed.
5112  */
5113  IA2_EVENT_TABLE_COLUMN_HEADER_CHANGED,
5114
5115  /** A table's data changed.
5116  */
5117  IA2_EVENT_TABLE_MODEL_CHANGED,
5118
5119  /** A table's row description changed.
5120  */
5121  IA2_EVENT_TABLE_ROW_DESCRIPTION_CHANGED,
5122
5123  /** A table's row header changed.
5124  */
5125  IA2_EVENT_TABLE_ROW_HEADER_CHANGED,
5126
5127  /** A table's summary changed.
5128  */
5129  IA2_EVENT_TABLE_SUMMARY_CHANGED,
5130
5131  /** A text object's attributes changed.
5132  Also see ::IA2_EVENT_OBJECT_ATTRIBUTE_CHANGED.
5133  */
5134  IA2_EVENT_TEXT_ATTRIBUTE_CHANGED,
5135
5136  /** The caret has moved to a new position.
5137  */
5138  IA2_EVENT_TEXT_CARET_MOVED,
5139
5140  /** <b>Deprecated.</b>  This event is equivalent to ::IA2_EVENT_TEXT_UPDATED.
5141  */
5142  IA2_EVENT_TEXT_CHANGED,
5143
5144  /** The caret moved from one column to the next.
5145  */
5146  IA2_EVENT_TEXT_COLUMN_CHANGED,
5147
5148  /** Text was inserted.
5149  */
5150  IA2_EVENT_TEXT_INSERTED,
5151
5152  /** Text was removed.
5153  */
5154  IA2_EVENT_TEXT_REMOVED,
5155
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.
5160  */
5161  IA2_EVENT_TEXT_UPDATED,
5162
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.
5167
5168  */
5169  IA2_EVENT_TEXT_SELECTION_CHANGED,
5170
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.
5174  */
5175  IA2_EVENT_VISIBLE_DATA_CHANGED
5176
5177};
5178/*************************************************************************
5179 *
5180 *  File Name (AccessibleApplication.idl)
5181 *
5182 *  IAccessible2 IDL Specification
5183 *
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.
5188 *
5189 *
5190 *  Redistribution and use in source and binary forms, with or without
5191 *  modification, are permitted provided that the following conditions
5192 *  are met:
5193 *
5194 *   1. Redistributions of source code must retain the above copyright
5195 *      notice, this list of conditions and the following disclaimer.
5196 *
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.
5201 *
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.
5206 *
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.
5220 *
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
5224 *
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.
5228 *
5229 ************************************************************************/
5230
5231
5232
5233
5234
5235
5236/** @brief This interface gives access to the application's name and version information.
5237
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.
5242
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.
5246*/
5247[object, uuid(D49DED83-5B25-43F4-9B95-93B44595979E)]
5248interface IAccessibleApplication : IUnknown
5249{
5250
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
5255  */
5256  [propget] HRESULT appName
5257    (
5258     [out, retval] BSTR *name
5259    );
5260
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
5268  */
5269  [propget] HRESULT appVersion
5270    (
5271     [out, retval] BSTR *version
5272    );
5273
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
5278  */
5279  [propget] HRESULT toolkitName
5280    (
5281     [out, retval] BSTR *name
5282    );
5283
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
5291  */
5292  [propget] HRESULT toolkitVersion
5293    (
5294     [out, retval] BSTR *version
5295    );
5296
5297}
5298
5299/*************************************************************************
5300 *
5301 *  File Name (AccessibleDocument.idl)
5302 *
5303 *  IAccessible2 IDL Specification
5304 *
5305 *  Copyright (c) 2013 Linux Foundation
5306 *  All rights reserved.
5307 *
5308 *
5309 *  Redistribution and use in source and binary forms, with or without
5310 *  modification, are permitted provided that the following conditions
5311 *  are met:
5312 *
5313 *   1. Redistributions of source code must retain the above copyright
5314 *      notice, this list of conditions and the following disclaimer.
5315 *
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.
5320 *
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.
5325 *
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.
5339 *
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
5343 *
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.
5347 *
5348 ************************************************************************/
5349
5350
5351
5352
5353
5354/** @brief This interface represents documents.
5355
5356 This interface is used for a representation of documents.
5357*/
5358[object, uuid(C48C7FCF-4AB5-4056-AFA6-902D6E1D1149)]
5359interface IAccessibleDocument : IUnknown
5360{
5361  /** @brief Returns the most recently used anchor target within a document.
5362
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.
5366
5367   @param [out] accessible
5368   @retval S_OK
5369   @retval S_FALSE if there are no existing valid anchor targets, [out] value is NULL.
5370  */
5371  [propget] HRESULT anchorTarget
5372    (
5373     [out, retval] IUnknown **accessible
5374    );
5375
5376}
5377/*************************************************************************
5378 *
5379 *  File Name (IA2TypeLibrary.idl)
5380 *
5381 *  IAccessible2 IDL Specification
5382 *
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.
5387 *
5388 *
5389 *  Redistribution and use in source and binary forms, with or without
5390 *  modification, are permitted provided that the following conditions
5391 *  are met:
5392 *
5393 *   1. Redistributions of source code must retain the above copyright
5394 *      notice, this list of conditions and the following disclaimer.
5395 *
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.
5400 *
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.
5405 *
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.
5419 *
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
5423 *
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.
5427 *
5428 ************************************************************************/
5429
5430// This is not a standalone file.  It is to be appended to the end of the
5431// merged IDL file.
5432
5433cpp_quote("")
5434cpp_quote("// Type Library Definitions")
5435cpp_quote("")
5436
5437[
5438    uuid(CE3F726E-D1D3-44FE-B995-FF1DB3B48B2B),
5439    helpstring("IAccessible2 Type Library"),
5440    version(1.3),
5441    hidden
5442]
5443
5444library IAccessible2Lib
5445{
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;
5474}
5475
5476/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
5477