/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* vim: set ts=2 et sw=2 tw=80: */ /* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this file, * You can obtain one at http://mozilla.org/MPL/2.0/. */ #include "ia2AccessibleTableCell.h" #include "mozilla/a11y/TableAccessible.h" #include "mozilla/a11y/TableCellAccessible.h" #include "UiaGridItem.h" using namespace mozilla; using namespace mozilla::a11y; // UiaGridItem TableCellAccessible* UiaGridItem::CellAcc() { auto* derived = static_cast(this); Accessible* acc = derived->Acc(); return acc ? acc->AsTableCell() : nullptr; } // IGridItemProvider methods STDMETHODIMP UiaGridItem::get_Row(__RPC__out int* aRetVal) { if (!aRetVal) { return E_INVALIDARG; } TableCellAccessible* cell = CellAcc(); if (!cell) { return CO_E_OBJNOTCONNECTED; } *aRetVal = cell->RowIdx(); return S_OK; } STDMETHODIMP UiaGridItem::get_Column(__RPC__out int* aRetVal) { if (!aRetVal) { return E_INVALIDARG; } TableCellAccessible* cell = CellAcc(); if (!cell) { return CO_E_OBJNOTCONNECTED; } *aRetVal = cell->ColIdx(); return S_OK; } STDMETHODIMP UiaGridItem::get_RowSpan(__RPC__out int* aRetVal) { if (!aRetVal) { return E_INVALIDARG; } TableCellAccessible* cell = CellAcc(); if (!cell) { return CO_E_OBJNOTCONNECTED; } *aRetVal = cell->RowExtent(); return S_OK; } STDMETHODIMP UiaGridItem::get_ColumnSpan(__RPC__out int* aRetVal) { if (!aRetVal) { return E_INVALIDARG; } TableCellAccessible* cell = CellAcc(); if (!cell) { return CO_E_OBJNOTCONNECTED; } *aRetVal = cell->ColExtent(); return S_OK; } STDMETHODIMP UiaGridItem::get_ContainingGrid( __RPC__deref_out_opt IRawElementProviderSimple** aRetVal) { if (!aRetVal) { return E_INVALIDARG; } *aRetVal = nullptr; TableCellAccessible* cell = CellAcc(); if (!cell) { return CO_E_OBJNOTCONNECTED; } TableAccessible* table = cell->Table(); if (!table) { return E_FAIL; } Accessible* tableAcc = table->AsAccessible(); RefPtr uia = MsaaAccessible::GetFrom(tableAcc); uia.forget(aRetVal); return S_OK; } // ITableItemProvider methods STDMETHODIMP UiaGridItem::GetRowHeaderItems(__RPC__deref_out_opt SAFEARRAY** aRetVal) { if (!aRetVal) { return E_INVALIDARG; } *aRetVal = nullptr; TableCellAccessible* cell = CellAcc(); if (!cell) { return CO_E_OBJNOTCONNECTED; } AutoTArray cells; cell->RowHeaderCells(&cells); *aRetVal = AccessibleArrayToUiaArray(cells); return S_OK; } STDMETHODIMP UiaGridItem::GetColumnHeaderItems(__RPC__deref_out_opt SAFEARRAY** aRetVal) { if (!aRetVal) { return E_INVALIDARG; } *aRetVal = nullptr; TableCellAccessible* cell = CellAcc(); if (!cell) { return CO_E_OBJNOTCONNECTED; } AutoTArray cells; cell->ColHeaderCells(&cells); *aRetVal = AccessibleArrayToUiaArray(cells); return S_OK; }