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