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_XULTreeAccessible_h__
7 #define mozilla_a11y_XULTreeAccessible_h__
9 #include "nsITreeView.h"
10 #include "XULListboxAccessible.h"
11 #include "mozilla/dom/XULTreeElement.h"
13 class nsTreeBodyFrame
;
19 class XULTreeGridCellAccessible
;
22 * A class the represents the XUL Tree widget.
24 const uint32_t kMaxTreeColumns
= 100;
25 const uint32_t kDefaultTreeCacheLength
= 128;
28 * LocalAccessible class for XUL tree element.
31 class XULTreeAccessible
: public AccessibleWrap
{
33 XULTreeAccessible(nsIContent
* aContent
, DocAccessible
* aDoc
,
34 nsTreeBodyFrame
* aTreeframe
);
36 // nsISupports and cycle collection
37 NS_DECL_ISUPPORTS_INHERITED
38 NS_DECL_CYCLE_COLLECTION_CLASS_INHERITED(XULTreeAccessible
, LocalAccessible
)
41 virtual void Shutdown() override
;
42 virtual void Value(nsString
& aValue
) const override
;
43 virtual a11y::role
NativeRole() const override
;
44 virtual uint64_t NativeState() const override
;
45 virtual LocalAccessible
* LocalChildAtPoint(
46 int32_t aX
, int32_t aY
, EWhichChildAtPoint aWhichChild
) override
;
48 virtual LocalAccessible
* LocalChildAt(uint32_t aIndex
) const override
;
49 virtual uint32_t ChildCount() const override
;
50 virtual Relation
RelationByType(RelationType aType
) const override
;
53 virtual void SelectedItems(nsTArray
<Accessible
*>* aItems
) override
;
54 virtual uint32_t SelectedItemCount() override
;
55 virtual Accessible
* GetSelectedItem(uint32_t aIndex
) override
;
56 virtual bool IsItemSelected(uint32_t aIndex
) override
;
57 virtual bool AddItemToSelection(uint32_t aIndex
) override
;
58 virtual bool RemoveItemFromSelection(uint32_t aIndex
) override
;
59 virtual bool SelectAll() override
;
60 virtual bool UnselectAll() override
;
63 virtual bool IsWidget() const override
;
64 virtual bool IsActiveWidget() const override
;
65 virtual bool AreItemsOperable() const override
;
66 virtual LocalAccessible
* CurrentItem() const override
;
67 virtual void SetCurrentItem(const LocalAccessible
* aItem
) override
;
69 virtual LocalAccessible
* ContainerWidget() const override
;
74 * Return tree item accessible at the givem row. If accessible doesn't exist
75 * in the cache then create and cache it.
77 * @param aRow [in] the given row index
79 LocalAccessible
* GetTreeItemAccessible(int32_t aRow
) const;
82 * Invalidates the number of cached treeitem accessibles.
84 * @param aRow [in] row index the invalidation starts from
85 * @param aCount [in] the number of treeitem accessibles to invalidate,
86 * the number sign specifies whether rows have been
87 * inserted (plus) or removed (minus)
89 void InvalidateCache(int32_t aRow
, int32_t aCount
);
92 * Fires name change events for invalidated area of tree.
94 * @param aStartRow [in] row index invalidation starts from
95 * @param aEndRow [in] row index invalidation ends, -1 means last row index
96 * @param aStartCol [in] column index invalidation starts from
97 * @param aEndCol [in] column index invalidation ends, -1 mens last column
100 void TreeViewInvalidated(int32_t aStartRow
, int32_t aEndRow
,
101 int32_t aStartCol
, int32_t aEndCol
);
104 * Invalidates children created for previous tree view.
106 void TreeViewChanged(nsITreeView
* aView
);
109 virtual ~XULTreeAccessible();
112 * Creates tree item accessible for the given row index.
114 virtual already_AddRefed
<LocalAccessible
> CreateTreeItemAccessible(
117 RefPtr
<dom::XULTreeElement
> mTree
;
118 nsITreeView
* mTreeView
;
119 mutable AccessibleHashtable mAccessibleCache
;
123 * Base class for tree item accessibles.
126 #define XULTREEITEMBASEACCESSIBLE_IMPL_CID \
127 { /* 1ab79ae7-766a-443c-940b-b1e6b0831dfc */ \
128 0x1ab79ae7, 0x766a, 0x443c, { \
129 0x94, 0x0b, 0xb1, 0xe6, 0xb0, 0x83, 0x1d, 0xfc \
133 class XULTreeItemAccessibleBase
: public AccessibleWrap
{
135 XULTreeItemAccessibleBase(nsIContent
* aContent
, DocAccessible
* aDoc
,
136 LocalAccessible
* aParent
,
137 dom::XULTreeElement
* aTree
, nsITreeView
* aTreeView
,
140 // nsISupports and cycle collection
141 NS_DECL_ISUPPORTS_INHERITED
142 NS_DECL_CYCLE_COLLECTION_CLASS_INHERITED(XULTreeItemAccessibleBase
,
146 virtual void Shutdown() override
;
147 virtual nsRect
BoundsInAppUnits() const override
;
148 MOZ_CAN_RUN_SCRIPT_BOUNDARY
149 virtual nsIntRect
BoundsInCSSPixels() const override
;
150 virtual GroupPos
GroupPosition() override
;
151 virtual uint64_t NativeState() const override
;
152 virtual uint64_t NativeInteractiveState() const override
;
153 virtual int32_t IndexInParent() const override
;
154 virtual Relation
RelationByType(RelationType aType
) const override
;
155 virtual LocalAccessible
* FocusedChild() override
;
156 virtual void SetSelected(bool aSelect
) override
;
157 virtual void TakeFocus() const override
;
160 virtual uint8_t ActionCount() const override
;
161 virtual bool HasPrimaryAction() const override
;
162 virtual void ActionNameAt(uint8_t aIndex
, nsAString
& aName
) override
;
163 virtual bool DoAction(uint8_t aIndex
) const override
;
166 virtual LocalAccessible
* ContainerWidget() const override
;
168 // XULTreeItemAccessibleBase
169 NS_DECLARE_STATIC_IID_ACCESSOR(XULTREEITEMBASEACCESSIBLE_IMPL_CID
)
172 * Return row index associated with the accessible.
174 int32_t GetRowIndex() const { return mRow
; }
177 * Return cell accessible for the given column. If XUL tree accessible is not
178 * accessible table then return null.
180 virtual XULTreeGridCellAccessible
* GetCellAccessible(
181 nsTreeColumn
* aColumn
) const {
186 * Proccess row invalidation. Used to fires name change events.
188 virtual void RowInvalidated(int32_t aStartColIdx
, int32_t aEndColIdx
) = 0;
191 virtual ~XULTreeItemAccessibleBase();
193 enum { eAction_Click
= 0, eAction_Expand
= 1 };
197 virtual void DispatchClickEvent(nsIContent
* aContent
,
198 uint32_t aActionIndex
) const override
;
199 virtual LocalAccessible
* GetSiblingAtOffset(
200 int32_t aOffset
, nsresult
* aError
= nullptr) const override
;
202 // XULTreeItemAccessibleBase
205 * Return true if the tree item accessible is expandable (contains subrows).
207 bool IsExpandable() const;
210 * Return name for cell at the given column.
212 void GetCellName(nsTreeColumn
* aColumn
, nsAString
& aName
) const;
214 RefPtr
<dom::XULTreeElement
> mTree
;
215 nsITreeView
* mTreeView
;
219 NS_DEFINE_STATIC_IID_ACCESSOR(XULTreeItemAccessibleBase
,
220 XULTREEITEMBASEACCESSIBLE_IMPL_CID
)
223 * LocalAccessible class for items for XUL tree.
225 class XULTreeItemAccessible
: public XULTreeItemAccessibleBase
{
227 XULTreeItemAccessible(nsIContent
* aContent
, DocAccessible
* aDoc
,
228 LocalAccessible
* aParent
, dom::XULTreeElement
* aTree
,
229 nsITreeView
* aTreeView
, int32_t aRow
);
231 // nsISupports and cycle collection
232 NS_DECL_ISUPPORTS_INHERITED
233 NS_DECL_CYCLE_COLLECTION_CLASS_INHERITED(XULTreeItemAccessible
,
234 XULTreeItemAccessibleBase
)
237 virtual void Shutdown() override
;
238 virtual ENameValueFlag
Name(nsString
& aName
) const override
;
239 virtual a11y::role
NativeRole() const override
;
241 // XULTreeItemAccessibleBase
242 virtual void RowInvalidated(int32_t aStartColIdx
,
243 int32_t aEndColIdx
) override
;
246 virtual ~XULTreeItemAccessible();
248 // XULTreeItemAccessible
249 RefPtr
<nsTreeColumn
> mColumn
;
250 nsString mCachedName
;
254 * LocalAccessible class for columns element of XUL tree.
256 class XULTreeColumAccessible
: public XULColumAccessible
{
258 XULTreeColumAccessible(nsIContent
* aContent
, DocAccessible
* aDoc
);
262 virtual LocalAccessible
* GetSiblingAtOffset(
263 int32_t aOffset
, nsresult
* aError
= nullptr) const override
;
266 ////////////////////////////////////////////////////////////////////////////////
267 // LocalAccessible downcasting method
269 inline XULTreeAccessible
* LocalAccessible::AsXULTree() {
270 return IsXULTree() ? static_cast<XULTreeAccessible
*>(this) : nullptr;
274 } // namespace mozilla