Bug 1755924 [wpt PR 32876] - Handle resumed blocks that get sliced by floats correctl...
[gecko.git] / accessible / xul / XULTreeAccessible.h
blobb1f5edb64655d7172ba2441573e853db9bf75de5
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;
22 * A class the represents the XUL Tree widget.
24 const uint32_t kMaxTreeColumns = 100;
25 const uint32_t kDefaultTreeCacheLength = 128;
27 /**
28 * LocalAccessible class for XUL tree element.
31 class XULTreeAccessible : public AccessibleWrap {
32 public:
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)
40 // 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;
52 // SelectAccessible
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;
62 // Widgets
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;
71 // XULTreeAccessible
73 /**
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;
81 /**
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);
91 /**
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
98 * index
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);
108 protected:
109 virtual ~XULTreeAccessible();
112 * Creates tree item accessible for the given row index.
114 virtual already_AddRefed<LocalAccessible> CreateTreeItemAccessible(
115 int32_t aRow) const;
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 {
134 public:
135 XULTreeItemAccessibleBase(nsIContent* aContent, DocAccessible* aDoc,
136 LocalAccessible* aParent,
137 dom::XULTreeElement* aTree, nsITreeView* aTreeView,
138 int32_t aRow);
140 // nsISupports and cycle collection
141 NS_DECL_ISUPPORTS_INHERITED
142 NS_DECL_CYCLE_COLLECTION_CLASS_INHERITED(XULTreeItemAccessibleBase,
143 AccessibleWrap)
145 // LocalAccessible
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;
159 // ActionAccessible
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;
165 // Widgets
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 {
182 return nullptr;
186 * Proccess row invalidation. Used to fires name change events.
188 virtual void RowInvalidated(int32_t aStartColIdx, int32_t aEndColIdx) = 0;
190 protected:
191 virtual ~XULTreeItemAccessibleBase();
193 enum { eAction_Click = 0, eAction_Expand = 1 };
195 // LocalAccessible
196 MOZ_CAN_RUN_SCRIPT
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;
216 int32_t mRow;
219 NS_DEFINE_STATIC_IID_ACCESSOR(XULTreeItemAccessibleBase,
220 XULTREEITEMBASEACCESSIBLE_IMPL_CID)
223 * LocalAccessible class for items for XUL tree.
225 class XULTreeItemAccessible : public XULTreeItemAccessibleBase {
226 public:
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)
236 // LocalAccessible
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;
245 protected:
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 {
257 public:
258 XULTreeColumAccessible(nsIContent* aContent, DocAccessible* aDoc);
260 protected:
261 // LocalAccessible
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;
273 } // namespace a11y
274 } // namespace mozilla
276 #endif