Bumping manifests a=b2g-bump
[gecko.git] / accessible / xul / XULTreeGridAccessible.h
blob011e76ef272a765b2456234daa577d2a49476893
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/. */
6 #ifndef mozilla_a11y_XULTreeGridAccessible_h__
7 #define mozilla_a11y_XULTreeGridAccessible_h__
9 #include "XULTreeAccessible.h"
10 #include "TableAccessible.h"
11 #include "TableCellAccessible.h"
12 #include "xpcAccessibleTable.h"
13 #include "xpcAccessibleTableCell.h"
15 namespace mozilla {
16 namespace a11y {
18 /**
19 * Represents accessible for XUL tree in the case when it has multiple columns.
21 class XULTreeGridAccessible : public XULTreeAccessible,
22 public xpcAccessibleTable,
23 public nsIAccessibleTable,
24 public TableAccessible
26 public:
27 XULTreeGridAccessible(nsIContent* aContent, DocAccessible* aDoc,
28 nsTreeBodyFrame* aTreeFrame) :
29 XULTreeAccessible(aContent, aDoc, aTreeFrame), xpcAccessibleTable(this)
30 { mGenericTypes |= eTable; }
32 // nsISupports
33 NS_DECL_ISUPPORTS_INHERITED
35 // nsIAccessibleTable
36 NS_FORWARD_NSIACCESSIBLETABLE(xpcAccessibleTable::)
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; }
57 // Accessible
58 virtual void Shutdown();
59 virtual TableAccessible* AsTable() { return this; }
60 virtual a11y::role NativeRole();
62 protected:
63 virtual ~XULTreeGridAccessible();
65 // XULTreeAccessible
66 virtual already_AddRefed<Accessible>
67 CreateTreeItemAccessible(int32_t aRow) const MOZ_OVERRIDE;
71 /**
72 * Represents accessible for XUL tree item in the case when XUL tree has
73 * multiple columns.
75 class XULTreeGridRowAccessible MOZ_FINAL : public XULTreeItemAccessibleBase
77 public:
78 using Accessible::GetChildAt;
80 XULTreeGridRowAccessible(nsIContent* aContent, DocAccessible* aDoc,
81 Accessible* aParent, nsITreeBoxObject* aTree,
82 nsITreeView* aTreeView, int32_t aRow);
84 // nsISupports and cycle collection
85 NS_DECL_ISUPPORTS_INHERITED
86 NS_DECL_CYCLE_COLLECTION_CLASS_INHERITED(XULTreeGridRowAccessible,
87 XULTreeItemAccessibleBase)
89 // Accessible
90 virtual void Shutdown();
91 virtual a11y::role NativeRole();
92 virtual ENameValueFlag Name(nsString& aName);
93 virtual Accessible* ChildAtPoint(int32_t aX, int32_t aY,
94 EWhichChildAtPoint aWhichChild);
96 virtual Accessible* GetChildAt(uint32_t aIndex) const MOZ_OVERRIDE;
97 virtual uint32_t ChildCount() const MOZ_OVERRIDE;
99 // XULTreeItemAccessibleBase
100 virtual Accessible* GetCellAccessible(nsITreeColumn* aColumn) const MOZ_OVERRIDE;
101 virtual void RowInvalidated(int32_t aStartColIdx, int32_t aEndColIdx);
103 protected:
104 virtual ~XULTreeGridRowAccessible();
106 // Accessible
107 virtual void CacheChildren();
109 // XULTreeItemAccessibleBase
110 mutable AccessibleHashtable mAccessibleCache;
115 * Represents an accessible for XUL tree cell in the case when XUL tree has
116 * multiple columns.
119 #define XULTREEGRIDCELLACCESSIBLE_IMPL_CID \
120 { /* 84588ad4-549c-4196-a932-4c5ca5de5dff */ \
121 0x84588ad4, \
122 0x549c, \
123 0x4196, \
124 { 0xa9, 0x32, 0x4c, 0x5c, 0xa5, 0xde, 0x5d, 0xff } \
127 class XULTreeGridCellAccessible : public LeafAccessible,
128 public nsIAccessibleTableCell,
129 public TableCellAccessible,
130 public xpcAccessibleTableCell
132 public:
134 XULTreeGridCellAccessible(nsIContent* aContent, DocAccessible* aDoc,
135 XULTreeGridRowAccessible* aRowAcc,
136 nsITreeBoxObject* aTree, nsITreeView* aTreeView,
137 int32_t aRow, nsITreeColumn* aColumn);
139 // nsISupports
140 NS_DECL_ISUPPORTS_INHERITED
141 NS_DECL_CYCLE_COLLECTION_CLASS_INHERITED(XULTreeGridCellAccessible,
142 LeafAccessible)
144 // nsIAccessible
146 NS_IMETHOD GetBounds(int32_t* aX, int32_t* aY,
147 int32_t* aWidth, int32_t* aHeight);
149 NS_IMETHOD GetActionName(uint8_t aIndex, nsAString& aName);
150 NS_IMETHOD DoAction(uint8_t aIndex);
152 // nsIAccessibleTableCell
153 NS_FORWARD_NSIACCESSIBLETABLECELL(xpcAccessibleTableCell::)
155 // Accessible
156 virtual TableCellAccessible* AsTableCell() { return this; }
157 virtual void Shutdown();
158 virtual ENameValueFlag Name(nsString& aName);
159 virtual Accessible* FocusedChild();
160 virtual already_AddRefed<nsIPersistentProperties> NativeAttributes() MOZ_OVERRIDE;
161 virtual int32_t IndexInParent() const;
162 virtual Relation RelationByType(RelationType aType) MOZ_OVERRIDE;
163 virtual a11y::role NativeRole();
164 virtual uint64_t NativeState();
165 virtual uint64_t NativeInteractiveState() const;
167 // ActionAccessible
168 virtual uint8_t ActionCount();
170 // TableCellAccessible
171 virtual TableAccessible* Table() const MOZ_OVERRIDE;
172 virtual uint32_t ColIdx() const MOZ_OVERRIDE;
173 virtual uint32_t RowIdx() const MOZ_OVERRIDE;
174 virtual void ColHeaderCells(nsTArray<Accessible*>* aHeaderCells) MOZ_OVERRIDE;
175 virtual void RowHeaderCells(nsTArray<Accessible*>* aCells) MOZ_OVERRIDE { }
176 virtual bool Selected() MOZ_OVERRIDE;
178 // XULTreeGridCellAccessible
179 NS_DECLARE_STATIC_IID_ACCESSOR(XULTREEGRIDCELLACCESSIBLE_IMPL_CID)
182 * Fire name or state change event if the accessible text or value has been
183 * changed.
184 * @return true if name has changed
186 bool CellInvalidated();
188 protected:
189 virtual ~XULTreeGridCellAccessible();
191 // Accessible
192 virtual Accessible* GetSiblingAtOffset(int32_t aOffset,
193 nsresult* aError = nullptr) const;
194 virtual void DispatchClickEvent(nsIContent* aContent, uint32_t aActionIndex);
196 // XULTreeGridCellAccessible
199 * Return true if value of cell can be modified.
201 bool IsEditable() const;
203 enum { eAction_Click = 0 };
205 nsCOMPtr<nsITreeBoxObject> mTree;
206 nsITreeView* mTreeView;
208 int32_t mRow;
209 nsCOMPtr<nsITreeColumn> mColumn;
211 nsString mCachedTextEquiv;
214 NS_DEFINE_STATIC_IID_ACCESSOR(XULTreeGridCellAccessible,
215 XULTREEGRIDCELLACCESSIBLE_IMPL_CID)
217 } // namespace a11y
218 } // namespace mozilla
220 #endif