2014-03-07 21:35:19 +00:00
|
|
|
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
|
|
|
/* vim: set ts=2 et sw=2 tw=80: */
|
|
|
|
/* 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/. */
|
|
|
|
|
|
|
|
#include "DocAccessibleChild.h"
|
|
|
|
|
|
|
|
#include "Accessible-inl.h"
|
2015-01-09 20:01:39 +00:00
|
|
|
#include "ProxyAccessible.h"
|
2015-01-29 16:58:34 +00:00
|
|
|
#include "Relation.h"
|
2015-03-06 20:43:25 +00:00
|
|
|
#include "HyperTextAccessible-inl.h"
|
2015-03-22 21:44:12 +00:00
|
|
|
#include "ImageAccessible.h"
|
2015-03-25 14:14:28 +00:00
|
|
|
#include "TableAccessible.h"
|
|
|
|
#include "TableCellAccessible.h"
|
2014-10-24 09:29:48 +00:00
|
|
|
#include "nsIPersistentProperties2.h"
|
|
|
|
#include "nsISimpleEnumerator.h"
|
|
|
|
|
2014-03-07 21:35:19 +00:00
|
|
|
namespace mozilla {
|
|
|
|
namespace a11y {
|
|
|
|
|
2015-01-09 20:01:39 +00:00
|
|
|
static uint32_t
|
|
|
|
InterfacesFor(Accessible* aAcc)
|
|
|
|
{
|
|
|
|
uint32_t interfaces = 0;
|
|
|
|
if (aAcc->IsHyperText() && aAcc->AsHyperText()->IsTextRole())
|
|
|
|
interfaces |= Interfaces::HYPERTEXT;
|
|
|
|
|
|
|
|
return interfaces;
|
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
2014-03-07 21:35:19 +00:00
|
|
|
SerializeTree(Accessible* aRoot, nsTArray<AccessibleData>& aTree)
|
|
|
|
{
|
|
|
|
uint64_t id = reinterpret_cast<uint64_t>(aRoot->UniqueID());
|
|
|
|
uint32_t role = aRoot->Role();
|
|
|
|
uint32_t childCount = aRoot->ChildCount();
|
2015-01-09 20:01:39 +00:00
|
|
|
uint32_t interfaces = InterfacesFor(aRoot);
|
2014-03-07 21:35:19 +00:00
|
|
|
|
2014-10-28 18:18:03 +00:00
|
|
|
// OuterDocAccessibles are special because we don't want to serialize the
|
|
|
|
// child doc here, we'll call PDocAccessibleConstructor in
|
|
|
|
// NotificationController.
|
|
|
|
if (childCount == 1 && aRoot->GetChildAt(0)->IsDoc())
|
|
|
|
childCount = 0;
|
|
|
|
|
2015-01-09 20:01:39 +00:00
|
|
|
aTree.AppendElement(AccessibleData(id, role, childCount, interfaces));
|
2014-03-07 21:35:19 +00:00
|
|
|
for (uint32_t i = 0; i < childCount; i++)
|
|
|
|
SerializeTree(aRoot->GetChildAt(i), aTree);
|
|
|
|
}
|
|
|
|
|
2015-02-12 20:53:43 +00:00
|
|
|
Accessible*
|
2015-03-22 21:44:12 +00:00
|
|
|
DocAccessibleChild::IdToAccessible(const uint64_t& aID) const
|
2015-02-12 20:53:43 +00:00
|
|
|
{
|
|
|
|
return mDoc->GetAccessibleByUniqueID(reinterpret_cast<void*>(aID));
|
|
|
|
}
|
|
|
|
|
2015-03-25 14:03:13 +00:00
|
|
|
Accessible*
|
|
|
|
DocAccessibleChild::IdToAccessibleLink(const uint64_t& aID) const
|
|
|
|
{
|
|
|
|
Accessible* acc = IdToAccessible(aID);
|
|
|
|
return acc && acc->IsLink() ? acc : nullptr;
|
|
|
|
}
|
|
|
|
|
2015-03-25 14:19:12 +00:00
|
|
|
Accessible*
|
|
|
|
DocAccessibleChild::IdToAccessibleSelect(const uint64_t& aID) const
|
|
|
|
{
|
|
|
|
Accessible* acc = IdToAccessible(aID);
|
|
|
|
return acc && acc->IsSelect() ? acc : nullptr;
|
|
|
|
}
|
|
|
|
|
2015-02-12 20:53:43 +00:00
|
|
|
HyperTextAccessible*
|
2015-03-22 21:44:12 +00:00
|
|
|
DocAccessibleChild::IdToHyperTextAccessible(const uint64_t& aID) const
|
2015-02-12 20:53:43 +00:00
|
|
|
{
|
|
|
|
Accessible* acc = IdToAccessible(aID);
|
2015-03-25 14:05:18 +00:00
|
|
|
return acc && acc->IsHyperText() ? acc->AsHyperText() : nullptr;
|
2015-02-12 20:53:43 +00:00
|
|
|
}
|
|
|
|
|
2015-03-22 21:44:12 +00:00
|
|
|
ImageAccessible*
|
|
|
|
DocAccessibleChild::IdToImageAccessible(const uint64_t& aID) const
|
|
|
|
{
|
|
|
|
Accessible* acc = IdToAccessible(aID);
|
|
|
|
return (acc && acc->IsImage()) ? acc->AsImage() : nullptr;
|
|
|
|
}
|
|
|
|
|
2015-03-25 14:14:28 +00:00
|
|
|
TableCellAccessible*
|
|
|
|
DocAccessibleChild::IdToTableCellAccessible(const uint64_t& aID) const
|
|
|
|
{
|
|
|
|
Accessible* acc = IdToAccessible(aID);
|
|
|
|
return (acc && acc->IsTableCell()) ? acc->AsTableCell() : nullptr;
|
|
|
|
}
|
|
|
|
|
2015-03-25 14:16:24 +00:00
|
|
|
TableAccessible*
|
|
|
|
DocAccessibleChild::IdToTableAccessible(const uint64_t& aID) const
|
|
|
|
{
|
|
|
|
Accessible* acc = IdToAccessible(aID);
|
|
|
|
return (acc && acc->IsTable()) ? acc->AsTable() : nullptr;
|
|
|
|
}
|
|
|
|
|
2014-03-07 21:35:19 +00:00
|
|
|
void
|
|
|
|
DocAccessibleChild::ShowEvent(AccShowEvent* aShowEvent)
|
|
|
|
{
|
|
|
|
Accessible* parent = aShowEvent->Parent();
|
|
|
|
uint64_t parentID = parent->IsDoc() ? 0 : reinterpret_cast<uint64_t>(parent->UniqueID());
|
|
|
|
uint32_t idxInParent = aShowEvent->GetAccessible()->IndexInParent();
|
|
|
|
nsTArray<AccessibleData> shownTree;
|
|
|
|
ShowEventData data(parentID, idxInParent, shownTree);
|
|
|
|
SerializeTree(aShowEvent->GetAccessible(), data.NewTree());
|
|
|
|
SendShowEvent(data);
|
|
|
|
}
|
2014-09-23 08:35:33 +00:00
|
|
|
|
|
|
|
bool
|
|
|
|
DocAccessibleChild::RecvState(const uint64_t& aID, uint64_t* aState)
|
|
|
|
{
|
2015-02-12 20:53:43 +00:00
|
|
|
Accessible* acc = IdToAccessible(aID);
|
2014-09-23 08:35:33 +00:00
|
|
|
if (!acc) {
|
|
|
|
*aState = states::DEFUNCT;
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
|
|
|
*aState = acc->State();
|
|
|
|
|
|
|
|
return true;
|
|
|
|
}
|
2014-09-23 09:53:03 +00:00
|
|
|
|
|
|
|
bool
|
|
|
|
DocAccessibleChild::RecvName(const uint64_t& aID, nsString* aName)
|
|
|
|
{
|
2015-02-12 20:53:43 +00:00
|
|
|
Accessible* acc = IdToAccessible(aID);
|
2014-09-23 09:53:03 +00:00
|
|
|
if (!acc)
|
|
|
|
return true;
|
|
|
|
|
|
|
|
acc->Name(*aName);
|
|
|
|
return true;
|
|
|
|
}
|
2014-10-24 03:21:44 +00:00
|
|
|
|
2015-02-11 20:00:11 +00:00
|
|
|
bool
|
|
|
|
DocAccessibleChild::RecvValue(const uint64_t& aID, nsString* aValue)
|
|
|
|
{
|
2015-02-12 20:53:43 +00:00
|
|
|
Accessible* acc = IdToAccessible(aID);
|
2015-02-11 20:00:11 +00:00
|
|
|
if (!acc) {
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
|
|
|
acc->Value(*aValue);
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
2014-10-24 03:21:44 +00:00
|
|
|
bool
|
|
|
|
DocAccessibleChild::RecvDescription(const uint64_t& aID, nsString* aDesc)
|
|
|
|
{
|
2015-02-12 20:53:43 +00:00
|
|
|
Accessible* acc = IdToAccessible(aID);
|
2014-10-24 03:21:44 +00:00
|
|
|
if (!acc)
|
|
|
|
return true;
|
|
|
|
|
|
|
|
acc->Description(*aDesc);
|
|
|
|
return true;
|
|
|
|
}
|
2014-10-24 09:29:48 +00:00
|
|
|
|
|
|
|
bool
|
|
|
|
DocAccessibleChild::RecvAttributes(const uint64_t& aID, nsTArray<Attribute>* aAttributes)
|
|
|
|
{
|
2015-02-12 20:53:43 +00:00
|
|
|
Accessible* acc = IdToAccessible(aID);
|
2014-10-24 09:29:48 +00:00
|
|
|
if (!acc)
|
|
|
|
return true;
|
|
|
|
|
|
|
|
nsCOMPtr<nsIPersistentProperties> props = acc->Attributes();
|
2015-03-06 20:44:02 +00:00
|
|
|
return PersistentPropertiesToArray(props, aAttributes);
|
|
|
|
}
|
2014-10-24 09:29:48 +00:00
|
|
|
|
2015-03-06 20:44:02 +00:00
|
|
|
bool
|
|
|
|
DocAccessibleChild::PersistentPropertiesToArray(nsIPersistentProperties* aProps,
|
|
|
|
nsTArray<Attribute>* aAttributes)
|
|
|
|
{
|
|
|
|
if (!aProps) {
|
|
|
|
return true;
|
|
|
|
}
|
2014-10-24 09:29:48 +00:00
|
|
|
nsCOMPtr<nsISimpleEnumerator> propEnum;
|
2015-03-06 20:44:02 +00:00
|
|
|
nsresult rv = aProps->Enumerate(getter_AddRefs(propEnum));
|
2014-10-24 09:29:48 +00:00
|
|
|
NS_ENSURE_SUCCESS(rv, false);
|
|
|
|
|
|
|
|
bool hasMore;
|
|
|
|
while (NS_SUCCEEDED(propEnum->HasMoreElements(&hasMore)) && hasMore) {
|
|
|
|
nsCOMPtr<nsISupports> sup;
|
|
|
|
rv = propEnum->GetNext(getter_AddRefs(sup));
|
|
|
|
NS_ENSURE_SUCCESS(rv, false);
|
|
|
|
|
|
|
|
nsCOMPtr<nsIPropertyElement> propElem(do_QueryInterface(sup));
|
|
|
|
NS_ENSURE_TRUE(propElem, false);
|
|
|
|
|
|
|
|
nsAutoCString name;
|
|
|
|
rv = propElem->GetKey(name);
|
|
|
|
NS_ENSURE_SUCCESS(rv, false);
|
|
|
|
|
|
|
|
nsAutoString value;
|
|
|
|
rv = propElem->GetValue(value);
|
|
|
|
NS_ENSURE_SUCCESS(rv, false);
|
|
|
|
|
|
|
|
aAttributes->AppendElement(Attribute(name, value));
|
|
|
|
}
|
|
|
|
|
|
|
|
return true;
|
|
|
|
}
|
2015-01-09 20:01:39 +00:00
|
|
|
|
2015-01-29 16:58:34 +00:00
|
|
|
bool
|
|
|
|
DocAccessibleChild::RecvRelationByType(const uint64_t& aID,
|
|
|
|
const uint32_t& aType,
|
|
|
|
nsTArray<uint64_t>* aTargets)
|
|
|
|
{
|
|
|
|
Accessible* acc = mDoc->GetAccessibleByUniqueID((void*)aID);
|
|
|
|
if (!acc)
|
|
|
|
return false;
|
|
|
|
|
|
|
|
auto type = static_cast<RelationType>(aType);
|
|
|
|
Relation rel = acc->RelationByType(type);
|
|
|
|
while (Accessible* target = rel.Next())
|
|
|
|
aTargets->AppendElement(reinterpret_cast<uintptr_t>(target));
|
|
|
|
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
|
|
|
AddRelation(Accessible* aAcc, RelationType aType,
|
|
|
|
nsTArray<RelationTargets>* aTargets)
|
|
|
|
{
|
|
|
|
Relation rel = aAcc->RelationByType(aType);
|
|
|
|
nsTArray<uint64_t> targets;
|
|
|
|
while (Accessible* target = rel.Next())
|
|
|
|
targets.AppendElement(reinterpret_cast<uintptr_t>(target));
|
|
|
|
|
|
|
|
if (!targets.IsEmpty()) {
|
|
|
|
RelationTargets* newRelation =
|
|
|
|
aTargets->AppendElement(RelationTargets(static_cast<uint32_t>(aType),
|
|
|
|
nsTArray<uint64_t>()));
|
|
|
|
newRelation->Targets().SwapElements(targets);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
bool
|
|
|
|
DocAccessibleChild::RecvRelations(const uint64_t& aID,
|
|
|
|
nsTArray<RelationTargets>* aRelations)
|
|
|
|
{
|
|
|
|
Accessible* acc = mDoc->GetAccessibleByUniqueID((void*)aID);
|
|
|
|
if (!aID)
|
|
|
|
return false;
|
|
|
|
|
|
|
|
#define RELATIONTYPE(gecko, s, a, m, i) AddRelation(acc, RelationType::gecko, aRelations);
|
|
|
|
|
|
|
|
#include "RelationTypeMap.h"
|
|
|
|
#undef RELATIONTYPE
|
|
|
|
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
2015-03-06 20:43:25 +00:00
|
|
|
bool
|
|
|
|
DocAccessibleChild::RecvCaretOffset(const uint64_t& aID, int32_t* aOffset)
|
|
|
|
{
|
|
|
|
HyperTextAccessible* acc = IdToHyperTextAccessible(aID);
|
|
|
|
*aOffset = acc && acc->IsTextRole() ? acc->CaretOffset() : 0;
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool
|
|
|
|
DocAccessibleChild::RecvSetCaretOffset(const uint64_t& aID,
|
|
|
|
const int32_t& aOffset,
|
|
|
|
bool* aRetVal)
|
|
|
|
{
|
|
|
|
HyperTextAccessible* acc = IdToHyperTextAccessible(aID);
|
|
|
|
*aRetVal = false;
|
|
|
|
if (acc && acc->IsTextRole() && acc->IsValidOffset(aOffset)) {
|
|
|
|
*aRetVal = true;
|
|
|
|
acc->SetCaretOffset(aOffset);
|
|
|
|
}
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
2015-02-25 12:18:17 +00:00
|
|
|
bool
|
|
|
|
DocAccessibleChild::RecvCharacterCount(const uint64_t& aID, int32_t* aCount)
|
|
|
|
{
|
|
|
|
HyperTextAccessible* acc = IdToHyperTextAccessible(aID);
|
|
|
|
*aCount = acc ? acc->CharacterCount() : 0;
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool
|
|
|
|
DocAccessibleChild::RecvSelectionCount(const uint64_t& aID, int32_t* aCount)
|
|
|
|
{
|
|
|
|
HyperTextAccessible* acc = IdToHyperTextAccessible(aID);
|
|
|
|
*aCount = acc ? acc->SelectionCount() : 0;
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
2015-01-09 20:01:39 +00:00
|
|
|
bool
|
|
|
|
DocAccessibleChild::RecvTextSubstring(const uint64_t& aID,
|
|
|
|
const int32_t& aStartOffset,
|
|
|
|
const int32_t& aEndOffset,
|
|
|
|
nsString* aText)
|
|
|
|
{
|
2015-02-12 20:53:43 +00:00
|
|
|
HyperTextAccessible* acc = IdToHyperTextAccessible(aID);
|
|
|
|
if (!acc) {
|
|
|
|
return true;
|
|
|
|
}
|
2015-01-09 20:01:39 +00:00
|
|
|
|
2015-02-12 20:53:43 +00:00
|
|
|
acc->TextSubstring(aStartOffset, aEndOffset, *aText);
|
2015-01-09 20:01:39 +00:00
|
|
|
return true;
|
|
|
|
}
|
2015-02-12 20:56:13 +00:00
|
|
|
|
|
|
|
bool
|
|
|
|
DocAccessibleChild::RecvGetTextAfterOffset(const uint64_t& aID,
|
|
|
|
const int32_t& aOffset,
|
2015-02-17 19:35:40 +00:00
|
|
|
const int32_t& aBoundaryType,
|
2015-02-12 20:56:13 +00:00
|
|
|
nsString* aText,
|
|
|
|
int32_t* aStartOffset,
|
|
|
|
int32_t* aEndOffset)
|
|
|
|
{
|
|
|
|
*aStartOffset = 0;
|
|
|
|
*aEndOffset = 0;
|
|
|
|
HyperTextAccessible* acc = IdToHyperTextAccessible(aID);
|
|
|
|
if (acc) {
|
|
|
|
acc->TextAfterOffset(aOffset, aBoundaryType,
|
|
|
|
aStartOffset, aEndOffset, *aText);
|
|
|
|
}
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool
|
|
|
|
DocAccessibleChild::RecvGetTextAtOffset(const uint64_t& aID,
|
|
|
|
const int32_t& aOffset,
|
2015-02-17 19:35:40 +00:00
|
|
|
const int32_t& aBoundaryType,
|
2015-02-12 20:56:13 +00:00
|
|
|
nsString* aText,
|
|
|
|
int32_t* aStartOffset,
|
|
|
|
int32_t* aEndOffset)
|
|
|
|
{
|
|
|
|
*aStartOffset = 0;
|
|
|
|
*aEndOffset = 0;
|
|
|
|
HyperTextAccessible* acc = IdToHyperTextAccessible(aID);
|
|
|
|
if (acc) {
|
|
|
|
acc->TextAtOffset(aOffset, aBoundaryType,
|
|
|
|
aStartOffset, aEndOffset, *aText);
|
|
|
|
}
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool
|
|
|
|
DocAccessibleChild::RecvGetTextBeforeOffset(const uint64_t& aID,
|
|
|
|
const int32_t& aOffset,
|
2015-02-17 19:35:40 +00:00
|
|
|
const int32_t& aBoundaryType,
|
2015-02-12 20:56:13 +00:00
|
|
|
nsString* aText,
|
|
|
|
int32_t* aStartOffset,
|
|
|
|
int32_t* aEndOffset)
|
|
|
|
{
|
|
|
|
*aStartOffset = 0;
|
|
|
|
*aEndOffset = 0;
|
|
|
|
HyperTextAccessible* acc = IdToHyperTextAccessible(aID);
|
|
|
|
if (acc) {
|
|
|
|
acc->TextBeforeOffset(aOffset, aBoundaryType,
|
|
|
|
aStartOffset, aEndOffset, *aText);
|
|
|
|
}
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
2015-03-06 17:37:37 +00:00
|
|
|
bool
|
|
|
|
DocAccessibleChild::RecvCharAt(const uint64_t& aID,
|
|
|
|
const int32_t& aOffset,
|
|
|
|
uint16_t* aChar)
|
|
|
|
{
|
|
|
|
HyperTextAccessible* acc = IdToHyperTextAccessible(aID);
|
|
|
|
*aChar = acc && acc->IsTextRole() ?
|
|
|
|
static_cast<uint16_t>(acc->CharAt(aOffset)) : 0;
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
2015-03-06 20:44:02 +00:00
|
|
|
bool
|
|
|
|
DocAccessibleChild::RecvTextAttributes(const uint64_t& aID,
|
|
|
|
const bool& aIncludeDefAttrs,
|
|
|
|
const int32_t& aOffset,
|
|
|
|
nsTArray<Attribute>* aAttributes,
|
|
|
|
int32_t* aStartOffset,
|
|
|
|
int32_t* aEndOffset)
|
|
|
|
{
|
|
|
|
HyperTextAccessible* acc = IdToHyperTextAccessible(aID);
|
|
|
|
if (!acc || !acc->IsTextRole()) {
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
|
|
|
nsCOMPtr<nsIPersistentProperties> props =
|
|
|
|
acc->TextAttributes(aIncludeDefAttrs, aOffset, aStartOffset, aEndOffset);
|
|
|
|
return PersistentPropertiesToArray(props, aAttributes);
|
|
|
|
}
|
|
|
|
|
|
|
|
bool
|
|
|
|
DocAccessibleChild::RecvDefaultTextAttributes(const uint64_t& aID,
|
|
|
|
nsTArray<Attribute> *aAttributes)
|
|
|
|
{
|
|
|
|
HyperTextAccessible* acc = IdToHyperTextAccessible(aID);
|
|
|
|
if (!acc || !acc->IsTextRole()) {
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
|
|
|
nsCOMPtr<nsIPersistentProperties> props = acc->DefaultTextAttributes();
|
|
|
|
return PersistentPropertiesToArray(props, aAttributes);
|
|
|
|
}
|
|
|
|
|
2015-03-08 02:33:57 +00:00
|
|
|
bool
|
|
|
|
DocAccessibleChild::RecvTextBounds(const uint64_t& aID,
|
|
|
|
const int32_t& aStartOffset,
|
|
|
|
const int32_t& aEndOffset,
|
|
|
|
const uint32_t& aCoordType,
|
|
|
|
nsIntRect* aRetVal)
|
|
|
|
{
|
|
|
|
HyperTextAccessible* acc = IdToHyperTextAccessible(aID);
|
|
|
|
if (acc && acc->IsTextRole()) {
|
|
|
|
*aRetVal = acc->TextBounds(aStartOffset, aEndOffset, aCoordType);
|
|
|
|
}
|
|
|
|
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool
|
|
|
|
DocAccessibleChild::RecvCharBounds(const uint64_t& aID,
|
|
|
|
const int32_t& aOffset,
|
|
|
|
const uint32_t& aCoordType,
|
|
|
|
nsIntRect* aRetVal)
|
|
|
|
{
|
|
|
|
HyperTextAccessible* acc = IdToHyperTextAccessible(aID);
|
|
|
|
if (acc && acc->IsTextRole()) {
|
|
|
|
*aRetVal = acc->CharBounds(aOffset, aCoordType);
|
|
|
|
}
|
|
|
|
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
2015-03-08 12:05:55 +00:00
|
|
|
bool
|
|
|
|
DocAccessibleChild::RecvOffsetAtPoint(const uint64_t& aID,
|
|
|
|
const int32_t& aX,
|
|
|
|
const int32_t& aY,
|
|
|
|
const uint32_t& aCoordType,
|
|
|
|
int32_t* aRetVal)
|
|
|
|
{
|
|
|
|
*aRetVal = -1;
|
|
|
|
HyperTextAccessible* acc = IdToHyperTextAccessible(aID);
|
|
|
|
if (acc && acc->IsTextRole()) {
|
|
|
|
*aRetVal = acc->OffsetAtPoint(aX, aY, aCoordType);
|
|
|
|
}
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
2015-03-09 20:50:16 +00:00
|
|
|
bool
|
|
|
|
DocAccessibleChild::RecvSelectionBoundsAt(const uint64_t& aID,
|
|
|
|
const int32_t& aSelectionNum,
|
|
|
|
bool* aSucceeded,
|
|
|
|
nsString* aData,
|
|
|
|
int32_t* aStartOffset,
|
|
|
|
int32_t* aEndOffset)
|
|
|
|
{
|
|
|
|
*aSucceeded = false;
|
|
|
|
*aStartOffset = 0;
|
|
|
|
*aEndOffset = 0;
|
|
|
|
HyperTextAccessible* acc = IdToHyperTextAccessible(aID);
|
|
|
|
if (acc && acc->IsTextRole()) {
|
|
|
|
*aSucceeded =
|
|
|
|
acc->SelectionBoundsAt(aSelectionNum, aStartOffset, aEndOffset);
|
|
|
|
if (*aSucceeded) {
|
|
|
|
acc->TextSubstring(*aStartOffset, *aEndOffset, *aData);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool
|
|
|
|
DocAccessibleChild::RecvSetSelectionBoundsAt(const uint64_t& aID,
|
|
|
|
const int32_t& aSelectionNum,
|
|
|
|
const int32_t& aStartOffset,
|
|
|
|
const int32_t& aEndOffset,
|
|
|
|
bool* aSucceeded)
|
|
|
|
{
|
|
|
|
*aSucceeded = false;
|
|
|
|
HyperTextAccessible* acc = IdToHyperTextAccessible(aID);
|
|
|
|
if (acc && acc->IsTextRole()) {
|
|
|
|
*aSucceeded =
|
|
|
|
acc->SetSelectionBoundsAt(aSelectionNum, aStartOffset, aEndOffset);
|
|
|
|
}
|
|
|
|
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool
|
|
|
|
DocAccessibleChild::RecvAddToSelection(const uint64_t& aID,
|
|
|
|
const int32_t& aStartOffset,
|
|
|
|
const int32_t& aEndOffset,
|
|
|
|
bool* aSucceeded)
|
|
|
|
{
|
|
|
|
*aSucceeded = false;
|
|
|
|
HyperTextAccessible* acc = IdToHyperTextAccessible(aID);
|
|
|
|
if (acc && acc->IsTextRole()) {
|
|
|
|
*aSucceeded = acc->AddToSelection(aStartOffset, aEndOffset);
|
|
|
|
}
|
|
|
|
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool
|
|
|
|
DocAccessibleChild::RecvRemoveFromSelection(const uint64_t& aID,
|
|
|
|
const int32_t& aSelectionNum,
|
|
|
|
bool* aSucceeded)
|
|
|
|
{
|
|
|
|
*aSucceeded = false;
|
|
|
|
HyperTextAccessible* acc = IdToHyperTextAccessible(aID);
|
|
|
|
if (acc && acc->IsTextRole()) {
|
|
|
|
*aSucceeded = acc->RemoveFromSelection(aSelectionNum);
|
|
|
|
}
|
|
|
|
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
2015-03-09 20:51:02 +00:00
|
|
|
bool
|
|
|
|
DocAccessibleChild::RecvScrollSubstringTo(const uint64_t& aID,
|
|
|
|
const int32_t& aStartOffset,
|
|
|
|
const int32_t& aEndOffset,
|
|
|
|
const uint32_t& aScrollType)
|
|
|
|
{
|
|
|
|
HyperTextAccessible* acc = IdToHyperTextAccessible(aID);
|
|
|
|
if (acc) {
|
|
|
|
acc->ScrollSubstringTo(aStartOffset, aEndOffset, aScrollType);
|
|
|
|
}
|
|
|
|
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool
|
|
|
|
DocAccessibleChild::RecvScrollSubstringToPoint(const uint64_t& aID,
|
|
|
|
const int32_t& aStartOffset,
|
|
|
|
const int32_t& aEndOffset,
|
|
|
|
const uint32_t& aCoordinateType,
|
|
|
|
const int32_t& aX,
|
|
|
|
const int32_t& aY)
|
|
|
|
{
|
|
|
|
HyperTextAccessible* acc = IdToHyperTextAccessible(aID);
|
|
|
|
if (acc) {
|
|
|
|
acc->ScrollSubstringToPoint(aStartOffset, aEndOffset, aCoordinateType,
|
|
|
|
aX, aY);
|
|
|
|
}
|
|
|
|
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2015-03-09 21:04:02 +00:00
|
|
|
bool
|
|
|
|
DocAccessibleChild::RecvReplaceText(const uint64_t& aID,
|
|
|
|
const nsString& aText)
|
|
|
|
{
|
|
|
|
HyperTextAccessible* acc = IdToHyperTextAccessible(aID);
|
|
|
|
if (acc && acc->IsTextRole()) {
|
|
|
|
acc->ReplaceText(aText);
|
|
|
|
}
|
|
|
|
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool
|
|
|
|
DocAccessibleChild::RecvInsertText(const uint64_t& aID,
|
|
|
|
const nsString& aText,
|
|
|
|
const int32_t& aPosition)
|
|
|
|
{
|
|
|
|
HyperTextAccessible* acc = IdToHyperTextAccessible(aID);
|
|
|
|
if (acc && acc->IsTextRole()) {
|
|
|
|
acc->InsertText(aText, aPosition);
|
|
|
|
}
|
|
|
|
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool
|
|
|
|
DocAccessibleChild::RecvCopyText(const uint64_t& aID,
|
|
|
|
const int32_t& aStartPos,
|
|
|
|
const int32_t& aEndPos)
|
|
|
|
{
|
|
|
|
HyperTextAccessible* acc = IdToHyperTextAccessible(aID);
|
|
|
|
if (acc && acc->IsTextRole()) {
|
|
|
|
acc->CopyText(aStartPos, aEndPos);
|
|
|
|
}
|
|
|
|
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool
|
|
|
|
DocAccessibleChild::RecvCutText(const uint64_t& aID,
|
|
|
|
const int32_t& aStartPos,
|
|
|
|
const int32_t& aEndPos)
|
|
|
|
{
|
|
|
|
HyperTextAccessible* acc = IdToHyperTextAccessible(aID);
|
|
|
|
if (acc && acc->IsTextRole()) {
|
|
|
|
acc->CutText(aStartPos, aEndPos);
|
|
|
|
}
|
|
|
|
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool
|
|
|
|
DocAccessibleChild::RecvDeleteText(const uint64_t& aID,
|
|
|
|
const int32_t& aStartPos,
|
|
|
|
const int32_t& aEndPos)
|
|
|
|
{
|
|
|
|
HyperTextAccessible* acc = IdToHyperTextAccessible(aID);
|
|
|
|
if (acc && acc->IsTextRole()) {
|
|
|
|
acc->DeleteText(aStartPos, aEndPos);
|
|
|
|
}
|
|
|
|
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool
|
|
|
|
DocAccessibleChild::RecvPasteText(const uint64_t& aID,
|
|
|
|
const int32_t& aPosition)
|
|
|
|
{
|
|
|
|
HyperTextAccessible* acc = IdToHyperTextAccessible(aID);
|
|
|
|
if (acc && acc->IsTextRole()) {
|
|
|
|
acc->PasteText(aPosition);
|
|
|
|
}
|
|
|
|
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
2015-03-22 21:44:12 +00:00
|
|
|
bool
|
|
|
|
DocAccessibleChild::RecvImagePosition(const uint64_t& aID,
|
|
|
|
const uint32_t& aCoordType,
|
|
|
|
nsIntPoint* aRetVal)
|
|
|
|
{
|
|
|
|
ImageAccessible* acc = IdToImageAccessible(aID);
|
|
|
|
if (acc) {
|
|
|
|
*aRetVal = acc->Position(aCoordType);
|
|
|
|
}
|
|
|
|
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool
|
|
|
|
DocAccessibleChild::RecvImageSize(const uint64_t& aID,
|
|
|
|
nsIntSize* aRetVal)
|
|
|
|
{
|
|
|
|
|
|
|
|
ImageAccessible* acc = IdToImageAccessible(aID);
|
|
|
|
if (acc) {
|
|
|
|
*aRetVal = acc->Size();
|
|
|
|
}
|
|
|
|
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
2015-03-25 14:03:13 +00:00
|
|
|
bool
|
|
|
|
DocAccessibleChild::RecvStartOffset(const uint64_t& aID,
|
|
|
|
uint32_t* aRetVal,
|
|
|
|
bool* aOk)
|
|
|
|
{
|
|
|
|
Accessible* acc = IdToAccessibleLink(aID);
|
|
|
|
if (acc) {
|
|
|
|
*aRetVal = acc->StartOffset();
|
|
|
|
*aOk = true;
|
|
|
|
} else {
|
|
|
|
*aRetVal = 0;
|
|
|
|
*aOk = false;
|
|
|
|
}
|
|
|
|
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool
|
|
|
|
DocAccessibleChild::RecvEndOffset(const uint64_t& aID,
|
|
|
|
uint32_t* aRetVal,
|
|
|
|
bool* aOk)
|
|
|
|
{
|
|
|
|
Accessible* acc = IdToAccessibleLink(aID);
|
|
|
|
if (acc) {
|
|
|
|
*aRetVal = acc->EndOffset();
|
|
|
|
*aOk = true;
|
|
|
|
} else {
|
|
|
|
*aRetVal = 0;
|
|
|
|
*aOk = false;
|
|
|
|
}
|
|
|
|
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool
|
|
|
|
DocAccessibleChild::RecvIsLinkValid(const uint64_t& aID,
|
|
|
|
bool* aRetVal)
|
|
|
|
{
|
|
|
|
Accessible* acc = IdToAccessibleLink(aID);
|
|
|
|
if (acc) {
|
|
|
|
*aRetVal = acc->IsLinkValid();
|
|
|
|
} else {
|
|
|
|
*aRetVal = false;
|
|
|
|
}
|
|
|
|
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool
|
|
|
|
DocAccessibleChild::RecvAnchorCount(const uint64_t& aID,
|
|
|
|
uint32_t* aRetVal,
|
|
|
|
bool* aOk)
|
|
|
|
{
|
|
|
|
Accessible* acc = IdToAccessibleLink(aID);
|
|
|
|
if (acc) {
|
|
|
|
*aRetVal = acc->AnchorCount();
|
|
|
|
*aOk = true;
|
|
|
|
} else {
|
|
|
|
*aRetVal = 0;
|
|
|
|
*aOk = false;
|
|
|
|
}
|
|
|
|
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool
|
|
|
|
DocAccessibleChild::RecvAnchorURIAt(const uint64_t& aID,
|
|
|
|
const uint32_t& aIndex,
|
|
|
|
nsCString* aURI,
|
|
|
|
bool* aOk)
|
|
|
|
{
|
|
|
|
Accessible* acc = IdToAccessibleLink(aID);
|
|
|
|
*aOk = false;
|
|
|
|
if (acc) {
|
|
|
|
nsCOMPtr<nsIURI> uri = acc->AnchorURIAt(aIndex);
|
|
|
|
if (uri) {
|
|
|
|
uri->GetSpec(*aURI);
|
|
|
|
*aOk = true;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool
|
|
|
|
DocAccessibleChild::RecvAnchorAt(const uint64_t& aID,
|
|
|
|
const uint32_t& aIndex,
|
|
|
|
uint64_t* aIDOfAnchor,
|
|
|
|
bool* aOk)
|
|
|
|
{
|
|
|
|
*aIDOfAnchor = 0;
|
|
|
|
*aOk = false;
|
|
|
|
Accessible* acc = IdToAccessibleLink(aID);
|
|
|
|
if (acc) {
|
|
|
|
Accessible* anchor = acc->AnchorAt(aIndex);
|
|
|
|
if (anchor) {
|
|
|
|
*aIDOfAnchor = reinterpret_cast<uint64_t>(anchor->UniqueID());
|
|
|
|
*aOk = true;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
2015-03-25 14:05:18 +00:00
|
|
|
bool
|
|
|
|
DocAccessibleChild::RecvLinkCount(const uint64_t& aID,
|
|
|
|
uint32_t* aCount)
|
|
|
|
{
|
|
|
|
HyperTextAccessible* acc = IdToHyperTextAccessible(aID);
|
|
|
|
*aCount = acc ? acc->LinkCount() : 0;
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool
|
|
|
|
DocAccessibleChild::RecvLinkAt(const uint64_t& aID,
|
|
|
|
const uint32_t& aIndex,
|
|
|
|
uint64_t* aIDOfLink,
|
|
|
|
bool* aOk)
|
|
|
|
{
|
|
|
|
*aIDOfLink = 0;
|
|
|
|
*aOk = false;
|
|
|
|
HyperTextAccessible* acc = IdToHyperTextAccessible(aID);
|
|
|
|
if (acc) {
|
|
|
|
Accessible* link = acc->LinkAt(aIndex);
|
|
|
|
if (link) {
|
|
|
|
*aIDOfLink = reinterpret_cast<uint64_t>(link->UniqueID());
|
|
|
|
*aOk = true;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool
|
|
|
|
DocAccessibleChild::RecvLinkIndexOf(const uint64_t& aID,
|
|
|
|
const uint64_t& aLinkID,
|
|
|
|
int32_t* aIndex)
|
|
|
|
{
|
|
|
|
HyperTextAccessible* acc = IdToHyperTextAccessible(aID);
|
|
|
|
Accessible* link = IdToAccessible(aLinkID);
|
|
|
|
*aIndex = -1;
|
|
|
|
if (acc && link) {
|
|
|
|
*aIndex = acc->LinkIndexOf(link);
|
|
|
|
}
|
|
|
|
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool
|
|
|
|
DocAccessibleChild::RecvLinkIndexAtOffset(const uint64_t& aID,
|
|
|
|
const uint32_t& aOffset,
|
|
|
|
int32_t* aIndex)
|
|
|
|
{
|
|
|
|
HyperTextAccessible* acc = IdToHyperTextAccessible(aID);
|
|
|
|
*aIndex = acc ? acc->LinkIndexAtOffset(aOffset) : -1;
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
2015-03-25 14:14:28 +00:00
|
|
|
bool
|
|
|
|
DocAccessibleChild::RecvTableOfACell(const uint64_t& aID,
|
|
|
|
uint64_t* aTableID,
|
|
|
|
bool* aOk)
|
|
|
|
{
|
|
|
|
*aTableID = 0;
|
|
|
|
*aOk = false;
|
|
|
|
TableCellAccessible* acc = IdToTableCellAccessible(aID);
|
|
|
|
if (acc) {
|
|
|
|
TableAccessible* table = acc->Table();
|
|
|
|
if (table) {
|
|
|
|
*aTableID = reinterpret_cast<uint64_t>(table->AsAccessible()->UniqueID());
|
|
|
|
*aOk = true;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool
|
|
|
|
DocAccessibleChild::RecvColIdx(const uint64_t& aID,
|
|
|
|
uint32_t* aIndex)
|
|
|
|
{
|
|
|
|
*aIndex = 0;
|
|
|
|
TableCellAccessible* acc = IdToTableCellAccessible(aID);
|
|
|
|
if (acc) {
|
|
|
|
*aIndex = acc->ColIdx();
|
|
|
|
}
|
|
|
|
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool
|
|
|
|
DocAccessibleChild::RecvRowIdx(const uint64_t& aID,
|
|
|
|
uint32_t* aIndex)
|
|
|
|
{
|
|
|
|
*aIndex = 0;
|
|
|
|
TableCellAccessible* acc = IdToTableCellAccessible(aID);
|
|
|
|
if (acc) {
|
|
|
|
*aIndex = acc->RowIdx();
|
|
|
|
}
|
|
|
|
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool
|
|
|
|
DocAccessibleChild::RecvColExtent(const uint64_t& aID,
|
|
|
|
uint32_t* aExtent)
|
|
|
|
{
|
|
|
|
*aExtent = 0;
|
|
|
|
TableCellAccessible* acc = IdToTableCellAccessible(aID);
|
|
|
|
if (acc) {
|
|
|
|
*aExtent = acc->ColExtent();
|
|
|
|
}
|
|
|
|
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool
|
|
|
|
DocAccessibleChild::RecvRowExtent(const uint64_t& aID,
|
|
|
|
uint32_t* aExtent)
|
|
|
|
{
|
|
|
|
*aExtent = 0;
|
|
|
|
TableCellAccessible* acc = IdToTableCellAccessible(aID);
|
|
|
|
if (acc) {
|
|
|
|
*aExtent = acc->RowExtent();
|
|
|
|
}
|
|
|
|
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool
|
|
|
|
DocAccessibleChild::RecvColHeaderCells(const uint64_t& aID,
|
|
|
|
nsTArray<uint64_t>* aCells)
|
|
|
|
{
|
|
|
|
TableCellAccessible* acc = IdToTableCellAccessible(aID);
|
|
|
|
if (acc) {
|
|
|
|
nsAutoTArray<Accessible*, 10> headerCells;
|
|
|
|
acc->ColHeaderCells(&headerCells);
|
|
|
|
aCells->SetCapacity(headerCells.Length());
|
|
|
|
for (uint32_t i = 0; i < headerCells.Length(); ++i) {
|
|
|
|
aCells->AppendElement(
|
|
|
|
reinterpret_cast<uint64_t>(headerCells[i]->UniqueID()));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool
|
|
|
|
DocAccessibleChild::RecvRowHeaderCells(const uint64_t& aID,
|
|
|
|
nsTArray<uint64_t>* aCells)
|
|
|
|
{
|
|
|
|
TableCellAccessible* acc = IdToTableCellAccessible(aID);
|
|
|
|
if (acc) {
|
|
|
|
nsAutoTArray<Accessible*, 10> headerCells;
|
|
|
|
acc->RowHeaderCells(&headerCells);
|
|
|
|
aCells->SetCapacity(headerCells.Length());
|
|
|
|
for (uint32_t i = 0; i < headerCells.Length(); ++i) {
|
|
|
|
aCells->AppendElement(
|
|
|
|
reinterpret_cast<uint64_t>(headerCells[i]->UniqueID()));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool
|
|
|
|
DocAccessibleChild::RecvIsCellSelected(const uint64_t& aID,
|
|
|
|
bool* aSelected)
|
|
|
|
{
|
|
|
|
TableCellAccessible* acc = IdToTableCellAccessible(aID);
|
|
|
|
*aSelected = acc && acc->Selected();
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
2015-03-25 14:16:24 +00:00
|
|
|
bool
|
|
|
|
DocAccessibleChild::RecvTableCaption(const uint64_t& aID,
|
|
|
|
uint64_t* aCaptionID,
|
|
|
|
bool* aOk)
|
|
|
|
{
|
|
|
|
*aCaptionID = 0;
|
|
|
|
*aOk = false;
|
|
|
|
TableAccessible* acc = IdToTableAccessible(aID);
|
|
|
|
if (acc) {
|
|
|
|
Accessible* caption = acc->Caption();
|
|
|
|
if (caption) {
|
|
|
|
*aCaptionID = reinterpret_cast<uint64_t>(caption->UniqueID());
|
|
|
|
*aOk = true;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool
|
|
|
|
DocAccessibleChild::RecvTableSummary(const uint64_t& aID,
|
|
|
|
nsString* aSummary)
|
|
|
|
{
|
|
|
|
TableAccessible* acc = IdToTableAccessible(aID);
|
|
|
|
if (acc) {
|
|
|
|
acc->Summary(*aSummary);
|
|
|
|
}
|
|
|
|
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool
|
|
|
|
DocAccessibleChild::RecvTableColumnCount(const uint64_t& aID,
|
|
|
|
uint32_t* aColCount)
|
|
|
|
{
|
|
|
|
*aColCount = 0;
|
|
|
|
TableAccessible* acc = IdToTableAccessible(aID);
|
|
|
|
if (acc) {
|
|
|
|
*aColCount = acc->ColCount();
|
|
|
|
}
|
|
|
|
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool
|
|
|
|
DocAccessibleChild::RecvTableRowCount(const uint64_t& aID,
|
|
|
|
uint32_t* aRowCount)
|
|
|
|
{
|
|
|
|
*aRowCount = 0;
|
|
|
|
TableAccessible* acc = IdToTableAccessible(aID);
|
|
|
|
if (acc) {
|
|
|
|
*aRowCount = acc->RowCount();
|
|
|
|
}
|
|
|
|
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool
|
|
|
|
DocAccessibleChild::RecvTableCellAt(const uint64_t& aID,
|
|
|
|
const uint32_t& aRow,
|
|
|
|
const uint32_t& aCol,
|
|
|
|
uint64_t* aCellID,
|
|
|
|
bool* aOk)
|
|
|
|
{
|
|
|
|
*aCellID = 0;
|
|
|
|
*aOk = false;
|
|
|
|
TableAccessible* acc = IdToTableAccessible(aID);
|
|
|
|
if (acc) {
|
|
|
|
Accessible* cell = acc->CellAt(aRow, aCol);
|
|
|
|
if (cell) {
|
|
|
|
*aCellID = reinterpret_cast<uint64_t>(cell->UniqueID());
|
|
|
|
*aOk = true;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool
|
|
|
|
DocAccessibleChild::RecvTableCellIndexAt(const uint64_t& aID,
|
|
|
|
const uint32_t& aRow,
|
|
|
|
const uint32_t& aCol,
|
|
|
|
int32_t* aIndex)
|
|
|
|
{
|
|
|
|
*aIndex = -1;
|
|
|
|
TableAccessible* acc = IdToTableAccessible(aID);
|
|
|
|
if (acc) {
|
|
|
|
*aIndex = acc->CellIndexAt(aRow, aCol);
|
|
|
|
}
|
|
|
|
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool
|
|
|
|
DocAccessibleChild::RecvTableColumnIndexAt(const uint64_t& aID,
|
|
|
|
const uint32_t& aCellIndex,
|
|
|
|
int32_t* aCol)
|
|
|
|
{
|
|
|
|
*aCol = -1;
|
|
|
|
TableAccessible* acc = IdToTableAccessible(aID);
|
|
|
|
if (acc) {
|
|
|
|
*aCol = acc->ColIndexAt(aCellIndex);
|
|
|
|
}
|
|
|
|
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool
|
|
|
|
DocAccessibleChild::RecvTableRowIndexAt(const uint64_t& aID,
|
|
|
|
const uint32_t& aCellIndex,
|
|
|
|
int32_t* aRow)
|
|
|
|
{
|
|
|
|
*aRow = -1;
|
|
|
|
TableAccessible* acc = IdToTableAccessible(aID);
|
|
|
|
if (acc) {
|
|
|
|
*aRow = acc->RowIndexAt(aCellIndex);
|
|
|
|
}
|
|
|
|
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool
|
|
|
|
DocAccessibleChild::RecvTableRowAndColumnIndicesAt(const uint64_t& aID,
|
|
|
|
const uint32_t& aCellIndex,
|
|
|
|
int32_t* aRow,
|
|
|
|
int32_t* aCol)
|
|
|
|
{
|
|
|
|
*aRow = -1;
|
|
|
|
*aCol = -1;
|
|
|
|
TableAccessible* acc = IdToTableAccessible(aID);
|
|
|
|
if (acc) {
|
|
|
|
acc->RowAndColIndicesAt(aCellIndex, aRow, aCol);
|
|
|
|
}
|
|
|
|
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool
|
|
|
|
DocAccessibleChild::RecvTableColumnExtentAt(const uint64_t& aID,
|
|
|
|
const uint32_t& aRow,
|
|
|
|
const uint32_t& aCol,
|
|
|
|
uint32_t* aExtent)
|
|
|
|
{
|
|
|
|
*aExtent = 0;
|
|
|
|
TableAccessible* acc = IdToTableAccessible(aID);
|
|
|
|
if (acc) {
|
|
|
|
*aExtent = acc->ColExtentAt(aRow, aCol);
|
|
|
|
}
|
|
|
|
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool
|
|
|
|
DocAccessibleChild::RecvTableRowExtentAt(const uint64_t& aID,
|
|
|
|
const uint32_t& aRow,
|
|
|
|
const uint32_t& aCol,
|
|
|
|
uint32_t* aExtent)
|
|
|
|
{
|
|
|
|
*aExtent = 0;
|
|
|
|
TableAccessible* acc = IdToTableAccessible(aID);
|
|
|
|
if (acc) {
|
|
|
|
*aExtent = acc->RowExtentAt(aRow, aCol);
|
|
|
|
}
|
|
|
|
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool
|
|
|
|
DocAccessibleChild::RecvTableColumnDescription(const uint64_t& aID,
|
|
|
|
const uint32_t& aCol,
|
|
|
|
nsString* aDescription)
|
|
|
|
{
|
|
|
|
TableAccessible* acc = IdToTableAccessible(aID);
|
|
|
|
if (acc) {
|
|
|
|
acc->ColDescription(aCol, *aDescription);
|
|
|
|
}
|
|
|
|
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool
|
|
|
|
DocAccessibleChild::RecvTableRowDescription(const uint64_t& aID,
|
|
|
|
const uint32_t& aRow,
|
|
|
|
nsString* aDescription)
|
|
|
|
{
|
|
|
|
TableAccessible* acc = IdToTableAccessible(aID);
|
|
|
|
if (acc) {
|
|
|
|
acc->RowDescription(aRow, *aDescription);
|
|
|
|
}
|
|
|
|
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool
|
|
|
|
DocAccessibleChild::RecvTableColumnSelected(const uint64_t& aID,
|
|
|
|
const uint32_t& aCol,
|
|
|
|
bool* aSelected)
|
|
|
|
{
|
|
|
|
*aSelected = false;
|
|
|
|
TableAccessible* acc = IdToTableAccessible(aID);
|
|
|
|
if (acc) {
|
|
|
|
*aSelected = acc->IsColSelected(aCol);
|
|
|
|
}
|
|
|
|
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool
|
|
|
|
DocAccessibleChild::RecvTableRowSelected(const uint64_t& aID,
|
|
|
|
const uint32_t& aRow,
|
|
|
|
bool* aSelected)
|
|
|
|
{
|
|
|
|
*aSelected = false;
|
|
|
|
TableAccessible* acc = IdToTableAccessible(aID);
|
|
|
|
if (acc) {
|
|
|
|
*aSelected = acc->IsRowSelected(aRow);
|
|
|
|
}
|
|
|
|
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool
|
|
|
|
DocAccessibleChild::RecvTableCellSelected(const uint64_t& aID,
|
|
|
|
const uint32_t& aRow,
|
|
|
|
const uint32_t& aCol,
|
|
|
|
bool* aSelected)
|
|
|
|
{
|
|
|
|
*aSelected = false;
|
|
|
|
TableAccessible* acc = IdToTableAccessible(aID);
|
|
|
|
if (acc) {
|
|
|
|
*aSelected = acc->IsCellSelected(aRow, aCol);
|
|
|
|
}
|
|
|
|
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool
|
|
|
|
DocAccessibleChild::RecvTableSelectedCellCount(const uint64_t& aID,
|
|
|
|
uint32_t* aSelectedCells)
|
|
|
|
{
|
|
|
|
*aSelectedCells = 0;
|
|
|
|
TableAccessible* acc = IdToTableAccessible(aID);
|
|
|
|
if (acc) {
|
|
|
|
*aSelectedCells = acc->SelectedCellCount();
|
|
|
|
}
|
|
|
|
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool
|
|
|
|
DocAccessibleChild::RecvTableSelectedColumnCount(const uint64_t& aID,
|
|
|
|
uint32_t* aSelectedColumns)
|
|
|
|
{
|
|
|
|
*aSelectedColumns = 0;
|
|
|
|
TableAccessible* acc = IdToTableAccessible(aID);
|
|
|
|
if (acc) {
|
|
|
|
*aSelectedColumns = acc->SelectedColCount();
|
|
|
|
}
|
|
|
|
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool
|
|
|
|
DocAccessibleChild::RecvTableSelectedRowCount(const uint64_t& aID,
|
|
|
|
uint32_t* aSelectedRows)
|
|
|
|
{
|
|
|
|
*aSelectedRows = 0;
|
|
|
|
TableAccessible* acc = IdToTableAccessible(aID);
|
|
|
|
if (acc) {
|
|
|
|
*aSelectedRows = acc->SelectedRowCount();
|
|
|
|
}
|
|
|
|
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool
|
|
|
|
DocAccessibleChild::RecvTableSelectedCells(const uint64_t& aID,
|
|
|
|
nsTArray<uint64_t>* aCellIDs)
|
|
|
|
{
|
|
|
|
TableAccessible* acc = IdToTableAccessible(aID);
|
|
|
|
if (acc) {
|
|
|
|
nsAutoTArray<Accessible*, 30> cells;
|
|
|
|
acc->SelectedCells(&cells);
|
|
|
|
aCellIDs->SetCapacity(cells.Length());
|
|
|
|
for (uint32_t i = 0; i < cells.Length(); ++i) {
|
|
|
|
aCellIDs->AppendElement(
|
|
|
|
reinterpret_cast<uint64_t>(cells[i]->UniqueID()));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool
|
|
|
|
DocAccessibleChild::RecvTableSelectedCellIndices(const uint64_t& aID,
|
|
|
|
nsTArray<uint32_t>* aCellIndices)
|
|
|
|
{
|
|
|
|
TableAccessible* acc = IdToTableAccessible(aID);
|
|
|
|
if (acc) {
|
|
|
|
acc->SelectedCellIndices(aCellIndices);
|
|
|
|
}
|
|
|
|
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool
|
|
|
|
DocAccessibleChild::RecvTableSelectedColumnIndices(const uint64_t& aID,
|
|
|
|
nsTArray<uint32_t>* aColumnIndices)
|
|
|
|
{
|
|
|
|
TableAccessible* acc = IdToTableAccessible(aID);
|
|
|
|
if (acc) {
|
|
|
|
acc->SelectedColIndices(aColumnIndices);
|
|
|
|
}
|
|
|
|
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool
|
|
|
|
DocAccessibleChild::RecvTableSelectedRowIndices(const uint64_t& aID,
|
|
|
|
nsTArray<uint32_t>* aRowIndices)
|
|
|
|
{
|
|
|
|
TableAccessible* acc = IdToTableAccessible(aID);
|
|
|
|
if (acc) {
|
|
|
|
acc->SelectedRowIndices(aRowIndices);
|
|
|
|
}
|
|
|
|
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool
|
|
|
|
DocAccessibleChild::RecvTableSelectColumn(const uint64_t& aID,
|
|
|
|
const uint32_t& aCol)
|
|
|
|
{
|
|
|
|
TableAccessible* acc = IdToTableAccessible(aID);
|
|
|
|
if (acc) {
|
|
|
|
acc->SelectCol(aCol);
|
|
|
|
}
|
|
|
|
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool
|
|
|
|
DocAccessibleChild::RecvTableSelectRow(const uint64_t& aID,
|
|
|
|
const uint32_t& aRow)
|
|
|
|
{
|
|
|
|
TableAccessible* acc = IdToTableAccessible(aID);
|
|
|
|
if (acc) {
|
|
|
|
acc->SelectRow(aRow);
|
|
|
|
}
|
|
|
|
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool
|
|
|
|
DocAccessibleChild::RecvTableUnselectColumn(const uint64_t& aID,
|
|
|
|
const uint32_t& aCol)
|
|
|
|
{
|
|
|
|
TableAccessible* acc = IdToTableAccessible(aID);
|
|
|
|
if (acc) {
|
|
|
|
acc->UnselectCol(aCol);
|
|
|
|
}
|
|
|
|
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool
|
|
|
|
DocAccessibleChild::RecvTableUnselectRow(const uint64_t& aID,
|
|
|
|
const uint32_t& aRow)
|
|
|
|
{
|
|
|
|
TableAccessible* acc = IdToTableAccessible(aID);
|
|
|
|
if (acc) {
|
|
|
|
acc->UnselectRow(aRow);
|
|
|
|
}
|
|
|
|
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool
|
|
|
|
DocAccessibleChild::RecvTableIsProbablyForLayout(const uint64_t& aID,
|
|
|
|
bool* aForLayout)
|
|
|
|
{
|
|
|
|
*aForLayout = false;
|
|
|
|
TableAccessible* acc = IdToTableAccessible(aID);
|
|
|
|
if (acc) {
|
|
|
|
*aForLayout = acc->IsProbablyLayoutTable();
|
|
|
|
}
|
|
|
|
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
2015-03-25 14:19:12 +00:00
|
|
|
bool
|
|
|
|
DocAccessibleChild::RecvSelectedItems(const uint64_t& aID,
|
|
|
|
nsTArray<uint64_t>* aSelectedItemIDs)
|
|
|
|
{
|
|
|
|
Accessible* acc = IdToAccessibleSelect(aID);
|
|
|
|
if (acc) {
|
|
|
|
nsAutoTArray<Accessible*, 10> selectedItems;
|
|
|
|
acc->SelectedItems(&selectedItems);
|
|
|
|
aSelectedItemIDs->SetCapacity(selectedItems.Length());
|
|
|
|
for (size_t i = 0; i < selectedItems.Length(); ++i) {
|
|
|
|
aSelectedItemIDs->AppendElement(
|
|
|
|
reinterpret_cast<uint64_t>(selectedItems[i]->UniqueID()));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool
|
|
|
|
DocAccessibleChild::RecvSelectedItemCount(const uint64_t& aID,
|
|
|
|
uint32_t* aCount)
|
|
|
|
{
|
|
|
|
*aCount = 0;
|
|
|
|
Accessible* acc = IdToAccessibleSelect(aID);
|
|
|
|
if (acc) {
|
|
|
|
*aCount = acc->SelectedItemCount();
|
|
|
|
}
|
|
|
|
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool
|
|
|
|
DocAccessibleChild::RecvGetSelectedItem(const uint64_t& aID,
|
|
|
|
const uint32_t& aIndex,
|
|
|
|
uint64_t* aSelected,
|
|
|
|
bool* aOk)
|
|
|
|
{
|
|
|
|
*aSelected = 0;
|
|
|
|
*aOk = false;
|
|
|
|
Accessible* acc = IdToAccessibleSelect(aID);
|
|
|
|
if (acc) {
|
|
|
|
Accessible* item = acc->GetSelectedItem(aIndex);
|
|
|
|
if (item) {
|
|
|
|
*aSelected = reinterpret_cast<uint64_t>(item->UniqueID());
|
|
|
|
*aOk = true;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool
|
|
|
|
DocAccessibleChild::RecvIsItemSelected(const uint64_t& aID,
|
|
|
|
const uint32_t& aIndex,
|
|
|
|
bool* aSelected)
|
|
|
|
{
|
|
|
|
*aSelected = false;
|
|
|
|
Accessible* acc = IdToAccessibleSelect(aID);
|
|
|
|
if (acc) {
|
|
|
|
*aSelected = acc->IsItemSelected(aIndex);
|
|
|
|
}
|
|
|
|
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool
|
|
|
|
DocAccessibleChild::RecvAddItemToSelection(const uint64_t& aID,
|
|
|
|
const uint32_t& aIndex,
|
|
|
|
bool* aSuccess)
|
|
|
|
{
|
|
|
|
*aSuccess = false;
|
|
|
|
Accessible* acc = IdToAccessibleSelect(aID);
|
|
|
|
if (acc) {
|
|
|
|
*aSuccess = acc->AddItemToSelection(aIndex);
|
|
|
|
}
|
|
|
|
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool
|
|
|
|
DocAccessibleChild::RecvRemoveItemFromSelection(const uint64_t& aID,
|
|
|
|
const uint32_t& aIndex,
|
|
|
|
bool* aSuccess)
|
|
|
|
{
|
|
|
|
*aSuccess = false;
|
|
|
|
Accessible* acc = IdToAccessibleSelect(aID);
|
|
|
|
if (acc) {
|
|
|
|
*aSuccess = acc->RemoveItemFromSelection(aIndex);
|
|
|
|
}
|
|
|
|
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool
|
|
|
|
DocAccessibleChild::RecvSelectAll(const uint64_t& aID,
|
|
|
|
bool* aSuccess)
|
|
|
|
{
|
|
|
|
*aSuccess = false;
|
|
|
|
Accessible* acc = IdToAccessibleSelect(aID);
|
|
|
|
if (acc) {
|
|
|
|
*aSuccess = acc->SelectAll();
|
|
|
|
}
|
|
|
|
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool
|
|
|
|
DocAccessibleChild::RecvUnselectAll(const uint64_t& aID,
|
|
|
|
bool* aSuccess)
|
|
|
|
{
|
|
|
|
*aSuccess = false;
|
|
|
|
Accessible* acc = IdToAccessibleSelect(aID);
|
|
|
|
if (acc) {
|
|
|
|
*aSuccess = acc->UnselectAll();
|
|
|
|
}
|
|
|
|
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
2015-03-26 22:06:21 +00:00
|
|
|
bool
|
|
|
|
DocAccessibleChild::RecvDoAction(const uint64_t& aID,
|
|
|
|
const uint8_t& aIndex,
|
|
|
|
bool* aSuccess)
|
|
|
|
{
|
|
|
|
*aSuccess = false;
|
|
|
|
Accessible* acc = IdToAccessible(aID);
|
|
|
|
if (acc) {
|
|
|
|
*aSuccess = acc->DoAction(aIndex);
|
|
|
|
}
|
|
|
|
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool
|
|
|
|
DocAccessibleChild::RecvActionCount(const uint64_t& aID,
|
|
|
|
uint8_t* aCount)
|
|
|
|
{
|
|
|
|
*aCount = 0;
|
|
|
|
Accessible* acc = IdToAccessible(aID);
|
|
|
|
if (acc) {
|
|
|
|
*aCount = acc->ActionCount();
|
|
|
|
}
|
|
|
|
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool
|
|
|
|
DocAccessibleChild::RecvActionDescriptionAt(const uint64_t& aID,
|
|
|
|
const uint8_t& aIndex,
|
|
|
|
nsString* aDescription)
|
|
|
|
{
|
|
|
|
Accessible* acc = IdToAccessible(aID);
|
|
|
|
if (acc) {
|
|
|
|
acc->ActionDescriptionAt(aIndex, *aDescription);
|
|
|
|
}
|
|
|
|
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool
|
|
|
|
DocAccessibleChild::RecvActionNameAt(const uint64_t& aID,
|
|
|
|
const uint8_t& aIndex,
|
|
|
|
nsString* aName)
|
|
|
|
{
|
|
|
|
Accessible* acc = IdToAccessible(aID);
|
|
|
|
if (acc) {
|
|
|
|
acc->ActionNameAt(aIndex, *aName);
|
|
|
|
}
|
|
|
|
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool
|
|
|
|
DocAccessibleChild::RecvAccessKey(const uint64_t& aID,
|
|
|
|
uint32_t* aKey,
|
|
|
|
uint32_t* aModifierMask)
|
|
|
|
{
|
|
|
|
*aKey = 0;
|
|
|
|
*aModifierMask = 0;
|
|
|
|
Accessible* acc = IdToAccessible(aID);
|
|
|
|
if (acc) {
|
|
|
|
KeyBinding kb = acc->AccessKey();
|
|
|
|
*aKey = kb.Key();
|
|
|
|
*aModifierMask = kb.ModifierMask();
|
|
|
|
}
|
|
|
|
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool
|
|
|
|
DocAccessibleChild::RecvKeyboardShortcut(const uint64_t& aID,
|
|
|
|
uint32_t* aKey,
|
|
|
|
uint32_t* aModifierMask)
|
|
|
|
{
|
|
|
|
*aKey = 0;
|
|
|
|
*aModifierMask = 0;
|
|
|
|
Accessible* acc = IdToAccessible(aID);
|
|
|
|
if (acc) {
|
|
|
|
KeyBinding kb = acc->KeyboardShortcut();
|
|
|
|
*aKey = kb.Key();
|
|
|
|
*aModifierMask = kb.ModifierMask();
|
|
|
|
}
|
|
|
|
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
2014-03-07 21:35:19 +00:00
|
|
|
}
|
|
|
|
}
|