Coverage Report

Created: 2018-09-25 14:53

/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