1 /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
2 /* vim: set ts=2 et sw=2 tw=80: */
3 /* This Source Code Form is subject to the terms of the Mozilla Public
4 * License, v. 2.0. If a copy of the MPL was not distributed with this file,
5 * You can obtain one at http://mozilla.org/MPL/2.0/. */
7 #include "xpcAccessibleTableCell.h"
9 #include "LocalAccessible.h"
10 #include "nsIAccessibleTable.h"
11 #include "TableAccessible.h"
12 #include "TableCellAccessible.h"
14 #include "nsComponentManagerUtils.h"
15 #include "nsIMutableArray.h"
16 #include "xpcAccessibleDocument.h"
18 using namespace mozilla
;
19 using namespace mozilla::a11y
;
21 ////////////////////////////////////////////////////////////////////////////////
24 NS_IMPL_ISUPPORTS_INHERITED(xpcAccessibleTableCell
, xpcAccessibleHyperText
,
25 nsIAccessibleTableCell
)
27 ////////////////////////////////////////////////////////////////////////////////
28 // nsIAccessibleTableCell
31 xpcAccessibleTableCell::GetTable(nsIAccessibleTable
** aTable
) {
32 NS_ENSURE_ARG_POINTER(aTable
);
35 if (!Intl()) return NS_ERROR_FAILURE
;
37 TableAccessible
* table
= Intl()->Table();
38 if (!table
) return NS_ERROR_FAILURE
;
40 nsCOMPtr
<nsIAccessibleTable
> xpcTable
= do_QueryInterface(
41 static_cast<nsIAccessible
*>(ToXPC(table
->AsAccessible())));
42 xpcTable
.forget(aTable
);
47 xpcAccessibleTableCell::GetColumnIndex(int32_t* aColIdx
) {
48 NS_ENSURE_ARG_POINTER(aColIdx
);
51 if (!Intl()) return NS_ERROR_FAILURE
;
53 *aColIdx
= Intl()->ColIdx();
58 xpcAccessibleTableCell::GetRowIndex(int32_t* aRowIdx
) {
59 NS_ENSURE_ARG_POINTER(aRowIdx
);
62 if (!Intl()) return NS_ERROR_FAILURE
;
64 *aRowIdx
= Intl()->RowIdx();
69 xpcAccessibleTableCell::GetColumnExtent(int32_t* aExtent
) {
70 NS_ENSURE_ARG_POINTER(aExtent
);
73 if (!Intl()) return NS_ERROR_FAILURE
;
75 *aExtent
= Intl()->ColExtent();
80 xpcAccessibleTableCell::GetRowExtent(int32_t* aExtent
) {
81 NS_ENSURE_ARG_POINTER(aExtent
);
84 if (!Intl()) return NS_ERROR_FAILURE
;
86 *aExtent
= Intl()->RowExtent();
91 xpcAccessibleTableCell::GetColumnHeaderCells(nsIArray
** aHeaderCells
) {
92 NS_ENSURE_ARG_POINTER(aHeaderCells
);
93 *aHeaderCells
= nullptr;
95 if (!Intl()) return NS_ERROR_FAILURE
;
97 AutoTArray
<LocalAccessible
*, 10> headerCells
;
98 Intl()->ColHeaderCells(&headerCells
);
100 nsCOMPtr
<nsIMutableArray
> cells
= do_CreateInstance(NS_ARRAY_CONTRACTID
);
101 NS_ENSURE_TRUE(cells
, NS_ERROR_FAILURE
);
103 for (uint32_t idx
= 0; idx
< headerCells
.Length(); idx
++) {
104 cells
->AppendElement(static_cast<nsIAccessible
*>(ToXPC(headerCells
[idx
])));
107 NS_ADDREF(*aHeaderCells
= cells
);
112 xpcAccessibleTableCell::GetRowHeaderCells(nsIArray
** aHeaderCells
) {
113 NS_ENSURE_ARG_POINTER(aHeaderCells
);
114 *aHeaderCells
= nullptr;
116 if (!Intl()) return NS_ERROR_FAILURE
;
118 AutoTArray
<LocalAccessible
*, 10> headerCells
;
119 Intl()->RowHeaderCells(&headerCells
);
121 nsCOMPtr
<nsIMutableArray
> cells
= do_CreateInstance(NS_ARRAY_CONTRACTID
);
122 NS_ENSURE_TRUE(cells
, NS_ERROR_FAILURE
);
124 for (uint32_t idx
= 0; idx
< headerCells
.Length(); idx
++) {
125 cells
->AppendElement(static_cast<nsIAccessible
*>(ToXPC(headerCells
[idx
])));
128 NS_ADDREF(*aHeaderCells
= cells
);
133 xpcAccessibleTableCell::IsSelected(bool* aSelected
) {
134 NS_ENSURE_ARG_POINTER(aSelected
);
137 if (!Intl()) return NS_ERROR_FAILURE
;
139 *aSelected
= Intl()->Selected();