xpcAccessibleTableCell.cpp 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161
  1. /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
  2. /* This Source Code Form is subject to the terms of the Mozilla Public
  3. * License, v. 2.0. If a copy of the MPL was not distributed with this file,
  4. * You can obtain one at http://mozilla.org/MPL/2.0/. */
  5. #include "xpcAccessibleTableCell.h"
  6. #include "Accessible.h"
  7. #include "nsIAccessibleTable.h"
  8. #include "TableAccessible.h"
  9. #include "TableCellAccessible.h"
  10. #include "xpcAccessibleDocument.h"
  11. #include "nsComponentManagerUtils.h"
  12. #include "nsIMutableArray.h"
  13. using namespace mozilla;
  14. using namespace mozilla::a11y;
  15. ////////////////////////////////////////////////////////////////////////////////
  16. // nsISupports
  17. NS_IMPL_ISUPPORTS_INHERITED(xpcAccessibleTableCell,
  18. xpcAccessibleHyperText,
  19. nsIAccessibleTableCell)
  20. ////////////////////////////////////////////////////////////////////////////////
  21. // nsIAccessibleTableCell
  22. NS_IMETHODIMP
  23. xpcAccessibleTableCell::GetTable(nsIAccessibleTable** aTable)
  24. {
  25. NS_ENSURE_ARG_POINTER(aTable);
  26. *aTable = nullptr;
  27. if (!Intl())
  28. return NS_ERROR_FAILURE;
  29. TableAccessible* table = Intl()->Table();
  30. if (!table)
  31. return NS_ERROR_FAILURE;
  32. nsCOMPtr<nsIAccessibleTable> xpcTable =
  33. do_QueryInterface(static_cast<nsIAccessible*>(ToXPC(table->AsAccessible())));
  34. xpcTable.forget(aTable);
  35. return NS_OK;
  36. }
  37. NS_IMETHODIMP
  38. xpcAccessibleTableCell::GetColumnIndex(int32_t* aColIdx)
  39. {
  40. NS_ENSURE_ARG_POINTER(aColIdx);
  41. *aColIdx = -1;
  42. if (!Intl())
  43. return NS_ERROR_FAILURE;
  44. *aColIdx = Intl()->ColIdx();
  45. return NS_OK;
  46. }
  47. NS_IMETHODIMP
  48. xpcAccessibleTableCell::GetRowIndex(int32_t* aRowIdx)
  49. {
  50. NS_ENSURE_ARG_POINTER(aRowIdx);
  51. *aRowIdx = -1;
  52. if (!Intl())
  53. return NS_ERROR_FAILURE;
  54. *aRowIdx = Intl()->RowIdx();
  55. return NS_OK;
  56. }
  57. NS_IMETHODIMP
  58. xpcAccessibleTableCell::GetColumnExtent(int32_t* aExtent)
  59. {
  60. NS_ENSURE_ARG_POINTER(aExtent);
  61. *aExtent = -1;
  62. if (!Intl())
  63. return NS_ERROR_FAILURE;
  64. *aExtent = Intl()->ColExtent();
  65. return NS_OK;
  66. }
  67. NS_IMETHODIMP
  68. xpcAccessibleTableCell::GetRowExtent(int32_t* aExtent)
  69. {
  70. NS_ENSURE_ARG_POINTER(aExtent);
  71. *aExtent = -1;
  72. if (!Intl())
  73. return NS_ERROR_FAILURE;
  74. *aExtent = Intl()->RowExtent();
  75. return NS_OK;
  76. }
  77. NS_IMETHODIMP
  78. xpcAccessibleTableCell::GetColumnHeaderCells(nsIArray** aHeaderCells)
  79. {
  80. NS_ENSURE_ARG_POINTER(aHeaderCells);
  81. *aHeaderCells = nullptr;
  82. if (!Intl())
  83. return NS_ERROR_FAILURE;
  84. AutoTArray<Accessible*, 10> headerCells;
  85. Intl()->ColHeaderCells(&headerCells);
  86. nsCOMPtr<nsIMutableArray> cells = do_CreateInstance(NS_ARRAY_CONTRACTID);
  87. NS_ENSURE_TRUE(cells, NS_ERROR_FAILURE);
  88. for (uint32_t idx = 0; idx < headerCells.Length(); idx++) {
  89. cells->AppendElement(static_cast<nsIAccessible*>(ToXPC(headerCells[idx])),
  90. false);
  91. }
  92. NS_ADDREF(*aHeaderCells = cells);
  93. return NS_OK;
  94. }
  95. NS_IMETHODIMP
  96. xpcAccessibleTableCell::GetRowHeaderCells(nsIArray** aHeaderCells)
  97. {
  98. NS_ENSURE_ARG_POINTER(aHeaderCells);
  99. *aHeaderCells = nullptr;
  100. if (!Intl())
  101. return NS_ERROR_FAILURE;
  102. AutoTArray<Accessible*, 10> headerCells;
  103. Intl()->RowHeaderCells(&headerCells);
  104. nsCOMPtr<nsIMutableArray> cells = do_CreateInstance(NS_ARRAY_CONTRACTID);
  105. NS_ENSURE_TRUE(cells, NS_ERROR_FAILURE);
  106. for (uint32_t idx = 0; idx < headerCells.Length(); idx++) {
  107. cells->AppendElement(static_cast<nsIAccessible*>(ToXPC(headerCells[idx])),
  108. false);
  109. }
  110. NS_ADDREF(*aHeaderCells = cells);
  111. return NS_OK;
  112. }
  113. NS_IMETHODIMP
  114. xpcAccessibleTableCell::IsSelected(bool* aSelected)
  115. {
  116. NS_ENSURE_ARG_POINTER(aSelected);
  117. *aSelected = false;
  118. if (!Intl())
  119. return NS_ERROR_FAILURE;
  120. *aSelected = Intl()->Selected();
  121. return NS_OK;
  122. }