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 bool HasPrimaryAction() const override; 45 virtual void ActionNameAt(uint8_t aIndex, nsAString& aName) override; 46 47 enum { eAction_Click = 0 }; 48 }; 49 50 /* 51 * A class the represents the XUL Listbox widget. 52 */ 53 class XULListboxAccessible : public XULSelectControlAccessible, 54 public TableAccessible { 55 public: 56 XULListboxAccessible(nsIContent* aContent, DocAccessible* aDoc); 57 58 // TableAccessible 59 virtual uint32_t ColCount() const override; 60 virtual uint32_t RowCount() override; 61 virtual LocalAccessible* CellAt(uint32_t aRowIndex, 62 uint32_t aColumnIndex) override; 63 virtual bool IsColSelected(uint32_t aColIdx) override; 64 virtual bool IsRowSelected(uint32_t aRowIdx) override; 65 virtual bool IsCellSelected(uint32_t aRowIdx, uint32_t aColIdx) override; 66 virtual uint32_t SelectedCellCount() override; 67 virtual uint32_t SelectedColCount() override; 68 virtual uint32_t SelectedRowCount() override; 69 virtual void SelectedCells(nsTArray<LocalAccessible*>* aCells) override; 70 virtual void SelectedCellIndices(nsTArray<uint32_t>* aCells) override; 71 virtual void SelectedColIndices(nsTArray<uint32_t>* aCols) override; 72 virtual void SelectedRowIndices(nsTArray<uint32_t>* aRows) override; 73 virtual void SelectRow(uint32_t aRowIdx) override; 74 virtual void UnselectRow(uint32_t aRowIdx) override; AsAccessible()75 virtual LocalAccessible* AsAccessible() override { return this; } 76 77 // LocalAccessible AsTable()78 virtual TableAccessible* AsTable() override { return this; } 79 virtual a11y::role NativeRole() const override; 80 virtual uint64_t NativeState() const override; 81 82 // Widgets 83 virtual bool IsWidget() const override; 84 virtual bool IsActiveWidget() const override; 85 virtual bool AreItemsOperable() const override; 86 87 virtual LocalAccessible* ContainerWidget() const override; 88 89 protected: ~XULListboxAccessible()90 virtual ~XULListboxAccessible() {} 91 IsMulticolumn()92 bool IsMulticolumn() const { return ColCount() > 1; } 93 }; 94 95 /** 96 * Listitems -- used in listboxes 97 */ 98 class XULListitemAccessible : public XULMenuitemAccessible { 99 public: 100 enum { eAction_Click = 0 }; 101 102 NS_INLINE_DECL_REFCOUNTING_INHERITED(XULListitemAccessible, 103 XULMenuitemAccessible) 104 105 XULListitemAccessible(nsIContent* aContent, DocAccessible* aDoc); 106 107 // LocalAccessible 108 virtual void Description(nsString& aDesc) const override; 109 virtual a11y::role NativeRole() const override; 110 virtual uint64_t NativeState() const override; 111 virtual uint64_t NativeInteractiveState() const override; 112 113 // Actions 114 virtual void ActionNameAt(uint8_t index, nsAString& aName) override; 115 116 // Widgets 117 virtual LocalAccessible* ContainerWidget() const override; 118 119 protected: 120 virtual ~XULListitemAccessible(); 121 122 // LocalAccessible 123 virtual ENameValueFlag NativeName(nsString& aName) const override; 124 125 // XULListitemAccessible 126 127 /** 128 * Return listbox accessible for the listitem. 129 */ 130 LocalAccessible* GetListAccessible() const; 131 132 private: 133 bool mIsCheckbox; 134 }; 135 136 } // namespace a11y 137 } // namespace mozilla 138 139 #endif 140