/src/mozilla-central/accessible/xul/XULTreeGridAccessible.h
Line | Count | Source (jump to first uncovered line) |
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_XULTreeGridAccessible_h__ |
7 | | #define mozilla_a11y_XULTreeGridAccessible_h__ |
8 | | |
9 | | #include "XULTreeAccessible.h" |
10 | | #include "TableAccessible.h" |
11 | | #include "TableCellAccessible.h" |
12 | | #include "xpcAccessibleTable.h" |
13 | | #include "xpcAccessibleTableCell.h" |
14 | | |
15 | | namespace mozilla { |
16 | | namespace a11y { |
17 | | |
18 | | class XULTreeGridCellAccessible; |
19 | | |
20 | | /** |
21 | | * Represents accessible for XUL tree in the case when it has multiple columns. |
22 | | */ |
23 | | class XULTreeGridAccessible : public XULTreeAccessible, |
24 | | public TableAccessible |
25 | | { |
26 | | public: |
27 | | XULTreeGridAccessible(nsIContent* aContent, DocAccessible* aDoc, |
28 | | nsTreeBodyFrame* aTreeFrame) : |
29 | | XULTreeAccessible(aContent, aDoc, aTreeFrame) |
30 | 0 | { mGenericTypes |= eTable; } |
31 | | |
32 | | // TableAccessible |
33 | | virtual uint32_t ColCount() const override; |
34 | | virtual uint32_t RowCount() override; |
35 | | virtual Accessible* CellAt(uint32_t aRowIndex, uint32_t aColumnIndex) override; |
36 | | virtual void ColDescription(uint32_t aColIdx, nsString& aDescription) override; |
37 | | virtual bool IsColSelected(uint32_t aColIdx) override; |
38 | | virtual bool IsRowSelected(uint32_t aRowIdx) override; |
39 | | virtual bool IsCellSelected(uint32_t aRowIdx, uint32_t aColIdx) override; |
40 | | virtual uint32_t SelectedCellCount() override; |
41 | | virtual uint32_t SelectedColCount() override; |
42 | | virtual uint32_t SelectedRowCount() override; |
43 | | virtual void SelectedCells(nsTArray<Accessible*>* aCells) override; |
44 | | virtual void SelectedCellIndices(nsTArray<uint32_t>* aCells) override; |
45 | | virtual void SelectedColIndices(nsTArray<uint32_t>* aCols) override; |
46 | | virtual void SelectedRowIndices(nsTArray<uint32_t>* aRows) override; |
47 | | virtual void SelectRow(uint32_t aRowIdx) override; |
48 | | virtual void UnselectRow(uint32_t aRowIdx) override; |
49 | 0 | virtual Accessible* AsAccessible() override { return this; } |
50 | | |
51 | | // Accessible |
52 | 0 | virtual TableAccessible* AsTable() override { return this; } |
53 | | virtual a11y::role NativeRole() const override; |
54 | | |
55 | | protected: |
56 | | virtual ~XULTreeGridAccessible(); |
57 | | |
58 | | // XULTreeAccessible |
59 | | virtual already_AddRefed<Accessible> |
60 | | CreateTreeItemAccessible(int32_t aRow) const override; |
61 | | }; |
62 | | |
63 | | |
64 | | /** |
65 | | * Represents accessible for XUL tree item in the case when XUL tree has |
66 | | * multiple columns. |
67 | | */ |
68 | | class XULTreeGridRowAccessible final : public XULTreeItemAccessibleBase |
69 | | { |
70 | | public: |
71 | | using Accessible::GetChildAt; |
72 | | |
73 | | XULTreeGridRowAccessible(nsIContent* aContent, DocAccessible* aDoc, |
74 | | Accessible* aParent, nsITreeBoxObject* aTree, |
75 | | nsITreeView* aTreeView, int32_t aRow); |
76 | | |
77 | | // nsISupports and cycle collection |
78 | | NS_DECL_ISUPPORTS_INHERITED |
79 | | NS_DECL_CYCLE_COLLECTION_CLASS_INHERITED(XULTreeGridRowAccessible, |
80 | | XULTreeItemAccessibleBase) |
81 | | |
82 | | // Accessible |
83 | | virtual void Shutdown() override; |
84 | | virtual a11y::role NativeRole() const override; |
85 | | virtual ENameValueFlag Name(nsString& aName) const override; |
86 | | virtual Accessible* ChildAtPoint(int32_t aX, int32_t aY, |
87 | | EWhichChildAtPoint aWhichChild) override; |
88 | | |
89 | | virtual Accessible* GetChildAt(uint32_t aIndex) const override; |
90 | | virtual uint32_t ChildCount() const override; |
91 | | |
92 | | // XULTreeItemAccessibleBase |
93 | | XULTreeGridCellAccessible* GetCellAccessible(nsTreeColumn* aColumn) |
94 | | const final; |
95 | | virtual void RowInvalidated(int32_t aStartColIdx, int32_t aEndColIdx) override; |
96 | | |
97 | | protected: |
98 | | virtual ~XULTreeGridRowAccessible(); |
99 | | |
100 | | // XULTreeItemAccessibleBase |
101 | | mutable nsRefPtrHashtable<nsPtrHashKey<const void>, XULTreeGridCellAccessible> |
102 | | mAccessibleCache; |
103 | | }; |
104 | | |
105 | | |
106 | | /** |
107 | | * Represents an accessible for XUL tree cell in the case when XUL tree has |
108 | | * multiple columns. |
109 | | */ |
110 | | |
111 | | class XULTreeGridCellAccessible : public LeafAccessible, |
112 | | public TableCellAccessible |
113 | | { |
114 | | public: |
115 | | |
116 | | XULTreeGridCellAccessible(nsIContent* aContent, DocAccessible* aDoc, |
117 | | XULTreeGridRowAccessible* aRowAcc, |
118 | | nsITreeBoxObject* aTree, nsITreeView* aTreeView, |
119 | | int32_t aRow, nsTreeColumn* aColumn); |
120 | | |
121 | | // nsISupports |
122 | | NS_DECL_ISUPPORTS_INHERITED |
123 | | NS_DECL_CYCLE_COLLECTION_CLASS_INHERITED(XULTreeGridCellAccessible, |
124 | | LeafAccessible) |
125 | | |
126 | | // Accessible |
127 | | virtual void Shutdown() override; |
128 | 0 | virtual TableCellAccessible* AsTableCell() override { return this; } |
129 | | virtual nsRect BoundsInAppUnits() const override; |
130 | | virtual nsIntRect BoundsInCSSPixels() const override; |
131 | | virtual ENameValueFlag Name(nsString& aName) const override; |
132 | | virtual Accessible* FocusedChild() override; |
133 | | virtual already_AddRefed<nsIPersistentProperties> NativeAttributes() override; |
134 | | virtual int32_t IndexInParent() const override; |
135 | | virtual Relation RelationByType(RelationType aType) const override; |
136 | | virtual a11y::role NativeRole() const override; |
137 | | virtual uint64_t NativeState() const override; |
138 | | virtual uint64_t NativeInteractiveState() const override; |
139 | | |
140 | | // ActionAccessible |
141 | | virtual uint8_t ActionCount() const override; |
142 | | virtual void ActionNameAt(uint8_t aIndex, nsAString& aName) override; |
143 | | virtual bool DoAction(uint8_t aIndex) const override; |
144 | | |
145 | | // TableCellAccessible |
146 | | virtual TableAccessible* Table() const override; |
147 | | virtual uint32_t ColIdx() const override; |
148 | | virtual uint32_t RowIdx() const override; |
149 | | virtual void ColHeaderCells(nsTArray<Accessible*>* aHeaderCells) override; |
150 | 0 | virtual void RowHeaderCells(nsTArray<Accessible*>* aCells) override { } |
151 | | virtual bool Selected() override; |
152 | | |
153 | | /** |
154 | | * Fire name or state change event if the accessible text or value has been |
155 | | * changed. |
156 | | * @return true if name has changed |
157 | | */ |
158 | | bool CellInvalidated(); |
159 | | |
160 | | protected: |
161 | | virtual ~XULTreeGridCellAccessible(); |
162 | | |
163 | | // Accessible |
164 | | virtual Accessible* GetSiblingAtOffset(int32_t aOffset, |
165 | | nsresult* aError = nullptr) const override; |
166 | | virtual void DispatchClickEvent(nsIContent* aContent, |
167 | | uint32_t aActionIndex) const override; |
168 | | |
169 | | // XULTreeGridCellAccessible |
170 | | |
171 | | /** |
172 | | * Return true if value of cell can be modified. |
173 | | */ |
174 | | bool IsEditable() const; |
175 | | |
176 | | enum { eAction_Click = 0 }; |
177 | | |
178 | | nsCOMPtr<nsITreeBoxObject> mTree; |
179 | | nsITreeView* mTreeView; |
180 | | |
181 | | int32_t mRow; |
182 | | RefPtr<nsTreeColumn> mColumn; |
183 | | |
184 | | nsString mCachedTextEquiv; |
185 | | }; |
186 | | |
187 | | } // namespace a11y |
188 | | } // namespace mozilla |
189 | | |
190 | | #endif |