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
;
19 enum class TableSelectionMode
: uint32_t;
24 * HTML table cell accessible (html:td).
26 class HTMLTableCellAccessible
: public HyperTextAccessibleWrap
,
27 public TableCellAccessible
{
29 HTMLTableCellAccessible(nsIContent
* aContent
, DocAccessible
* aDoc
);
32 NS_INLINE_DECL_REFCOUNTING_INHERITED(HTMLTableCellAccessible
,
33 HyperTextAccessibleWrap
)
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
;
43 virtual void DOMAttributeChanged(int32_t aNameSpaceID
, nsAtom
* aAttribute
,
45 const nsAttrValue
* aOldValue
,
46 uint64_t aOldState
) override
;
47 // TableCellAccessible
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
;
59 virtual ~HTMLTableCellAccessible() {}
62 * Return nsITableCellLayout of the table cell frame.
64 nsITableCellLayout
* GetCellLayout() const;
67 * Return the table cell frame.
69 nsTableCellFrame
* GetCellFrame() const;
72 * Return row and column indices of the cell.
74 nsresult
GetCellIndexes(int32_t& aRowIdx
, int32_t& aColIdx
) const;
78 * HTML table row/column header accessible (html:th or html:td@scope).
80 class HTMLTableHeaderCellAccessible
: public HTMLTableCellAccessible
{
82 HTMLTableHeaderCellAccessible(nsIContent
* aContent
, DocAccessible
* aDoc
);
85 virtual a11y::role
NativeRole() const override
;
89 * HTML table row accessible (html:tr).
91 class HTMLTableRowAccessible
: public HyperTextAccessibleWrap
{
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
)
103 virtual a11y::role
NativeRole() const override
;
106 virtual ~HTMLTableRowAccessible() {}
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
{
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
)
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; }
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
;
174 virtual ~HTMLTableAccessible() {}
177 virtual ENameValueFlag
NativeName(nsString
& aName
) const override
;
179 virtual void DOMAttributeChanged(int32_t aNameSpaceID
, nsAtom
* aAttribute
,
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
,
209 #ifdef SHOW_LAYOUT_HEURISTIC
210 nsString mLayoutHeuristic
;
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
{
225 HTMLCaptionAccessible(nsIContent
* aContent
, DocAccessible
* aDoc
)
226 : HyperTextAccessibleWrap(aContent
, aDoc
) {
227 mType
= eHTMLCaptionType
;
231 virtual a11y::role
NativeRole() const override
;
232 virtual Relation
RelationByType(RelationType aRelationType
) const override
;
235 virtual ~HTMLCaptionAccessible() {}
239 } // namespace mozilla