1 /*************************************************************************
3 * File Name (AccessibleTable.idl)
5 * IAccessible2 IDL Specification
7 * Copyright (c) 2007, 2013 Linux Foundation
8 * Copyright (c) 2006 IBM Corporation
9 * Copyright (c) 2000, 2006 Sun Microsystems, Inc.
10 * All rights reserved.
13 * Redistribution and use in source and binary forms, with or without
14 * modification, are permitted provided that the following conditions
17 * 1. Redistributions of source code must retain the above copyright
18 * notice, this list of conditions and the following disclaimer.
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.
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
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.
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
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.
52 ************************************************************************/
57 import
"Accessible2.idl";
58 import
"IA2CommonTypes.idl";
60 /** @brief This interface gives access to a two-dimensional table.
62 Typically all accessible objects that represent cells or cell-clusters of a table
63 will be at the same time children of the table. In this case IAccessible2::indexInParent
64 will return the child index which then can be used when calling IAccessibleTable::rowIndex
65 and IAccessibleTable::columnIndex.
67 However, in some cases that kind of implementation will not be possible. When
68 the table cells are not direct children of a table, the object representing
69 the cell can define a "table-cell-index" object attribute identifying the 0
70 based table cell index. This object attribute is obtained by parsing the
71 attribute string returned by IAccessible2::attributes. The "table-cell-index"
72 attribute can be used just like a child index of the typical case. ATs should
73 first test for the presence of the "table-cell-index" attribute and if it is not
74 present then IAccessible2::indexInParent can be used as in the typical case
75 where cells are direct children of the table.
77 The range of valid coordinates for this interface are implementation dependent.
78 However, that range includes at least the intervals from the from the first row
79 or column with the index 0 up to the last (but not including) used row or column
80 as returned by IAccessibleTable::nRows and IAccessibleTable::nColumns.
82 Note that newer implementations are now using IAccessibleTable2 and IAccessibleTableCell
83 rather than this interface.
85 [object, uuid(35AD8070
-C20C
-4fb4
-B094
-F4F7275DD469
)]
86 interface IAccessibleTable
: IUnknown
89 /** @brief Returns the accessible object at the specified row and column in
90 the table. This object could be an IAccessible or an IAccessible2.
92 The 0 based row index for which to retrieve the cell.
94 The 0 based column index for which to retrieve the cell.
95 @param [out] accessible
96 If both row and column index are valid then the corresponding accessible
97 object is returned that represents the requested cell regardless of whether
98 the cell is currently visible (on the screen).
100 @retval E_INVALIDARG if bad [in] passed, [out] value is NULL
102 [propget] HRESULT accessibleAt
106 [out, retval] IUnknown
**accessible
109 /** @brief Returns the caption for the table. The returned object could be
110 an IAccessible or an IAccessible2.
111 @param [out] accessible
112 If the table has a caption then a reference to it is returned, else a NULL
115 @retval S_FALSE if there is nothing to return, [out] value is NULL
117 [propget] HRESULT caption
119 [out, retval] IUnknown
**accessible
122 /** @brief Translates the given row and column indexes into the corresponding cell index.
124 0 based row index for the cell.
125 @param [in] columnIndex
126 0 based column index for the cell.
127 @param [out] cellIndex
128 Returns the 0 based index of the cell at the specified row and column indexes.
130 @retval E_INVALIDARG if bad [in] passed, [out] value is 0
131 @note The returned value is not necessarily a child index of the immediate parent.
132 In cases where the table cells are not direct children of the table the index
133 is actually the cell index, i.e. conceptually it's an index into a one dimensional
134 array of cells laid out in row order.
136 [propget] HRESULT childIndex
139 [in] long columnIndex
,
140 [out, retval] long *cellIndex
143 /** @brief Returns the description text of the specified column in the table.
145 The 0 based index of the column for which to retrieve the description.
146 @param [out] description
147 Returns the description text of the specified column in the table if such a
148 description exists. Otherwise a NULL pointer is returned.
150 @retval S_FALSE if there is nothing to return, [out] value is NULL
151 @retval E_INVALIDARG if bad [in] passed, [out] value is NULL
153 [propget] HRESULT columnDescription
156 [out, retval] BSTR *description
159 /** @brief Returns the number of columns occupied by the accessible object
160 at the specified row and column in the table.
162 The result is greater than 1 if the specified cell spans multiple columns.
164 0 based row index of the accessible for which to return the column extent.
166 0 based column index of the accessible for which to return the column extent.
167 @param [out] nColumnsSpanned
168 Returns the 1 based column extent of the specified cell.
170 @retval E_INVALIDARG if bad [in] passed, [out] value is 0
172 [propget] HRESULT columnExtentAt
176 [out, retval] long *nColumnsSpanned
179 /** @brief Returns the column headers as an %IAccessibleTable object.
181 Content and size of the returned table are implementation dependent.
182 @param [out] accessibleTable
184 @param [out] startingRowIndex
185 The 0 based row index where the header starts, usually 0.
187 @retval S_FALSE if there is no header, [out] values are NULL and 0 respectively
189 [propget] HRESULT columnHeader
191 [out] IAccessibleTable
**accessibleTable
,
192 [out, retval] long *startingRowIndex
195 /** @brief Translates the given cell index into the corresponding column index.
196 @param [in] cellIndex
197 0 based index of the cell in the parent or closest ancestor table. Typically this
198 is the value returned from IAccessible2::indexInParent, but in the case where the
199 table cells are not direct children of the table this is the cell index specified
200 by the "table-cell-index" object attribute obtained from parsing the attributes
201 string returned by calling IAccessible2::attributes on the cell object.
202 @param [out] columnIndex
203 Returns the 0 based column index of the cell of the specified child or the index of
204 the first column if the child spans multiple columns.
206 @retval E_INVALIDARG if bad [in] passed, [out] value is 0
208 [propget] HRESULT columnIndex
211 [out, retval] long *columnIndex
214 /** @brief Returns the total number of columns in table
215 @param [out] columnCount
216 Number of columns in table (including columns outside the current viewport)
219 [propget] HRESULT nColumns
221 [out, retval] long *columnCount
224 /** @brief Returns the total number of rows in table
225 @param [out] rowCount
226 Number of rows in table (including rows outside the current viewport)
229 [propget] HRESULT nRows
231 [out, retval] long *rowCount
234 /** @brief Returns the total number of selected cells
235 @param [out] cellCount
236 Number of cells currently selected
239 [propget] HRESULT nSelectedChildren
241 [out, retval] long *cellCount
244 /** @brief Returns the total number of selected columns
245 @param [out] columnCount
246 Number of columns currently selected
249 [propget] HRESULT nSelectedColumns
251 [out, retval] long *columnCount
254 /** @brief Returns the total number of selected rows
255 @param [out] rowCount
256 Number of rows currently selected
259 [propget] HRESULT nSelectedRows
261 [out, retval] long *rowCount
264 /** @brief Returns the description text of the specified row in the table.
266 The 0 based index of the row for which to retrieve the description.
267 @param [out] description
268 Returns the description text of the specified row in the table if such a
269 description exists. Otherwise a NULL pointer is returned.
271 @retval S_FALSE if there is nothing to return, [out] value is NULL
272 @retval E_INVALIDARG if bad [in] passed, [out] value is NULL
274 [propget] HRESULT rowDescription
277 [out, retval] BSTR *description
280 /** @brief Returns the number of rows occupied by the accessible object
281 at the specified row and column in the table.
283 The result is greater than 1 if the specified cell spans multiple rows.
285 0 based row index of the accessible for which to return the row extent.
287 0 based column index of the accessible for which to return the row extent.
288 @param [out] nRowsSpanned
289 Returns the row extent of the specified cell.
291 @retval E_INVALIDARG if bad [in] passed, [out] value is 0
293 [propget] HRESULT rowExtentAt
297 [out, retval] long *nRowsSpanned
300 /** @brief Returns the row headers as an %IAccessibleTable object.
302 Content and size of the returned table are implementation dependent.
303 @param [out] accessibleTable
305 @param [out] startingColumnIndex
306 The 0 based column index where the header starts, usually 0.
308 @retval S_FALSE if there is no header, [out] values are NULL and 0 respectively
310 [propget] HRESULT rowHeader
312 [out] IAccessibleTable
**accessibleTable
,
313 [out, retval] long *startingColumnIndex
316 /** @brief Translates the given cell index into a row index.
317 @param [in] cellIndex
318 0 based index of the cell in the parent or closest ancestor table. Typically this
319 is the value returned from IAccessible2::indexInParent, but in the case where the
320 table cells are not direct children of the table this is the cell index specified
321 by the "table-cell-index" object attribute obtained from parsing the attributes
322 string returned by calling IAccessible2::attributes on the cell object.
323 @param [out] rowIndex
326 @retval E_INVALIDARG if bad [in] passed, [out] value is 0
328 [propget] HRESULT rowIndex
331 [out, retval] long *rowIndex
334 /** @brief Returns a list of cell indexes currently selected (0 based).
335 @param [in] maxChildren
336 This parameter is ignored. Refer to @ref _arrayConsideration
337 "Special Consideration when using Arrays" for more details.
338 @param [out] children
339 An array of cell indexes of selected cells (each index is 0 based),
340 allocated by the server. The client must free it with CoTaskMemFree.
341 @param [out] nChildren
342 The number of cell indexes returned; the size of the returned array.
344 @retval S_FALSE if there are none, [out] values are NULL and 0 respectively
346 [propget] HRESULT selectedChildren
348 [in] long maxChildren
,
349 [out, size_is(,maxChildren
), length_is(,*nChildren
)] long **children
,
350 [out, retval] long *nChildren
353 /** @brief Returns a list of column indexes currently selected (0 based).
354 @param [in] maxColumns
355 This parameter is ignored. Refer to @ref _arrayConsideration
356 "Special Consideration when using Arrays" for more details.
358 An array of column indexes of selected columns (each index is 0 based), allocated
359 by the server. The client must free it with CoTaskMemFree.
360 @param [out] nColumns
361 The number of column indexes returned; the size of the returned array.
363 @retval S_FALSE if there are none, [out] values are NULL and 0 respectively
365 [propget] HRESULT selectedColumns
367 [in] long maxColumns
,
368 [out, size_is(,maxColumns
), length_is(,*nColumns
)] long **columns
,
369 [out, retval] long *nColumns
372 /** @brief Returns a list of row indexes currently selected (0 based).
374 This parameter is ignored. Refer to @ref _arrayConsideration
375 "Special Consideration when using Arrays" for more details.
377 An array of row indexes of selected rows (each index is 0 based), allocated
378 by the server. The client must free it with CoTaskMemFree.
380 The number of row indexes returned; the size of the returned array.
382 @retval S_FALSE if there are none, [out] values are NULL and 0 respectively
384 [propget] HRESULT selectedRows
387 [out, size_is(,maxRows
), length_is(,*nRows
)] long **rows
,
388 [out, retval] long *nRows
391 /** @brief Returns the summary description of the table. The returned object could be
392 an IAccessible or an IAccessible2.
393 @param [out] accessible
394 Returns a reference to an implementation dependent accessible object
395 representing the table's summary or a NULL pointer if the table
396 does not support a summary.
398 @retval S_FALSE if there is nothing to return, [out] value is NULL
400 [propget] HRESULT summary
402 [out, retval] IUnknown
**accessible
405 /** @brief Returns a boolean value indicating whether the specified column is
408 0 based index of the column for which to determine whether it is selected.
409 @param [out] isSelected
410 Returns TRUE if the specified column is selected completely and FALSE otherwise.
412 @retval E_INVALIDARG if bad [in] passed, [out] value is FALSE
414 [propget] HRESULT isColumnSelected
417 [out, retval] boolean *isSelected
420 /** @brief Returns a boolean value indicating whether the specified row is completely
423 0 based index of the row for which to determine whether it is selected.
424 @param [out] isSelected
425 Returns TRUE if the specified row is selected completely and FALSE otherwise.
427 @retval E_INVALIDARG if bad [in] passed, [out] value is FALSE
429 [propget] HRESULT isRowSelected
432 [out, retval] boolean *isSelected
435 /** @brief Returns a boolean value indicating whether the specified cell is selected.
437 0 based index of the row for the cell to determine whether it is selected.
439 0 based index of the column for the cell to determine whether it is selected.
440 @param [out] isSelected
441 Returns TRUE if the specified cell is selected and FALSE otherwise.
443 @retval E_INVALIDARG if bad [in] passed, [out] value is FALSE
445 [propget] HRESULT isSelected
449 [out, retval] boolean *isSelected
452 /** @brief Selects a row and unselects all previously selected rows.
454 0 based index of the row to be selected.
456 @retval E_INVALIDARG if bad [in] passed
463 /** @brief Selects a column and unselects all previously selected columns.
465 0 based index of the column to be selected.
467 @retval E_INVALIDARG if bad [in] passed
474 /** @brief Unselects one row, leaving other selected rows selected (if any).
476 0 based index of the row to be unselected.
478 @retval E_INVALIDARG if bad [in] passed
485 /** @brief Unselects one column, leaving other selected columns selected (if any).
487 0 based index of the column to be unselected.
489 @retval E_INVALIDARG if bad [in] passed
491 HRESULT unselectColumn
496 /** @brief Given a cell index, gets the row and column indexes and extents of a cell
497 and whether or not it is selected.
499 This is a convenience function. It is not mandatory to implement it.
501 0 based index of this cell in the table.
505 0 based column index.
506 @param [out] rowExtents
507 Number of cells spanned by this cell in this row.
508 @param [out] columnExtents
509 Number of cells spanned by this cell in this column.
510 @param [out] isSelected
511 Indicates if the specified cell is selected.
513 @retval E_INVALIDARG if bad [in] passed, [out] values are 0s and FALSE respectively
515 [propget] HRESULT rowColumnExtentsAtIndex
520 [out] long *rowExtents
,
521 [out] long *columnExtents
,
522 [out, retval] boolean *isSelected
525 /** @brief Returns the type and extents describing how a table changed.
527 Provided for use by the IA2_EVENT_TABLE_MODEL_CHANGED event handler.
529 This data is only guaranteed to be valid while the thread notifying the event
530 continues. Once the handler has returned, the validity of the data depends on
531 how the server manages the life cycle of its objects. Also, note that the server
532 may have different life cycle management strategies for controls depending on
533 whether or not a control manages its children. Lists, trees, and tables can have
534 a large number of children and thus it's possible that the child objects for those
535 controls would only be created as needed. Servers should document their life cycle
536 strategy as this will be of interest to assistive technology or script engines
537 accessing data out of process or from other threads. Servers only need to save the
538 most recent row and column values associated with the change and a scope of the
539 entire application is adequate.
541 @param [out] modelChange
542 A struct of (type(insert, delete, update), firstRow, lastRow, firstColumn, lastColumn).
544 @retval S_FALSE if there is nothing to return, [out] value is NULL
546 [propget] HRESULT modelChange
548 [out, retval] IA2TableModelChange
*modelChange