HTMLTableAccessible.h (4995B)
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_HTMLTableAccessible_h__ 7 #define mozilla_a11y_HTMLTableAccessible_h__ 8 9 #include "HyperTextAccessible.h" 10 11 class nsITableCellLayout; 12 class nsTableCellFrame; 13 class nsTableWrapperFrame; 14 15 namespace mozilla { 16 17 namespace a11y { 18 19 class HTMLTableAccessible; 20 21 /** 22 * HTML table cell accessible (html:td). 23 */ 24 class HTMLTableCellAccessible : public HyperTextAccessible { 25 public: 26 HTMLTableCellAccessible(nsIContent* aContent, DocAccessible* aDoc); 27 28 // nsISupports 29 NS_INLINE_DECL_REFCOUNTING_INHERITED(HTMLTableCellAccessible, 30 HyperTextAccessible) 31 32 // LocalAccessible 33 virtual a11y::role NativeRole() const override; 34 virtual uint64_t NativeState() const override; 35 virtual already_AddRefed<AccAttributes> NativeAttributes() override; 36 37 protected: 38 virtual void DOMAttributeChanged(int32_t aNameSpaceID, nsAtom* aAttribute, 39 AttrModType aModType, 40 const nsAttrValue* aOldValue, 41 uint64_t aOldState) override; 42 // HTMLTableCellAccessible 43 public: 44 HTMLTableAccessible* Table() const; 45 uint32_t ColExtent() const; 46 uint32_t RowExtent() const; 47 48 static HTMLTableCellAccessible* GetFrom(LocalAccessible* aAcc) { 49 if (aAcc->IsHTMLTableCell()) { 50 return static_cast<HTMLTableCellAccessible*>(aAcc); 51 } 52 return nullptr; 53 } 54 55 protected: 56 virtual ~HTMLTableCellAccessible() {} 57 }; 58 59 /** 60 * HTML table row/column header accessible (html:th or html:td@scope). 61 */ 62 class HTMLTableHeaderCellAccessible : public HTMLTableCellAccessible { 63 public: 64 HTMLTableHeaderCellAccessible(nsIContent* aContent, DocAccessible* aDoc); 65 66 // LocalAccessible 67 virtual a11y::role NativeRole() const override; 68 }; 69 70 /** 71 * HTML table row accessible (html:tr). 72 */ 73 class HTMLTableRowAccessible : public HyperTextAccessible { 74 public: 75 HTMLTableRowAccessible(nsIContent* aContent, DocAccessible* aDoc) 76 : HyperTextAccessible(aContent, aDoc) { 77 mType = eHTMLTableRowType; 78 mGenericTypes |= eTableRow; 79 } 80 81 NS_INLINE_DECL_REFCOUNTING_INHERITED(HTMLTableRowAccessible, 82 HyperTextAccessible) 83 84 protected: 85 virtual ~HTMLTableRowAccessible() {} 86 }; 87 88 /** 89 * HTML table accessible (html:table). 90 */ 91 92 // To turn on table debugging descriptions define SHOW_LAYOUT_HEURISTIC 93 // This allow release trunk builds to be used by testers to refine the 94 // data vs. layout heuristic 95 // #define SHOW_LAYOUT_HEURISTIC 96 97 class HTMLTableAccessible : public HyperTextAccessible { 98 public: 99 HTMLTableAccessible(nsIContent* aContent, DocAccessible* aDoc) 100 : HyperTextAccessible(aContent, aDoc) { 101 mType = eHTMLTableType; 102 mGenericTypes |= eTable; 103 } 104 105 NS_INLINE_DECL_REFCOUNTING_INHERITED(HTMLTableAccessible, HyperTextAccessible) 106 107 // HTMLTableAccessible 108 LocalAccessible* Caption() const; 109 uint32_t ColCount() const; 110 uint32_t RowCount(); 111 bool IsProbablyLayoutTable(); 112 113 static HTMLTableAccessible* GetFrom(LocalAccessible* aAcc) { 114 if (aAcc->IsHTMLTable()) { 115 return static_cast<HTMLTableAccessible*>(aAcc); 116 } 117 return nullptr; 118 } 119 120 // LocalAccessible 121 virtual EDescriptionValueFlag Description( 122 nsString& aDescription) const override; 123 virtual uint64_t NativeState() const override; 124 virtual already_AddRefed<AccAttributes> NativeAttributes() override; 125 virtual Relation RelationByType(RelationType aRelationType) const override; 126 127 virtual bool InsertChildAt(uint32_t aIndex, LocalAccessible* aChild) override; 128 129 protected: 130 virtual ~HTMLTableAccessible() {} 131 132 // LocalAccessible 133 virtual ENameValueFlag NativeName(nsString& aName) const override; 134 135 virtual void DOMAttributeChanged(int32_t aNameSpaceID, nsAtom* aAttribute, 136 AttrModType aModType, 137 const nsAttrValue* aOldValue, 138 uint64_t aOldState) override; 139 140 // HTMLTableAccessible 141 142 #ifdef SHOW_LAYOUT_HEURISTIC 143 nsString mLayoutHeuristic; 144 #endif 145 146 private: 147 /** 148 * Get table wrapper frame, or return null if there is no inner table. 149 */ 150 nsTableWrapperFrame* GetTableWrapperFrame() const; 151 }; 152 153 /** 154 * HTML caption accessible (html:caption). 155 */ 156 class HTMLCaptionAccessible : public HyperTextAccessible { 157 public: 158 HTMLCaptionAccessible(nsIContent* aContent, DocAccessible* aDoc) 159 : HyperTextAccessible(aContent, aDoc) { 160 mType = eHTMLCaptionType; 161 } 162 163 // LocalAccessible 164 virtual a11y::role NativeRole() const override; 165 virtual Relation RelationByType(RelationType aRelationType) const override; 166 167 protected: 168 virtual ~HTMLCaptionAccessible() {} 169 }; 170 171 } // namespace a11y 172 } // namespace mozilla 173 174 #endif