tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

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 }