1 /* -*- Mode: C++; tab-width: 4; 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_XULListboxAccessible_h__ 7 #define mozilla_a11y_XULListboxAccessible_h__ 8 9 #include "BaseAccessibles.h" 10 #include "TableAccessible.h" 11 #include "TableCellAccessible.h" 12 #include "XULMenuAccessible.h" 13 #include "XULSelectControlAccessible.h" 14 15 namespace mozilla { 16 namespace a11y { 17 18 /** 19 * XULColumAccessible are accessible for list and tree columns elements 20 * (xul:treecols and xul:listheader). 21 */ 22 class XULColumAccessible : public AccessibleWrap { 23 public: 24 XULColumAccessible(nsIContent* aContent, DocAccessible* aDoc); 25 26 // LocalAccessible 27 virtual a11y::role NativeRole() const override; 28 virtual uint64_t NativeState() const override; 29 }; 30 31 /** 32 * XULColumnItemAccessible are accessibles for list and tree column elements 33 * (xul:treecol). 34 */ 35 class XULColumnItemAccessible : public LeafAccessible { 36 public: 37 XULColumnItemAccessible(nsIContent* aContent, DocAccessible* aDoc); 38 39 // LocalAccessible 40 virtual a11y::role NativeRole() const override; 41 virtual uint64_t NativeState() const override; 42 43 // ActionAccessible 44 virtual uint8_t ActionCount() const override; 45 virtual void ActionNameAt(uint8_t aIndex, nsAString& aName) override; 46 virtual bool DoAction(uint8_t aIndex) const override; 47 48 enum { eAction_Click = 0 }; 49 }; 50 51 /* 52 * A class the represents the XUL Listbox widget. 53 */ 54 class XULListboxAccessible : public XULSelectControlAccessible, 55 public TableAccessible { 56 public: 57 XULListboxAccessible(nsIContent* aContent, DocAccessible* aDoc); 58 59 // TableAccessible 60 virtual uint32_t ColCount() const override; 61 virtual uint32_t RowCount() override; 62 virtual LocalAccessible* CellAt(uint32_t aRowIndex, 63 uint32_t aColumnIndex) override; 64 virtual bool IsColSelected(uint32_t aColIdx) override; 65 virtual bool IsRowSelected(uint32_t aRowIdx) override; 66 virtual bool IsCellSelected(uint32_t aRowIdx, uint32_t aColIdx) override; 67 virtual uint32_t SelectedCellCount() override; 68 virtual uint32_t SelectedColCount() override; 69 virtual uint32_t SelectedRowCount() override; 70 virtual void SelectedCells(nsTArray<LocalAccessible*>* aCells) override; 71 virtual void SelectedCellIndices(nsTArray<uint32_t>* aCells) override; 72 virtual void SelectedColIndices(nsTArray<uint32_t>* aCols) override; 73 virtual void SelectedRowIndices(nsTArray<uint32_t>* aRows) override; 74 virtual void SelectRow(uint32_t aRowIdx) override; 75 virtual void UnselectRow(uint32_t aRowIdx) override; AsAccessible()76 virtual LocalAccessible* AsAccessible() override { return this; } 77 78 // LocalAccessible AsTable()79 virtual TableAccessible* AsTable() override { return this; } 80 virtual a11y::role NativeRole() const override; 81 virtual uint64_t NativeState() const override; 82 83 // Widgets 84 virtual bool IsWidget() const override; 85 virtual bool IsActiveWidget() const override; 86 virtual bool AreItemsOperable() const override; 87 88 virtual LocalAccessible* ContainerWidget() const override; 89 90 protected: ~XULListboxAccessible()91 virtual ~XULListboxAccessible() {} 92 IsMulticolumn()93 bool IsMulticolumn() const { return ColCount() > 1; } 94 }; 95 96 /** 97 * Listitems -- used in listboxes 98 */ 99 class XULListitemAccessible : public XULMenuitemAccessible { 100 public: 101 enum { eAction_Click = 0 }; 102 103 NS_INLINE_DECL_REFCOUNTING_INHERITED(XULListitemAccessible, 104 XULMenuitemAccessible) 105 106 XULListitemAccessible(nsIContent* aContent, DocAccessible* aDoc); 107 108 // LocalAccessible 109 virtual void Description(nsString& aDesc) override; 110 virtual a11y::role NativeRole() const override; 111 virtual uint64_t NativeState() const override; 112 virtual uint64_t NativeInteractiveState() const override; 113 114 // Actions 115 virtual void ActionNameAt(uint8_t index, nsAString& aName) override; 116 117 // Widgets 118 virtual LocalAccessible* ContainerWidget() const override; 119 120 protected: 121 virtual ~XULListitemAccessible(); 122 123 // LocalAccessible 124 virtual ENameValueFlag NativeName(nsString& aName) const override; 125 126 // XULListitemAccessible 127 128 /** 129 * Return listbox accessible for the listitem. 130 */ 131 LocalAccessible* GetListAccessible() const; 132 133 private: 134 bool mIsCheckbox; 135 }; 136 137 } // namespace a11y 138 } // namespace mozilla 139 140 #endif 141