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 4 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ 5 6 #ifndef MOZILLA_A11Y_ARIAGridAccessible_h_ 7 #define MOZILLA_A11Y_ARIAGridAccessible_h_ 8 9 #include "HyperTextAccessibleWrap.h" 10 #include "TableAccessible.h" 11 #include "TableCellAccessible.h" 12 13 namespace mozilla { 14 namespace a11y { 15 16 /** 17 * Accessible for ARIA grid and treegrid. 18 */ 19 class ARIAGridAccessible : public AccessibleWrap, public TableAccessible { 20 public: 21 ARIAGridAccessible(nsIContent* aContent, DocAccessible* aDoc); 22 NS_INLINE_DECL_REFCOUNTING_INHERITED(ARIAGridAccessible,AccessibleWrap)23 NS_INLINE_DECL_REFCOUNTING_INHERITED(ARIAGridAccessible, AccessibleWrap) 24 25 // Accessible 26 virtual TableAccessible* AsTable() override { return this; } 27 28 // TableAccessible 29 virtual uint32_t ColCount() override; 30 virtual uint32_t RowCount() override; 31 virtual Accessible* CellAt(uint32_t aRowIndex, 32 uint32_t aColumnIndex) override; 33 virtual bool IsColSelected(uint32_t aColIdx) override; 34 virtual bool IsRowSelected(uint32_t aRowIdx) override; 35 virtual bool IsCellSelected(uint32_t aRowIdx, uint32_t aColIdx) override; 36 virtual uint32_t SelectedCellCount() override; 37 virtual uint32_t SelectedColCount() override; 38 virtual uint32_t SelectedRowCount() override; 39 virtual void SelectedCells(nsTArray<Accessible*>* aCells) override; 40 virtual void SelectedCellIndices(nsTArray<uint32_t>* aCells) override; 41 virtual void SelectedColIndices(nsTArray<uint32_t>* aCols) override; 42 virtual void SelectedRowIndices(nsTArray<uint32_t>* aRows) override; 43 virtual void SelectCol(uint32_t aColIdx) override; 44 virtual void SelectRow(uint32_t aRowIdx) override; 45 virtual void UnselectCol(uint32_t aColIdx) override; 46 virtual void UnselectRow(uint32_t aRowIdx) override; AsAccessible()47 virtual Accessible* AsAccessible() override { return this; } 48 49 protected: ~ARIAGridAccessible()50 virtual ~ARIAGridAccessible() {} 51 52 /** 53 * Return row accessible at the given row index. 54 */ 55 Accessible* GetRowAt(int32_t aRow); 56 57 /** 58 * Return cell accessible at the given column index in the row. 59 */ 60 Accessible* GetCellInRowAt(Accessible* aRow, int32_t aColumn); 61 62 /** 63 * Set aria-selected attribute value on DOM node of the given accessible. 64 * 65 * @param aAccessible [in] accessible 66 * @param aIsSelected [in] new value of aria-selected attribute 67 * @param aNotify [in, optional] specifies if DOM should be notified 68 * about attribute change (used internally). 69 */ 70 nsresult SetARIASelected(Accessible* aAccessible, bool aIsSelected, 71 bool aNotify = true); 72 }; 73 74 /** 75 * Accessible for ARIA row. 76 */ 77 class ARIARowAccessible : public AccessibleWrap { 78 public: 79 ARIARowAccessible(nsIContent* aContent, DocAccessible* aDoc); 80 81 NS_INLINE_DECL_REFCOUNTING_INHERITED(ARIARowAccessible, AccessibleWrap) 82 83 // Accessible 84 virtual mozilla::a11y::GroupPos GroupPosition() override; 85 86 protected: ~ARIARowAccessible()87 virtual ~ARIARowAccessible() {} 88 }; 89 90 /** 91 * Accessible for ARIA gridcell and rowheader/columnheader. 92 */ 93 class ARIAGridCellAccessible : public HyperTextAccessibleWrap, 94 public TableCellAccessible { 95 public: 96 ARIAGridCellAccessible(nsIContent* aContent, DocAccessible* aDoc); 97 NS_INLINE_DECL_REFCOUNTING_INHERITED(ARIAGridCellAccessible,HyperTextAccessibleWrap)98 NS_INLINE_DECL_REFCOUNTING_INHERITED(ARIAGridCellAccessible, 99 HyperTextAccessibleWrap) 100 101 // Accessible 102 virtual TableCellAccessible* AsTableCell() override { return this; } 103 virtual void ApplyARIAState(uint64_t* aState) const override; 104 virtual already_AddRefed<nsIPersistentProperties> NativeAttributes() override; 105 virtual mozilla::a11y::GroupPos GroupPosition() override; 106 107 protected: ~ARIAGridCellAccessible()108 virtual ~ARIAGridCellAccessible() {} 109 110 /** 111 * Return a containing row. 112 */ Row()113 Accessible* Row() const { 114 Accessible* row = Parent(); 115 return row && row->IsTableRow() ? row : nullptr; 116 } 117 118 /** 119 * Return index of the given row. 120 */ 121 int32_t RowIndexFor(Accessible* aRow) const; 122 123 // TableCellAccessible 124 virtual TableAccessible* Table() const override; 125 virtual uint32_t ColIdx() const override; 126 virtual uint32_t RowIdx() const override; 127 virtual bool Selected() override; 128 }; 129 130 } // namespace a11y 131 } // namespace mozilla 132 133 #endif 134