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"
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
27 XULTreeGridAccessible(nsIContent
* aContent
, DocAccessible
* aDoc
,
28 nsTreeBodyFrame
* aTreeFrame
) :
29 XULTreeAccessible(aContent
, aDoc
, aTreeFrame
), xpcAccessibleTable(this)
30 { mGenericTypes
|= eTable
; }
33 NS_DECL_ISUPPORTS_INHERITED
36 NS_FORWARD_NSIACCESSIBLETABLE(xpcAccessibleTable::)
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; }
58 virtual void Shutdown();
59 virtual TableAccessible
* AsTable() { return this; }
60 virtual a11y::role
NativeRole();
63 virtual ~XULTreeGridAccessible();
66 virtual already_AddRefed
<Accessible
>
67 CreateTreeItemAccessible(int32_t aRow
) const MOZ_OVERRIDE
;
72 * Represents accessible for XUL tree item in the case when XUL tree has
75 class XULTreeGridRowAccessible MOZ_FINAL
: public XULTreeItemAccessibleBase
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
)
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
);
104 virtual ~XULTreeGridRowAccessible();
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
119 #define XULTREEGRIDCELLACCESSIBLE_IMPL_CID \
120 { /* 84588ad4-549c-4196-a932-4c5ca5de5dff */ \
124 { 0xa9, 0x32, 0x4c, 0x5c, 0xa5, 0xde, 0x5d, 0xff } \
127 class XULTreeGridCellAccessible
: public LeafAccessible
,
128 public nsIAccessibleTableCell
,
129 public TableCellAccessible
,
130 public xpcAccessibleTableCell
134 XULTreeGridCellAccessible(nsIContent
* aContent
, DocAccessible
* aDoc
,
135 XULTreeGridRowAccessible
* aRowAcc
,
136 nsITreeBoxObject
* aTree
, nsITreeView
* aTreeView
,
137 int32_t aRow
, nsITreeColumn
* aColumn
);
140 NS_DECL_ISUPPORTS_INHERITED
141 NS_DECL_CYCLE_COLLECTION_CLASS_INHERITED(XULTreeGridCellAccessible
,
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::)
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;
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
184 * @return true if name has changed
186 bool CellInvalidated();
189 virtual ~XULTreeGridCellAccessible();
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
;
209 nsCOMPtr
<nsITreeColumn
> mColumn
;
211 nsString mCachedTextEquiv
;
214 NS_DEFINE_STATIC_IID_ACCESSOR(XULTreeGridCellAccessible
,
215 XULTREEGRIDCELLACCESSIBLE_IMPL_CID
)
218 } // namespace mozilla