Bug 1877642 - Disable browser_fullscreen-tab-close-race.js on apple_silicon !debug...
[gecko.git] / accessible / xul / XULTreeAccessible.h
blob7abc53df42e43fd4b3a4483f778679d96a9f352d
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;
14 class nsTreeColumn;
16 namespace mozilla {
17 namespace a11y {
19 class XULTreeGridCellAccessible;
20 class XULTreeItemAccessibleBase;
23 * A class the represents the XUL Tree widget.
25 const uint32_t kMaxTreeColumns = 100;
26 const uint32_t kDefaultTreeCacheLength = 128;
28 /**
29 * LocalAccessible class for XUL tree element.
32 class XULTreeAccessible : public AccessibleWrap {
33 public:
34 XULTreeAccessible(nsIContent* aContent, DocAccessible* aDoc,
35 nsTreeBodyFrame* aTreeframe);
37 // nsISupports and cycle collection
38 NS_DECL_ISUPPORTS_INHERITED
39 NS_DECL_CYCLE_COLLECTION_CLASS_INHERITED(XULTreeAccessible, LocalAccessible)
41 // LocalAccessible
42 virtual void Shutdown() override;
43 virtual void Value(nsString& aValue) const override;
44 virtual a11y::role NativeRole() const override;
45 virtual uint64_t NativeState() const override;
46 virtual LocalAccessible* LocalChildAtPoint(
47 int32_t aX, int32_t aY, EWhichChildAtPoint aWhichChild) override;
49 virtual LocalAccessible* LocalChildAt(uint32_t aIndex) const override;
50 virtual uint32_t ChildCount() const override;
51 virtual Relation RelationByType(RelationType aType) const override;
53 // SelectAccessible
54 virtual void SelectedItems(nsTArray<Accessible*>* aItems) override;
55 virtual uint32_t SelectedItemCount() override;
56 virtual Accessible* GetSelectedItem(uint32_t aIndex) override;
57 virtual bool IsItemSelected(uint32_t aIndex) override;
58 virtual bool AddItemToSelection(uint32_t aIndex) override;
59 virtual bool RemoveItemFromSelection(uint32_t aIndex) override;
60 virtual bool SelectAll() override;
61 virtual bool UnselectAll() override;
63 // Widgets
64 virtual bool IsWidget() const override;
65 virtual bool IsActiveWidget() const override;
66 virtual bool AreItemsOperable() const override;
67 virtual LocalAccessible* CurrentItem() const override;
68 virtual void SetCurrentItem(const LocalAccessible* aItem) override;
70 virtual LocalAccessible* ContainerWidget() const override;
72 // XULTreeAccessible
74 /**
75 * Return tree item accessible at the givem row. If accessible doesn't exist
76 * in the cache then create and cache it.
78 * @param aRow [in] the given row index
80 XULTreeItemAccessibleBase* GetTreeItemAccessible(int32_t aRow) const;
82 /**
83 * Invalidates the number of cached treeitem accessibles.
85 * @param aRow [in] row index the invalidation starts from
86 * @param aCount [in] the number of treeitem accessibles to invalidate,
87 * the number sign specifies whether rows have been
88 * inserted (plus) or removed (minus)
90 void InvalidateCache(int32_t aRow, int32_t aCount);
92 /**
93 * Fires name change events for invalidated area of tree.
95 * @param aStartRow [in] row index invalidation starts from
96 * @param aEndRow [in] row index invalidation ends, -1 means last row index
97 * @param aStartCol [in] column index invalidation starts from
98 * @param aEndCol [in] column index invalidation ends, -1 mens last column
99 * index
101 void TreeViewInvalidated(int32_t aStartRow, int32_t aEndRow,
102 int32_t aStartCol, int32_t aEndCol);
105 * Invalidates children created for previous tree view.
107 void TreeViewChanged(nsITreeView* aView);
109 protected:
110 virtual ~XULTreeAccessible();
113 * Creates tree item accessible for the given row index.
115 virtual already_AddRefed<XULTreeItemAccessibleBase> CreateTreeItemAccessible(
116 int32_t aRow) const;
118 RefPtr<dom::XULTreeElement> mTree;
119 nsITreeView* mTreeView;
120 mutable nsRefPtrHashtable<nsPtrHashKey<const void>, XULTreeItemAccessibleBase>
121 mAccessibleCache;
125 * Base class for tree item accessibles.
128 class XULTreeItemAccessibleBase : public AccessibleWrap {
129 public:
130 XULTreeItemAccessibleBase(nsIContent* aContent, DocAccessible* aDoc,
131 LocalAccessible* aParent,
132 dom::XULTreeElement* aTree, nsITreeView* aTreeView,
133 int32_t aRow);
135 // nsISupports and cycle collection
136 NS_DECL_ISUPPORTS_INHERITED
137 NS_DECL_CYCLE_COLLECTION_CLASS_INHERITED(XULTreeItemAccessibleBase,
138 AccessibleWrap)
140 // LocalAccessible
141 virtual void Shutdown() override;
142 virtual nsRect BoundsInAppUnits() const override;
143 MOZ_CAN_RUN_SCRIPT_BOUNDARY
144 virtual nsIntRect BoundsInCSSPixels() const override;
145 virtual GroupPos GroupPosition() override;
146 virtual uint64_t NativeState() const override;
147 virtual uint64_t NativeInteractiveState() const override;
148 virtual int32_t IndexInParent() const override;
149 virtual Relation RelationByType(RelationType aType) const override;
150 virtual Accessible* FocusedChild() override;
151 virtual void SetSelected(bool aSelect) override;
152 virtual void TakeFocus() const override;
154 // ActionAccessible
155 virtual uint8_t ActionCount() const override;
156 virtual bool HasPrimaryAction() const override;
157 virtual void ActionNameAt(uint8_t aIndex, nsAString& aName) override;
158 virtual bool DoAction(uint8_t aIndex) const override;
160 // Widgets
161 virtual LocalAccessible* ContainerWidget() const override;
164 * Return row index associated with the accessible.
166 int32_t GetRowIndex() const { return mRow; }
169 * Return cell accessible for the given column. If XUL tree accessible is not
170 * accessible table then return null.
172 virtual XULTreeGridCellAccessible* GetCellAccessible(
173 nsTreeColumn* aColumn) const {
174 return nullptr;
178 * Proccess row invalidation. Used to fires name change events.
180 virtual void RowInvalidated(int32_t aStartColIdx, int32_t aEndColIdx) = 0;
182 protected:
183 virtual ~XULTreeItemAccessibleBase();
185 enum { eAction_Click = 0, eAction_Expand = 1 };
187 // LocalAccessible
188 MOZ_CAN_RUN_SCRIPT
189 virtual void DispatchClickEvent(nsIContent* aContent,
190 uint32_t aActionIndex) const override;
191 virtual LocalAccessible* GetSiblingAtOffset(
192 int32_t aOffset, nsresult* aError = nullptr) const override;
194 // XULTreeItemAccessibleBase
197 * Return true if the tree item accessible is expandable (contains subrows).
199 bool IsExpandable() const;
202 * Return name for cell at the given column.
204 void GetCellName(nsTreeColumn* aColumn, nsAString& aName) const;
206 RefPtr<dom::XULTreeElement> mTree;
207 nsITreeView* mTreeView;
208 int32_t mRow;
212 * LocalAccessible class for items for XUL tree.
214 class XULTreeItemAccessible : public XULTreeItemAccessibleBase {
215 public:
216 XULTreeItemAccessible(nsIContent* aContent, DocAccessible* aDoc,
217 LocalAccessible* aParent, dom::XULTreeElement* aTree,
218 nsITreeView* aTreeView, int32_t aRow);
220 // nsISupports and cycle collection
221 NS_DECL_ISUPPORTS_INHERITED
222 NS_DECL_CYCLE_COLLECTION_CLASS_INHERITED(XULTreeItemAccessible,
223 XULTreeItemAccessibleBase)
225 // LocalAccessible
226 virtual void Shutdown() override;
227 virtual ENameValueFlag Name(nsString& aName) const override;
228 virtual a11y::role NativeRole() const override;
230 // XULTreeItemAccessibleBase
231 virtual void RowInvalidated(int32_t aStartColIdx,
232 int32_t aEndColIdx) override;
234 protected:
235 virtual ~XULTreeItemAccessible();
237 // XULTreeItemAccessible
238 RefPtr<nsTreeColumn> mColumn;
239 nsString mCachedName;
243 * LocalAccessible class for columns element of XUL tree.
245 class XULTreeColumAccessible : public XULColumAccessible {
246 public:
247 XULTreeColumAccessible(nsIContent* aContent, DocAccessible* aDoc);
249 protected:
250 // LocalAccessible
251 virtual LocalAccessible* GetSiblingAtOffset(
252 int32_t aOffset, nsresult* aError = nullptr) const override;
255 ////////////////////////////////////////////////////////////////////////////////
256 // LocalAccessible downcasting method
258 inline XULTreeAccessible* LocalAccessible::AsXULTree() {
259 return IsXULTree() ? static_cast<XULTreeAccessible*>(this) : nullptr;
262 } // namespace a11y
263 } // namespace mozilla
265 #endif