gecko-dev/accessible/generic/FormControlAccessible.cpp
Sylvestre Ledru 265e672179 Bug 1511181 - Reformat everything to the Google coding style r=ehsan a=clang-format
# ignore-this-changeset

--HG--
extra : amend_source : 4d301d3b0b8711c4692392aa76088ba7fd7d1022
2018-11-30 11:46:48 +01:00

100 lines
3.0 KiB
C++

/* -*- 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/FloatingPoint.h"
#include "Role.h"
using namespace mozilla::a11y;
////////////////////////////////////////////////////////////////////////////////
// CheckboxAccessible
////////////////////////////////////////////////////////////////////////////////
role CheckboxAccessible::NativeRole() const { return roles::CHECKBUTTON; }
uint8_t CheckboxAccessible::ActionCount() const { return 1; }
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::DoAction(uint8_t aIndex) const {
if (aIndex != eAction_Click) {
return false;
}
DoCommand();
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) {}
uint8_t RadioButtonAccessible::ActionCount() const { return 1; }
void RadioButtonAccessible::ActionNameAt(uint8_t aIndex, nsAString& aName) {
if (aIndex == eAction_Click) aName.AssignLiteral("select");
}
bool RadioButtonAccessible::DoAction(uint8_t aIndex) const {
if (aIndex != eAction_Click) return false;
DoCommand();
return true;
}
role RadioButtonAccessible::NativeRole() const { return roles::RADIOBUTTON; }
////////////////////////////////////////////////////////////////////////////////
// RadioButtonAccessible: Widgets
bool RadioButtonAccessible::IsWidget() const { return true; }