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