static AtkObject* getRowHeaderCB(AtkTable *aTable, gint aRowIdx) { AccessibleWrap* accWrap = GetAccessibleWrap(ATK_OBJECT(aTable)); if (!accWrap) return nullptr; Accessible* cell = accWrap->AsTable()->CellAt(aRowIdx, 0); if (!cell) return nullptr; // If the cell at the first column is row header then assume it is row // header for all columns, if (cell->Role() == roles::ROWHEADER) return AccessibleWrap::GetAtkObject(cell); // otherwise get row header for the data cell at the first column. TableCellAccessible* tableCell = cell->AsTableCell(); if (!tableCell) return nullptr; nsAutoTArray<Accessible*, 10> headerCells; tableCell->RowHeaderCells(&headerCells); if (headerCells.IsEmpty()) return nullptr; return AccessibleWrap::GetAtkObject(headerCells[0]); }
uint32_t ARIAGridCellAccessible::ColIdx() const { Accessible* row = Row(); if (!row) return 0; int32_t indexInRow = IndexInParent(); uint32_t colIdx = 0; for (int32_t idx = 0; idx < indexInRow; idx++) { Accessible* cell = row->GetChildAt(idx); if (cell->IsTableCell()) { colIdx += cell->AsTableCell()->ColExtent(); } } return colIdx; }
uint32_t ARIAGridAccessible::ColCount() const { AccIterator rowIter(this, filters::GetRow); Accessible* row = rowIter.Next(); if (!row) return 0; AccIterator cellIter(row, filters::GetCell); Accessible* cell = nullptr; uint32_t colCount = 0; while ((cell = cellIter.Next())) { MOZ_ASSERT(cell->IsTableCell(), "No table or grid cell!"); colCount += cell->AsTableCell()->ColExtent(); } return colCount; }