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_XULFormControlAccessible_H_
7 #define MOZILLA_A11Y_XULFormControlAccessible_H_
8 
9 // NOTE: alphabetically ordered
10 #include "AccessibleWrap.h"
11 #include "FormControlAccessible.h"
12 #include "HyperTextAccessibleWrap.h"
13 #include "XULSelectControlAccessible.h"
14 
15 namespace mozilla {
16 namespace a11y {
17 
18 /**
19  * Used for XUL progressmeter element.
20  */
21 typedef ProgressMeterAccessible<100> XULProgressMeterAccessible;
22 
23 /**
24  * Used for XUL button.
25  *
26  * @note  Don't inherit from LeafAccessible - it doesn't allow children
27  *         and a button can have a dropmarker child.
28  */
29 class XULButtonAccessible : public AccessibleWrap
30 {
31 public:
32   enum { eAction_Click = 0 };
33   XULButtonAccessible(nsIContent* aContent, DocAccessible* aDoc);
34 
35   // nsISupports
36   NS_DECL_ISUPPORTS_INHERITED
37 
38   // Accessible
39   virtual mozilla::a11y::role NativeRole() override;
40   virtual uint64_t NativeState() override;
41 
42   // ActionAccessible
43   virtual uint8_t ActionCount() override;
44   virtual void ActionNameAt(uint8_t aIndex, nsAString& aName) override;
45   virtual bool DoAction(uint8_t aIndex) override;
46 
47   // Widgets
48   virtual bool IsWidget() const override;
49   virtual bool IsActiveWidget() const override;
50   virtual bool AreItemsOperable() const override;
51   virtual Accessible* ContainerWidget() const override;
52 
53   virtual bool IsAcceptableChild(nsIContent* aEl) const override;
54 
55 protected:
56   virtual ~XULButtonAccessible();
57 
58   // XULButtonAccessible
59   bool ContainsMenu() const;
60 };
61 
62 
63 /**
64  * Used for XUL checkbox element.
65  */
66 class XULCheckboxAccessible : public LeafAccessible
67 {
68 public:
69   enum { eAction_Click = 0 };
70   XULCheckboxAccessible(nsIContent* aContent, DocAccessible* aDoc);
71 
72   // Accessible
73   virtual mozilla::a11y::role NativeRole() override;
74   virtual uint64_t NativeState() override;
75 
76   // ActionAccessible
77   virtual uint8_t ActionCount() override;
78   virtual void ActionNameAt(uint8_t aIndex, nsAString& aName) override;
79   virtual bool DoAction(uint8_t aIndex) override;
80 };
81 
82 /**
83  * Used for XUL dropmarker element.
84  */
85 class XULDropmarkerAccessible : public LeafAccessible
86 {
87 public:
88   enum { eAction_Click = 0 };
89   XULDropmarkerAccessible(nsIContent* aContent, DocAccessible* aDoc);
90 
91   // Accessible
92   virtual mozilla::a11y::role NativeRole() override;
93   virtual uint64_t NativeState() override;
94 
95   // ActionAccessible
96   virtual uint8_t ActionCount() override;
97   virtual void ActionNameAt(uint8_t aIndex, nsAString& aName) override;
98   virtual bool DoAction(uint8_t aIndex) override;
99 
100 private:
101   bool DropmarkerOpen(bool aToggleOpen) const;
102 };
103 
104 /**
105  * Used for XUL groupbox element.
106  */
107 class XULGroupboxAccessible final : public AccessibleWrap
108 {
109 public:
110   XULGroupboxAccessible(nsIContent* aContent, DocAccessible* aDoc);
111 
112   // Accessible
113   virtual mozilla::a11y::role NativeRole() override;
114   virtual Relation RelationByType(RelationType aType) override;
115 
116 protected:
117   // Accessible
118   virtual ENameValueFlag NativeName(nsString& aName) override;
119 };
120 
121 /**
122  * Used for XUL radio element (radio button).
123  */
124 class XULRadioButtonAccessible : public RadioButtonAccessible
125 {
126 
127 public:
128   XULRadioButtonAccessible(nsIContent* aContent, DocAccessible* aDoc);
129 
130   // Accessible
131   virtual uint64_t NativeState() override;
132   virtual uint64_t NativeInteractiveState() const override;
133 
134   // Widgets
135   virtual Accessible* ContainerWidget() const override;
136 };
137 
138 /**
139  * Used for XUL radiogroup element.
140  */
141 class XULRadioGroupAccessible : public XULSelectControlAccessible
142 {
143 public:
144   XULRadioGroupAccessible(nsIContent* aContent, DocAccessible* aDoc);
145 
146   // Accessible
147   virtual mozilla::a11y::role NativeRole() override;
148   virtual uint64_t NativeInteractiveState() const override;
149 
150   // Widgets
151   virtual bool IsWidget() const override;
152   virtual bool IsActiveWidget() const override;
153   virtual bool AreItemsOperable() const override;
154 };
155 
156 /**
157  * Used for XUL statusbar element.
158  */
159 class XULStatusBarAccessible : public AccessibleWrap
160 {
161 public:
162   XULStatusBarAccessible(nsIContent* aContent, DocAccessible* aDoc);
163 
164   // Accessible
165   virtual mozilla::a11y::role NativeRole() override;
166 };
167 
168 /**
169  * Used for XUL toolbarbutton element.
170  */
171 class XULToolbarButtonAccessible : public XULButtonAccessible
172 {
173 public:
174   XULToolbarButtonAccessible(nsIContent* aContent, DocAccessible* aDoc);
175 
176   // Accessible
177   virtual void GetPositionAndSizeInternal(int32_t* aPosInSet,
178                                           int32_t* aSetSize) override;
179 
180   // nsXULToolbarButtonAccessible
181   static bool IsSeparator(Accessible* aAccessible);
182 };
183 
184 /**
185  * Used for XUL toolbar element.
186  */
187 class XULToolbarAccessible : public AccessibleWrap
188 {
189 public:
190   XULToolbarAccessible(nsIContent* aContent, DocAccessible* aDoc);
191 
192   // Accessible
193   virtual mozilla::a11y::role NativeRole() override;
194 
195 protected:
196   // Accessible
197   virtual ENameValueFlag NativeName(nsString& aName) override;
198 };
199 
200 /**
201  * Used for XUL toolbarseparator element.
202  */
203 class XULToolbarSeparatorAccessible : public LeafAccessible
204 {
205 public:
206   XULToolbarSeparatorAccessible(nsIContent* aContent,
207                                 DocAccessible* aDoc);
208 
209   // Accessible
210   virtual mozilla::a11y::role NativeRole() override;
211   virtual uint64_t NativeState() override;
212 };
213 
214 } // namespace a11y
215 } // namespace mozilla
216 
217 #endif
218 
219