Line data Source code
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 0 : XULTreeGridAccessible(nsIContent* aContent, DocAccessible* aDoc,
28 0 : nsTreeBodyFrame* aTreeFrame) :
29 0 : XULTreeAccessible(aContent, aDoc, aTreeFrame)
30 0 : { mGenericTypes |= eTable; }
31 :
32 : // TableAccessible
33 : virtual uint32_t ColCount() 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() 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 0 : NS_DECL_CYCLE_COLLECTION_CLASS_INHERITED(XULTreeGridRowAccessible,
80 : XULTreeItemAccessibleBase)
81 :
82 : // Accessible
83 : virtual void Shutdown() override;
84 : virtual a11y::role NativeRole() override;
85 : virtual ENameValueFlag Name(nsString& aName) 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 : virtual XULTreeGridCellAccessible* GetCellAccessible(nsITreeColumn* aColumn)
94 : const override 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, nsITreeColumn* aColumn);
120 :
121 : // nsISupports
122 : NS_DECL_ISUPPORTS_INHERITED
123 0 : 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 nsIntRect Bounds() const override;
130 : virtual ENameValueFlag Name(nsString& aName) override;
131 : virtual Accessible* FocusedChild() override;
132 : virtual already_AddRefed<nsIPersistentProperties> NativeAttributes() override;
133 : virtual int32_t IndexInParent() const override;
134 : virtual Relation RelationByType(RelationType aType) override;
135 : virtual a11y::role NativeRole() override;
136 : virtual uint64_t NativeState() override;
137 : virtual uint64_t NativeInteractiveState() const override;
138 :
139 : // ActionAccessible
140 : virtual uint8_t ActionCount() override;
141 : virtual void ActionNameAt(uint8_t aIndex, nsAString& aName) override;
142 : virtual bool DoAction(uint8_t aIndex) override;
143 :
144 : // TableCellAccessible
145 : virtual TableAccessible* Table() const override;
146 : virtual uint32_t ColIdx() const override;
147 : virtual uint32_t RowIdx() const override;
148 : virtual void ColHeaderCells(nsTArray<Accessible*>* aHeaderCells) override;
149 0 : virtual void RowHeaderCells(nsTArray<Accessible*>* aCells) override { }
150 : virtual bool Selected() override;
151 :
152 : /**
153 : * Fire name or state change event if the accessible text or value has been
154 : * changed.
155 : * @return true if name has changed
156 : */
157 : bool CellInvalidated();
158 :
159 : protected:
160 : virtual ~XULTreeGridCellAccessible();
161 :
162 : // Accessible
163 : virtual Accessible* GetSiblingAtOffset(int32_t aOffset,
164 : nsresult* aError = nullptr) const override;
165 : virtual void DispatchClickEvent(nsIContent* aContent, uint32_t aActionIndex) override;
166 :
167 : // XULTreeGridCellAccessible
168 :
169 : /**
170 : * Return true if value of cell can be modified.
171 : */
172 : bool IsEditable() const;
173 :
174 : enum { eAction_Click = 0 };
175 :
176 : nsCOMPtr<nsITreeBoxObject> mTree;
177 : nsITreeView* mTreeView;
178 :
179 : int32_t mRow;
180 : nsCOMPtr<nsITreeColumn> mColumn;
181 :
182 : nsString mCachedTextEquiv;
183 : };
184 :
185 : } // namespace a11y
186 : } // namespace mozilla
187 :
188 : #endif
|