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  public:
31   enum { eAction_Click = 0 };
32   XULButtonAccessible(nsIContent* aContent, DocAccessible* aDoc);
33 
34   // nsISupports
35   NS_INLINE_DECL_REFCOUNTING_INHERITED(XULButtonAccessible, AccessibleWrap)
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   virtual bool IsActiveWidget() const override;
49   virtual bool AreItemsOperable() const override;
50   virtual Accessible* ContainerWidget() const override;
51 
52   virtual bool IsAcceptableChild(nsIContent* aEl) const override;
53 
54  protected:
55   virtual ~XULButtonAccessible();
56 
57   // XULButtonAccessible
58   bool ContainsMenu() const;
59 };
60 
61 /**
62  * Used for XUL checkbox element.
63  */
64 class XULCheckboxAccessible : public LeafAccessible {
65  public:
66   enum { eAction_Click = 0 };
67   XULCheckboxAccessible(nsIContent* aContent, DocAccessible* aDoc);
68 
69   // Accessible
70   virtual mozilla::a11y::role NativeRole() override;
71   virtual uint64_t NativeState() override;
72 
73   // ActionAccessible
74   virtual uint8_t ActionCount() override;
75   virtual void ActionNameAt(uint8_t aIndex, nsAString& aName) override;
76   virtual bool DoAction(uint8_t aIndex) override;
77 };
78 
79 /**
80  * Used for XUL dropmarker element.
81  */
82 class XULDropmarkerAccessible : public LeafAccessible {
83  public:
84   enum { eAction_Click = 0 };
85   XULDropmarkerAccessible(nsIContent* aContent, DocAccessible* aDoc);
86 
87   // Accessible
88   virtual mozilla::a11y::role NativeRole() override;
89   virtual uint64_t NativeState() override;
90 
91   // ActionAccessible
92   virtual uint8_t ActionCount() override;
93   virtual void ActionNameAt(uint8_t aIndex, nsAString& aName) override;
94   virtual bool DoAction(uint8_t aIndex) override;
95 
96  private:
97   bool DropmarkerOpen(bool aToggleOpen) const;
98 };
99 
100 /**
101  * Used for XUL groupbox element.
102  */
103 class XULGroupboxAccessible final : public AccessibleWrap {
104  public:
105   XULGroupboxAccessible(nsIContent* aContent, DocAccessible* aDoc);
106 
107   // Accessible
108   virtual mozilla::a11y::role NativeRole() override;
109   virtual Relation RelationByType(RelationType aType) override;
110 
111  protected:
112   // Accessible
113   virtual ENameValueFlag NativeName(nsString& aName) override;
114 };
115 
116 /**
117  * Used for XUL radio element (radio button).
118  */
119 class XULRadioButtonAccessible : public RadioButtonAccessible {
120  public:
121   XULRadioButtonAccessible(nsIContent* aContent, DocAccessible* aDoc);
122 
123   // Accessible
124   virtual uint64_t NativeState() override;
125   virtual uint64_t NativeInteractiveState() const override;
126 
127   // Widgets
128   virtual Accessible* ContainerWidget() const override;
129 };
130 
131 /**
132  * Used for XUL radiogroup element.
133  */
134 class XULRadioGroupAccessible : public XULSelectControlAccessible {
135  public:
136   XULRadioGroupAccessible(nsIContent* aContent, DocAccessible* aDoc);
137 
138   // Accessible
139   virtual mozilla::a11y::role NativeRole() override;
140   virtual uint64_t NativeInteractiveState() const override;
141 
142   // Widgets
143   virtual bool IsWidget() const override;
144   virtual bool IsActiveWidget() const override;
145   virtual bool AreItemsOperable() const override;
146 };
147 
148 /**
149  * Used for XUL statusbar element.
150  */
151 class XULStatusBarAccessible : public AccessibleWrap {
152  public:
153   XULStatusBarAccessible(nsIContent* aContent, DocAccessible* aDoc);
154 
155   // Accessible
156   virtual mozilla::a11y::role NativeRole() override;
157 };
158 
159 /**
160  * Used for XUL toolbarbutton element.
161  */
162 class XULToolbarButtonAccessible : public XULButtonAccessible {
163  public:
164   XULToolbarButtonAccessible(nsIContent* aContent, DocAccessible* aDoc);
165 
166   // Accessible
167   virtual void GetPositionAndSizeInternal(int32_t* aPosInSet,
168                                           int32_t* aSetSize) override;
169 
170   // nsXULToolbarButtonAccessible
171   static bool IsSeparator(Accessible* aAccessible);
172 };
173 
174 /**
175  * Used for XUL toolbar element.
176  */
177 class XULToolbarAccessible : public AccessibleWrap {
178  public:
179   XULToolbarAccessible(nsIContent* aContent, DocAccessible* aDoc);
180 
181   // Accessible
182   virtual mozilla::a11y::role NativeRole() override;
183 
184  protected:
185   // Accessible
186   virtual ENameValueFlag NativeName(nsString& aName) override;
187 };
188 
189 /**
190  * Used for XUL toolbarseparator element.
191  */
192 class XULToolbarSeparatorAccessible : public LeafAccessible {
193  public:
194   XULToolbarSeparatorAccessible(nsIContent* aContent, DocAccessible* aDoc);
195 
196   // Accessible
197   virtual mozilla::a11y::role NativeRole() override;
198   virtual uint64_t NativeState() override;
199 };
200 
201 }  // namespace a11y
202 }  // namespace mozilla
203 
204 #endif
205