Bug 1833854 - Part 4: Move all code that deals with maintaining invariants into a...
[gecko.git] / accessible / html / HTMLTableAccessible.h
bloba581d1d0c55e4d725ac64b03ebd67432d9700667
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/. */
6 #ifndef mozilla_a11y_HTMLTableAccessible_h__
7 #define mozilla_a11y_HTMLTableAccessible_h__
9 #include "HyperTextAccessibleWrap.h"
10 #include "TableAccessible.h"
11 #include "TableCellAccessible.h"
13 class nsITableCellLayout;
14 class nsTableCellFrame;
15 class nsTableWrapperFrame;
17 namespace mozilla {
19 enum class TableSelectionMode : uint32_t;
21 namespace a11y {
23 /**
24 * HTML table cell accessible (html:td).
26 class HTMLTableCellAccessible : public HyperTextAccessibleWrap,
27 public TableCellAccessible {
28 public:
29 HTMLTableCellAccessible(nsIContent* aContent, DocAccessible* aDoc);
31 // nsISupports
32 NS_INLINE_DECL_REFCOUNTING_INHERITED(HTMLTableCellAccessible,
33 HyperTextAccessibleWrap)
35 // LocalAccessible
36 virtual TableCellAccessible* AsTableCell() override { return this; }
37 virtual a11y::role NativeRole() const override;
38 virtual uint64_t NativeState() const override;
39 virtual uint64_t NativeInteractiveState() const override;
40 virtual already_AddRefed<AccAttributes> NativeAttributes() override;
42 protected:
43 virtual void DOMAttributeChanged(int32_t aNameSpaceID, nsAtom* aAttribute,
44 int32_t aModType,
45 const nsAttrValue* aOldValue,
46 uint64_t aOldState) override;
47 // TableCellAccessible
48 public:
49 virtual TableAccessible* Table() const override;
50 virtual uint32_t ColIdx() const override;
51 virtual uint32_t RowIdx() const override;
52 virtual uint32_t ColExtent() const override;
53 virtual uint32_t RowExtent() const override;
54 virtual void ColHeaderCells(nsTArray<Accessible*>* aCells) override;
55 virtual void RowHeaderCells(nsTArray<Accessible*>* aCells) override;
56 virtual bool Selected() override;
58 protected:
59 virtual ~HTMLTableCellAccessible() {}
61 /**
62 * Return nsITableCellLayout of the table cell frame.
64 nsITableCellLayout* GetCellLayout() const;
66 /**
67 * Return the table cell frame.
69 nsTableCellFrame* GetCellFrame() const;
71 /**
72 * Return row and column indices of the cell.
74 nsresult GetCellIndexes(int32_t& aRowIdx, int32_t& aColIdx) const;
77 /**
78 * HTML table row/column header accessible (html:th or html:td@scope).
80 class HTMLTableHeaderCellAccessible : public HTMLTableCellAccessible {
81 public:
82 HTMLTableHeaderCellAccessible(nsIContent* aContent, DocAccessible* aDoc);
84 // LocalAccessible
85 virtual a11y::role NativeRole() const override;
88 /**
89 * HTML table row accessible (html:tr).
91 class HTMLTableRowAccessible : public HyperTextAccessibleWrap {
92 public:
93 HTMLTableRowAccessible(nsIContent* aContent, DocAccessible* aDoc)
94 : HyperTextAccessibleWrap(aContent, aDoc) {
95 mType = eHTMLTableRowType;
96 mGenericTypes |= eTableRow;
99 NS_INLINE_DECL_REFCOUNTING_INHERITED(HTMLTableRowAccessible,
100 HyperTextAccessibleWrap)
102 // LocalAccessible
103 virtual a11y::role NativeRole() const override;
105 protected:
106 virtual ~HTMLTableRowAccessible() {}
108 // LocalAccessible
109 virtual ENameValueFlag NativeName(nsString& aName) const override;
113 * HTML table accessible (html:table).
116 // To turn on table debugging descriptions define SHOW_LAYOUT_HEURISTIC
117 // This allow release trunk builds to be used by testers to refine the
118 // data vs. layout heuristic
119 // #define SHOW_LAYOUT_HEURISTIC
121 class HTMLTableAccessible : public HyperTextAccessibleWrap,
122 public TableAccessible {
123 public:
124 HTMLTableAccessible(nsIContent* aContent, DocAccessible* aDoc)
125 : HyperTextAccessibleWrap(aContent, aDoc) {
126 mType = eHTMLTableType;
127 mGenericTypes |= eTable;
130 NS_INLINE_DECL_REFCOUNTING_INHERITED(HTMLTableAccessible,
131 HyperTextAccessibleWrap)
133 // TableAccessible
134 virtual LocalAccessible* Caption() const override;
135 virtual void Summary(nsString& aSummary) override;
136 virtual uint32_t ColCount() const override;
137 virtual uint32_t RowCount() override;
138 virtual LocalAccessible* CellAt(uint32_t aRowIndex,
139 uint32_t aColumnIndex) override;
140 virtual int32_t CellIndexAt(uint32_t aRowIdx, uint32_t aColIdx) override;
141 virtual int32_t ColIndexAt(uint32_t aCellIdx) override;
142 virtual int32_t RowIndexAt(uint32_t aCellIdx) override;
143 virtual void RowAndColIndicesAt(uint32_t aCellIdx, int32_t* aRowIdx,
144 int32_t* aColIdx) override;
145 virtual uint32_t ColExtentAt(uint32_t aRowIdx, uint32_t aColIdx) override;
146 virtual uint32_t RowExtentAt(uint32_t aRowIdx, uint32_t aColIdx) override;
147 virtual bool IsColSelected(uint32_t aColIdx) override;
148 virtual bool IsRowSelected(uint32_t aRowIdx) override;
149 virtual bool IsCellSelected(uint32_t aRowIdx, uint32_t aColIdx) override;
150 virtual uint32_t SelectedCellCount() override;
151 virtual uint32_t SelectedColCount() override;
152 virtual uint32_t SelectedRowCount() override;
153 virtual void SelectedCells(nsTArray<Accessible*>* aCells) override;
154 virtual void SelectedCellIndices(nsTArray<uint32_t>* aCells) override;
155 virtual void SelectedColIndices(nsTArray<uint32_t>* aCols) override;
156 virtual void SelectedRowIndices(nsTArray<uint32_t>* aRows) override;
157 virtual void SelectCol(uint32_t aColIdx) override;
158 virtual void SelectRow(uint32_t aRowIdx) override;
159 virtual void UnselectCol(uint32_t aColIdx) override;
160 virtual void UnselectRow(uint32_t aRowIdx) override;
161 virtual LocalAccessible* AsAccessible() override { return this; }
163 // LocalAccessible
164 virtual TableAccessible* AsTable() override { return this; }
165 virtual void Description(nsString& aDescription) const override;
166 virtual a11y::role NativeRole() const override;
167 virtual uint64_t NativeState() const override;
168 virtual already_AddRefed<AccAttributes> NativeAttributes() override;
169 virtual Relation RelationByType(RelationType aRelationType) const override;
171 virtual bool InsertChildAt(uint32_t aIndex, LocalAccessible* aChild) override;
173 protected:
174 virtual ~HTMLTableAccessible() {}
176 // LocalAccessible
177 virtual ENameValueFlag NativeName(nsString& aName) const override;
179 virtual void DOMAttributeChanged(int32_t aNameSpaceID, nsAtom* aAttribute,
180 int32_t aModType,
181 const nsAttrValue* aOldValue,
182 uint64_t aOldState) override;
184 // HTMLTableAccessible
187 * Add row or column to selection.
189 * @param aIndex [in] index of row or column to be selected
190 * @param aTarget [in] indicates what should be selected, either row or
191 * column (see nsFrameSelection)
193 nsresult AddRowOrColumnToSelection(int32_t aIndex,
194 TableSelectionMode aTarget);
197 * Removes rows or columns at the given index or outside it from selection.
199 * @param aIndex [in] row or column index
200 * @param aTarget [in] indicates whether row or column should unselected
201 * @param aIsOuter [in] indicates whether all rows or column excepting
202 * the given one should be unselected or the given one
203 * should be unselected only
205 nsresult RemoveRowsOrColumnsFromSelection(int32_t aIndex,
206 TableSelectionMode aTarget,
207 bool aIsOuter);
209 #ifdef SHOW_LAYOUT_HEURISTIC
210 nsString mLayoutHeuristic;
211 #endif
213 private:
215 * Get table wrapper frame, or return null if there is no inner table.
217 nsTableWrapperFrame* GetTableWrapperFrame() const;
221 * HTML caption accessible (html:caption).
223 class HTMLCaptionAccessible : public HyperTextAccessibleWrap {
224 public:
225 HTMLCaptionAccessible(nsIContent* aContent, DocAccessible* aDoc)
226 : HyperTextAccessibleWrap(aContent, aDoc) {
227 mType = eHTMLCaptionType;
230 // LocalAccessible
231 virtual a11y::role NativeRole() const override;
232 virtual Relation RelationByType(RelationType aRelationType) const override;
234 protected:
235 virtual ~HTMLCaptionAccessible() {}
238 } // namespace a11y
239 } // namespace mozilla
241 #endif