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/. */ 5 6 #ifndef mozilla_a11y_XULTreeGridAccessible_h__ 7 #define mozilla_a11y_XULTreeGridAccessible_h__ 8 9 #include "XULTreeAccessible.h" 10 #include "TableAccessible.h" 11 #include "TableCellAccessible.h" 12 13 namespace mozilla { 14 namespace a11y { 15 16 class XULTreeGridCellAccessible; 17 18 /** 19 * Represents accessible for XUL tree in the case when it has multiple columns. 20 */ 21 class XULTreeGridAccessible : public XULTreeAccessible, public TableAccessible { 22 public: XULTreeGridAccessible(nsIContent * aContent,DocAccessible * aDoc,nsTreeBodyFrame * aTreeFrame)23 XULTreeGridAccessible(nsIContent* aContent, DocAccessible* aDoc, 24 nsTreeBodyFrame* aTreeFrame) 25 : XULTreeAccessible(aContent, aDoc, aTreeFrame) { 26 mGenericTypes |= eTable; 27 } 28 29 // TableAccessible 30 virtual uint32_t ColCount() const override; 31 virtual uint32_t RowCount() override; 32 virtual LocalAccessible* CellAt(uint32_t aRowIndex, 33 uint32_t aColumnIndex) override; 34 virtual void ColDescription(uint32_t aColIdx, 35 nsString& aDescription) override; 36 virtual bool IsColSelected(uint32_t aColIdx) override; 37 virtual bool IsRowSelected(uint32_t aRowIdx) override; 38 virtual bool IsCellSelected(uint32_t aRowIdx, uint32_t aColIdx) override; 39 virtual uint32_t SelectedCellCount() override; 40 virtual uint32_t SelectedColCount() override; 41 virtual uint32_t SelectedRowCount() override; 42 virtual void SelectedCells(nsTArray<LocalAccessible*>* aCells) override; 43 virtual void SelectedCellIndices(nsTArray<uint32_t>* aCells) override; 44 virtual void SelectedColIndices(nsTArray<uint32_t>* aCols) override; 45 virtual void SelectedRowIndices(nsTArray<uint32_t>* aRows) override; 46 virtual void SelectRow(uint32_t aRowIdx) override; 47 virtual void UnselectRow(uint32_t aRowIdx) override; AsAccessible()48 virtual LocalAccessible* AsAccessible() override { return this; } 49 50 // LocalAccessible AsTable()51 virtual TableAccessible* AsTable() override { return this; } 52 virtual a11y::role NativeRole() const override; 53 54 protected: 55 virtual ~XULTreeGridAccessible(); 56 57 // XULTreeAccessible 58 virtual already_AddRefed<LocalAccessible> CreateTreeItemAccessible( 59 int32_t aRow) const override; 60 }; 61 62 /** 63 * Represents accessible for XUL tree item in the case when XUL tree has 64 * multiple columns. 65 */ 66 class XULTreeGridRowAccessible final : public XULTreeItemAccessibleBase { 67 public: 68 using LocalAccessible::LocalChildAt; 69 70 XULTreeGridRowAccessible(nsIContent* aContent, DocAccessible* aDoc, 71 LocalAccessible* aParent, dom::XULTreeElement* aTree, 72 nsITreeView* aTreeView, int32_t aRow); 73 74 // nsISupports and cycle collection 75 NS_DECL_ISUPPORTS_INHERITED 76 NS_DECL_CYCLE_COLLECTION_CLASS_INHERITED(XULTreeGridRowAccessible, 77 XULTreeItemAccessibleBase) 78 79 // LocalAccessible 80 virtual void Shutdown() override; 81 virtual a11y::role NativeRole() const override; 82 virtual ENameValueFlag Name(nsString& aName) const override; 83 virtual LocalAccessible* LocalChildAtPoint( 84 int32_t aX, int32_t aY, EWhichChildAtPoint aWhichChild) override; 85 86 virtual LocalAccessible* LocalChildAt(uint32_t aIndex) const override; 87 virtual uint32_t ChildCount() const override; 88 89 // XULTreeItemAccessibleBase 90 XULTreeGridCellAccessible* GetCellAccessible( 91 nsTreeColumn* aColumn) const final; 92 virtual void RowInvalidated(int32_t aStartColIdx, 93 int32_t aEndColIdx) override; 94 95 protected: 96 virtual ~XULTreeGridRowAccessible(); 97 98 // XULTreeItemAccessibleBase 99 mutable nsRefPtrHashtable<nsPtrHashKey<const void>, XULTreeGridCellAccessible> 100 mAccessibleCache; 101 }; 102 103 /** 104 * Represents an accessible for XUL tree cell in the case when XUL tree has 105 * multiple columns. 106 */ 107 108 class XULTreeGridCellAccessible : public LeafAccessible, 109 public TableCellAccessible { 110 public: 111 XULTreeGridCellAccessible(nsIContent* aContent, DocAccessible* aDoc, 112 XULTreeGridRowAccessible* aRowAcc, 113 dom::XULTreeElement* aTree, nsITreeView* aTreeView, 114 int32_t aRow, nsTreeColumn* aColumn); 115 116 // nsISupports 117 NS_DECL_ISUPPORTS_INHERITED 118 NS_DECL_CYCLE_COLLECTION_CLASS_INHERITED(XULTreeGridCellAccessible, 119 LeafAccessible) 120 121 // LocalAccessible 122 virtual void Shutdown() override; AsTableCell()123 virtual TableCellAccessible* AsTableCell() override { return this; } 124 virtual nsRect BoundsInAppUnits() const override; 125 virtual nsIntRect BoundsInCSSPixels() const override; 126 virtual ENameValueFlag Name(nsString& aName) const override; 127 virtual LocalAccessible* FocusedChild() override; 128 virtual already_AddRefed<AccAttributes> NativeAttributes() override; 129 virtual int32_t IndexInParent() const override; 130 virtual Relation RelationByType(RelationType aType) const override; 131 virtual a11y::role NativeRole() const override; 132 virtual uint64_t NativeState() const override; 133 virtual uint64_t NativeInteractiveState() const override; 134 135 // ActionAccessible 136 virtual uint8_t ActionCount() const override; 137 virtual void ActionNameAt(uint8_t aIndex, nsAString& aName) override; 138 virtual bool DoAction(uint8_t aIndex) const override; 139 140 // TableCellAccessible 141 virtual TableAccessible* Table() const override; 142 virtual uint32_t ColIdx() const override; 143 virtual uint32_t RowIdx() const override; 144 virtual void ColHeaderCells( 145 nsTArray<LocalAccessible*>* aHeaderCells) override; RowHeaderCells(nsTArray<LocalAccessible * > * aCells)146 virtual void RowHeaderCells(nsTArray<LocalAccessible*>* aCells) override {} 147 virtual bool Selected() override; 148 149 /** 150 * Fire name or state change event if the accessible text or value has been 151 * changed. 152 * @return true if name has changed 153 */ 154 bool CellInvalidated(); 155 156 protected: 157 virtual ~XULTreeGridCellAccessible(); 158 159 // LocalAccessible 160 virtual LocalAccessible* GetSiblingAtOffset( 161 int32_t aOffset, nsresult* aError = nullptr) const override; 162 MOZ_CAN_RUN_SCRIPT 163 virtual void DispatchClickEvent(nsIContent* aContent, 164 uint32_t aActionIndex) const override; 165 166 // XULTreeGridCellAccessible 167 168 /** 169 * Return true if value of cell can be modified. 170 */ 171 bool IsEditable() const; 172 173 enum { eAction_Click = 0 }; 174 175 RefPtr<dom::XULTreeElement> mTree; 176 nsITreeView* mTreeView; 177 178 int32_t mRow; 179 RefPtr<nsTreeColumn> mColumn; 180 181 nsString mCachedTextEquiv; 182 }; 183 184 } // namespace a11y 185 } // namespace mozilla 186 187 #endif 188