xpcAccessibleTableCell.cpp (3687B)
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/. */ 6 7 #include "xpcAccessibleTableCell.h" 8 9 #include "mozilla/a11y/TableAccessible.h" 10 #include "mozilla/a11y/TableCellAccessible.h" 11 #include "nsIAccessibleTable.h" 12 13 #include "nsComponentManagerUtils.h" 14 #include "nsIMutableArray.h" 15 #include "xpcAccessibleDocument.h" 16 17 using namespace mozilla; 18 using namespace mozilla::a11y; 19 20 //////////////////////////////////////////////////////////////////////////////// 21 // nsISupports 22 23 NS_IMPL_ISUPPORTS_INHERITED(xpcAccessibleTableCell, xpcAccessibleHyperText, 24 nsIAccessibleTableCell) 25 26 //////////////////////////////////////////////////////////////////////////////// 27 // nsIAccessibleTableCell 28 29 NS_IMETHODIMP 30 xpcAccessibleTableCell::GetTable(nsIAccessibleTable** aTable) { 31 NS_ENSURE_ARG_POINTER(aTable); 32 *aTable = nullptr; 33 34 if (!Intl()) return NS_ERROR_FAILURE; 35 36 TableAccessible* table = Intl()->Table(); 37 if (!table) return NS_ERROR_FAILURE; 38 39 nsCOMPtr<nsIAccessibleTable> xpcTable = do_QueryInterface( 40 static_cast<nsIAccessible*>(ToXPC(table->AsAccessible()))); 41 xpcTable.forget(aTable); 42 return NS_OK; 43 } 44 45 NS_IMETHODIMP 46 xpcAccessibleTableCell::GetColumnIndex(int32_t* aColIdx) { 47 NS_ENSURE_ARG_POINTER(aColIdx); 48 *aColIdx = -1; 49 50 if (!Intl()) return NS_ERROR_FAILURE; 51 52 *aColIdx = Intl()->ColIdx(); 53 return NS_OK; 54 } 55 56 NS_IMETHODIMP 57 xpcAccessibleTableCell::GetRowIndex(int32_t* aRowIdx) { 58 NS_ENSURE_ARG_POINTER(aRowIdx); 59 *aRowIdx = -1; 60 61 if (!Intl()) return NS_ERROR_FAILURE; 62 63 *aRowIdx = Intl()->RowIdx(); 64 return NS_OK; 65 } 66 67 NS_IMETHODIMP 68 xpcAccessibleTableCell::GetColumnExtent(int32_t* aExtent) { 69 NS_ENSURE_ARG_POINTER(aExtent); 70 *aExtent = -1; 71 72 if (!Intl()) return NS_ERROR_FAILURE; 73 74 *aExtent = Intl()->ColExtent(); 75 return NS_OK; 76 } 77 78 NS_IMETHODIMP 79 xpcAccessibleTableCell::GetRowExtent(int32_t* aExtent) { 80 NS_ENSURE_ARG_POINTER(aExtent); 81 *aExtent = -1; 82 83 if (!Intl()) return NS_ERROR_FAILURE; 84 85 *aExtent = Intl()->RowExtent(); 86 return NS_OK; 87 } 88 89 NS_IMETHODIMP 90 xpcAccessibleTableCell::GetColumnHeaderCells(nsIArray** aHeaderCells) { 91 NS_ENSURE_ARG_POINTER(aHeaderCells); 92 *aHeaderCells = nullptr; 93 94 if (!Intl()) return NS_ERROR_FAILURE; 95 96 AutoTArray<Accessible*, 10> headerCells; 97 Intl()->ColHeaderCells(&headerCells); 98 99 nsCOMPtr<nsIMutableArray> cells = do_CreateInstance(NS_ARRAY_CONTRACTID); 100 NS_ENSURE_TRUE(cells, NS_ERROR_FAILURE); 101 102 for (uint32_t idx = 0; idx < headerCells.Length(); idx++) { 103 cells->AppendElement(static_cast<nsIAccessible*>(ToXPC(headerCells[idx]))); 104 } 105 106 NS_ADDREF(*aHeaderCells = cells); 107 return NS_OK; 108 } 109 110 NS_IMETHODIMP 111 xpcAccessibleTableCell::GetRowHeaderCells(nsIArray** aHeaderCells) { 112 NS_ENSURE_ARG_POINTER(aHeaderCells); 113 *aHeaderCells = nullptr; 114 115 if (!Intl()) return NS_ERROR_FAILURE; 116 117 AutoTArray<Accessible*, 10> headerCells; 118 Intl()->RowHeaderCells(&headerCells); 119 120 nsCOMPtr<nsIMutableArray> cells = do_CreateInstance(NS_ARRAY_CONTRACTID); 121 NS_ENSURE_TRUE(cells, NS_ERROR_FAILURE); 122 123 for (uint32_t idx = 0; idx < headerCells.Length(); idx++) { 124 cells->AppendElement(static_cast<nsIAccessible*>(ToXPC(headerCells[idx]))); 125 } 126 127 NS_ADDREF(*aHeaderCells = cells); 128 return NS_OK; 129 } 130 131 NS_IMETHODIMP 132 xpcAccessibleTableCell::IsSelected(bool* aSelected) { 133 NS_ENSURE_ARG_POINTER(aSelected); 134 *aSelected = false; 135 136 if (!Intl()) return NS_ERROR_FAILURE; 137 138 *aSelected = Intl()->Selected(); 139 return NS_OK; 140 }