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