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