blob: dd9a7065cb252ed05df797fd4028fcc173613b24 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
|
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
// NOTE: alphabetically ordered
#include "FormControlAccessible.h"
#include "mozilla/dom/HTMLInputElement.h"
#include "mozilla/a11y/Role.h"
using namespace mozilla::a11y;
////////////////////////////////////////////////////////////////////////////////
// CheckboxAccessible
////////////////////////////////////////////////////////////////////////////////
role CheckboxAccessible::NativeRole() const { return roles::CHECKBUTTON; }
void CheckboxAccessible::ActionNameAt(uint8_t aIndex, nsAString& aName) {
if (aIndex == eAction_Click) {
uint64_t state = NativeState();
if (state & states::CHECKED) {
aName.AssignLiteral("uncheck");
} else if (state & states::MIXED) {
aName.AssignLiteral("cycle");
} else {
aName.AssignLiteral("check");
}
}
}
bool CheckboxAccessible::HasPrimaryAction() const { return true; }
uint64_t CheckboxAccessible::NativeState() const {
uint64_t state = LeafAccessible::NativeState();
state |= states::CHECKABLE;
dom::HTMLInputElement* input = dom::HTMLInputElement::FromNode(mContent);
if (input) { // HTML:input@type="checkbox"
if (input->Indeterminate()) {
return state | states::MIXED;
}
if (input->Checked()) {
return state | states::CHECKED;
}
} else if (mContent->AsElement()->AttrValueIs(
kNameSpaceID_None, nsGkAtoms::checked, nsGkAtoms::_true,
eCaseMatters)) { // XUL checkbox
return state | states::CHECKED;
}
return state;
}
////////////////////////////////////////////////////////////////////////////////
// CheckboxAccessible: Widgets
bool CheckboxAccessible::IsWidget() const { return true; }
////////////////////////////////////////////////////////////////////////////////
// RadioButtonAccessible
////////////////////////////////////////////////////////////////////////////////
RadioButtonAccessible::RadioButtonAccessible(nsIContent* aContent,
DocAccessible* aDoc)
: LeafAccessible(aContent, aDoc) {}
bool RadioButtonAccessible::HasPrimaryAction() const { return true; }
void RadioButtonAccessible::ActionNameAt(uint8_t aIndex, nsAString& aName) {
if (aIndex == eAction_Click) aName.AssignLiteral("select");
}
role RadioButtonAccessible::NativeRole() const { return roles::RADIOBUTTON; }
////////////////////////////////////////////////////////////////////////////////
// RadioButtonAccessible: Widgets
bool RadioButtonAccessible::IsWidget() const { return true; }
|