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 "mozilla/a11y/TableAccessible.h"
10 #include "mozilla/a11y/TableCellAccessible.h"
11 #include "nsIAccessibleTable.h"
13 #include "nsComponentManagerUtils.h"
14 #include "nsIMutableArray.h"
15 #include "xpcAccessibleDocument.h"
17 using namespace mozilla
;
18 using namespace mozilla::a11y
;
20 ////////////////////////////////////////////////////////////////////////////////
23 NS_IMPL_ISUPPORTS_INHERITED(xpcAccessibleTableCell
, xpcAccessibleHyperText
,
24 nsIAccessibleTableCell
)
26 ////////////////////////////////////////////////////////////////////////////////
27 // nsIAccessibleTableCell
30 xpcAccessibleTableCell::GetTable(nsIAccessibleTable
** aTable
) {
31 NS_ENSURE_ARG_POINTER(aTable
);
34 if (!Intl()) return NS_ERROR_FAILURE
;
36 TableAccessible
* table
= Intl()->Table();
37 if (!table
) return NS_ERROR_FAILURE
;
39 nsCOMPtr
<nsIAccessibleTable
> xpcTable
= do_QueryInterface(
40 static_cast<nsIAccessible
*>(ToXPC(table
->AsAccessible())));
41 xpcTable
.forget(aTable
);
46 xpcAccessibleTableCell::GetColumnIndex(int32_t* aColIdx
) {
47 NS_ENSURE_ARG_POINTER(aColIdx
);
50 if (!Intl()) return NS_ERROR_FAILURE
;
52 *aColIdx
= Intl()->ColIdx();
57 xpcAccessibleTableCell::GetRowIndex(int32_t* aRowIdx
) {
58 NS_ENSURE_ARG_POINTER(aRowIdx
);
61 if (!Intl()) return NS_ERROR_FAILURE
;
63 *aRowIdx
= Intl()->RowIdx();
68 xpcAccessibleTableCell::GetColumnExtent(int32_t* aExtent
) {
69 NS_ENSURE_ARG_POINTER(aExtent
);
72 if (!Intl()) return NS_ERROR_FAILURE
;
74 *aExtent
= Intl()->ColExtent();
79 xpcAccessibleTableCell::GetRowExtent(int32_t* aExtent
) {
80 NS_ENSURE_ARG_POINTER(aExtent
);
83 if (!Intl()) return NS_ERROR_FAILURE
;
85 *aExtent
= Intl()->RowExtent();
90 xpcAccessibleTableCell::GetColumnHeaderCells(nsIArray
** aHeaderCells
) {
91 NS_ENSURE_ARG_POINTER(aHeaderCells
);
92 *aHeaderCells
= nullptr;
94 if (!Intl()) return NS_ERROR_FAILURE
;
96 AutoTArray
<Accessible
*, 10> headerCells
;
97 Intl()->ColHeaderCells(&headerCells
);
99 nsCOMPtr
<nsIMutableArray
> cells
= do_CreateInstance(NS_ARRAY_CONTRACTID
);
100 NS_ENSURE_TRUE(cells
, NS_ERROR_FAILURE
);
102 for (uint32_t idx
= 0; idx
< headerCells
.Length(); idx
++) {
103 cells
->AppendElement(static_cast<nsIAccessible
*>(ToXPC(headerCells
[idx
])));
106 NS_ADDREF(*aHeaderCells
= cells
);
111 xpcAccessibleTableCell::GetRowHeaderCells(nsIArray
** aHeaderCells
) {
112 NS_ENSURE_ARG_POINTER(aHeaderCells
);
113 *aHeaderCells
= nullptr;
115 if (!Intl()) return NS_ERROR_FAILURE
;
117 AutoTArray
<Accessible
*, 10> headerCells
;
118 Intl()->RowHeaderCells(&headerCells
);
120 nsCOMPtr
<nsIMutableArray
> cells
= do_CreateInstance(NS_ARRAY_CONTRACTID
);
121 NS_ENSURE_TRUE(cells
, NS_ERROR_FAILURE
);
123 for (uint32_t idx
= 0; idx
< headerCells
.Length(); idx
++) {
124 cells
->AppendElement(static_cast<nsIAccessible
*>(ToXPC(headerCells
[idx
])));
127 NS_ADDREF(*aHeaderCells
= cells
);
132 xpcAccessibleTableCell::IsSelected(bool* aSelected
) {
133 NS_ENSURE_ARG_POINTER(aSelected
);
136 if (!Intl()) return NS_ERROR_FAILURE
;
138 *aSelected
= Intl()->Selected();