Line data Source code
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_HTMLFormControlAccessible_H_
7 : #define MOZILLA_A11Y_HTMLFormControlAccessible_H_
8 :
9 : #include "FormControlAccessible.h"
10 : #include "HyperTextAccessibleWrap.h"
11 :
12 : namespace mozilla {
13 : namespace a11y {
14 :
15 : /**
16 : * Accessible for HTML progress element.
17 : */
18 : typedef ProgressMeterAccessible<1> HTMLProgressMeterAccessible;
19 :
20 : /**
21 : * Accessible for HTML input@type="checkbox".
22 : */
23 0 : class HTMLCheckboxAccessible : public LeafAccessible
24 : {
25 :
26 : public:
27 : enum { eAction_Click = 0 };
28 :
29 0 : HTMLCheckboxAccessible(nsIContent* aContent, DocAccessible* aDoc) :
30 0 : LeafAccessible(aContent, aDoc)
31 : {
32 : // Ignore "CheckboxStateChange" DOM event in lieu of document observer
33 : // state change notification.
34 0 : mStateFlags |= eIgnoreDOMUIEvent;
35 0 : }
36 :
37 : // Accessible
38 : virtual mozilla::a11y::role NativeRole() override;
39 : virtual uint64_t NativeState() override;
40 :
41 : // ActionAccessible
42 : virtual uint8_t ActionCount() override;
43 : virtual void ActionNameAt(uint8_t aIndex, nsAString& aName) override;
44 : virtual bool DoAction(uint8_t aIndex) override;
45 :
46 : // Widgets
47 : virtual bool IsWidget() const override;
48 : };
49 :
50 :
51 : /**
52 : * Accessible for HTML input@type="radio" element.
53 : */
54 0 : class HTMLRadioButtonAccessible : public RadioButtonAccessible
55 : {
56 :
57 : public:
58 0 : HTMLRadioButtonAccessible(nsIContent* aContent, DocAccessible* aDoc) :
59 0 : RadioButtonAccessible(aContent, aDoc)
60 : {
61 : // Ignore "RadioStateChange" DOM event in lieu of document observer
62 : // state change notification.
63 0 : mStateFlags |= eIgnoreDOMUIEvent;
64 0 : }
65 :
66 : // Accessible
67 : virtual uint64_t NativeState() override;
68 : virtual void GetPositionAndSizeInternal(int32_t *aPosInSet,
69 : int32_t *aSetSize) override;
70 : };
71 :
72 :
73 : /**
74 : * Accessible for HTML input@type="button", @type="submit", @type="image"
75 : * and HTML button elements.
76 : */
77 0 : class HTMLButtonAccessible : public HyperTextAccessibleWrap
78 : {
79 :
80 : public:
81 : enum { eAction_Click = 0 };
82 :
83 : HTMLButtonAccessible(nsIContent* aContent, DocAccessible* aDoc);
84 :
85 : // Accessible
86 : virtual mozilla::a11y::role NativeRole() override;
87 : virtual uint64_t State() override;
88 : virtual uint64_t NativeState() override;
89 :
90 : // ActionAccessible
91 : virtual uint8_t ActionCount() override;
92 : virtual void ActionNameAt(uint8_t aIndex, nsAString& aName) override;
93 : virtual bool DoAction(uint8_t aIndex) override;
94 :
95 : // Widgets
96 : virtual bool IsWidget() const override;
97 :
98 : protected:
99 : // Accessible
100 : virtual ENameValueFlag NativeName(nsString& aName) override;
101 : };
102 :
103 :
104 : /**
105 : * Accessible for HTML input@type="text", input@type="password", textarea and
106 : * other HTML text controls.
107 : */
108 : class HTMLTextFieldAccessible final : public HyperTextAccessibleWrap
109 : {
110 :
111 : public:
112 : enum { eAction_Click = 0 };
113 :
114 : HTMLTextFieldAccessible(nsIContent* aContent, DocAccessible* aDoc);
115 :
116 : NS_DECL_ISUPPORTS_INHERITED
117 :
118 : // HyperTextAccessible
119 : virtual already_AddRefed<nsIEditor> GetEditor() const override;
120 :
121 : // Accessible
122 : virtual void Value(nsString& aValue) override;
123 : virtual void ApplyARIAState(uint64_t* aState) const override;
124 : virtual mozilla::a11y::role NativeRole() override;
125 : virtual uint64_t NativeState() override;
126 : virtual already_AddRefed<nsIPersistentProperties> NativeAttributes() override;
127 :
128 : // ActionAccessible
129 : virtual uint8_t ActionCount() override;
130 : virtual void ActionNameAt(uint8_t aIndex, nsAString& aName) override;
131 : virtual bool DoAction(uint8_t aIndex) override;
132 :
133 : // Widgets
134 : virtual bool IsWidget() const override;
135 : virtual Accessible* ContainerWidget() const override;
136 :
137 : protected:
138 0 : virtual ~HTMLTextFieldAccessible() {}
139 :
140 : // Accessible
141 : virtual ENameValueFlag NativeName(nsString& aName) override;
142 :
143 : /**
144 : * Return a XUL widget element this input is part of.
145 : */
146 0 : nsIContent* XULWidgetElm() const { return mContent->GetBindingParent(); }
147 : };
148 :
149 :
150 : /**
151 : * Accessible for input@type="file" element.
152 : */
153 0 : class HTMLFileInputAccessible : public HyperTextAccessibleWrap
154 : {
155 : public:
156 : HTMLFileInputAccessible(nsIContent* aContent, DocAccessible* aDoc);
157 :
158 : // Accessible
159 : virtual mozilla::a11y::role NativeRole() override;
160 : virtual nsresult HandleAccEvent(AccEvent* aAccEvent) override;
161 : };
162 :
163 :
164 : /**
165 : * Used for HTML input@type="number".
166 : */
167 0 : class HTMLSpinnerAccessible : public AccessibleWrap
168 : {
169 : public:
170 0 : HTMLSpinnerAccessible(nsIContent* aContent, DocAccessible* aDoc) :
171 0 : AccessibleWrap(aContent, aDoc)
172 : {
173 0 : mStateFlags |= eHasNumericValue;
174 0 : }
175 :
176 : // Accessible
177 : virtual mozilla::a11y::role NativeRole() override;
178 : virtual void Value(nsString& aValue) override;
179 :
180 : virtual double MaxValue() const override;
181 : virtual double MinValue() const override;
182 : virtual double CurValue() const override;
183 : virtual double Step() const override;
184 : virtual bool SetCurValue(double aValue) override;
185 : };
186 :
187 :
188 : /**
189 : * Used for input@type="range" element.
190 : */
191 0 : class HTMLRangeAccessible : public LeafAccessible
192 : {
193 : public:
194 0 : HTMLRangeAccessible(nsIContent* aContent, DocAccessible* aDoc) :
195 0 : LeafAccessible(aContent, aDoc)
196 : {
197 0 : mStateFlags |= eHasNumericValue;
198 0 : }
199 :
200 : // Accessible
201 : virtual void Value(nsString& aValue) override;
202 : virtual mozilla::a11y::role NativeRole() override;
203 :
204 : // Value
205 : virtual double MaxValue() const override;
206 : virtual double MinValue() const override;
207 : virtual double CurValue() const override;
208 : virtual double Step() const override;
209 : virtual bool SetCurValue(double aValue) override;
210 :
211 : // Widgets
212 : virtual bool IsWidget() const override;
213 : };
214 :
215 :
216 : /**
217 : * Accessible for HTML fieldset element.
218 : */
219 0 : class HTMLGroupboxAccessible : public HyperTextAccessibleWrap
220 : {
221 : public:
222 : HTMLGroupboxAccessible(nsIContent* aContent, DocAccessible* aDoc);
223 :
224 : // Accessible
225 : virtual mozilla::a11y::role NativeRole() override;
226 : virtual Relation RelationByType(RelationType aType) override;
227 :
228 : protected:
229 : // Accessible
230 : virtual ENameValueFlag NativeName(nsString& aName) override;
231 :
232 : // HTMLGroupboxAccessible
233 : nsIContent* GetLegend() const;
234 : };
235 :
236 :
237 : /**
238 : * Accessible for HTML legend element.
239 : */
240 0 : class HTMLLegendAccessible : public HyperTextAccessibleWrap
241 : {
242 : public:
243 : HTMLLegendAccessible(nsIContent* aContent, DocAccessible* aDoc);
244 :
245 : // Accessible
246 : virtual Relation RelationByType(RelationType aType) override;
247 : };
248 :
249 : /**
250 : * Accessible for HTML5 figure element.
251 : */
252 0 : class HTMLFigureAccessible : public HyperTextAccessibleWrap
253 : {
254 : public:
255 : HTMLFigureAccessible(nsIContent* aContent, DocAccessible* aDoc);
256 :
257 : // Accessible
258 : virtual Relation RelationByType(RelationType aType) override;
259 :
260 : protected:
261 : // Accessible
262 : virtual ENameValueFlag NativeName(nsString& aName) override;
263 :
264 : // HTMLLegendAccessible
265 : nsIContent* Caption() const;
266 : };
267 :
268 :
269 : /**
270 : * Accessible for HTML5 figcaption element.
271 : */
272 0 : class HTMLFigcaptionAccessible : public HyperTextAccessibleWrap
273 : {
274 : public:
275 : HTMLFigcaptionAccessible(nsIContent* aContent, DocAccessible* aDoc);
276 :
277 : // Accessible
278 : virtual Relation RelationByType(RelationType aType) override;
279 : };
280 :
281 : } // namespace a11y
282 : } // namespace mozilla
283 :
284 : #endif
|