|
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 /** |
|
19 * Represents accessible for XUL tree in the case when it has multiple columns. |
|
20 */ |
|
21 class XULTreeGridAccessible : public XULTreeAccessible, |
|
22 public xpcAccessibleTable, |
|
23 public nsIAccessibleTable, |
|
24 public TableAccessible |
|
25 { |
|
26 public: |
|
27 XULTreeGridAccessible(nsIContent* aContent, DocAccessible* aDoc, |
|
28 nsTreeBodyFrame* aTreeFrame) : |
|
29 XULTreeAccessible(aContent, aDoc, aTreeFrame), xpcAccessibleTable(this) |
|
30 { mGenericTypes |= eTable; } |
|
31 |
|
32 // nsISupports |
|
33 NS_DECL_ISUPPORTS_INHERITED |
|
34 |
|
35 // nsIAccessibleTable |
|
36 NS_FORWARD_NSIACCESSIBLETABLE(xpcAccessibleTable::) |
|
37 |
|
38 // TableAccessible |
|
39 virtual uint32_t ColCount(); |
|
40 virtual uint32_t RowCount(); |
|
41 virtual Accessible* CellAt(uint32_t aRowIndex, uint32_t aColumnIndex); |
|
42 virtual void ColDescription(uint32_t aColIdx, nsString& aDescription); |
|
43 virtual bool IsColSelected(uint32_t aColIdx); |
|
44 virtual bool IsRowSelected(uint32_t aRowIdx); |
|
45 virtual bool IsCellSelected(uint32_t aRowIdx, uint32_t aColIdx); |
|
46 virtual uint32_t SelectedCellCount(); |
|
47 virtual uint32_t SelectedColCount(); |
|
48 virtual uint32_t SelectedRowCount(); |
|
49 virtual void SelectedCells(nsTArray<Accessible*>* aCells); |
|
50 virtual void SelectedCellIndices(nsTArray<uint32_t>* aCells); |
|
51 virtual void SelectedColIndices(nsTArray<uint32_t>* aCols); |
|
52 virtual void SelectedRowIndices(nsTArray<uint32_t>* aRows); |
|
53 virtual void SelectRow(uint32_t aRowIdx); |
|
54 virtual void UnselectRow(uint32_t aRowIdx); |
|
55 virtual Accessible* AsAccessible() { return this; } |
|
56 |
|
57 // Accessible |
|
58 virtual void Shutdown(); |
|
59 virtual TableAccessible* AsTable() { return this; } |
|
60 virtual a11y::role NativeRole(); |
|
61 |
|
62 protected: |
|
63 |
|
64 // XULTreeAccessible |
|
65 virtual already_AddRefed<Accessible> |
|
66 CreateTreeItemAccessible(int32_t aRow) const MOZ_OVERRIDE; |
|
67 }; |
|
68 |
|
69 |
|
70 /** |
|
71 * Represents accessible for XUL tree item in the case when XUL tree has |
|
72 * multiple columns. |
|
73 */ |
|
74 class XULTreeGridRowAccessible : public XULTreeItemAccessibleBase |
|
75 { |
|
76 public: |
|
77 using Accessible::GetChildAt; |
|
78 |
|
79 XULTreeGridRowAccessible(nsIContent* aContent, DocAccessible* aDoc, |
|
80 Accessible* aParent, nsITreeBoxObject* aTree, |
|
81 nsITreeView* aTreeView, int32_t aRow); |
|
82 |
|
83 // nsISupports and cycle collection |
|
84 NS_DECL_ISUPPORTS_INHERITED |
|
85 NS_DECL_CYCLE_COLLECTION_CLASS_INHERITED(XULTreeGridRowAccessible, |
|
86 XULTreeItemAccessibleBase) |
|
87 |
|
88 // Accessible |
|
89 virtual void Shutdown(); |
|
90 virtual a11y::role NativeRole(); |
|
91 virtual ENameValueFlag Name(nsString& aName); |
|
92 virtual Accessible* ChildAtPoint(int32_t aX, int32_t aY, |
|
93 EWhichChildAtPoint aWhichChild); |
|
94 |
|
95 virtual Accessible* GetChildAt(uint32_t aIndex) const MOZ_OVERRIDE; |
|
96 virtual uint32_t ChildCount() const MOZ_OVERRIDE; |
|
97 |
|
98 // XULTreeItemAccessibleBase |
|
99 virtual Accessible* GetCellAccessible(nsITreeColumn* aColumn) const MOZ_OVERRIDE; |
|
100 virtual void RowInvalidated(int32_t aStartColIdx, int32_t aEndColIdx); |
|
101 |
|
102 protected: |
|
103 |
|
104 // Accessible |
|
105 virtual void CacheChildren(); |
|
106 |
|
107 // XULTreeItemAccessibleBase |
|
108 mutable AccessibleHashtable mAccessibleCache; |
|
109 }; |
|
110 |
|
111 |
|
112 /** |
|
113 * Represents an accessible for XUL tree cell in the case when XUL tree has |
|
114 * multiple columns. |
|
115 */ |
|
116 |
|
117 #define XULTREEGRIDCELLACCESSIBLE_IMPL_CID \ |
|
118 { /* 84588ad4-549c-4196-a932-4c5ca5de5dff */ \ |
|
119 0x84588ad4, \ |
|
120 0x549c, \ |
|
121 0x4196, \ |
|
122 { 0xa9, 0x32, 0x4c, 0x5c, 0xa5, 0xde, 0x5d, 0xff } \ |
|
123 } |
|
124 |
|
125 class XULTreeGridCellAccessible : public LeafAccessible, |
|
126 public nsIAccessibleTableCell, |
|
127 public TableCellAccessible, |
|
128 public xpcAccessibleTableCell |
|
129 { |
|
130 public: |
|
131 |
|
132 XULTreeGridCellAccessible(nsIContent* aContent, DocAccessible* aDoc, |
|
133 XULTreeGridRowAccessible* aRowAcc, |
|
134 nsITreeBoxObject* aTree, nsITreeView* aTreeView, |
|
135 int32_t aRow, nsITreeColumn* aColumn); |
|
136 |
|
137 // nsISupports |
|
138 NS_DECL_ISUPPORTS_INHERITED |
|
139 NS_DECL_CYCLE_COLLECTION_CLASS_INHERITED(XULTreeGridCellAccessible, |
|
140 LeafAccessible) |
|
141 |
|
142 // nsIAccessible |
|
143 |
|
144 NS_IMETHOD GetBounds(int32_t* aX, int32_t* aY, |
|
145 int32_t* aWidth, int32_t* aHeight); |
|
146 |
|
147 NS_IMETHOD GetActionName(uint8_t aIndex, nsAString& aName); |
|
148 NS_IMETHOD DoAction(uint8_t aIndex); |
|
149 |
|
150 // nsIAccessibleTableCell |
|
151 NS_FORWARD_NSIACCESSIBLETABLECELL(xpcAccessibleTableCell::) |
|
152 |
|
153 // Accessible |
|
154 virtual TableCellAccessible* AsTableCell() { return this; } |
|
155 virtual void Shutdown(); |
|
156 virtual ENameValueFlag Name(nsString& aName); |
|
157 virtual Accessible* FocusedChild(); |
|
158 virtual already_AddRefed<nsIPersistentProperties> NativeAttributes() MOZ_OVERRIDE; |
|
159 virtual int32_t IndexInParent() const; |
|
160 virtual Relation RelationByType(RelationType aType) MOZ_OVERRIDE; |
|
161 virtual a11y::role NativeRole(); |
|
162 virtual uint64_t NativeState(); |
|
163 virtual uint64_t NativeInteractiveState() const; |
|
164 |
|
165 // ActionAccessible |
|
166 virtual uint8_t ActionCount(); |
|
167 |
|
168 // TableCellAccessible |
|
169 virtual TableAccessible* Table() const MOZ_OVERRIDE; |
|
170 virtual uint32_t ColIdx() const MOZ_OVERRIDE; |
|
171 virtual uint32_t RowIdx() const MOZ_OVERRIDE; |
|
172 virtual void ColHeaderCells(nsTArray<Accessible*>* aHeaderCells) MOZ_OVERRIDE; |
|
173 virtual void RowHeaderCells(nsTArray<Accessible*>* aCells) MOZ_OVERRIDE { } |
|
174 virtual bool Selected() MOZ_OVERRIDE; |
|
175 |
|
176 // XULTreeGridCellAccessible |
|
177 NS_DECLARE_STATIC_IID_ACCESSOR(XULTREEGRIDCELLACCESSIBLE_IMPL_CID) |
|
178 |
|
179 /** |
|
180 * Fire name or state change event if the accessible text or value has been |
|
181 * changed. |
|
182 * @return true if name has changed |
|
183 */ |
|
184 bool CellInvalidated(); |
|
185 |
|
186 protected: |
|
187 // Accessible |
|
188 virtual Accessible* GetSiblingAtOffset(int32_t aOffset, |
|
189 nsresult* aError = nullptr) const; |
|
190 virtual void DispatchClickEvent(nsIContent* aContent, uint32_t aActionIndex); |
|
191 |
|
192 // XULTreeGridCellAccessible |
|
193 |
|
194 /** |
|
195 * Return true if value of cell can be modified. |
|
196 */ |
|
197 bool IsEditable() const; |
|
198 |
|
199 enum { eAction_Click = 0 }; |
|
200 |
|
201 nsCOMPtr<nsITreeBoxObject> mTree; |
|
202 nsITreeView* mTreeView; |
|
203 |
|
204 int32_t mRow; |
|
205 nsCOMPtr<nsITreeColumn> mColumn; |
|
206 |
|
207 nsString mCachedTextEquiv; |
|
208 }; |
|
209 |
|
210 NS_DEFINE_STATIC_IID_ACCESSOR(XULTreeGridCellAccessible, |
|
211 XULTREEGRIDCELLACCESSIBLE_IMPL_CID) |
|
212 |
|
213 } // namespace a11y |
|
214 } // namespace mozilla |
|
215 |
|
216 #endif |