no bug - Bumping Firefox l10n changesets r=release a=l10n-bump DONTBUILD CLOSED TREE
[gecko.git] / accessible / html / HTMLSelectAccessible.h
blobc496490e066e82a538d7855d900c71058909a404
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/. */
6 #ifndef mozilla_a11y_HTMLSelectAccessible_h__
7 #define mozilla_a11y_HTMLSelectAccessible_h__
9 #include "HTMLFormControlAccessible.h"
11 namespace mozilla {
12 namespace a11y {
14 /**
15 * Selects, Listboxes and Comboboxes, are made up of a number of different
16 * widgets, some of which are shared between the two. This file contains
17 * all of the widgets for both of the Selects, for HTML only.
19 * Listbox:
20 * - HTMLSelectListAccessible
21 * - HTMLSelectOptionAccessible
23 * Comboboxes:
24 * - HTMLComboboxAccessible
25 * - HTMLComboboxListAccessible [ inserted in accessible tree ]
26 * - HTMLSelectOptionAccessible(s)
30 * The list that contains all the options in the select.
32 class HTMLSelectListAccessible : public AccessibleWrap {
33 public:
34 HTMLSelectListAccessible(nsIContent* aContent, DocAccessible* aDoc);
35 virtual ~HTMLSelectListAccessible() {}
37 // LocalAccessible
38 virtual a11y::role NativeRole() const override;
39 virtual uint64_t NativeState() const override;
40 virtual bool IsAcceptableChild(nsIContent* aEl) const override;
41 virtual bool AttributeChangesState(nsAtom* aAttribute) override;
43 // SelectAccessible
44 virtual bool SelectAll() override;
45 virtual bool UnselectAll() override;
47 // Widgets
48 virtual bool IsWidget() const override;
49 virtual bool IsActiveWidget() const override;
50 virtual bool AreItemsOperable() const override;
51 virtual LocalAccessible* CurrentItem() const override;
52 virtual void SetCurrentItem(const LocalAccessible* aItem) override;
56 * Options inside the select, contained within the list
58 class HTMLSelectOptionAccessible : public HyperTextAccessible {
59 public:
60 enum { eAction_Select = 0 };
62 HTMLSelectOptionAccessible(nsIContent* aContent, DocAccessible* aDoc);
63 virtual ~HTMLSelectOptionAccessible() {}
65 // LocalAccessible
66 virtual a11y::role NativeRole() const override;
67 virtual uint64_t NativeState() const override;
68 virtual uint64_t NativeInteractiveState() const override;
70 virtual nsRect RelativeBounds(nsIFrame** aBoundingFrame) const override;
71 virtual void SetSelected(bool aSelect) override;
73 // ActionAccessible
74 virtual bool HasPrimaryAction() const override;
75 virtual void ActionNameAt(uint8_t aIndex, nsAString& aName) override;
77 // Widgets
78 virtual LocalAccessible* ContainerWidget() const override;
80 protected:
81 // LocalAccessible
82 virtual ENameValueFlag NativeName(nsString& aName) const override;
83 virtual void DOMAttributeChanged(int32_t aNameSpaceID, nsAtom* aAttribute,
84 int32_t aModType,
85 const nsAttrValue* aOldValue,
86 uint64_t aOldState) override;
88 private:
89 /**
90 * Return a select accessible the option belongs to if any.
92 LocalAccessible* GetSelect() const {
93 LocalAccessible* parent = mParent;
94 if (parent && parent->IsHTMLOptGroup()) {
95 parent = parent->LocalParent();
98 if (parent && parent->IsListControl()) {
99 LocalAccessible* combobox = parent->LocalParent();
100 return combobox && combobox->IsCombobox() ? combobox : mParent;
103 return nullptr;
107 * Return a combobox accessible the option belongs to if any.
109 LocalAccessible* GetCombobox() const {
110 LocalAccessible* parent = mParent;
111 if (parent && parent->IsHTMLOptGroup()) {
112 parent = parent->LocalParent();
115 if (parent && parent->IsListControl()) {
116 LocalAccessible* combobox = parent->LocalParent();
117 return combobox && combobox->IsCombobox() ? combobox : nullptr;
120 return nullptr;
125 * Opt Groups inside the select, contained within the list
127 class HTMLSelectOptGroupAccessible : public HTMLSelectOptionAccessible {
128 public:
129 HTMLSelectOptGroupAccessible(nsIContent* aContent, DocAccessible* aDoc)
130 : HTMLSelectOptionAccessible(aContent, aDoc) {
131 mType = eHTMLOptGroupType;
133 virtual ~HTMLSelectOptGroupAccessible() {}
135 // LocalAccessible
136 virtual a11y::role NativeRole() const override;
137 virtual uint64_t NativeInteractiveState() const override;
138 virtual bool IsAcceptableChild(nsIContent* aEl) const override;
140 // ActionAccessible
141 virtual bool HasPrimaryAction() const override;
144 /** ------------------------------------------------------ */
145 /** Finally, the Combobox widgets */
146 /** ------------------------------------------------------ */
148 class HTMLComboboxListAccessible;
151 * A class the represents the HTML Combobox widget.
153 class HTMLComboboxAccessible final : public AccessibleWrap {
154 public:
155 enum { eAction_Click = 0 };
157 HTMLComboboxAccessible(nsIContent* aContent, DocAccessible* aDoc);
158 virtual ~HTMLComboboxAccessible() {}
160 // LocalAccessible
161 virtual void Shutdown() override;
162 virtual void Description(nsString& aDescription) const override;
163 virtual void Value(nsString& aValue) const override;
164 virtual a11y::role NativeRole() const override;
165 virtual uint64_t NativeState() const override;
166 virtual bool RemoveChild(LocalAccessible* aChild) override;
167 virtual bool IsAcceptableChild(nsIContent* aEl) const override;
169 // ActionAccessible
170 virtual bool HasPrimaryAction() const override;
171 virtual void ActionNameAt(uint8_t aIndex, nsAString& aName) override;
173 // Widgets
174 virtual bool IsWidget() const override;
175 virtual bool IsActiveWidget() const override;
176 virtual bool AreItemsOperable() const override;
177 virtual LocalAccessible* CurrentItem() const override;
178 virtual void SetCurrentItem(const LocalAccessible* aItem) override;
180 HTMLComboboxListAccessible* List() const { return mListAccessible; }
183 * Return selected option.
185 LocalAccessible* SelectedOption() const;
187 private:
188 RefPtr<HTMLComboboxListAccessible> mListAccessible;
192 * A class that represents the window that lives to the right
193 * of the drop down button inside the Select. This is the window
194 * that is made visible when the button is pressed.
196 class HTMLComboboxListAccessible : public HTMLSelectListAccessible {
197 public:
198 HTMLComboboxListAccessible(LocalAccessible* aParent, nsIContent* aContent,
199 DocAccessible* aDoc);
200 virtual ~HTMLComboboxListAccessible() {}
202 // LocalAccessible
203 virtual a11y::role NativeRole() const override;
204 virtual uint64_t NativeState() const override;
205 virtual nsRect RelativeBounds(nsIFrame** aBoundingFrame) const override;
206 virtual bool IsAcceptableChild(nsIContent* aEl) const override;
208 // Widgets
209 virtual bool IsActiveWidget() const override;
210 virtual bool AreItemsOperable() const override;
213 } // namespace a11y
214 } // namespace mozilla
216 #endif